博客迁移手记

已经不知道第几次手残了。所以这次一定要好好记一下。

基础环境

WordPress 依赖 PHP,数据库是 MySQL,前面需要有一个 Nginx 或者 Apache 做代理。

所以第一步是配置这些环境。

PHP

sudo apt install php-fpm -y;

之后我们还需要安装一些其他东西:

sudo apt install php-gd php-mbstring php-curl php-gettext php-zip php-soap php-xml php-xmlrpc -y;

这样就差不多了。

MySQL

sudo apt install mysql-client php-mysqli -y;

然后是比较漫长的设置。我们可以用自带的 mysql_secure_installation 来完成这个事儿。输入

sudo mysql_secure_installation

然后照着提示加载密码强度验证器、输入 Root 密码(其实 root 密码并不会被更改掉)、移除 Test 用户和 Test 表。

之前,包括 Ubuntu16.04 和 Debian8 的时候,安装 MySQL/MariaDB 的过程中会提示输入 root 密码。但现 Debian9 和 Ubuntu18.04LTS 里面没有了这个步骤。安装好之后,root 是以 sudo mysql 这样的方式进行登录的,差不多可以理解为 SQLServer 的 Windows 用户认证。

这样做是很安全。但我们有时候想用图形界面登进去的话就傻了。所以我们试图改为默认输入密码的那种登录方式。

提示:这样做并不是很安全啊~~

我们使用

sudo mysql

以 root 用户的身份进入 MySQL,然后使用

SELECT user,authentication_string,plugin,host FROM mysql.user;

查看现在的权限情况:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

我们会发现,root 用户使用了一个插件,而正是这个插件阻止了我们使用密码来登录。我们可以使用

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '设置一个密码';
FLUSH PRIVILEGES;

来更改密码,并改为使用密码登录 root。这时候再用上面的咒语查看权限情况,可以发现 root 已经有密码了。以后我们就能愉快地使用

mysql -uroot -p

来登录了。

Nginx

sudo apt install nginx -y;

这样就差不多了。

配置

上面安装完毕了,下面开始配置。

数据库

首先,用各种方式添加用户并新建表。个人习惯是临时用一下 phpMyAdmin 的建表语句来新建用户和表(因为自己不会写):

CREATE USER 'my_database'@'%';
SET PASSWORD FOR 'my_database'@'%' = PASSWORD('my_password');
GRANT USAGE ON *.* TO 'my_database'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `my_database `;
GRANT ALL PRIVILEGES ON `my_database`.* TO 'my_database'@'%';
GRANT ALL PRIVILEGES ON `my_database\_%`.* TO 'my_database'@'%';

之后,我们可以使用

mysql -u <username> -p <databasename> < <filename.sql>

将备份的 SQL 文件导入数据库。

PHP

其实 PHP 不需要设置任何东西就能工作的。但是为了增强一点速度,我们还是稍微动一点点配置。

找到/etc/php/7.2/fpm/php.ini,找到 opcache 这一小节,改动如下设置:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1

保存重启 php-fpm 服务。

哦对了,这里注意看一下/etc/php/7.2/fpm/www.conf 里面的 listen = /run/php/php7.2-fpm.sock,后面会用到。

Nginx

/etc/nginx/nginx.conf 里面,把 gzip 相关东西都打开。

/etc/nginx/sites-available 里面,将默认的 default 复制一份。然后开始魔改:

server {
    # 这个站点是不是 “默认站点”
    # 注意只能有一个文件中写 default
    listen 80;  
    # 同上
    listen [::]:80; 

    # 改成自己的域名,多个域名用空格隔开
    server_name my.blog.domain; 
    # 改成自己的网站路径
    root /var/www/html; 

    # Add index.php to the list if you are using PHP
    index index.html index.php;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # 这样的话我们就可以实现伪静态了
        try_files $uri $uri/ /index.php?$args;
    }

    # pass PHP scripts to FastCGI server
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # With php-fpm (or other unix sockets):
        # 注意这里的路径和你上面记录的路径是否一致
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        # With php-cgi (or other tcp sockets):
        #fastcgi_pass 127.0.0.1:9000;
    }

}

大功告成。建立个软链接到 sites-enabled,然后重启 Nginx 服务即可。

SSL 配置

直接使用 Certbot 来配置 SSL 即可。

sudo apt-get install certbot -y

之后

sudo certbot --nginx

照着向导一步一步走下去就好。

既然都开了 SSL 了,不开 HTTP2 是不是有点暴殄天物?回到 nginx 设置里面,会发现配置文件被 certbot 改掉了。我们需要改成

即可。

listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot

备份

哦,看之前的脚本不爽,又写了个脚本在跑

备份脚本 3.0 专治手残健忘。希望别再把所有备份全搞丢了。

结语

OK,不折腾了。好好做备份,好好做镜像,好好跑代码,好好写文章。

留下评论