WP 01 – 阿里云服务器搭建WordPress站点
目录
1 注册域名
在阿里云新用户搞优惠活动的时候注册了万网的域名, healchow.com, 这里直接拿来用.
后续需要将域名解析到服务器上.
2 购买服务器
同样是在阿里云新用户优惠期购买的 ECS 服务器, 配置为2核4G内存40G高效云盘, 搭建 WordPress 博客系统足够了.
- 服务器地区的选择: 博主选了香港区, 好处是不用备案, 劣势是访问速度较慢. 不过考虑到想要自己搭梯子, 所以还是选择了香港的.
—— 20190923补充: 打脸了, 阿里云半年前就警告不让搭梯子玩了? -
服务器镜像的选择: 做程序开发的选 Linux 做服务器, 这个不用解释了吧? 博主选的是 CentOS 7.4 64 位的原生镜像.
-
需要记住: 服务器外网ip地址, 服务器的用户名, 以及这个用户名对应的登录密码. 这里博主通过超级用户root进行配置.
3 域名 DNS 解析
DNS 是 Domain Name System 的简写, 就是域名系统, 用来将互联网中各类域名解析到特定的服务器IP上.
通俗理解就是: 在浏览器地址栏输入www.healchow.com, 就能访问我们的站点, 效果等同于在浏览器输入47.52.172.39
.
相关的配置在阿里云域名控制台: https://dns.console.aliyun.com, 配置方式如下图:
4 部署环境
运行 WordPress 需要安装:
① Nginx —— 做反向代理, 也就是外部通过域名直接能够访问到服务器内的各类资源. 当然也可以用 Apache 作代理服务器, 但博主我没试过?.
② PHP —— WordPress 是用 PHP 编写的, 这个必须安装.
③ MySQL —— 搭建的博客系统的用户、文章、图片、评论等所有信息都是保存在MySQL服务器中的, 也是必须安装的.
—— 由于博主安装的是原生的 CentOS 系统, 不是集成的运行环境, 所以需要手动安装上述软件. 步骤如下:
4.1 关闭防火墙
通过远程工具连接阿里云主机, 这里博主用的是 SecureCRT:
之前在翻墙搭梯子的时候已经在安全组中开启了各常用端口, 如果没有开启, 就需要暂时关闭防火墙:
# CentOS 7 以上的系统:
# 关闭防火墙:
[root@onepiece ~]# systemctl stop firewalld.service
# 查看防火墙状态:
[root@onepiece ~]# systemctl status firewalld.service
# Active活动状态为inactive, 说明已经关闭:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# 扩展: CentOS 7 以下的系统操作防火墙的命令:
service firewalld start | stop | restart | try-restart | reload | force-reload | status
4.2 安装 Nginx
1) 删除服务器中可能预先安装的 Apache 服务:
[root@onepiece ~]# yum remove httpd
2) 安装 Nginx:
[root@onepiece ~]# yum install -y nginx
如果没有写 -y
会出现提示选择 yes/no
, -y
就是默认为 yes.
3) 开启 Nginx 服务:
[root@onepiece ~]# service nginx start
# 或者使用下述命令:
systemctl start nginx.service
如果安装顺利, 此时打开浏览器输入服务器的外网 ip 会看见 Nginx 的默认首页.
这里博主已经将域名healchow.com解析到了阿里云服务器的外网 IP 上了;
如果服务器设置了 SSL 证书, 则需要在 Nginx 的配置文件中配置443端口相关的信息, 这个我们在后续博文中详细介绍.
4.3 安装 PHP
1) 删除服务器中可能预先安装的PHP服务:
[root@onepiece ~]# yum remove php php-fpm php-mysql
2) 安装PHP相关服务, 这里只安装 php、php-fpm 和 php-mysql, 就足以支持 WordPress 的运行了:
[root@onepiece ~]# yum -y install php php-fpm php-mysql
如果没有写 -y
会出现提示选择 yes/no
, -y
就是默认为 yes.
3) 开启PHP服务:
[root@onepiece ~]# service php-fpm start
# 或者使用下述命令:
systemctl start php-fpm.service
4.4 建立 Nginx 到 PHP 的映射
1) 创建 WordPress 安装目录, 这里博主为博客建立专门的目录: /data/blog
.
# 创建安装目录:
[root@onepiece ~]# mkdir -p /data/blog
2) 修改 Nginx 的配置文件:
[root@onepiece ~]# vim /etc/nginx/nginx.conf
修改server
中的配置信息:
server {
listen 80;
server_name healchow.com www.healchow.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
root /data/blog;
index index.html index.htm index.php;
}
# 这里是反斜线\, 把所有以.php的结尾的文件通过127.0.0.1:9000交由PHP服务进行渲染
location ~ \.php{
root /data/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAMEdocument_root$fastcgi_script_name;
include fastcgi_params;
}
# 修改404页面为php页面
error_page 404 /404.html;
location = /40x.php {}
# 修改50x页面为php页面
error_page 500 502 503 504 /50x.html;
location = /50x.php {}
}
3) 修改 PHP 的配置文件:
[root@onepiece ~]# vim /etc/php.ini
在文件最后添加配置:
cgi.fix_pathinfo = 1
4) 重启 php-ftp 并重启 Nginx:
[root@onepiece ~]# service php-fpm start
Redirecting to /bin/systemctl start php-fpm.service
[root@onepiece ~]# service nginx restart
Redirecting to /bin/systemctl restart nginx.service
5) 配置测试:
① 在网站根目录下创建一个测试文件
vi /data/blog/index.php
, 输入任意测试内容, 这里输入nginx links to php.
② 切换到浏览器, 刷新Nginx的默认首页, 如果显示index.php文件中的内容, 说明连接成功.
③ 测试情况如下:
4.5 安装 MySQL(MariaDB)
1) 安装 MySQL:
[root@onepiece blog]# yum -y install mysql mysql-server
2) 启动服务:
[root@onepiece blog]# service mysqld start
3) 报错如下:
[root@onepiece blog]# systemctl start mysql.service
Failed to start mysql.service: Unit not found.
查了半天资料, 终于了解到:
MariaDB 代替了 MySQL 数据库 —— MariaDB 是 MySQL 的一个分支, 主要由开源社区维护, 采用 GPL 授权许可.
开发这个分支的原因之一是: Oracle(甲骨文) 公司收购 MySQL 之后, 有将 MySQL 闭源的潜在风险, 因此开源社区采用分支的方式避开这个风险.
4) 因此用上述命令启动不了, 正确的方法如下:
# 安装MariaDB服务:
[root@onepiece blog]# yum -y install mariadb-server
# 立即启动MariaDB服务:
[root@onepiece blog]# systemctl start mariadb.service
# 开机自启动MariaDB服务:
[root@onepiece blog]# systemctl enable mariadb.service
# 登录MySQL, 连接MariaDB服务:
[root@onepiece blog]# mysql -u root -p
[root@onepiece blog]#
5) 更改MariaDB的 root 账户密码:
[root@onepiece blog]# mysqladmin -u root -p 旧密码 password 新密码
# 注意: -p和旧密码之间没有空格, password和新密码之间有空格
[root@onepiece blog]# mysqladmin -u root -ptest password test01
此时如果能进入MySQL命令行界面, 就说明MySQL已经安装好了.
4.6 (亲测可省略)安装 vsftpd
1) 创建 WordPress 安装目录: 这里创建用户 blog, 在其主目录下安装 WordPress:
# 添加工作组:
[root@onepiece ~]# groupadd ftp
# 创建用户
# -d:指定主目录 -g:设置用户的群组 -s:设置SSH权限 -p:设置密码 最后面的blog是用户名
[root@onepiece ~]# useradd -g ftp -s /sbin/nologin healchow
# 此时/home目录下将生成healchow文件夹
# 修改用户密码
[root@onepiece ~]# passwd healchow xxx(为用户blog配置的密码)
2) 安装 vsftpd:
[root@onepiece blog]# yum install -y vsftpd
3) 配置 vsftpd:
[root@onepiece blog]# vim /etc/vsftpd/vsftpd.conf
配置后的文件为:
[root@onepiece blog]# cat /etc/vsftpd/vsftpd.conf
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
# 禁止匿名访问
anonymous_enable=NO
# 下述先不做修改:
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
# Uncomment this to enable any form of FTP write command.
write_enable=YES
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
# 设置新建文件的权限, 一般设置为022, 则
# 新建文件的权限为 777-022 = 755, 666-022 = 644
local_umask=022
# 设置默认的根目录, 就是用户链接ftp后默认进入的目录, 中间不要有空格
local_root=/data/blog
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.lob
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
# 开启用户访问限制, 限制用户只能在其主目录下活动, 同时为主目录开放写的权限
# 如果不想开放写权限, 通过chmod a-w 设置主目录权限, 否则链接会出现500错误
chroot_local_user=YES
allow_writeable_chroot=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
4) 启动 FTP 服务:
# 启动服务:
[root@onepiece blog]# service vsftpd start
# 或者: systemctl start vsftpd.service
# 停止服务:
[root@onepiece blog]# service vsftpd stop
# 重启服务:
[root@onepiece blog]# service vsftpd restart
# 设置开机启动 FTP 服务
[root@onepiece blog]# chkconfig vsftpd on
5) 配置说明:
vsftpd 使用 ftpusers 和 user_list 两个文件对用户进行限制:
①
/etc/vsftpd/ftpusers
文件总是有效, 是黑名单 —— 里面的用户禁止登入 FTP;
②/etc/vsftpd/user_list
文件, 它要与/etc/vsftpd/vsftpd.conf
文件配合使用:如果
userlist_deny=YES
, 这个文件就是黑名单, 其中配置的用户禁止登入FTP;
如果userlist_deny=NO
, 这个文件就是白名单, 其中配置的用户才能登入FTP.③ 另外, 如果在
/etc/vsftpd/vsftpd.conf
文件中配置userlist_enable=NO
, 则 user_list 文件无效, 如果userlist_enable=YES
, 此时 user_list 文件有效, 将根据 vsftpd.conf 中配置的 userlist_deny 的值进行校验.
到这里, 所有的环境都已经搭建完毕, 接下来就是安装 WordPress 了.
5 安装WordPress
5.1 获取要安装的版本
到官网获取要安装的WordPress的版本:
英文官网为: https://wordpress.org/download,
中文官网为: https://cn.wordpress.org/download.
博主这里安装的是当时最新的中文版, 链接为: https://cn.wordpress.org/wordpress-5.0.3-zh_CN.tar.gz.
5.2 下载并解压
1) 通过 SecureCRT 连接服务器, 切换到网站根目录, 下载安装包:
[root@onepiece ~]# cd /data/blog
[root@onepiece blog]# wget https://cn.wordpress.org/wordpress-5.0.3-zh_CN.tar.gz
2) 解压安装包, 将所有文件都移动到根目录:
[root@onepiece blog]# tar -zxf wordpress-5.0.3-zh_CN.tar.gz
[root@onepiece blog]# mv wordpress/* ./
# 如果提示是否覆盖原有的测试 index.php, 果断是:
mv: overwrite ‘./index.php’? y
如果有强迫症可以把压缩包和空文件夹也删了:
[root@onepiece blog]# rm -rf wordpress wordpress-5.0.3-zh_CN.tar.gz
5.3 创建数据库
1) 连接 MySQL, 创建用来存放 WordPress 站点数据的数据库:
[root@onepiece blog]# mysql -u root -p
Enter password: # 这里输入密码
......
# 创建数据库:
MariaDB [(none)]> create database wordpress;
2) 编辑 WordPress 配置文件, 关联数据库:
[root@onepiece blog]# mv wp-config-sample.php wp-config.php
[root@onepiece blog]# vim wp-config.php
修改以下属性:
define('DB_NAME', '你的数据库名');
define('DB_USER', '数据库的用户名');
define('DB_PASSWORD', '数据库密码');
define('DB_HOST', '主机地址(当前机器就填localhost)');
3) 刷新浏览器, 如果能看到下图中WordPress的界面, 说明搭建成功^_^
5.4 更改用户组
注意: 这一步至关重要, 否则可能导致无法安装主题、无法复制文件、无法创建目录等一系列问题.
# 更改用户和用户组:
[root@onepiece blog]# chown -R apache:apache /data/blog
6 常见问题
6.1 开启防火墙
1) 搭建完网站后, 开启80端口(HTTP服务)以及443端口(HTTPS服务), 然后将之前关闭的防火墙重新开启:
在阿里云ECS控制台的安全组规则中配置端口的开启, 链接如下: https://ecs.console.aliyun.com/#/securityGroup
2) 开启防火墙:
# CentOS 7 开启防火墙:
[root@onepiece blog]# systemctl start firewalld.service
6.2 设置开机启动
将安装的程序注册为开机自动启动:
[root@onepiece blog]# systemctl enable mariadb.service
[root@onepiece blog]# systemctl enable php-fpm.service
[root@onepiece blog]# systemctl enable nginx.service
6.3 不能安装主题
WordPress安装目录的权限设置非常重要.
当你安装的WordPress遇到下述问题时:
- 不能安装、更新主题, 需要FTP账户;
- 不能安装、更新插件;
- 复制文件错误;
- 无法创建目录……
说明你的安装目录权限配置出现了问题 —— 不属于Web管理后台所属的用户和组.
划重点: 网络上有一大批将目录权限设置为777的文档, 方法可行, 但危险系数太高, 非常不推荐.
这里教你如何正确的设置WordPress的权限:
1) 进入WordPress的安装目录, 赋予所有写权限:
[root@onepiece ~]# cd /data/blog
[root@onepiece blog]# chmod 777 wp-content
2) 在博客后台的媒体库中上传一张图片, WordPress会自动生成/uploads
目录, 查看该目录的用户和用户组:
[root@onepiece wp-content]# ll
total 20
-rw-r--r-- 1 1006 1006 28 Jan 9 2012 index.php
drwxr-xr-x 4 1006 1006 4096 Jan 11 18:02 languages
drwxr-xr-x 3 1006 1006 4096 Jan 11 18:00 plugins
drwxr-xr-x 5 1006 1006 4096 Jan 11 18:02 themes
drwxrwxrwx 3 apache apache 4096 Feb 5 09:04 uploads
博主这里的用户名和用户组都是 “apache”.
3) 把wp-content
目录的权限还原到 755:
[root@onepiece wp-content]# cd /data/blog
[root@onepiece blog]# chmod 755 wp-content
4) 最终的修复的命令 —— 更改WordPress安装目录的拥有者:
[root@onepiece wp-content]# cd /data
[root@onepiece data]# chmod 755 blog
问题解决(^-^)V
参考资料
WordPress安装指南
阿里云搭建 WordPress 全过程
Centos7 安装 MySql Mariadb
Linux 下用 vsftpd 搭建 FTP 服务
WordPress 安装,文件夹权限设置
(全文完)
(感谢阅读, 转载请注明作者和出处 瘦风的南墙 , 请勿用于任何商业用途)
[…] ① 访问地址 https://healchow.com/articles/95.html; […]