1. Portainer Stack
Portainer Stack 的使用场景
多服务协同部署:例如部署一个完整的 Web 应用,包含前端(Nginx)、后端(Node.js)、数据库(MySQL),通过 Compose 文件定义服务间的依赖关系,Stack 可一次性启动所有容器。
微服务架构管理:管理由多个微服务组成的系统,如电商平台中的用户服务、订单服务、支付服务等,通过 Stack 统一部署和监控。
开发测试环境搭建:快速复现开发环境,确保本地与服务器部署的一致性。
1.1 Docker Compose 文件
version: '3'
services:
# x-environment: &default_environment
# MYSQL_HOST: ${MYSQL_HOST}
# MYSQL_USERNAME: ${MYSQL_USERNAME}
# MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD}
# MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
# REDIS_HOST: ${REDIS_HOST}
# REDIS_PASSWORD: ${REDIS_PASSWORD}
# APP_HOST: ${APP_HOST}
mysql:
image: mysql:8.4.5
container_name: ics-mysql-prod
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: Asia/Shanghai
volumes:
- mysql-data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --lower_case_table_names=1
redis:
image: redis:7.4.0
container_name: ics-redis-prod
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
TZ: Asia/Shanghai
command: redis-server --requirepass "${REDIS_PASSWORD}" --bind 0.0.0.0
restart: unless-stopped
ics-java:
image: harbor.company.com/ics/ics-java:master
container_name: ics-java-prod
environment:
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_USERNAME: ${MYSQL_USERNAME}
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PASSWORD: ${REDIS_PASSWORD}
DGC_URL: ${DGC_URL}
API_KEY: ${API_KEY}
CAS_API: ${CAS_API}
TZ: Asia/Shanghai
depends_on:
- mysql
- redis
restart: unless-stopped
ics-h5:
image: harbor.company.com/ics/ics-h5:latest
container_name: ics-h5-prod
environment:
TZ: Asia/Shanghai
yudao_server: ics-java-prod
volumes:
- h5-nginx:/etc/nginx
restart: unless-stopped
ics-web:
image: harbor.company.com/ics/ics-web:master
container_name: ics-web-prod
volumes:
- nginx-config:/etc/nginx
environment:
VUE_APP_BASE_API : http://ics-java-prod:8080
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
restart: unless-stopped
volumes:
mysql-data:
nginx-config:
h5-nginx:
注:
mysql 需要配置时区,不然查出的数据不对
TZ: Asia/Shanghai
mysql 需要挂载目录,并定期同步,否则容器干掉后,表和数据都没了
volumes:
- mysql-data:/var/lib/mysql
1.2 变量配置
如mysql应用,可以直接指向同一个stack中的mysql容器,避免信息对外暴露
2. 代码中的配置
这里的${MYSQL_HOST}采用变量,指向同一个stack中的mysql容器