受欢迎的博客标签

linux重装系统重装软件方案part5 - 全部docker,deploy_nop.sh

Published

一份完整的、包含三个容器(Nginx + nopCommerce + Postgres)的 docker run 最终脚本

这个脚本会自动处理网络创建、目录准备以及三个容器的启动

 

1.版本号:在生产环境中,永远不要使用 :latest 标签,因为镜像版本的意外更新可能会导致数据库不兼容或应用崩溃

 

普通用户,已加入 docker 组

保存脚本:nano deploy_nop.sh,粘贴内容并保存。
赋予权限:chmod +x deploy_nop.sh
运行:./deploy_nop.sh

 

部署脚本 (deploy_nop.sh)

#!/bin/bash

# 1. 定义变量和版本号
NET_NAME="custom_network"
DB_NAME="postgres-db"
WEB_NAME="nop-web"
NGINX_NAME="nginx-proxy"
REDIS_NAME="nop-redis"

# 明确指定版本号
DB_VERSION="16"
NOP_VERSION="4.70.5"
NGINX_VERSION="1.25"
REDIS_VERSION="7.2" # Redis 稳定版

DB_PASSWORD="YourSecurePassword123"

# 2. 准备目录
echo "正在准备本地持久化目录..."
mkdir -p ~/postgres_data/data
mkdir -p ~/nopcommerce/bin
mkdir -p ~/nopcommerce/logs
mkdir -p ~/nopcommerce/wwwroot/images
mkdir -p ~/nopcommerce/wwwroot/files
mkdir -p ~/redis_data           # 新增 Redis 数据目录
mkdir -p ~/nginx

# 3. 创建 Nginx 配置
cat <<EOF > ~/nginx/default.conf
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://$WEB_NAME;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}
EOF

# 4. 创建网络
docker network inspect $NET_NAME >/dev/null 2>&1 || docker network create $NET_NAME

# 5. 启动 Redis
echo "正在启动 Redis $REDIS_VERSION..."
docker run -d \
  --name $REDIS_NAME \
  --network $NET_NAME \
  -v ~/redis_data:/data \
  --restart always \
  redis:$REDIS_VERSION redis-server --appendonly yes

# 6. 启动 PostgreSQL
echo "正在启动 PostgreSQL $DB_VERSION..."
docker run -d \
  --name $DB_NAME \
  --network $NET_NAME \
  -e POSTGRES_PASSWORD=$DB_PASSWORD \
  -e POSTGRES_DB=nopcommerce_db \
  -v ~/postgres_data/data:/var/lib/postgresql/data \
  --restart always \
  postgres:$DB_VERSION

# 7. 启动 nopCommerce
echo "正在启动 nopCommerce $NOP_VERSION..."
docker run -d \
  --name $WEB_NAME \
  --network $NET_NAME \
  -p 8080:80 \
  -v ~/nopcommerce/bin:/app/bin \
  -v ~/nopcommerce/logs:/app/logs \
  -v ~/nopcommerce/wwwroot/images:/app/wwwroot/images \
  -v ~/nopcommerce/wwwroot/files:/app/wwwroot/files \
  -e ASPNETCORE_FORWARDEDHEADERS_ENABLED=true \
  --restart always \
  nopcommercedev/nopcommerce:$NOP_VERSION

# 8. 启动 Nginx
echo "正在启动 Nginx $NGINX_VERSION..."
docker run -d \
  --name $NGINX_NAME \
  --network $NET_NAME \
  -p 80:80 \
  -v ~/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro \
  --restart always \
  nginx:$NGINX_VERSION

echo "------------------------------------------------"
echo "部署完成!架构包含:DB, Redis, Web, Nginx"
echo "Redis 主机名: $REDIS_NAME (端口 6379)"
echo "------------------------------------------------"