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_passwordnginx.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;
}
}