docker-compose.yml

services:
  mysql:
    image: mysql:8.0.42
    restart: always
    ports:
      - "33306:3306"
    volumes:
      - ./data/mysql/init:/docker-entrypoint-initdb.d
      - ./data/mysql/conf:/etc/mysql/conf.d
      - ./data/mysql/data:/var/lib/mysql
      - ./logs/mysql:/logs
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE_NAME}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    networks:
      - default
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 10s
  redis:
    image: redis:7.4.2
    restart: always
    ports:
      - "36379:6379"
    volumes:
      - ./data/redis/data:/data
    command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD}"]
    networks:
      - default
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      timeout: 10s
  nginx:
    image: nginx:1.26.3
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "33380:33380"
    volumes:
      - ./data/nginx/html:/usr/share/nginx/html
      - ./data/nginx/ssl:/etc/nginx/ssl
      - ./data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./logs/nginx:/var/log/nginx
    networks:
      - default
    depends_on:
      mpapi: 
        condition: service_healthy
      api: 
        condition: service_healthy
  mpapi:
    image: openjdk:8u342
    restart: always
    volumes:
      - ./data/mpapi/jar:/home/jar
      - ./logs/mpapi:/home/logs
    command: ["java", "-jar", "/home/jar/dajiang-admin.jar", "--spring.profiles.active=prod"]
    networks:
      - default
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8082"]
    depends_on:
      mysql: 
        condition: service_healthy
      redis: 
        condition: service_healthy
  api:
    image: openjdk:8u342
    restart: always
    volumes:
      - ./data/api/jar:/home/jar
      - ./logs/api:/home/logs
    command: ["java", "-jar", "/home/jar/dajiang-admin.jar", "--spring.profiles.active=prod"]
    networks:
      - default
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080"]
    depends_on:
      mysql: 
        condition: service_healthy
      redis: 
        condition: service_healthy
 
networks:
  default:
    driver: bridgeroot@instance-2lsk5f5o:~/mooc# cat docker-compose.yaml 
services:
  mysql:
    image: mysql:8.0.42
    restart: always
    ports:
      - "33306:3306"
    volumes:
      - ./data/mysql/init:/docker-entrypoint-initdb.d
      - ./data/mysql/conf:/etc/mysql/conf.d
      - ./data/mysql/data:/var/lib/mysql
      - ./logs/mysql:/logs
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE_NAME}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    networks:
      - default
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 10s
  redis:
    image: redis:7.4.2
    restart: always
    ports:
      - "36379:6379"
    volumes:
      - ./data/redis/data:/data
    command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD}"]
    networks:
      - default
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      timeout: 10s
  nginx:
    image: nginx:1.26.3
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "33380:33380"
    volumes:
      - ./data/nginx/html:/usr/share/nginx/html
      - ./data/nginx/ssl:/etc/nginx/ssl
      - ./data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./logs/nginx:/var/log/nginx
    networks:
      - default
    depends_on:
      mpapi: 
        condition: service_healthy
      api: 
        condition: service_healthy
  api:
    image: openjdk:8u342
    restart: always
    volumes:
      - ./data/api/jar:/home/jar
      - ./logs/api:/home/logs
    command: ["java", "-jar", "/home/jar/java.jar", "--spring.profiles.active=prod"]
    networks:
      - default
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080"]
    depends_on:
      mysql: 
        condition: service_healthy
      redis: 
        condition: service_healthy
 
networks:
  default:
    driver: bridge

.env

# 数据库名称
MYSQL_DATABASE_NAME=database
# 数据库密码
MYSQL_ROOT_PASSWORD=mysql_password
# redis密码
REDIS_PASSWORD=redis_password

nginx.conf

worker_processes 1;
 
events {
  worker_connections 1024;
}
 
http {
  include 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"';
 
  sendfile on;
  keepalive_timeout 65;
 
  server {
    listen 443 ssl;
    server_name domain.com;
 
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types application/atom+xml application/javascript application/json application/rss+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml;
 
    ssl_certificate /etc/nginx/ssl/dajiangdata.com.pem;
    ssl_certificate_key /etc/nginx/ssl/dajiangdata.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
 
    location / {
      root /usr/share/nginx/html/dist;
      try_files $uri $uri/ /index.html;
      index index.html index.htm;
    }
 
    location ^~/api/ {
      proxy_pass http://api:8080/;
      proxy_set_header Host $proxy_host;
      proxy_set_header X-Real-Ip $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
  }
 
  server {
    listen 80;
    server_name domain.com;
    rewrite ^ https://$http_host$request_uri;
  }
}