前言
为了记录自己平时折腾的一些东西,以防折腾完就忘,打算搭建一个个人博客,将平时一些折腾过程记录下来。
在网上找了许多方案,最后决定用WordPress的方案,WordPress作为一款应用广泛的开源网站构建工具,无疑是很适合作为我这种初学者的快捷建站工具的。
网上许多教程都是基于宝塔面板直接构建WordPress的方案。之前用过一段宝塔面板,觉得强制要求注册登录才能使用的方式不免让人怀疑是否会向宝塔发送数据。虽说自己的数据也没什么值钱的,但还是觉得不太妥。况且从一个爱折腾的角度出发,宝塔面板一键式安装也没了许多趣味。
由于自己的方案比较奇怪,我目前的方案网络上目前也没有完整的记录,因此将整个过程完整记录一下。
建站方案
参考了许多其他人的建站教程,混搭了一套基于Docker的WordPress建站方案,方案并没有选用LNMP一键安装,而是各自分别安装:
- 整体基于阿里云ECS服务器,使用Alibaba Cloud Linux 3。
- Nginx为使用官网源码手动make安装。
- MySQL为Linux系统直装,因为还有些其他用处,并没有在Docker内安装。
- WordPress使用Docker安装,省去了Linux安装php环境的麻烦,也算是一种偷懒。
操作过程
服务器选购
阿里云ECS实例,没什么特别的。
系统用的是Alibaba Cloud Linux 3.2,使用yum源,用下来和centos感觉没什么区别,还算顺手。
MySQL安装
Linux安装Mysql很方便,安装mysql8,一条命令即可:
yum install mysql-server
安装完成后,需要创建一个数据库 wordpress
。最好重新创建一个mysql用户,只拥有 wordpress
数据库的权限。同时root用户最好不要开远程访问,也不要设置太简单的密码,避免被攻击。(来自一个被攻击过的人的经验,通过mysql登录劫持了整个系统,还好没什么数据,重装了系统。)
登录mysql:
mysql -uroot -p
创建数据库:
create database wordpress;
创建用户 wordpress
,星号为自定义密码:
create user "wordpress"@"%" identified by "****";
给用户赋予数据库权限:
grant all on wordpress.* to wordpress;
刷新权限:
flush privileges;
WordPress安装
Docker安装
Docker安装直接参考了阿里云配置教程:https://help.aliyun.com/zh/ecs/use-cases/deploy-and-use-docker-on-alibaba-cloud-linux-2-instances
这里再次记录一下命令。部分命令可能仅适用于 Alibaba Cloud Linux 3
系统,请注意。
sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
sudo dnf -y install docker-ce --nobest
Docker内部署wordpress
拉取WordPress镜像并部署
wordpress官方提供了镜像,直接拉取即可:
docker pull wordpress
启动容器,将容器内设置目录映射到主机,方便备份、查询、修改,端口映射到外部,避开80端口,以便后续nginx代理:
docker run -it --name wordpress -p 8001:80 --volume /home/wwwroot/wordpress:/var/www/html --volume /home/wwwroot/config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini -d wordpress
/home/wwwroot/wordpress
目录可不创建或保持为空即可。
uploads.ini
是配置wordpress可上传文件大小的配置,方便后续上传主题等。内容如下:
upload_max_filesize=32M
wordpress连接mysql
由于mysql不是通过docker部署,docker内的wordpress访问宿主机的mysql,需要特殊处理,这里我使用的方式是通过docker虚拟局域网的地址来访问。首先查看宿主机ip信息:
ifconfig
结果中应当有一条docker0网卡:
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:47ff:fea7:2434 prefixlen 64 scopeid 0x20<link>
ether 02:42:47:33:11:34 txqueuelen 0 (Ethernet)
RX packets 171878 bytes 98962864 (94.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 163328 bytes 224353979 (213.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中的 172.17.0.1
即docker内可访问的宿主机ip,然后修改 /home/wwwroot/wordpress/wp-config.php
文件,修改数据库信息:
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'wordpress') );
/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'wordpress') );
/**
* Docker image fallback values above are sourced from the official WordPress installation wizard:
* https://github.com/WordPress/WordPress/blob/1356f6537220ffdc32b9dad2a6cdbe2d010b7a88/wp-admin/setup-config.php#L224-L238
* (However, using "example username" and "example password" in your database is strongly discouraged. Please use strong, random credentials!)
*/
/** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', '172.17.0.1:3306') );
WORDPRESS_DB_HOST
即为数据库host,填入上一步获取的docker0网卡的ip以及mysql端口即可;WORDPRESS_DB_NAME
WORDPRESS_DB_USER
WORDPRESS_DB_PASSWORD
分别填入数据库名称、连接用户、数据库密码即可,我这里使用wordpress数据库,通过上面创建的wordpress用户连接。
此时,通过服务器ip以及设定的映射端口号 8001
即可访问wordpress了。初次访问需要创建用户,此用户即为管理员用户,初次直接跳转到 /wp-admin
,即wordpress管理后台,可以进行一些相关配置了。
Nginx安装
首先安装依赖项
yum install -y wget gcc-c++ pcre-devel zlib-devel openssl-devel
切换到 /user/local
目录:
cd /usr/local
nginx通过官网下载nginx:https://nginx.org/en/download.html
wget https://nginx.org/download/nginx-1.24.0.tar.gz
解压文件:
tar -zxvf nginx-1.24.0.tar.gz
切换到目录:
cd nginx-1.24.0
配置ssl模块:
./config --with-http_ssl_module
安装,这里会自动安装到 /usr/local/nginx/
文件夹下:
make && make install
这里 make
和 make install
可以分开执行。
完成后配置文件中添加server:
server{
listen 80;
server_name your_server_name;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8001;
}
}
完成后即可通过域名访问WordPress。