使用 docker compose 部署一个 WordPress 项目

1. 安装 docker compose

下载地址:https://github.com/docker/compose/releases

1.1 Linux 命令行下载

# v2.30.2 版本号
sudo curl -L "https://github.com/docker/compose/releases/download/v2.30.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 无外网环境下载
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.30.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
ShellScript

1.2 安装

# 将下载的二进制文件添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 测试是否安装成功
docker-compose version

Docker Compose version v2.30.2
ShellScript

2. 创建配置文件

2.1 创建工作目录

# 切换到 root 用户
# 创建工作目录
mkdir -p /docker-compose/compose_lnmp
cd /docker-compose/compose_lnmp
ShellScript

2.2 创建 Nginx 配置文件

mkdir -p /docker-compose/compose_lnmp/nginx/conf.d
mkdir -p /docker-compose/compose_lnmp/nginx/html
mkdir -p /docker-compose/compose_lnmp/nginx/ssl_key

# 进入配置文件目录创建 Nginx 配置文件
cd /docker-compose/compose_lnmp/nginx/conf.d
vim www.conf


server {
    listen       443 ssl;
    server_name  pingk.top;

    ssl_certificate /etc/nginx/ssl_key/pingk.top.pem;
    ssl_certificate_key /etc/nginx/ssl_key/pingk.top.key;

    # access_log /var/log/nginx/host.access.log  main;

    # 非.php结尾请求从root指定的目录里直接拿,例如/、/1.jpg、/a/b/2.css
    location / {
        root   /var/www/html/wordpress;
        try_files $uri $uri/ /index.php?$args;
        index index.php index.html index.htm a.txt;
    }

    # 以.php结尾的请求,交给fastcgi程序处理,下面的配置没有一点是多余的
    location ~ \.php$ {
        fastcgi_pass   172.22.225.55:9000;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/wordpress$fastcgi_script_name;
        include        fastcgi_params;
    }
}


server {
    listen 80;
    server_name pingk.top;

    rewrite (.*) https://$server_name$1;
}
ShellScript

2.3 添加 ssl 证书

将 ssl 证书秘钥拷贝到 /docker-compose/compose_lnmp/nginx/ssl_key 目录下

2.4 安装 wordpress

# 下载wordpress包
# 官网:https://wordpress.org/download/
wget https://wordpress.org/latest.zip

# 将wordpress解压到/docker-compose/compose_lnmp/nginx/html
# 解压后生成一个“wordpress”的文件夹
unzip latest.zip -d /docker-compose/compose_lnmp/nginx/html 

# 将wp-config-sample.php文件复制到wp-config.php文件中,将原示例配置文件保留作为各份
cd /docker-compose/compose_lnmp/nginx/html/wordpress
cp wp-config-sample.php wp-config.php

# 打开新创建的配置文件
vim wp-config.php
# 指定数据库
# WordPress 数据库名称
define( 'DB_NAME', 'wordpress' );
# 数据库用户名
define( 'DB_USER', 'tom' );
# 数据库密码
define( 'DB_PASSWORD', '123' );
# 数据库主机,宿主机做了端口映射可填写宿主机ip,或者 MySQL 容器ip,不指定端口默认为3306
# 查看容器ip:docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
define( 'DB_HOST', '172.22.225.55' );


# 可选配置
# 更新 wordpress 时可直接写入,无需 ftp
define('FS_METHOD', 'direct');
ShellScript

2.5 创建 php-fpm 配置文件

mkdir -p /docker-compose/compose_lnmp/php-fpm/php-fpm.d
cd /docker-compose/compose_lnmp/php-fpm/php-fpm.d


vim zz-docker.conf

[global]
daemonize = no

[www]
listen = 9000

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500
ShellScript

2.6 创建 MySQL 数据目录

mkdir -p /docker-compose/compose_lnmp/mysql/conf.d
mkdir -p /docker-compose/compose_lnmp/mysql/data
ShellScript

3. 编辑 docker-compose-lnmp.yml 文件

# docker compose 文件
# php-fpm容器启动前需要先将配置文件拷贝到宿主机挂载目录,否则无法启动
cd /docker-compose/compose_lnmp


vim docker-compose-lnmp.yml


services:
  nginx:
    hostname: nginx-1.26
    image: nginx:1.26
    ports:
      - 80:80
      - 443:443
    networks:
      - my_custom_network
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/var/www/html
      - ./nginx/ssl_key:/etc/nginx/ssl_key
    environment:
      - TZ=Asia/Shanghai
      
  php-fpm:
    hostname: php-fpm-8.2
    image: php:8.2-fpm-alpine
    ports:
      - 9000:9000
    networks:
      - my_custom_network
    volumes:
      - ./php-fpm/php-fpm.d:/usr/local/etc/php-fpm.d
      - ./nginx/html:/var/www/html
    environment:
      - TZ=Asia/Shanghai

  mysql:
    hostname: mysql-8.4
    image: mysql:8.4
    ports:
      - 3306:3306
    networks:
      - my_custom_network
    volumes:
      - ./mysql/conf.d:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8mb4
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=database_name
      - MYSQL_USER=user_name
      - MYSQL_PASSWORD=123456
 
networks:
  my_custom_network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1
      
# 创建容器,需在当前目录下运行
docker-compose -f docker-compose-lnmp.yml up -d
ShellScript

4. php-fpm 容器安装 mysqli 拓展

php-fpm 的官方基础镜像没有 mysqli 拓展,可以选择使用 dockerfile 构建包含拓展的镜像或者在容器内部安装,这里我们选择在容器内部直接安装

几个命令说明:

命令参数作用
docker-php-sourceextract | delete加载、移除扩展文件
docker-php-ext-installext安装并启用扩展
docker-php-ext-enableext启用扩展
docker-php-ext-configure配置扩展

推荐一篇博客,有这几个命令详细说明:https://www.cnblogs.com/yinguohai/p/11329273.html

操作步骤:

# 进入容器,切换目录
cd /usr/src

# 加载扩展文件
docker-php-source extract

# 进入 /usr/src/php/ext 目录
cd /usr/src/php/ext

# 安装并启用扩展
docker-php-ext-install mysqli

# 移除扩展文件
docker-php-source delete

# 最后重启容器即可



# 如果 docker-php-ext-install mysqli 下载慢可以使用阿里云镜像
# 安装 Composer 工具
# 下载 Composer 安装脚本
cd ~
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# 运行安装脚本
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
# 验证安装
composer --version

# 配置镜像地址
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 查看配置文件
cat ~/.composer/config.json
ShellScript

安装完成,打开网站进行 wordpress 初始化配置

5. 将创建好的容器打包为镜像

docker commit [容器ID|容器名称] 保存名称:版本
ShellScript

6. 问题记录

1、如果按照上述步骤外网访问不到 Nginx 查看云服务器安全组端口开放设置,是否放行 80/443 端口。

上一篇
下一篇