前些时候我在 b 站学了学 Linux 的基础操作,之后我就想动手把我博客换到 linux 服务器上。我的主机商是 vultr,现在的服务器刚建立的时候就是 Linux 系统(因为选 Windows 是要多收钱的),后来用了一些手段改装成了 Windows。现在终于成功了。整个过程我做了两遍,其实要折腾起来并不算复杂,但对于第一次接触的人来说,难免处处懵逼,凭空增加难度。过程中也确实踩了很多坑,花了挺多的时间。熟悉之后就好多了。本文中的操作糅合了很多网络上的教程,感谢前辈们。
0.准备工作
我选择的操作系统是 Debian 9.9 (stretch)。当前时间是 2019年06月。 php.ini
Debian安装后磁盘空间占用不到1G,这使我感觉非常舒服。
我在根目录建立www目录,再按站点名建立子目录,分别存放网站。
之后用wget将网站的备份文件下载下来。
新服务器需要先更新下apt:
apt update
1.配置 nginx
安装 nginx:
apt install nginx
启动 nginx:
service nginx start
之后在浏览器输入自己的服务器 ip,能够看到 nginx 的默认主页就成功了。
接下来修改 nginx 配置文件,使其可以支持 php:
vim /etc/nginx/sites-available/default
把 root 字段的值修改为站点目录。
在 index 字段里添加 index.php。
在下一行空白处附近,添加对php的支持:
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
之后重启 nginx:
service nginx reload
我们修改了默认网站的目录为 /www 目录,支持了 php,但这个目录现在是空的,所以此时刷新网站会看到403状态码。
2.配置 php
安装 php:
apt install php7.0-fpm
这个 fpm 以前没见过,它是PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)。
配置 php-fpm:
vim /etc/php/7.0/fpm/pool.d/www.conf
php-fpm默认配置的是socket通信:
listen = /run/php/php7.0-fpm.sock
查找此处,将其注释掉,添加一行:
listen = 127.0.0.1:9000
这是因为php的 fastcgi可以使用socket或 tcp 方式通信。我选择的是tcp方式,这里的选择和上面配置 nginx 支持php时是对应的。你也可以配置两处都是用 socket 方式。
重启 php 和 nginx:
service php7.0-fpm restart
service nginx restart
我们到网站根目录下,编写 php 探针文件,也就是输出 phpinfo()。
<?php echo phpinfo();
之后访问这个文件,能正确显示就 OK。
附:显示php的报错信息
有时候打开网站发现有问题,但是php默认不输出错误信息,难以定位问题。我们可以配置php显示错误信息。
vim /etc/php/7.0/fpm/php.ini
搜索 display_errors = Off
,将 Off
改为 On
。
这时候也可以顺便开启一些扩展,比如 php_curl.dll,openssl.dll 之类的。
修改之后重启 php 服务就可以了:
service php7.0-fpm restart
3.配置 mysql
安装 mysql:
apt install mysql-server mysql-client
安装 php 的 mysql 扩展:
apt install php7.0-mysql
重启 php:
service php7.0-fpm restart
刷新 php 探针页面,看到 mysqli一栏就成功了:
(mysqli是 php 新版本里使用的 MySQL 扩展。)
进行安全配置:
mysql_secure_installation
执行这个命令可以进行一些安全设置,如设置密码,禁止远程登陆,移除匿名用户,删除测试表等操作。我们可以发现这个mysql其实里面是MariaDB。
有的教程里还教修改 mysql 的编码为 utf8,不过现在用不着了。步骤如下:
在 mysq 命令行里执行:
show variables like "%char%";
注意mysql命令行里的命令必须以分号结束。
可以看到现在新安装的 mysql字符集也是 utf8mb4,这个才是mysql 里真正的 utf-8 编码。所以我们不用改了。
之后我们还要对用户进行授权,这个是我踩坑之后才发现的。否则我们运行wordpress时会报错,即使数据库配置信息无误:
怎么做呢?登入 mysql:
mysql -u root -p
设置密码:(记得设置密码,不然之后会被拒绝连接,只能想办法去手动修改密码了)
SET PASSWORD FOR root@localhost=PASSWORD("密码");
赋予权限:
grant all privileges on *.* to root@'localhost' identified by '密码';
刷新权限配置:
flush privileges;
太深奥了 Orz
如果我们需要新建一个数据库用户,也只是多了个创建用户的命令:
创建用户:
CREATE USER wordpress@localhost;
设置密码:
SET PASSWORD FOR wordpress@localhost=PASSWORD("密码 ");
配置权限:
GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY '密码';
刷新权限配置:
FLUSH PRIVILEGES;
接下来准备恢复数据库。因为我之前导出的 sql 文件里包含了创建数据库的命令,所以我不必手动建立数据库了,直接导入备份的 sql 文件:
source /file/sql1.sql
如果是全新安装wordpress,通常需要手动创建一个数据库:
CREATE DATABASE wordpress;
4.配置 wordpress
wordpress这里也分两个途径。
一个是全新安装wordpress:
wget https://wordpress.org/latest.tar.gz
解压:
tar zxvf latest.tar.gz
将解压出的 wordpress 目录移动至 /www 目录里,并改名成网站名。
这时候有个坑,wordpress目录的所有者是 nobody,所属组是 nogroup,所以我们要修改所有者:
chown -R www-data:www-data saber.love
www-data用户和组是安装了nginx后产生的,它是nginx操作网站时使用的用户。可以在nginx.conf里查看和修改这个用户。
第二个途径就是恢复备份。我把之前网站备份的所有文件都恢复过来,就不用全新安装了,这样简单方便。我一开始是全新安装,然后想把需要修改的文件覆盖过来,结果出了很多问题,不如整站直接恢复好。
注意恢复备份之后也要修改所有者:
chown -R www-data:www-data saber.love
现在我已经把域名saber.love解析到服务器了,但是访问它还是显示403.这是因为此时nginx并不知道我们要访问的是个单独的网站,它打开的还是网站文件总目录 /www。我们想让它打开该网站的目录 /www/saber.love,需要去nginx里添加这个网站。
cd /etc/nginx/conf.d
这个目录里是空的,我们可以为每一个网站建立一个配置文件。例如我新建一个文件 saber.love.conf,内容如下:
server { listen 80; server_name saber.love; root /www/saber.love; location / { index index.php index.html index.htm; #autoindex on; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
之后重启nginx服务,即可正常访问网站。
service nginx restart
此时访问网站会自动进入wordpress的安装页面,表示我们的配置生效了。接下来我们修改 wordpress 的配置文件,将网站根目录的 wp-config-sample.php 复制并改名为 wp-config.php,编辑它,设置数据库信息。这部分不详细讲了。
ps:其实我在这里踩了两次坑,一次是mysql没有给用户授权,一次是做了授权但之前没有设置密码……
话说全新安装时我还踩了个坑,我们下载的是官网安装包,后台是英文的,想改成中文就又要折腾一番。
配置固定链接:
我的固定链接设置的是/%postname%,如下:
之后在这个网站的配置文件里添加rewrite规则:
try_files $uri $uri/ /index.php?$args;
恢复网站的时候还遇到了乱码问题,在windows上把网站文件打包成zip,在linux上解压后,文件名里的中文变成乱码了,网页上的中文图片也都打不开了。
这个折腾了好久,听网上说的用convmv转码也没成功。最后发现打包成tar指定utf-8编码,或者直接用7z,解压出来能正常用。所以我重新打包和解压了一次。
5.配置SSL证书
此时我的网站除了首页其他页面都还是打不开,最主要的原因就是我网站原本有SSL证书,现在没有了。配置SSL证书之后就恢复正常了。
配置步骤:
https://www.snel.com/support/install-lets-encrypt-ssl-on-debian-9-running-nginx-web-server/
在 /etc/letsencrypt/live/网站名 目录里有4个证书文件:
cert.pem - Apache服务器端证书
chain.pem - Apache根证书和中继证书
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件
之后去编辑这个网站的配置文件,在 server 里添加以下三行:
listen 443 ssl; ssl_certificate /etc/letsencrypt/live/saber.love/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/saber.love/privkey.pem;
然后重启nginx就可以了。
如果证书到期了就需要续订,重新执行一遍创建证书的命令就行了。更新完成后,重启 nginx 即可启用新证书。
经过上述步骤后,一个比较完整的网站配置文件内容如下:
server { listen 80; listen 443 ssl; charset utf-8; server_name example.com; root /www/example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { index index.php index.html index.htm; #autoindex on; try_files $uri $uri/ /index.php?$args; rewrite /wp-admin$ $scheme://$host$uri/ permanent; #这行是为了防止打开后台、插件页等打不开的。 } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
好了,到这里网站部分已经没有什么问题了,开心~
Debian x9 配置 LAMP 安装 WordPress
-
Google Chrome 75Windows -
Google Chrome 74Mac OS X 10.14.5 博主可以试试Docker哦,很方便,弄好镜像后,现在迁移也就分分钟的事。
看到这个教程,有种回到刚入坑的Linux时候的感觉www
最初就是想做一个个人网站,入了Debian的坑,买了树莓派,LAMP搞起,装了Wordpress,各种折腾。
然后Apache2转到Nginx,Mysql转到Mariadb,Wordpress转到typecho,最后发现没什么克写的,删掉,当作无事发生...