一份完整的、包含三个容器(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 "------------------------------------------------"
