Docker部署Wordpress

我想在内网保留我之前的wordpress文章所以就起了个服务,记录一下方便查询。

初始化脚本

创建初始化脚本并运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/bash

# 定义可修改的变量
#数据库root密码
MYSQL_ROOT_PASSWORD="123456"
# wordpress数据库账户
WORDPRESS_DB_USER="wordpress_user"
# wordpress数据库密码
WORDPRESS_DB_PASSWORD="wordpress_password"

# 定义要创建的目录列表
directories=(
"mysql/data"
"mysql/conf"
"mysql/logs"
"wordpress"
)

# 创建目录
for dir in "${directories[@]}"
do
mkdir -p "$dir"
echo "Created directory: $dir"
done

# 生成 init.sql 文件内容
init_sql_content=$(cat <<EOF
-- 创建名为 $WORDPRESS_DB_USER 的用户,密码为 $WORDPRESS_DB_PASSWORD
CREATE USER '$WORDPRESS_DB_USER'@'%' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD';
-- 授予 $WORDPRESS_DB_USER 用户对 wordpress 数据库的所有权限
GRANT ALL PRIVILEGES ON wordpress.* TO '$WORDPRESS_DB_USER'@'%';
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
-- 创建一个名为 wordpress 的数据库
CREATE DATABASE wordpress;
EOF
)

# 写入 init.sql 文件
echo "$init_sql_content" > init.sql
echo "Created file: init.sql"

# 生成 .env 文件内容
env_content=$(cat <<EOF
MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
WORDPRESS_DB_USER=$WORDPRESS_DB_USER
WORDPRESS_DB_PASSWORD=$WORDPRESS_DB_PASSWORD
EOF
)

# 写入 .env 文件
echo "$env_content" > .env
echo "Created file: .env"

# 生成 uploads.ini 文件内容
uploads_ini_content=$(cat <<EOF
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
EOF
)

# 写入 uploads.ini 文件
echo "$uploads_ini_content" > ./wordpress/uploads.ini
echo "Created file: uploads.ini"

# 输出提示信息
echo "All directories and files have been created successfully."

赋予运行权限并运行

Docker-compose

与初始化脚本放在同一个文件夹内运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
version: '3.8'

services:
mysql:
image: mysql:8
container_name: mysql
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/var/log/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3306:3306"
environment:
# 从 .env 文件获取 MySQL root 密码
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
restart: always

wordpress:
image: wordpress
container_name: wordpress
depends_on:
- mysql
volumes:
- ./wordpress:/var/www/html
- ./wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
ports:
- "80:80"
environment:
# 连接 MySQL 的主机地址,使用服务名 mysql
WORDPRESS_DB_HOST: mysql
# 从 .env 文件获取数据库用户名
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
# 从 .env 文件获取数据库用户密码
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
restart: always