因为各种客观+主观的原因(chrome恶心的安全措施、长期没有对服务器系统进行升级、脑子被门夹了非要上https、海森堡编辑器全是bug、研二全是事情等等),我做了各种令人窒息的操作,导致我的站点和博客彻底凉凉。为了完成曾老师的作业,也为了能好好做记录,我终于下定决心把整个站点重建一遍。

其实最早只是想着从ubuntu16迁移到18,结果玩脱了。不过既然都上18了,再退到16岂不是坑都白踩了,而且16也不一定能活多久,干脆一步到位。
这次记录除了包括在ubuntu18上部署lnmp、phpmyadmin以外,还会有https站点迁移的内容,读者请各取所需。
首先安装 lnmp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sudo apt-get update # 安装nginx sudo apt-get install nginx # 为了避免安装apache,分别安装php组件 sudo apt-get install php7.2-cli php7.2-cgi php7.2-fpm php7.2-mbstring php7.2-mysql curl php7.2-curl # 安装mysql # 要注意的一点是在ubuntu18安装mysql5.7的时候不会提示设置root密码,而是直接静默安装,这是正常的,安装完成后root账户没有密码,但只有ubuntu的root用户才可以用root登陆mysql,此外还有有一个debian系系统特有的账户,密码随机的写在一个配置文件里 sudo apt-get install mysql-server # 配置nginx # 直接移动文件夹或者删掉重建都行,不过移动的话记得给里面的示例文件改名 sudo mv /var/www /var/nginx sudo mv /var/nginx/html /var/nginx/www # 为了方便远程编辑站点目录下的文件,我喜欢将站点根目录属主改为自己的用户 sudo chown -R ubuntu:ubuntu /var/nginx sudo ln -s /var/nginx /nginx sudo ln -s /var/nginx ~/nginx sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup sudo nano /etc/nginx/sites-available/default |
下面给一个配置文件样本,是一个很早的原始版本,仅供测试参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; root /var/nginx/www; # Add index.php to the list if you are using PHP index index.php index.html index.htm; server_name www.test.com test.com *.test.com; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include snippets/fastcgi-php.conf; # # With php7.2-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php7.2-fpm: fastcgi_pass unix:/run/php/php7.2-fpm.sock; } } |
有了简单配置之后可以测试下nginx和php了,一定先测试后迁移,因为在迁移过程中涉及的步骤和环节很多,而且中间几乎无法测试,一旦前期有问题最后都没法定位错误!
使用php探针测试会发现页面显示白页,nginx日志无问题,这是一个bug,解决方法如下
1 2 3 4 5 6 7 |
sudo nano /etc/nginx/fastcgi_params # 文件末尾增加 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; # 重启服务 sudo service php7.2-fpm restart sudo service nginx restart |
测试通过之后就可以开始迁移了,但是建议先把phpmyadmin装了,这样可以先配置数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
cd /var/nginx/www/ # 下载地址去官方找最新的 wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip unzip phpMyAdmin-4.8.5-all-languages.zip mv ./phpMyAdmin-4.8.5-all-languages ./pma # 这一步不是必须的 sudo chown www-data:www-data -R ./pma # 因为mysql的新安全措施,phpmyadmin无法用root登陆,必须新建一个账户 # root没有密码,但必须sudo或以root身份登陆ubuntu sudo mysql --user=root mysql # 'phpmyadmin'@'localhost'是限定本地域登陆的'phpmyadmin'用户,@'localhost'可以不加,如果想换其他用户名只需要替换phpmyadmin # your_pass替换成你要设定的密码 CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'your_pass'; GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; # 登陆phpmyadmin,如果提示“配置文件现在需要一个短语密码。” cd /var/nginx/www/pma sudo nano ./libraries/config.default.php # 找到以下行,并修改: $cfg['blowfish_secret'] = 'your-url.com'; cp config.sample.inc.php config.inc.php sudo nano ./config.inc.php # 找到以下行,并修改: $cfg['blowfish_secret'] = '6OppxJrNhNcv2lEUTzRKavXIN6DcjJ1Y'; # 注意config.inc.php文件中的字符串必须是32位字符! # 如果没有把phpmyadmin目录属主转移给www-data,还需要手动创建一个临时目录 mkdir ./tmp sudo chown www-data:www-data -R ./tmp |
终于可以开始迁移服务器了
1 2 3 4 5 6 7 8 9 |
# 迁移数据库 # 用phpmyadmin导入旧的数据库要保证php上传文件大小的限制已经被完全解除 sudo nano /etc/php/7.2/fpm/php.ini # 修改以下行: upload_max_filesize = 500m; post_max_size = 500m; max_execution_time = 600; max_input_time = 600; memory_limit = 512m; |
完成数据库迁移之后,就是最关键的部分了,之后的步骤中间几乎完全不能调试
- 将整站数据上传至相应的服务器目录
- 修改目录属主和权限
- 将原服务器的nginx配置文件替换掉新服务器nginx的配置文件
- 修改新服务器nginx服务器文件,使得其中一些小条目符合新服务器配置
- 将ssl证书配置到相应目录
- 重启nginx
- 进入wordpress目录修改wp-config.php中的数据库连接信息
- 修改dns解析地址到新服务器
- 通过url访问页面测试
如果一切正常,恭喜你完成了全部步骤!