Docker全自动部署脚本
全自动使用Docker部署Wordpress
#!/bin/bash
# 单服务器部署脚本 (192.168.0.120)
# 功能:配置目录、Docker Compose、MySQL 主库、WordPress、Nginx
# 依赖:使用 apt 从官方 Docker 仓库安装 Docker 和 Docker Compose
# 变量定义
SERVER_IP="192.168.0.120"
MYSQL_ROOT_PASSWORD="12345678"
MYSQL_USER="wordpress"
MYSQL_PASSWORD="12345678"
MYSQL_DATABASE="wordpress"
# 1. 安装依赖
echo "正在安装依赖项..."
# 更新包索引并安装依赖
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
# 下载 Docker GPG 密钥(建议多试几次以应对网络不稳定)
echo "正在下载 Docker GPG 密钥..."
for i in {1..3}; do
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && break
echo "下载失败,第 $i 次重试..."
sleep 2
done
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加 Docker 仓库(动态获取 Ubuntu 发行版代号)
echo "正在添加 Docker 仓库..."
UBUNTU_CODENAME=$(lsb_release -cs)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
bookworm stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# 安装 Docker 和 Docker Compose
echo "正在安装 Docker 和 Docker Compose..."
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动并启用 Docker
echo "正在启动并启用 Docker 服务..."
sudo systemctl start docker
sudo systemctl enable docker
# 2. 创建目录
echo "正在创建目录..."
sudo mkdir -p /data/{mysql/data,wordpress/{html,uploads},nginx/{conf,logs,ssl}}
sudo chown -R 1000:1000 /data/wordpress/{html,uploads}
# 3. 创建 Docker Compose 文件
echo "正在创建 docker-compose.yml..."
sudo mkdir -p /Docker
sudo bash -c "cat <<'EOF' > /Docker/docker-compose.yml
version: '3.8'
services:
mysql:
image: hub.yumesakura.com/library/mysql:8.0
container_name: docker-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- /data/mysql/data:/var/lib/mysql
ports:
- '3306:3306'
restart: unless-stopped
networks:
- wp_network
wordpress:
image: hub.yumesakura.com/library/wordpress:php8.2-fpm
container_name: docker-wordpress
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- /data/wordpress/html:/var/www/html
- /data/wordpress/uploads:/var/www/html/wp-content/uploads
- /data/wordpress/php.ini:/usr/local/etc/php/conf.d/custom.ini
depends_on:
- mysql
networks:
- wp_network
nginx:
image: hub.yumesakura.com/library/nginx:alpine
container_name: docker-nginx
ports:
- '80:80'
- '443:443'
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/wordpress/html:/var/www/html
- /data/nginx/ssl:/etc/ssl
depends_on:
- wordpress
networks:
- wp_network
networks:
wp_network:
driver: bridge
EOF"
# 4. 创建 Nginx 配置文件
echo "正在创建 Nginx 配置文件..."
sudo bash -c "cat <<'EOF' > /data/nginx/conf/wordpress.conf
server {
listen 80;
server_name ${SERVER_IP};
root /var/www/html;
index index.php;
access_log /var/log/nginx/wordpress.access.log;
error_log /var/log/nginx/wordpress.error.log;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
access_log off;
try_files \$uri =404;
}
location / {
try_files \$uri \$uri/ /index.php?\$args;
}
location ~ \.php$ {
try_files \$uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PATH_INFO \$fastcgi_path_info;
}
add_header X-Frame-Options 'SAMEORIGIN';
add_header X-Content-Type-Options 'nosniff';
add_header X-XSS-Protection '1; mode=block';
}
EOF"
# 5. 创建空的 php.ini(用户可自行配置)
echo "正在创建空的 php.ini 文件..."
sudo touch /data/wordpress/php.ini
# 6. 启动 Docker 服务
echo "正在启动 Docker 服务..."
cd /Docker
sudo docker compose up -d
# 7. 输出验证命令
echo "部署完成,请运行以下命令验证:"
echo "1. 检查 Docker 服务状态:sudo docker-compose -f /Docker/docker-compose.yml ps"
echo "2. 验证 MySQL:sudo docker exec -it docker-mysql mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e 'SHOW DATABASES;'"
echo "3. 验证 WordPress 访问:curl http://${SERVER_IP}"
echo "4. 检查 Nginx 日志:tail -f /data/nginx/logs/wordpress.access.log"
echo "5. 通过浏览器访问 http://${SERVER_IP} 完成 WordPress 安装"