当前位置: 首页 > ds >正文

在服务器上使用 Docker 部署 Node.js 后端服务和前端项目

一、准备工作

  1. 服务器环境

    • 安装 Docker 和 Docker Compose:
      # 安装 Docker
      curl -fsSL https://get.docker.com | sh
      systemctl start docker
      systemctl enable docker# 安装 Docker Compose
      sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      sudo chmod +x /usr/local/bin/docker-compose
      
  2. 项目结构

    /project
    ├── backend/            # Node.js 后端
    │   ├── Dockerfile
    │   ├── package.json
    │   └── src/
    ├── frontend/           # 前端项目
    │   ├── Dockerfile
    │   ├── package.json
    │   └── public/
    └── docker-compose.yml   # 编排文件
    

二、部署 Node.js 后端服务

1. 编写 Dockerfile
# backend/Dockerfile
FROM node:18-alpineWORKDIR /app
COPY package*.json ./
RUN npm installCOPY . .
EXPOSE 3000  # 根据实际端口修改CMD ["npm", "start"]  # 或 "node server.js"
2. 构建镜像
cd backend
docker build -t node-backend .
3. 验证运行
docker run -d -p 3000:3000 --name my-node-app node-backend

三、部署前端项目(以 React 为例)

1. 编写 Dockerfile
# frontend/Dockerfile
FROM node:18-alpine as builderWORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build  # 生成静态文件到 /app/dist# 使用 Nginx 托管
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
2. 构建镜像
cd frontend
docker build -t react-frontend .
3. 验证运行
docker run -d -p 80:80 --name my-react-app react-frontend

四、使用 Docker Compose 编排

1. 编写 docker-compose.yml
version: '3.8'
services:backend:build: ./backendports:- "3000:3000"environment:- NODE_ENV=productionrestart: unless-stoppedfrontend:build: ./frontendports:- "80:80"depends_on:- backendrestart: unless-stopped
2. 启动所有服务
docker-compose up -d  # 后台运行
3. 常用命令
docker-compose logs      # 查看日志
docker-compose down      # 停止服务
docker-compose restart   # 重启服务

五、进阶配置

1. 使用 .env 管理环境变量
  • docker-compose.yml 中引用:
    environment:- DB_HOST=${DB_HOST}
    
  • 创建 .env 文件:
    DB_HOST=mysql
    
2. 数据库服务(如 MySQL)
services:mysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootpassvolumes:- mysql_data:/var/lib/mysql
volumes:mysql_data:
3. Nginx 反向代理(可选)
server {listen 80;server_name your-domain.com;location /api {proxy_pass http://backend:3000;}location / {proxy_pass http://frontend;}
}

六、访问服务

  • 前端:http://服务器IP
  • 后端 API:http://服务器IP:3000/api

常见问题

  1. 端口冲突

    • 确保服务器防火墙开放端口(如 80、3000)。
  2. 文件权限问题

    • 在 Dockerfile 中添加用户权限管理:
      RUN chown -R node:node /app
      USER node
      
  3. 构建缓存优化

    • COPY package.jsonRUN npm install 提前,利用 Docker 缓存。

通过以上步骤,你可以快速在服务器上部署全栈项目。实际应用中,可根据需求扩展数据库、负载均衡等配置。

http://www.xdnf.cn/news/13819.html

相关文章:

  • 手写Antd的form组件源码
  • WPF调用Python心率监测脚本解决方案
  • 【iSAQB软件架构】以架构为中心的开发方法
  • 53. 最大的子数组和
  • iteration和每一轮,训练周期,迭代计数器 这些名词是什么关系?
  • 2025年中国人工智能发展研究报告:技术突破、行业变革与全球竞争新格局
  • ‘Target closed‘ error in Puppeteer解决
  • python打卡day52
  • 【GitOps】Kubernetes安装ArgoCD,使用阿里云MSE云原生网关暴露服务
  • 大数据学习(138)-Hive数据分析3
  • 利用Anything LLM和内网穿透工具在本地搭建可远程访问的AI知识库系统(1)
  • (十二)深度学习计算性能:硬件架构、算法效率与理论极限分析
  • Cursor 编辑器中的 Notepad 功能使用指南
  • sherpa-onnx开源语音处理框架研究报告:从技术解析到应用实践
  • Linux中shell编程的函数递归用法和脚本自动化讲解
  • 什么是JSON ?从核心语法到编辑器
  • 无人机避障——感知篇(在Ubuntu20.04的Orin nx上基于ZED2实现Vins Fusion)
  • 【cobalt strike手册】CS的环境配置
  • 离线部署openstack 2024.1 placement
  • Windows11下搭建Black Magic Probe (BMP) 编译环境
  • 【Unity踩坑】Unity 6在Mac平台编译运行时去除‘trial version‘
  • 第七章——8天Python从入门到精通【itheima】-81~84(函数的多返回值+函数多种传参方式+函数作为参数传递+lambda函数)
  • 剑指offer22_合并两个排序的链表
  • 【C】 USB CDC、Bulk-OUT 端点
  • 观测云,全球领先的监控观测平台亮相亚马逊云科技中国峰会!
  • 迭代优化法解决问题实例
  • day27/60重写(补充)
  • 流体仿真CFD技术在好氧活性污泥曝气系统改造中的应用
  • module_obj笔记
  • 手阳明大肠经之温溜穴