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
相关推荐
木西4 小时前
Dapp开发与应用的最佳实践
web3·智能合约·全栈
susnm4 小时前
RSX 构建界面
rust·全栈
秋天的一阵风1 天前
🔍JavaScript严格模式:你真的了解它的重要性吗?
前端·javascript·全栈
不想说话的麋鹿2 天前
《NestJS 实战:RBAC 系统管理模块开发 (二)》:菜单与权限路由设计
前端·node.js·全栈
susnm2 天前
你的第一个组件
rust·全栈
不想说话的麋鹿3 天前
《NestJS 实战:RBAC 系统管理模块开发 (一)》
前端·node.js·全栈
魔镜魔镜_谁是世界上最漂亮的小仙女3 天前
java-maven依赖管理
java·后端·全栈
我这里是好的呀4 天前
全栈开发个人博客12.嵌套评论设计
前端·全栈
我这里是好的呀4 天前
全栈开发个人博客13.AI聊天设计
前端·全栈
我这里是好的呀4 天前
全栈开发个人博客09.Authentication
全栈