centOs配置Docker + Nginx + mongodb实现前后端项目部署

centOs配置Docker + Nginx + mongodb实现前后端项目部署

准备内容

  • 阿里云轻量级服务器(CentOS Stream 9镜像)
  • 打开防火墙端口:8080 443 3000 28078
  • 域名

安装Docker:

lua 复制代码
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable dockerÏ

安装Docker Compose V2:

bash 复制代码
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装Git:

复制代码
sudo yum install git

创建项目结构:

lua 复制代码
/var/myapp
|-- docker-compose.yml
|-- www/          # Vue/React 前端项目
|-- koa/           # Koa.js 后端项目
|-- nginx/             # Nginx 配置文件```
|   `-- conf.d/
|       `-- default.conf
|-- data/              # MongoDB 数据存储

www/下为前端项目,使用git从代码仓库拉取<myapp-utils-vue>

koa/下为后端项目,使用git从代码仓库拉取<myapp-utils-koa>

配置Nginx:

nginx/conf.d/default.conf下写入内容:

ini 复制代码
server {
    listen 80 default_server;
    server_name yourdomain.cn www.yourdomain.cn;
    return 301 https://$host$request_uri;

}

server {
    listen 443 ssl;
    server_name yourdomain.cn www.yourdomain.cn;
    ssl_certificate /etc/letsencrypt/live/yourdomain.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.cn/privkey.pem;
    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}

server {
    listen 80;
    server_name api.yourdomain.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name api.yourdomain.cn;
  
    ssl_certificate /etc/letsencrypt/live/yourdomain.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.cn/privkey.pem;
  
    location / {
        proxy_pass http://koa:3000/;
        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;
    }
}

*二级域名需在对应域名商解析

*conf文件配置了SSL内容,未添加SSL证书时将443代码块下location内容移至80下并注释return

配置Docker Compose

/myapp 目录下创建 docker-compose.yml 文件,内容如下:

yaml 复制代码
services:
  www:
    image: node:18.20
    container_name: www
    working_dir: /app
    volumes:
      - ./www/myapp-utils-vue:/app
    ports:
      - "8080:8080"
    command: sh -c "npm install && npm run build"
    depends_on:
      - koa

  koa:
    image: node:18.20
    container_name: koa
    working_dir: /app
    volumes:
      - ./koa/myapp-utils-koa:/app
    ports:
      - "3000:3000"
    command: sh -c "npm install && node app.js"
    depends_on:
      - mongo

  mongo:
    image: mongo:5.0
    container_name: mongo
    volumes:
      - ./data/db:/data/db
    ports:
      - "28078:28078"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  nginx:
    image: nginx:1.21
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./www/myapp-utils-vue/dist:/usr/share/nginx/html
      - /etc/letsencrypt:/etc/letsencrypt
    depends_on:
      - www
      - koa

myapp/启动dokcer:

复制代码
docker compose up -d

Certbot配置SSL:

全局安装Certbot并获取证书

sql 复制代码
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

证书内容会存放在/etc/letsencrypt/live/yourdomain.cn/下,重启Nginx完成SSL配置 验证自动续期

arduino 复制代码
sudo certbot renew --dry-run
相关推荐
前端荣耀11 小时前
Flutter 客户端热更新实战
前端框架·全栈
码森林1 天前
小龙虾居然比你更健忘?OpenClaw 记忆系统指南,让它永远记住你
人工智能·ai编程·全栈
CharlieWang2 天前
AI + Cloudflare = 你需要的全部
前端·敏捷开发·全栈
码森林2 天前
让 AI 开发不翻车:这套「Superpower」方法论可能颠覆你的编程方式
ai编程·全栈
helloweilei5 天前
NestJS系列(3)- Provider(提供者)
nestjs·全栈
helloweilei5 天前
NestJS系列(2)- 控制器(Controller)
nestjs·全栈
helloweilei5 天前
NestJS系列(1)- nestjs简介及项目初始化
nestjs·全栈
前端双越老师6 天前
RAG 完全指南:从概念到生产实践
人工智能·agent·全栈
小成C7 天前
Vibe Coding 时代,研发体系该怎么重新分工
人工智能·架构·全栈
非优秀程序员8 天前
OpenClaw 教学:25 个工具 + 53 个技能完整指南
人工智能·开源·全栈