:::info
通过容器部署NGINX、MySQL、PHP容器,实现分布式部署站点WordPress

:::

1、拉取镜像

docker pull nginx:latest
docker pull mysql:5.7.32
docker pull php:7.4-fpm

2、创建需要的目录

mkdir -p /web/{mysql,nginx,php,www,conf} # 指定mysql、nginx、php、www目录,方便后续链接到容器中
docker network create wp-network   #创建docker自定义桥接网络

3、部署MySQL

#1、提前新建好站点数据库SQL文件,并授权woadm用户
cat > /web/mysql/mysql-init.sql <<EOF   
CREATE DATABASE wordpress;
grant all on wordpress.* to woadm@'%' identified by 'Wjx123.com';
FLUSH PRIVILEGES;
EOF
#2、运行MySQL容器
docker run -d -p 3306:3306\
  --network wp-network \
	--name mysql \
  --restart always \
  -e MYSQL_ROOT_PASSWORD=Wjx123.com \
	-v /web/mysql/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql \
	 mysql:5.7.32

4、部署PHP

#1、运行php容器,链接MySQL,挂载站点目录
docker run -d \
	--restart always \
	--name php-fpm \
	--network wp-network \
	-v /web/www/:/web/www/ \
	php:7.4-fpm 
		   
#2、进入php的容器安装mysqli模块
docker exec -it php-fpm bash
debian 或 ubuntu的软件包安装

#3、变更debian的apt源
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
EOF

#4、更新apt库
老版的ubuntu系统使用的apt-get命令,目前的所有基于Debian系列的系统用的都是apt命令
apt update

#5、加入上传限制到php配置文件中,后续柯根据需要调整
cat > /usr/local/etc/php/conf.d/php.ini <<EOF
upload_max_filesize = 50M
post_max_size = 50M
EOF

#6、安装gd模块依赖的软件
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev libzip-dev zlib1g-dev

#7、配置gd模块的支持的功能
docker-php-ext-configure gd --enable-gd --with-freetype --with-webp --with-jpeg 

#8、安装mysql pdo_mysql gd模块
docker-php-ext-install gd mysqli pdo_mysql
exit

5、部署Nginx

#1、编写nginx配置文件
vim  /web/conf/wordpress.conf 
server {
    server_name wordpress.wjx.com;  # 配置站点的域名/主机名,访问该域名时匹配此虚拟主机
    listen 80;                    # 配置 Nginx 监听 80 端口(HTTP 协议默认端口)
    client_max_body_size 50M;    # 设置客户端上传文件的最大体积为 50M,解决 WordPress 上传大文件(如图片、插件)时的大小限制
    root /web/www/wordpress;			# 指定 WordPress 站点的根目录(Nginx 查找网页文件的基础路径)
    index index.php index.html;   # 设置默认索引文件优先级:优先访问 index.php(PHP 动态文件),其次 index.html(静态文件)
# 正则匹配所有 .php 结尾的请求(处理 WordPress 的 PHP 动态脚本)
    location ~ \.php$ {                 
	    fastcgi_pass   php-fpm:9000;  # 将 PHP 请求转发到名为 php-fpm 的 Docker 容器的 9000 端口(PHP-FPM 默认监听端口)
	    fastcgi_index  index.php;      
	    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      # 设置 PHP 脚本的真实物理路径:$document_root(即上面的 /web/www/wordpress) + $fastcgi_script_name(请求的 PHP 文件名)
	    include        fastcgi_params;
    }
}

#2、解压WordPress站点文件到文本目录
tar xf wordpress-zh_CN.tar.gz -C /web/www/ 
chmod -R 777 wordpress
#3、运行Nginx容器
docker run  -d  -p 80:80\
 --restart always \
 --name web01 \
 --network wp-network \
 -v /web/conf:/etc/nginx/conf.d \
 -v /web/www/:/web/www/ \
 -v /web/nginx/log/web01:/var/log/nginx \
 nginx:latest
#4、查看docker网络是否正常,正常显示同网段IP说明网络正常
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' `docker ps -aq`
 /web01 -  172.18.0.4
 /php-fpm -  172.18.0.3
 /mysql -  172.18.0.2

6、修改文件权限

chown -R 33.33 /web/www  #避免上传和访问权限
chown -R 777 /web/www

7、访问站点地址

更多推荐