用Docker部署Node.js应用到香港VPS:镜像构建、环境变量与进程守护
Docker 部署 Node.js 的优势
直接在服务器上跑 Node.js 应用,面临的问题是:Node.js 版本冲突、依赖污染、进程管理复杂。用 Docker 部署可以彻底解决这些问题——每个应用运行在独立的容器中,Node.js 版本、依赖库完全隔离,进程守护也交给 Docker 的 restart 策略处理。
一、编写 Dockerfile
在你的 Node.js 项目根目录创建 Dockerfile:
nano Dockerfile# 使用多阶段构建减小最终镜像体积
# 第一阶段:安装依赖
FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 第二阶段:构建生产镜像
FROM node:20-alpine AS runner
WORKDIR /app
# 创建非 root 用户运行应用(安全最佳实践)
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --from=deps /app/node_modules ./node_modules
COPY . .
USER appuser
EXPOSE 3000
CMD ["node", "server.js"]创建 .dockerignore 文件,排除不需要打包的文件:
node_modules
.git
.env
*.log
README.md二、环境变量管理
生产环境的敏感配置(数据库密码、API Key 等)不能写在代码里,通过环境变量传入容器。
创建 .env 文件(不要提交到 Git):
NODE_ENV=production
PORT=3000
DATABASE_URL=mysql://user:password@mysql:3306/mydb
JWT_SECRET=your_jwt_secret_here
REDIS_URL=redis://redis:6379用 docker compose 管理多容器应用时,在 docker-compose.yml 中引用环境变量文件:
version: '3.8'
services:
app:
build: .
container_name: nodejs_app
env_file:
- .env
ports:
- "127.0.0.1:3000:3000"
networks:
- app_net
restart: unless-stopped
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: nodejs_mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: mydb
volumes:
- mysql_data:/var/lib/mysql
networks:
- app_net
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- app_net
restart: unless-stopped
networks:
app_net:
volumes:
mysql_data:三、配置 Nginx 反向代理
nano nginx.confserver {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://app:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}四、构建并启动
# 构建镜像并启动所有服务
docker compose up -d --build
# 查看应用日志
docker compose logs -f app
# 查看容器状态
docker compose ps五、更新部署流程
# 拉取最新代码(如果使用 Git)
git pull
# 重新构建并重启(零停机滚动更新)
docker compose up -d --build app
# 清理旧镜像
docker image prune -f总结
Docker 部署 Node.js 应用的核心步骤:编写 Dockerfile 打包应用 → 通过 .env 文件管理环境变量 → 用 docker compose 编排多容器 → Nginx 做反向代理。一旦配置完成,后续更新只需重新 build 容器,整个流程标准化、可重复。
IDC.Net 香港云服务器支持 Ubuntu 22.04,Docker 安装开箱即用,首月 10 元起,CN2 GIA 直连大陆,支付宝付款即可开通。
版权声明:
作者:后浪云
链接:https://idc.net/help/442548/
文章版权归作者所有,未经允许请勿转载。
THE END
