Bill Chen
Coder & Composer.
Bill Chen's Blog
「踩坑记」Ubuntu 18.10 + LAMP + WordPress + SS 搭建指南

等着2019年1月1日这个看起来有那么一点纪念意义的日子重新又试着折腾起了服务器。记得很早的时候是15年在SAE(Sina App Engine)上尝试,后来又转战ECS,无奈备案流程繁琐,一直未能做到底。

大学之后又再次弄起服务器来,这次选择的是用Vultr的服务器搭建,希望能够一直做下去。在这里的第一篇博客就记录一下一路上遇到的一些坑吧。

我喜欢所有软件都是最新的版本(尽管这样的确可能会有一些稳定性的问题)所以这个指南中搭建后的所有软件也是截至目前(2019.1.1)的最新版本。如果你没有这种癖好,其实用旧一些的版本似乎是一个更稳妥的决定。

如果你时间有限,可以在下列流程中跳过含有*的一些可选操作。

服务器的购买

考虑到国内空间备案流程的问题,加之可能会有翻越万里长城的需求,我选择的是Vultr在洛杉矶的服务器。目前处于正常运行状态下的服务器延迟大致如下图。

https://billc.io/wp-content/uploads/2019/01/image-1.png

Vultr的界面还是非常喜人的,有着大厂的风范,给人一种短期内不会倒的感觉。在开始之前,这里(https://www.cnvultr.com/)通常会有一些Vultr的优惠信息,可以在购买之前稍加关注。我是享受到了一个Match的活动,充多少送多少。

https://billc.io/wp-content/uploads/2019/01/image-1600x1014.png

按照正常的流程注册账号,进入My Account界面,在Payment一栏中绑定好支付账号,便可以在Service里租赁新的VPS服务器。

注意大部分的优惠活动不支持支付宝和微信支付,只支持PayPal和信用卡支付。另外这些优惠活动的折扣会直接显示在预付款界面中,选择不使用优惠后就不能撤销了,这个优惠真的就永远不能使用了。

https://billc.io/wp-content/uploads/2019/01/image-2-1600x960.png

我选择的系统是Ubuntu 18.10 64位。Deploy之后就可以进入自己的控制台查看已有的服务器了。使用SSH客户端便可以远程控制连接Linux系统。需要注意的是这里为我们初始化的root密码,在初次连接到SSH客户端的时候会用上。

正式开始前的配置

连接 SSH

对于macOS来说,系统自带的终端就能满足大部分需求了。而对于Windows系统而言,其实Powershell已经支持了ssh,不过第三方软件显得会酷很多。推荐使用xshell,官网链接:https://www.netsarang.com/products/xsh_overview.html

接下来在相应的客户端中用ssh连接服务器:

ssh -p 22 root@ip

如果你的服务器ip绑定了域名,并且你之前用域名连接过其他服务器,终端内可能会报出验证错误,因为新的服务器和旧的配置不同。这个时候只需要在终端内清除所连接ip的验证文件即可:ssh-keygen -R xxx.xxx.xxx.xxx

修改初始化密码

Vultr的初始化密码实在是太安全了。奇怪的是谷歌出来的密码修改方法都比较清奇。其实直接可以使用下列命令就可以了

sudo passwd root

此后连接SSH的时候使用设置的密码即可,不需要再记忆Vultr默认的复杂密码。

配置 WordPress 所需的必须环境

我采用的是apache2+php7.2+MySQL8。

sudo apt-get update #更新列表
sudo apt-get upgrade #更新软件
sudo apt-get install unzip #解压工具
sudo apt-get install dpkg
sudo apt-get install wget #下载工具

配置 apache

sudo apt-get install apache2
sudo apt-get install php7.2

检查是否已经正确安装apache:service apache2 status

开始、重启或者停止apace的命令:service apache2 start (开始)、service apache2 stop

如果apache2安装成功,那么此时远程访问ip应该已经出现欢迎界面了。

默认情况下的web文件都会存储在/var/www/html内,后续操作均在此。apache的配置文件是在/etc/apache2/apache2.conf和/etc/apache2/目录下的各种文件

这里我们需要把index.php添加到apache的主页配置中。编辑vim /etc/apache2/mods-enabled/dir.conf文件,在DirectoryIndex一行后检查是否有index.php,没有则加上,esc + :wq保存退出。

https://billc.io/wp-content/uploads/2019/02/image-5.png

配置 PHP 7.2

sudo apt-get install php7.2
sudo apt-get install php7.2-mysql .  #配置mysql组件

检查是否安装成功:php7.2 --v

php的对于apache的配置文件是在/etc/php/7.2/apache2/php.ini目录下。这里我们使用vim /etc/php/7.2/apache2/php.ini修改上传文件大小,便于后续操作。修改

upload_max_filesize = 64M
post_max_size = 64M

upload_max_filesize = 64M同时注释掉extension=mysqli一行,启用和mysql数据库的连接,其他拓展可以按需求取消注释。

配置完后重启apache。

*这时你可以在/var/www/html目录下 vim phpinfo.php,输入

<?php
echo phpinfo();
?>

访问检查所有php配置。

https://billc.io/wp-content/uploads/2019/02/image-4-1600x981.png

一说在服务器中保留这个文件会降低服务器的安全性,所以在配置好后你可以选择删除这个测试文件。

配置 MySQL 8.0

使用apt命令无法直接获取最新8.0版本的MySQL,这个时候需要我们手动下载deb包(https://dev.mysql.com/downloads/repo/apt/)安装。以下命令的地址可能会有后续更新。

mkdir /temp  #新建临时文件夹
cd /temp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb #版本号可能会更新
https://billc.io/wp-content/uploads/2019/02/image-2-1600x1450.png
选择安装 Server 和 Cluster,并根据向导选择版本号,配置密码

运行dpkg后,使用sudo apt-get install mysql-server安装配置好的MySQL版本,后续会要求设置用户名和密码,根据提示输入即可。

登录后查看版本:STATUS;

为wordpress新建一个数据库:CREAT DATABASE wordpress;

退出MySQL:quit;

*为了更方便地可视化管理数据库,你可以安装phpMyAdmin至html目录下:(官网https://www.phpmyadmin.net,随时间下列命令会有所更新)

cd /temp
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip
unzip phpMyAdmin-4.8.5-all-languages.zip
cp phpMyAdmin-4.8.5-all-languages.zip/* /var/www/html/phpmyadmin

此后你可以访问地址/phpmyadmin来图形化管理数据库。

配置 WordPress

在Wordpress官网(http://cn.wordpress.org)可以获得最新版本的wordpress版本下载地址。以下命令随时间会有所更新。

cd /temp
wget https://cn.wordpress.org/wordpress-5.0.3-zh_CN.zip
unzip wordpress-5.0.3-zh_CN.zip
cp wordpress-5.0.3-zh_CN/* /var/www/html

不出意外的话,这时远程访问你的地址即可开始著名的五分钟安装程序了。在安装的时候注意指定你数据库名为wordpress(或者其他你在之前指定的数据库名)即可。

https://billc.io/wp-content/uploads/2019/02/image-6.png

解决 WordPress 在线更新时需要 FTP 账号的问题

在初次使用WordPress自带的更新系统更新文件的时候,很有可能会遇到需要输入ftp账号的问题。我们也不需要为此专门配置一个ftp账号,这种情况大多是因为Wordpress没有拿到足够的操作html文件夹的权限导致的。运行以下命令:

cd /var/www/
chmod 777 html

接着使用vim编辑文件vim /var/www/html/wp-config.php ,在文件末尾添加

define('FS_METHOD','direct');

这样做会把html文件夹的权限完全放开,需要斟酌一下风险了。具体可以参考:https://askubuntu.com/questions/20105/why-shouldnt-var-www-have-chmod-777,不过这样做的确是最简便的解决方案。

*使你的博客地址中不再含有 index.php

通常默认情况下,你的任意一个博客页面的地址栏中会出现index.php的字样,像这样:

http://blog.xxx.com/index.php/wpadmin/post.php

这显然不利于网站地址的传播。解决方案是开启apache的rewrite模块

sudo apt-get install a2enmod
a2enmod rewrite #开启重写模块

接着修改apache2的配置文件vim /etc/apache2/sites-available/000-default.conf,在</VituralHost>之后加上以下内容:

<directory = "\var\www\html'>
    AllowOverride All
</directory>
https://billc.io/wp-content/uploads/2019/02/image-9.png

编辑/var/www/html下的.htaccess文件,放入以下内容;

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule mod_rewrite.c>

接下来重启apache:service apache2 restart

你应该可以在WordPress设置里的固定链接页面看到没有index.php的链接设置了。

关于apache2文件夹下sites-enabled和sites-available的区别:

真正的配置文件位于的目录是在sites-available下的。sites-enabled目录下只是存放了一些指向sites-available的快捷方式,修改sites-enabled目录下的配置文件是没有用的,要注意别被文件夹的名字迷惑。

2019.3.30修改:sites-enabled才为启用的配置文件,使用的时候修改这个文件夹下的配置即可。

*为服务器启用 https 协议

需要注意的是,自签名的证书都有可能导致网页访问的时候被提示不安全。干扰用户浏览体验。

https://billc.io/wp-content/uploads/2019/02/image-10.png

而CA签名流程又十分复杂,需要自行寻找机构签发。以下提供一个流程。

获取证书

sudo apt-get install openssl
a2enmod ssl
mkdir /ssl
cd /ssl

首先获取私钥(需要输入密码):

openssl genrsa -des3 -out server.key 2048

生成证书签名请求:

openssl req -new -key server.key -out server.csr[/cc]

在这一步需要输入许多信息。依次输入国家(CN),地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,Common Name应该与域名保持一致,否则会引起浏览器警告。我的输入如下:

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bill Chen
Organizational Unit Name (eg, section) []:Bill Chen
Common Name (e.g. server FQDN or YOUR name) []:billchen.pro
Email Address []:Bill.Chen@live.com

接着删除私钥中的密码。这一步是为了避免以后在每次启动apache的时候都要求输入密码的麻烦。

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

接下来就有两种选择了,一种是比较快捷的自签名,但会导致进入网页时出现不安全提醒。第二种是将你的crt文件和key文件送至证书签发机构,等待签发。

对于自签名证书,签发一个有效期一年的证书输入如下命令即可。

openssl x509 -req -days 365 -in server.csr -signkey server.key -out serv

而对于已知机构签发的CA证书,这需要去自行寻找了。这里推荐一个阿里云的免费证书申请链接,我没有尝试过,不过对于有需求的人来说不失为一个选择:https://help.aliyun.com/document_detail/28548.html

配置 apache 启用 SSL

编辑/etc/apache2/sites-available下的default-ssl.conf文件,找到

SSLCertificateFile      /ssl/server.crt
SSLCertificateKeyFile /ssl/server.key

两行,并将后面的目录改正为你的crt文件和key文件。接下来检查/etc/apach2/ports.conf文件里是否在监听https的443端口。如果没有则增加如下内容:

Listen 443

将该配置文件链接到sites-enabled目录下:

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.crt

如果你想要强制将http跳转到https的话,需要编辑/var/www/html/.htaccess文件。在该文件中加入以下内容(需要已开启apache2的rewrite模块,具体步骤见上):

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]

最后重启apache服务器:service apache2 restart

*添加一些插件

为了避免文章过长干扰阅读,我已将这一部分转移到了另一篇独立的博客里并将持续更新:https://billc.io/2019/02/plugins-for-wordpress/

搭建 SS 服务器

服务器端

sudo apt-get install shadowsocks

在任意目录配置一个你自己的配置文件ss.json,按照以下模板修改(官方模板的目录位置为:/etc/shadowsocks/server.json)

{
"server":"0.0.0.0",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"mypassword",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 1,
"prefer_ipv6": false
}

其中password改成你想要的密码,server_port设置为端口,在客户端的设置中需要和这里的配置相符。

接下来在后台以进程的方式运行shadowsocks:

ssserver -c /etc/shadowsocks/ss.json -d start

请格外注意你的端口设置,客户端的设置需要和服务器端的设置匹配。

*将 ssserver 设置为开机自启

对于没有rc.local自启动设置的Ubuntu 18.10来说,我们采用systemctl的方式实现。新建文件sudo vim /etc/systemd/system/shadowsocks.service并键入以下内容(将下列ss.json改成你的配置文件所在目录和名称):

[Unit]
Description=Shadowsocks Client Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/ssserver -c /etc/Shadowsocks/ss.json
[Install]
WantedBy=multi-user.target

完成后使用命令systemctl enable /etc/systemd/system/shadowsocks.service启用服务。以后当服务器出现问题需要重启之后就不用再麻烦重新键入命令启动了。

客户端

macOS:https://github.com/shadowsocks/ShadowsocksX-NG/releases

Windows:https://github.com/shadowsocks/shadowsocks-windows/releases

Andoird:https://github.com/shadowsocks/shadowsocks-android/releases

iOS:https://itunes.apple.com/us/app/potatso-lite/id1239860606?mt=8(需外区Apple ID)

配置好服务器地址,加密方式和端口即可。

https://billc.io/wp-content/uploads/2019/02/image-8.png

至此,踩坑记结束。当然这里面可能也有一些不适合每一个人的地方,同时随着时间推移部分操作也会有所不同,只希望能给初次建站或经验不是很丰富的朋友们一个参考吧。

2+
Last Updated:
本文链接:https://billc.io/2019/02/lamp-wp-ss-guide/
若无特殊声明,站点所有文章均遵循 CC-BY-NC-SA 4.0 协议。
首页      星标文章      「踩坑记」Ubuntu 18.10 + LAMP + WordPress + SS 搭建指南

发表评论

textsms
account_circle
email

Bill Chen's Blog

「踩坑记」Ubuntu 18.10 + LAMP + WordPress + SS 搭建指南
等着2019年1月1日这个看起来有那么一点纪念意义的日子重新又试着折腾起了服务器。记得很早的时候是15年在SAE(Sina App Engine)上尝试,后来又转战ECS,无奈备案流程繁琐,一直未能做到…
扫描二维码继续阅读
2019-02-15
Tags
文章归档
近期评论
仪表盘
  • 0
  • 26
  • 1,974
  • 117,401
  • 30
  • 2019年12月3日
关注

输入您的电子邮件地址订阅此博客,并通过电子邮件接收博客更新通知。