本站博客已经改用hexo,改用原因可查看:从wordpress到hexo:我的博客早该如此 如果想用hexo,可以参考这篇文章:使用更轻量的hexo搭建个人博客

自己的服务器上面搭建了一个SSR,几个小伙伴一起用的很欢乐,但是看着服务器里面整整40G的空间才用了3G多,这是赤裸裸的浪费啊.

1[root@localhost Sat Jan 27 15:21:36 ~]# df -h
2Filesystem      Size  Used Avail Use% Mounted on
3/dev/vda1        40G  3.4G   34G  10% /
4devtmpfs        487M     0  487M   0% /dev
5tmpfs           497M     0  497M   0% /dev/shm
6tmpfs           497M  432K  496M   1% /run
7tmpfs           497M     0  497M   0% /sys/fs/cgroup
8tmpfs           100M     0  100M   0% /run/user/0

秉着浪(zhe)费(teng)可(bu)耻(xi)的精神,继续折腾! 其实云服务器除了可以搭建梯子之外,用处还是蛮多的,比如搭建网站,做个自己的博客之类的,或者离线下载服务器,这样下载慢速资源的时候就不用一直开着自家电脑浪费电力了,或者搭建自己的邮件服务器,邮箱类似于wenjinyu@wenjinyu.me,还有就是搭建个人网盘,或者同步服务器

今天就先讲一下如何搭建个人博客。

安装LNMP

这次准备的是LNMP+WordPress 方式搭建个人博客,LNMP=Linux(操作系统)+Nginx(网页服务器)+MariaDB(数据库管理系统)+Php(脚本语言),搭建网站除了LNMP之外,还有LAMP,即Linux+**Apache**+MariaDB+Php,区别在于网页服务器,一个使用Apache,即httpd,一个是用Nginx,Apache对动态页面响应更快,Nginx对动态页面相应慢,但是对静态页面的响应速度快于Apache,而且Nginx更省资源,对于用最低配的服务器搭建个人博客来说,还是Nginx更适合。

  • 注:搭建网站需要开启服务器相应端口,http端口:80,还有php端口:9000,如果使用的是阿里云的ECS,除了在系统防火墙开启相应端口之外,还需要在阿里云的安全组也添加规则。

wordpress的运行需要安装NginxPhp-fpmMariadb三个组件,分别启动,进行相关设置并设置开机自启。

服务器

建站首先需要一个服务器,买建站的服务器切记不可贪便宜,不然吃亏的钱都省不回来,如果不知道选哪家,可以试试 Vultr,不算最好,但是对新手友好,因为随开随用,什么时候不用了可以随时关掉,关掉时就停止计费,不需要先按月购买,所以只是开几天、花几块钱试一下都可以。

可以考虑用我下面的推荐链接注册 vultr:每个月 $3.5 就能搭建博客了,支持支付宝和微信付款,用下面的链接注册可以得到 $100 的试用金,有效期一个月,我也能得到 $10 的奖励,也是对我付出努力的支持:

链接

MySQL

首先需要配置源,进入MariaDB官网定制MariaDB的官方源,选择合适MariaDB版本。如CentOS 7选择:CentOS > CentOS 7 (x86_64) > 10.3 [Stable],配置源的方法在官网页面选择源之后,页面下方会显示出来。

选择版本

之后将官网的配置复制下来,添加为源:

 1# 编辑源
 2vim /etc/yum.repos.d/MariaDB.repo
 3
 4# 将复制来的配置填入
 5# MariaDB 10.2 CentOS repository list - created 2018-01-27 07:39 UTC
 6# http://downloads.mariadb.org/mariadb/repositories/
 7[mariadb]
 8name = MariaDB
 9baseurl = http://yum.mariadb.org/10.3/centos7-amd64
10gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
11gpgcheck=1
12
13# 安装MariaDB
14yum install MariaDB-server -y
15
16# 启动服务并设置开机启动
17systemctl start mariadb
18systemctl enable mariadb

之后是设置MariaDB 此步,主要是MariaDB的安全设置,第一次安装mysql需要运行此命令

1mysql_secure_installation

因为是初次设置MariaDB,root密码是空的,所以在要求输入密码时直接回车:

 1Setting the root password ensures that nobody can log into the MariaDB
 2root user without the proper authorisation.
 3
 4# 是否设置root密码,建议设置密码以提高安全性,输入y并回车
 5Set root password? [Y/n] y
 6
 7# 设置密码
 8New password:
 9
10# 再次输入密码
11Re-enter new password:

接下来是数据库相关设置,可以全都输入y,以下是截取的部分输出:

 1...
 2Remove anonymous users? [Y/n] y          # 删除匿名用户
 3...
 4
 5Disallow root login remotely? [Y/n] y    # 禁止root远程登录
 6...
 7
 8Remove test database and access to it? [Y/n] y    # 删除test数据库
 9...
10
11Reload privilege tables now? [Y/n] y     # 刷新权限
12...
13Thanks for using MariaDB!

Php-fpm

安装php用webtatic源,更新较快,且其命名有自己的特色方式,可以避免与其他源的某些冲突

 1# 配置PHP源
 2rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 3rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 4
 5# 安装PHP以及PHP扩展
 6yum install php72w-fpm -y
 7yum install php72w-gd php72w-mysqlnd php72w-pdo php72w-mcrypt php72w-mbstring php72w-xmlrpc -y
 8
 9# 启动服务并设置开机启动
10systemctl start php-fpm
11systemctl enable php-fpm

安装好后进行配置

1# 编辑配置文件
2vim /etc/php.ini
3
4# 找到
5;cgi.fix_pathinfo=1
6# 去掉注释,并将1改成0
7cgi.fix_pathinfo=0

Nginx

官方nginx有两个版本,mainline和stable,即开发版和稳定版,区别是前者引入新特性但可能有新bug,后者足够稳定。事实上,两者均比较稳定,nginx的网站总是运行在mainline版上,不过还是推荐新手选择稳定版。

 1# 编辑repo文件
 2vim /etc/yum.repos.d/nginx.repo
 3
 4# 写入如下内容
 5[nginx]
 6name=nginx repo
 7baseurl=http://nginx.org/packages/centos/7/$basearch/
 8gpgcheck=0
 9enabled=1
10
11# 安装nginx
12yum install nginx -y
13
14# 启动服务并设置开机启动
15systemctl start nginx
16systemctl enable nginx

这时lnmp环境就安装成功了。

安装Nginx之后存在一个默认配置,只要前面配置没有错误,那么nginx启动之后就可打开默认网页。

直接用浏览器打开主机IP地址或者域名,就可以看到nginx的欢迎页面,说明nginx已经在工作了。

假设IP地址为1.2.3.4,域名为www.wenjinyu.me ,能用域名打开的前提是已经设置了解析,不知道怎么设置解析可以移步设置域名解析:给域名设置一些实用有趣的二级域名

nginx安装成功后的欢迎界面

wordpress的运行涉及php脚本,所以需要配置nginx以支持PHP

1vim /etc/nginx/conf.d/default.conf

修改后配置是这样的,需要修改的部分已经做了标注,假设wordpress将会放在/var/www/wordpress目录下:

 1server {
 2    listen       80;
 3    server_name  www.wenjinyu.me;
 4
 5    location / {
 6        root   /var/www/wordpress;       # 改为存放wordpress的目录
 7        index  index.html index.htm;
 8    }
 9
10    error_page   500 502 503 504  /50x.html;
11    location = /50x.html {
12        root   /var/www/wordpress;       # 改为存放wordpress的目录
13    }
14
15
16    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
17    #
18    location ~ \.php$ {                     # 此大括号的内容全部取消注释
19        root           /var/www/wordpress;  # 改为存放wordpress的目录
20        fastcgi_pass   127.0.0.1:9000;
21        fastcgi_index  index.php;
22        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
23        include        fastcgi_params;
24    }
25}

对上面有提到的地方改动即可,其他地方保持默认配置,不建议新手刚开始接触时就进行更改,不然往后出现问题很难找到解决办法。

问题解决

  1. 启动php时报错:Failed to start The PHP FastCGI Process Manager.
  • 首先应该排查是否是因为端口被其他程序占用,方法是运行 netstat -lnp 查看正在使用的端口,然后再更改被占用的9000端口,例如被shadowsocks占用,那么就更改配置文件/etc/shadowsocks.json
  1. 重启nginx报错:nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
  • 提示说未找到 nginx.pid,其实是因为启动nginx之后,会在 /usr/local/var/run/ 路径下创建一个名为nginx.pid 的文件,但是在nginx -s stop,即关闭nginx之后,nginx.pid文件会被删除,所以此时用reload重启nginx会报错,解决办法即是直接运行nginx而不是重启nginx,即运行 systemctl start nginx
  1. 运行mysql时报错:ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.....
  • 这是因为升级不当而导致的,可以运行mysql_upgrade -u root -p然后输入密码解决,其中,-u后面接mysql用户名
  1. 启动nginx时报错:Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

测试

安装后一般需要测试Php-fpm能否正常运行,可以通过添加php相关信息这种简单的方法测试。

 1# 新建wordpress存储文件夹
 2mkdir /var/www/wordpress/
 3
 4# 添加phpinfo.php文件并编辑
 5vim /var/www/wordpress/phpinfo.php
 6
 7# 写入如下代码,并保存
 8<?php
 9phpinfo();
10?>
11
12# 重启nginx和PHP
13systemctl restart nginx
14systemctl restart php-fpm

再次访问你的主机地址或域名: http://1.2.3.4/phpinfo.php 或者 http://www.wenjinyu.me/phpinfo.php 可见到php相关信息,说明PHP和nginx已经配合工作了。 此时LNMP网络服务环境就已初步搭建了。

  • 注意:如果在配置完成后,用浏览器打开网页时出现问题,例如/wp-admin/install.php打开错误(如chrome打开这个网页直接下载install.php文件),则可以试着换一个浏览器进行。

配置

wordpress是一个已经开发成熟的博客,其实就是各种网页和配置文件的存档,需要做的就是下载下来,配置好,然后就可以直接用了。

MySQL

wordpress的使用除了需要php-fpm来运行php脚本外,还需要数据库来管理用户数据和文章数据,这里用的数据库是mariadb。

 1# 登录MariaDB,密码是之前设置的
 2mysql -u root -p
 3
 4# 建立名为“wordpress”的数据库
 5CREATE DATABASE wordpress;
 6
 7# 建立名为“wordpress”的用户,并设置密码为“wordpress”
 8CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress';
 9
10# 修复权限
11GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
12
13# 退出
14exit
  • 注意:数据库的操作每一条命令后面都要接一个分号;

Nginx

上面所讲的php设置只是一个测试,下面才是Php-fpm需要对wordpress做的设置

1# 配置站点文件的路径,并启用unix socket通信
2vim /etc/nginx/conf.d/default.conf

做如下修改,后面有注释的地方都需要修改

 1server {
 2    listen       80;
 3    server_name  localhost;
 4
 5    location / {
 6        root   /var/www/wordpress;                        # 修改为wordpress存放目录
 7        index  index.php index.html index.htm;            # 添加index.php
 8        try_files $uri $uri/ /index.php$is_args$args;     # 添加本行
 9    }
10
11    error_page  404              /404.html;
12
13    error_page   500 502 503 504  /50x.html;
14    location = /50x.html {
15        root   /var/www/wordpress;
16    }
17
18
19    location ~ \.php$ {
20         root /var/www/wordpress;                         # 修改为wordpress存放目录
21         fastcgi_split_path_info ^(.+\.php)(/.+)$;        # 添加本行
22         fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 修改本行
23         fastcgi_index index.php;
24         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
25         include fastcgi_params;
26         }
27}
  • CentOS 6 不支持 IPv6,如果配置文件存在 listen [::]:80 default_server;这样一行的配置,则需要取消对 IPv6 地址的监听,否则 Nginx 不能成功启动,也就是直接在本行前面加上#注释掉。

Php-fpm

配置Php-fpm,开启unix socket通信以适应上面所做的修改,并修改用户名和用户组

1vim /etc/php-fpm.d/www.conf
2
3# 修改unix socket通信,第22行找到
4listen = 127.0.0.1:9000
5# 并修改为
6listen = /var/run/php-fpm/php-fpm.sock

找到如下字段,去掉注释,并将nobody改为nginx,否则unix socket通信功能无效,nginx将无法与PHP连接。

 1# 第8、10行
 2user = apache
 3group = apache
 4# 修改为
 5user = nginx
 6group = nginx
 7
 8# 第33、34行
 9;listen.owner = nobody
10;listen.group = nobody
11# 改为
12listen.owner = nginx
13listen.group = nginx

重启nginx、php-fpm

1systemctl restart nginx
2systemctl restart php-fpm

安装WordPress

先下载 wordpress 的最新版安装包,并解压在 /var/www/ 目录下

1cd /var/www/
2wget wordpress.org/latest.tar.gz
3tar xzf latest.tar.gz
4rm latest.tar.gz
5
6# 更改 wordpress 目录的所有者为 nginx ,这样 nginx 才有读写权限
7chown nginx:nginx /var/www/wordpress/ -R

然后从模板中复制出一个配置文件,并把数据库名称、用户、密码都改为上面设的 wordpress

1cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
2sed -i 's/database_name_here\|username_here\|password_here/wordpress/g' /var/www/wordpress/wp-config.php
修改的内容

修改的配置文件是 /var/www/wordpress/wp-config.php

1// ** MySQL settings - You can get this info from your web host ** //
2/** The name of the database for WordPress */
3define('DB_NAME', 'wordpress');      # 此处改为刚才建立数据库时使用的名字,即wordpress
4
5/** MySQL database username */
6define('DB_USER', 'wordpress');      # 改为数据库用户名,刚才设置的用户名是wordpress
7
8/** MySQL database password */
9define('DB_PASSWORD', 'wordpress');  # 改为数据库密码,wordpress只是个示例

此时已搭建完成,用浏览器访问如下地址 (假设站点IP为1.2.3.4,域名为www.wenjinyu.me) 并启动安装WordPress。

11.2.3.4/wp-admin/install.php

1www.wenjinyu.me/wp-admin/install.php

这样就安装成功了,然后在进入这个网址的时候就能看到经典的wordpress安装界面(由于当时安装成功的时候太激动,以至于忘记截图,只能网上偷一张过来):

wordpress安装界面

后期维护

查看nginx系统日志

1journalctl -u nginx