一、下载docker

详细安装内容可以参考CSDN博客:

Linux安装最新版Docker完整教程(建议收藏)_linux安装docker教程-CSDN博客

如果出现错误:Error downloading packages: docker-compose-plugin-2.27.1-1.el7.x86_64: [Errno 256] No more mirrors


参考博客:
erError downloading packages: docker-compose-plugin-2.27.1-1.el7.x86_64: [Errno 256] No more mirrors_docker-compose-plugin-2.27.1-1 failed-CSDN博客e

二、使用docker compose编写yml文件创建所需的所有组件

1、编写docker-compose文件

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:
  redis-data:
  mongodb-data:

services:

  mysql:
    image: mysql:8.0  
    container_name: mysql  
    restart: always  
    environment:
      MYSQL_ROOT_PASSWORD: "xxxxxx"  
      MYSQL_DATABASE: "ry"                
      TZ: Asia/Shanghai         
    ports:
      - "3306:3306"  
    volumes:
      - ./mysql/data:/var/lib/mysql  
      - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf  
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - app-network
    

  redis:
    image: redis:7.0  
    container_name: app-redis
    restart: always
    ports:
      - "6379:6379"  
    volumes:
      - ./redis/data:/data  
      - ./redis/conf/redis.conf:/etc/redis/redis.conf  
    command: redis-server /etc/redis/redis.conf --appendonly yes
    networks:
      - app-network

  mongodb:
    image: mongo:6.0  
    container_name: app-mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: "root"  
      MONGO_INITDB_ROOT_PASSWORD: "xxxxxx"
      TZ: Asia/Shanghai
    ports:
      - "27017:27017"  
    volumes:
      - ./mongodb/data:/data/db  
    networks:
      - app-network

  nginx:
    image: nginx:1.24  
    container_name: app-nginx
    restart: always
    ports:
      - "80:80"   
      - "443:443" 
      - "8099:8099"
    volumes:
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf  
      - ./nginx/conf/conf.d:/etc/nginx/conf.d          
      - ./nginx/logs:/var/log/nginx                    
      - ./nginx/html:/usr/share/nginx/html             
    depends_on:
      - mysql  
      - redis
    networks:
      - app-network
  
  backend:
    image: eclipse-temurin:8-jre
    container_name: app-backend
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./backend/app.jar:/usr/local/app.jar
      - ./backend/logs:/usr/local/logs
      - ./backend/application.yml:/usr/local/application.yml
    command: java -jar /usr/local/app.jar
    depends_on:
      - mysql
      - redis
      - mongodb
    networks:
      - app-network

2、配置各组件的自定义配置

MySQL 配置

解决中文乱码、连接数等问题:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
default-time-zone = '+8:00'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

Redis 配置

开启持久化、设置密码、限制访问:

# 绑定地址(容器内无需绑定宿主机IP,注释掉)
# bind 127.0.0.1
protected-mode no  # 容器网络下关闭保护模式
port 6379
requirepass "你的Redis密码"  # 设置密码,必加!
timeout 300
# 开启RDB持久化(默认)
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /data
# 开启AOF持久化(可选,更高可靠性)
appendonly yes
appendfilename "appendonly.aof"

Nginx 配置(nginx.conf)

# main全局块
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

# 必选的events区块(解决核心错误)
events {
    worker_connections  1024;
    use epoll;
}

# http块
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;

    # 包含子配置
    include /etc/nginx/conf.d/*.conf;
}

3、启动所有服务

# 后台启动所有服务(-d=detach)
docker-compose up -d
# 查看容器状态(正常应为Up)
docker-compose ps

4、验证各服务可用性

MySQL

Redis

MongoDB

Nginx

至此docker创建的所有容器启动成功。

三、后端项目打包部署

SpringBoot项目内嵌Tomcat,可以直接加载jdk镜像,将项目打成jar包进行部署。

启动成功之后可以访问端口进行测试。

至此后端项目部署成功。

四、前端项目打包部署

前端使用nginx进行反向代理,之后完成云服务ip访问以及前后端联通。

1、首先启动nginx容器,开放需要的容器端口,挂载外部ngin.conf配置文件、挂载需要上传dist包的html目录以及挂载需要加载的反向代理配置文件。

将前端打包之后的dist文件夹中内容全部拷贝到外部挂载的html目录中。

编写反向代理的配置文件

server {
    listen 80 default_server;
    server_name xx.xxx.xxx.xxx;
    charset utf-8;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }

    location /pro-api/ {
        proxy_pass http://app-backend:8080/;
        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;
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }

    access_log /var/log/nginx/ruoyi_access.log;
    error_log /var/log/nginx/ruoyi_error.log;
}

之后重新启动docker compose。完成所有容器的重新加载。

五、查看部署效果

1、首先查看docker容器启动情况

保证所有容器正常启动。(如果存在问题可以继续查看指定容器的启动日志进行问题排查)

2、查看项目的部署情况

更多推荐