使用docker-compose进行项目部署
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
depends_on:
halo:
condition: service_healthy
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.email=${EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/acme.json"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=alidns"
- "--certificatesresolvers.myresolver.acme.dnschallenge.delaybeforecheck=0"
- "--log.level=ERROR"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/acme.json:/acme.json
environment:
- ALICLOUD_ACCESS_KEY=${ALICLOUD_ACCESS_KEY}
- ALICLOUD_SECRET_KEY=${ALICLOUD_SECRET_KEY}
deploy:
resources:
limits:
memory: 256M
networks:
- web
mysql:
image: mysql:8.1.0
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: halo
volumes:
- ./mysql/data:/var/lib/mysql
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
deploy:
resources:
limits:
memory: 512M
networks:
- web
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
interval: 10s
timeout: 5s
retries: 5
ports:
- "13000:3306"
halo:
image: registry.fit2cloud.com/halo/halo-pro:2.21.3
container_name: halo
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=${MYSQL_ROOT_PASSWORD}
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=https://${DOMAIN}/
volumes:
- ./halo_data:/root/.halo2
environment:
- JAVA_OPTS=-Xms256m -Xmx256m -XX:MaxMetaspaceSize=128m
labels:
traefik.enable: "true"
traefik.http.routers.halo.rule: Host(`${DOMAIN}`)
traefik.http.routers.halo.tls: "true"
traefik.http.routers.halo.tls.certresolver: myresolver
traefik.http.services.halo.loadbalancer.server.port: 8090
deploy:
resources:
limits:
memory: 768M
networks:
- web
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness" ]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
networks:
web:
name: web
driver: bridge