339 lines
9.0 KiB
YAML
339 lines
9.0 KiB
YAML
# PPanel 服务部署 (云端/无源码版)
|
|
# 使用方法:
|
|
# 1. 确保已将 docker-compose.cloud.yml, configs/, loki/, grafana/, prometheus/ 目录上传到服务器同一目录
|
|
# 2. 确保 configs/ 目录下有 ppanel.yaml 配置文件
|
|
# 3. 确保 logs/ 目录存在 (mkdir logs)
|
|
# 4. 运行: docker-compose -f docker-compose.cloud.yml up -d
|
|
|
|
services:
|
|
# ----------------------------------------------------
|
|
# 1. 业务后端 (PPanel Server)
|
|
# ----------------------------------------------------
|
|
ppanel-server:
|
|
image: registry.kxsw.us/ppanel/new-server:v1.0.2
|
|
container_name: ppanel-server
|
|
restart: always
|
|
volumes:
|
|
- ./configs:/app/etc
|
|
- ./logs:/app/logs
|
|
environment:
|
|
- TZ=Asia/Shanghai
|
|
# 链路追踪配置 (OTLP)
|
|
- OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4317
|
|
- OTEL_SERVICE_NAME=ppanel-server
|
|
- OTEL_TRACES_EXPORTER=otlp
|
|
- OTEL_METRICS_EXPORTER=none # 指标由 tempo 抓取,不使用 OTLP
|
|
network_mode: host
|
|
ulimits:
|
|
nproc: 65535
|
|
nofile:
|
|
soft: 65535
|
|
hard: 65535
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
- tempo
|
|
|
|
# ----------------------------------------------------
|
|
# 14. Tempo (链路追踪存储 - 替代/增强 Jaeger)
|
|
# ----------------------------------------------------
|
|
tempo:
|
|
image: grafana/tempo:latest
|
|
container_name: ppanel-tempo
|
|
restart: always
|
|
command: [ "-config.file=/etc/tempo.yaml" ]
|
|
volumes:
|
|
- ./tempo/tempo-config.yaml:/etc/tempo.yaml
|
|
- tempo_data:/var/tempo
|
|
network_mode: host
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 2. MySQL Database
|
|
# ----------------------------------------------------
|
|
mysql:
|
|
image: mysql:8.0
|
|
container_name: ppanel-mysql
|
|
restart: always
|
|
ports:
|
|
- "3306:3306" # 临时开放外部访问,用完记得关闭!
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: "jpcV41ppanel" # 请修改为强密码
|
|
MYSQL_DATABASE: "ppanel"
|
|
TZ: Asia/Shanghai
|
|
command:
|
|
- --default-authentication-plugin=mysql_native_password
|
|
- --innodb_buffer_pool_size=16G
|
|
- --innodb_buffer_pool_instances=16
|
|
- --innodb_log_file_size=2G
|
|
- --innodb_flush_log_at_trx_commit=2
|
|
- --innodb_io_capacity=5000
|
|
- --max_connections=5000
|
|
volumes:
|
|
- mysql_data:/var/lib/mysql
|
|
ulimits:
|
|
nproc: 65535
|
|
nofile:
|
|
soft: 65535
|
|
hard: 65535
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 3. Redis
|
|
# ----------------------------------------------------
|
|
redis:
|
|
image: redis:7.0
|
|
container_name: ppanel-redis
|
|
restart: always
|
|
ports:
|
|
- "6379:6379"
|
|
command:
|
|
- redis-server
|
|
- --tcp-backlog 65535
|
|
- --maxmemory-policy allkeys-lru
|
|
volumes:
|
|
- redis_data:/data
|
|
ulimits:
|
|
nproc: 65535
|
|
nofile:
|
|
soft: 65535
|
|
hard: 65535
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 4. Loki (日志存储)
|
|
# ----------------------------------------------------
|
|
loki:
|
|
image: grafana/loki:3.0.0
|
|
container_name: ppanel-loki
|
|
restart: always
|
|
volumes:
|
|
# 必须上传 loki 目录到服务器
|
|
- ./loki/loki-config.yaml:/etc/loki/local-config.yaml
|
|
- loki_data:/loki
|
|
command: -config.file=/etc/loki/local-config.yaml
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 5. Promtail (日志采集)
|
|
# ----------------------------------------------------
|
|
promtail:
|
|
image: grafana/promtail:3.0.0
|
|
container_name: ppanel-promtail
|
|
restart: always
|
|
volumes:
|
|
- ./loki/promtail-config.yaml:/etc/promtail/config.yaml
|
|
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
# 采集当前目录下的 logs 文件夹
|
|
- ./logs:/var/log/ppanel-server:ro
|
|
command: -config.file=/etc/promtail/config.yaml
|
|
networks:
|
|
- ppanel_net
|
|
depends_on:
|
|
- loki
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 6. Grafana (日志界面)
|
|
# ----------------------------------------------------
|
|
grafana:
|
|
image: grafana/grafana:latest
|
|
container_name: ppanel-grafana
|
|
restart: always
|
|
ports:
|
|
- "3333:3000"
|
|
environment:
|
|
- GF_SECURITY_ADMIN_PASSWORD=admin
|
|
- GF_USERS_ALLOW_SIGN_UP=false
|
|
- GF_FEATURE_TOGGLES_ENABLE=appObservability
|
|
volumes:
|
|
- grafana_data:/var/lib/grafana
|
|
- ./grafana/provisioning:/etc/grafana/provisioning
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
networks:
|
|
- ppanel_net
|
|
depends_on:
|
|
- loki
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 7. Prometheus (指标采集)
|
|
# ----------------------------------------------------
|
|
prometheus:
|
|
image: prom/prometheus:latest
|
|
container_name: ppanel-prometheus
|
|
restart: always
|
|
ports:
|
|
- "9090:9090" # 暴露端口便于调试
|
|
volumes:
|
|
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
- prometheus_data:/prometheus
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
command:
|
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
|
- '--storage.tsdb.path=/prometheus'
|
|
- '--web.enable-lifecycle'
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 8. Redis Exporter (Redis指标导出)
|
|
# ----------------------------------------------------
|
|
redis-exporter:
|
|
image: oliver006/redis_exporter:latest
|
|
container_name: ppanel-redis-exporter
|
|
restart: always
|
|
environment:
|
|
- REDIS_ADDR=redis://redis:6379
|
|
networks:
|
|
- ppanel_net
|
|
depends_on:
|
|
- redis
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 9. Nginx Exporter (监控宿主机 Nginx)
|
|
# ----------------------------------------------------
|
|
nginx-exporter:
|
|
image: nginx/nginx-prometheus-exporter:latest
|
|
container_name: ppanel-nginx-exporter
|
|
restart: always
|
|
# 使用 host.docker.internal 访问宿主机
|
|
command:
|
|
- -nginx.scrape-uri=http://host.docker.internal:8090/nginx_status
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 10. MySQL Exporter (MySQL指标导出)
|
|
# ----------------------------------------------------
|
|
mysql-exporter:
|
|
image: prom/mysqld-exporter:latest
|
|
container_name: ppanel-mysql-exporter
|
|
restart: always
|
|
command:
|
|
- --config.my-cnf=/etc/.my.cnf
|
|
volumes:
|
|
- ./mysql/.my.cnf:/etc/.my.cnf:ro
|
|
networks:
|
|
- ppanel_net
|
|
depends_on:
|
|
- mysql
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 12. Node Exporter (宿主机监控)
|
|
# ----------------------------------------------------
|
|
node-exporter:
|
|
image: prom/node-exporter:latest
|
|
container_name: ppanel-node-exporter
|
|
restart: always
|
|
volumes:
|
|
- /proc:/host/proc:ro
|
|
- /sys:/host/sys:ro
|
|
- /:/rootfs:ro
|
|
command:
|
|
- '--path.procfs=/host/proc'
|
|
- '--path.sysfs=/host/sys'
|
|
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ----------------------------------------------------
|
|
# 13. cAdvisor (容器监控)
|
|
# ----------------------------------------------------
|
|
cadvisor:
|
|
image: gcr.io/cadvisor/cadvisor:latest
|
|
container_name: ppanel-cadvisor
|
|
restart: always
|
|
volumes:
|
|
- /:/rootfs:ro
|
|
- /var/run:/var/run:ro
|
|
- /sys:/sys:ro
|
|
- /var/lib/docker/:/var/lib/docker:ro
|
|
- /dev/disk/:/dev/disk:ro
|
|
networks:
|
|
- ppanel_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
volumes:
|
|
mysql_data:
|
|
redis_data:
|
|
loki_data:
|
|
grafana_data:
|
|
prometheus_data:
|
|
tempo_data:
|
|
|
|
|
|
networks:
|
|
ppanel_net:
|
|
name: ppanel_net
|
|
driver: bridge
|