本站博客已经改用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的运行需要安装Nginx
、Php-fpm
和Mariadb
三个组件,分别启动,进行相关设置并设置开机自启。
服务器
建站首先需要一个服务器,买建站的服务器切记不可贪便宜,不然吃亏的钱都省不回来,如果不知道选哪家,可以试试 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 ,能用域名打开的前提是已经设置了解析,不知道怎么设置解析可以移步设置域名解析:给域名设置一些实用有趣的二级域名。
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}
对上面有提到的地方改动即可,其他地方保持默认配置,不建议新手刚开始接触时就进行更改,不然往后出现问题很难找到解决办法。
问题解决
- 启动php时报错:
Failed to start The PHP FastCGI Process Manager.
- 首先应该排查是否是因为端口被其他程序占用,方法是运行 netstat -lnp 查看正在使用的端口,然后再更改被占用的9000端口,例如被shadowsocks占用,那么就更改配置文件/etc/shadowsocks.json
- 重启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
- 运行mysql时报错:
ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.....
- 这是因为升级不当而导致的,可以运行
mysql_upgrade -u root -p
然后输入密码解决,其中,-u后面接mysql用户名
- 启动nginx时报错:
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
- 这种错误特别常见,主要是配置文件/etc/nginx/conf.d/default.conf文件的配置有错误,(其中的配置文件不一定叫default.conf,但一定是.conf结尾的文件。)详见:启动nginx提示“Job for nginx.service failed because the control process…”解决办法
测试
安装后一般需要测试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