亚马逊云 AWS LightSail 搭建高性能 LNMP 环境并安全部署 Wordpress
开篇词
作为一个技术人员,有时候希望能拥有一个完全属于自己的博客网站(虽然我的是基于 Hugo 而不是 Wordpress),我们不得不自己倒腾倒腾,DIY 一个出来。
这篇文章将教你如何在亚马逊的 AWS LightSail 上从安装 Wordpress 所需的所有程序和服务器到其自身的部署及安装。
先准备好 Bash 自动执行脚本
注意自动执行脚本里需要修改的地方:
将 你的域名 替换成真实的域名
# 打开 80 和 443 端口,如果需要的话
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
# 安装 MariaDB 10.3
printf '%s\n' '[mariadb]' 'name = MariaDB' 'baseurl = http://yum.mariadb.org/10.3/centos7-amd64' 'gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB' 'gpgcheck=1' > /etc/yum.repos.d/MariaDB.repo
yum -y install MariaDB-server MariaDB-client
# Start+Enable MariaDB
systemctl start mariadb
systemctl enable mariadb
# 安装 PHP-FPM 7.3
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum-config-manager --disable remi-php54
yum-config-manager --enable remi-php73
yum -y install php php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-pdo php-pecl-apcu php-pecl-apcu-devel
php -v
# Start+Enable PHP-FPM
systemctl start php-fpm
systemctl enable php-fpm
# 为 CentOS 7 配置 Nginx 的 Repo
printf '%s\n' '[nginx]' 'name=nginx repo' 'baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/' 'gpgcheck=0' 'enabled=1' > /etc/yum.repos.d/nginx.repo
# 安装 Nginx
yum -y install nginx
# Start+Enable Nginx
systemctl start nginx
systemctl enable nginx
# 为 Wordpress 配置虚拟主机
mkdir /etc/nginx/sites-available
printf '%s\n' 'server {' ' listen 80;' ' server_name 你的域名;' ' # note that these lines are originally from the "location /" block' ' root /var/www/你的域名;' ' index index.php index.html index.htm;' ' location / {' ' try_files $uri $uri/ =404;' ' }' ' error_page 404 /404.html;' ' location = /50x.html {' ' root /var/www/你的域名;' ' }' ' location ~ \.php$ {' ' try_files $uri =404;' ' fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;' ' fastcgi_index index.php;' ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' ' include fastcgi_params;' ' }' '}' > /etc/nginx/sites-available/你的域名
mkdir /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/你的域名 /etc/nginx/sites-enabled/你的域名
# 删除 Nginx 默认页
rm -f /etc/nginx/conf.d/default.conf
nginx -s reload
# 准备最新版的 Wordpress
mkdir -p /var/www/你的域名
yum -y install wget
wget wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
mv wordpress/* /var/www/你的域名
chown -R nginx:nginx /var/www/你的域名
cp /var/www/你的域名/wp-config-sample.php /var/www/你的域名/wp-config.php
# 为 Nginx 配置 SELinux 上下文
semanage fcontext -a -t httpd_config_t "/etc/nginx/sites-enabled(/.*)?"
restorecon -Rv /etc/nginx/sites-enabled
# 为 Wordpress 配置 SELinux 上下文
semanage fcontext -a -t httpd_sys_content_t "/var/www/你的域名(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/你的域名/wp-content(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/你的域名/wp-config\.php"
restorecon -Rv /var/www/你的域名
开始安装
登陆进 AWS 控制台之后选择 LightSail:

创建实例
外部域名指向 LightSail
创建 DNS 空间
在 LightSail 主页,定位到 Networking 选项卡:
创建并绑定静态 IP
在 LightSail 主页,定位到 Networking 选项卡:
在 LightSail 主页,定位到 Networking 选项卡:
需要进行手工操作的地方
手工配置部分将会用到 vi 文本编辑器,不会用的童鞋可以参考我专栏《》里的这篇《》
变更 SSH 端口
借助创建实例时下载的密钥证书通过 SSH 登录到服务器绑定的静态 IP 地址后:
注意命令里需要修改的地方:
将 新的SSH端口 替换成你想要的 SSH 登陆端口
sudo su
vi /etc/ssh/sshd_config
semanage port -a -t ssh_port_t -p tcp #新的SSH端口
systemctl restart sshd
配置 MariaDB
mysql_secure_installation
(是否设置 root 密码)Set root password? [Y/n] Y
输入 root 的新密码
(是否删除匿名用户)Remove anonymous users? [Y/n] Y
(是否禁止 root 远程登录)Disallow root login remotely? [Y/n] Y
(是否删除测试数据库)Remove test database and access to it? [Y/n] Y
(是否现在就重新加载权限表)Reload privilege tables now? [Y/n] Y
创建数据库用户
注意 SQL 里需要修改的地方:
将 用户名 替换成你喜欢的英文名字母
将 密码 替换成你喜欢的密码
将 数据库 替换成你喜欢的英文字母
mysql -u root -p
create database 数据库;
create user 用户名@localhost identified by '密码';
grant all privileges on 数据库.* to 用户名@localhost;
flush privileges;
配置 PHP-FPM
配置 www.conf
vi /etc/php-fpm.d/www.conf
找到以下内容并修改成对应的值:
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
更改固定路径信息
vi /etc/php.ini
cgi.fix_pathinfo=0
重启并检查 PHP-FPM 是否运行正常
systemctl restart php-fpm
netstat -pl | grep php-fpm
更改所有者以及 SELinux 安全上下文
chown -R nginx:nginx /var/run/php-fpm
semanage fcontext -a -t httpd_var_run_t "/var/run/php-fpm(/.*)?"
restorecon -Rv /var/run/php-fpm
配置 Nginx
vi /etc/nginx/nginx.conf
在 http 区块中添加 /etc/nginx/sites-enabled/*;
测试语法并重新加载 Nginx
nginx -t
nginx -s reload
配置 Wordpress
配置数据库
注意命令里以及配置里需要修改的地方:
将 你的域名 替换成真实的域名
将 数据库名 替换成你在数据库里创建的数据库
将 数据库用户名 替换成你在数据库里创建的用户名
将 数据库用户密码 替换成你在创建用户时指定的密码
vi /var/www/你的域名/wp-config.php
define( 'DB_NAME', '数据库名' );
define( 'DB_USER', '数据库用户名' );
define( 'DB_PASSWORD', '数据库用户密码' );
配置钥和盐
访问 https://api.wordpress.org/secret-key/1.1/salt/ 以重新生成以下对应的数据并替换之:
define('AUTH_KEY', '-$[|c@QAw)nEh0njZ,e>me4q4NYFGnSetx^F-NS(R_Q~wCsH+In}:m4>L kA,4e<');
define('SECURE_AUTH_KEY', 'IUx~>A+0jgY_;N3N|(i!| nv4BIG4QkgOGWd/$~4Pv3$S+qMG.rJAx%pzz');
define('NONCE_KEY', '6|m>?--b8Us-Z_?{FGaJm,Qto');
define('LOGGED_IN_SALT', '1!9~R,eU:{O*1KH~MH5M <$!@^-w|_1n{CA5VuH%A5+{Syxf2};Y{~?WA)V;SmB!');
define('NONCE_SALT', '[=2vpM1cBlowmYo,]} 9$U>ImHA+-Xdi8.9
查看文件的 SELinux 上下文
主要是 Wordpress 路径以及 Nginx 路径下的 SELinux 上下文:
注意命令里需要修改的地方:
你的域名
ls -lZ /var/www/你的域名
ls -lZ /etc/nginx/sites-enabled/你的域名
安装 Wordpress
现在可以访问你的域名来进行 wordpress 的安装了。