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
ShellScript1.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
ShellScript2. 创建配置文件
2.1 创建工作目录
# 切换到 root 用户
# 创建工作目录
mkdir -p /docker-compose/compose_lnmp
cd /docker-compose/compose_lnmp
ShellScript2.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;
}
ShellScript2.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');
ShellScript2.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
ShellScript2.6 创建 MySQL 数据目录
mkdir -p /docker-compose/compose_lnmp/mysql/conf.d
mkdir -p /docker-compose/compose_lnmp/mysql/data
ShellScript3. 编辑 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
ShellScript4. php-fpm 容器安装 mysqli 拓展
php-fpm 的官方基础镜像没有 mysqli 拓展,可以选择使用 dockerfile 构建包含拓展的镜像或者在容器内部安装,这里我们选择在容器内部直接安装
几个命令说明:
命令 | 参数 | 作用 |
docker-php-source | extract | delete | 加载、移除扩展文件 |
docker-php-ext-install | ext | 安装并启用扩展 |
docker-php-ext-enable | ext | 启用扩展 |
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|容器名称] 保存名称:版本
ShellScript6. 问题记录
1、如果按照上述步骤外网访问不到 Nginx 查看云服务器安全组端口开放设置,是否放行 80/443 端口。