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 安装"
梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-08-01 20:16:02

results matching ""

    No results matching ""