Wordpress无疑是全世界最流行的CMS平台,据统计,43%的互联网网站都由wordpress搭建。全世界虚拟主机提供商几乎都会提供一键建wordpress的功能,方便个人、企业快速搭建门户、博客网站,这种方式也是首选的方式,免去很多维护管理的成本。
本文则按照一步步方式搭建,有兴趣的可以了解下过程。
拓扑如下:
# 在两台机器上都更新下sudo apt update & sudo apt upgradesudo reboot# 代理机器安装 nginxsudo apt install nginxsudo systemctl status nginx# 博客机器(wordpress)安装apache2sudo apt install apache2sudo systemctl status apache2# 在浏览器上测试这两个地址能正常访问。# 由于还没设置相关安全性,先关闭这两个服务,# 另外在两台服务器上新建普通用户kelemi,避免用root用户操作systemctl stop nginx # nginx服务器systemctl stop apache2#apache服务器adduser kelemiusermod -aG sudo kelemi# 限制root远程ssh# 限制特定的IP才能登录服务器vim /etc/ssh/sshd_config# 修改 PermitRootLogin 为 nosystemctl restart ssh为Wordpress设置UFW和MariaDB
# 设置ufw,只允许合法IP地址访问# comment 在高版本 ufw中支持# 以下是nginx的ufw设置which ufw # 确认已安装sudo ufw allow from *.*.*.* to any port 22 proto tcp comment "ssh"ufw enableufw status numberedsudo ufw allow 80 comment apachesudo ufw allow 443 comment httpsufw status numbered# 设置apache的防火墙# 只允许 nginx 服务器访问sudo ufw allow from <nginx的地址> to any port 22 proto tcp comment sshsudo ufw allow from <nginx的地址> to any port 80 proto tcp comment apachesudo ufw enable# 下面开始设置 MariaDB,在apache服务器上sudo apt install mariadb-serversystemctl status mariadb# 设置mariadbmariadb # 进入mariadbCREATE DATABASE wordpressdb;show databases;GRANT ALL PRIVILEGES on wordpressdb.* to wordpress@localhost IDENTIFIED BY mypassword;mysql_secure_installation # 设置root密码等信息设置Wordpress的Apache
ssh到apache服务器,因上一节的IP限制,需先ssh到nginx,再从nginx服务器ssh到apache.
需要限制实际的服务器对公众的开放。
实际还有堡垒主机的解决方案,保证所有ssh都通过严格控制的堡垒主机才能访问,当然这超出了本节的范围。
# 更新系统sudo apt update#安装一些php包sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip# 启用apache重写模块,并重启apache,检查是否正常sudo a2enmod rewritesudo systemctl restart apache2sudo systemctl status apache2# 查看 /etc/apache2/sites-available # 禁用原有的站点sudo a2dissite 000-default.confsudo a2dissite default-ssl.conf# 新建wordpress站点,命名是 blogsudo vim /etc/apache2/sites-available/wordpress.td.masterpeak.cn.conf<VirtualHost *:80>DocumentRoot "/var/www/html/wordpress.td.masterpeak.cn"ServerName wordpress.td.masterpeak.cn<Directory "/var/www/html/wordpress.td.masterpeak.cn/">Options MultiViews FollowSymlinksAllowOverride AllOrder allow,denyAllow from all </Directory> TransferLog /var/log/apache2/wordpress.td.masterpeak.cn_access.log ErrorLog /var/log/apache2/wordpress:w.td.masterpeak.cn_error.log</VirtualHost># 启用站点sudo a2ensite wordpress.td.masterpeak.cn.confsudo systemctl restart apache2sudo systemctl status apache2# 回到主目录下载wordpresswget https://wordpress.org/latest.tar.gztar -xvf latest.tar.gz# 改变属主为apache使用# www-data: 等同于 www-data:www-data,属于简化写法sudo chown www-data: -R wordpress/ls -l wordpress/# 迁移到到apache的目录sudo mv wordpress /var/www/html/wordpress.td.masterpeak.cnls -l /var/www/html# 删除原有的文件rm /var/www/html/index.html# sudo !! # tips:两个感叹号表示最后一次的命令# 用sudo !!就可以加上sudo执行,避免重复输入cd /var/www/html/wordpress.td.masterpeak.cn/ls -l# 重命名wp-config-sample.php,再作修改sudo mv wp-config-sample.php wp-config.phpvim wp-config.php# 修改数据库名,用户名,密码,服务器等数据库连接信息:wq # 保存最后完成wordpressp安装
#启动nginxsudo systemctl status nginxsudo systemctl start nginx# 进入nginx 目录,查看情况cd /etc/nginxls -l# 看到有sites-available和sites-enabled目录# 与apache非常相似,sites-available有默认的站点,可以添加自己定义的# 比如 blog.learnlinux.cloud.conf# 而在 sites-enabled 有指向 sites-available下的文件的链接# nginx没有apache的 a2ensite命令,所以需要手动创建软链接# 删除默认站点配置文件cd /etc/nginx/sites-enabledrm defaultcd ../sites-availablerm defaultvim /etc/nginx/sites-available/wordpress.td.masterpeak.cn.conf# 修改反向代理指向wordpress服务器cd /etc/nginx/sites-enabledsudo ln -s /etc/nginx/sites-available/wordpress.td.masterpeak.cn.conf# 同名软链接可以省略名称# 重启nginxsudo systemctl restart nginxsudo systemctl status nginx# apache服务器需要安装几个包才能运行sudo apt install php-mysql libapache2-mod-phpsudo systemctl restart apache2# 测试访问正常,设置登陆的管理员用户密码# 目前nginx没有ssl,显示不安全,需要处理# 与 nextcloud设置类似sudo add-apt-repository ppa:certbot/certbotsudo apt install python-certbot-nginxsudo certbot --nginx -d wordpress.td.masterpeak.cn# apache服务器有个文件可能需要修改sudo vim /var/www/html/wordpress.td.masterpeak.cn/.htaccess# 最上面添加一行SetEnvIf X-Forwarded-Proto https HTTPS