# PPanel 服务部署 (云端/无源码版) # 使用方法: # 1. 确保已将 docker-compose.cloud.yml, configs/, loki/ 目录上传到服务器同一目录 # 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/ario-server:${PPANEL_SERVER_TAG:-latest} container_name: ppanel-server restart: always ports: - "8080:8080" # 暴露端口供宿主机 Nginx 反代 volumes: # 挂载配置文件和日志 - ./configs:/app/etc - ./logs:/app/logs environment: - TZ=Asia/Shanghai networks: - ppanel_net logging: driver: "json-file" options: max-size: "10m" max-file: "3" depends_on: - mysql - redis # ---------------------------------------------------- # 2. MySQL Database # ---------------------------------------------------- mysql: image: mysql:8.0 container_name: ppanel-mysql restart: always ports: - "3306:3306" # 临时开放外部访问,用完记得关闭! environment: MYSQL_ROOT_PASSWORD: "ppanel_password" # 请修改为强密码 MYSQL_DATABASE: "ppanel_db" TZ: Asia/Shanghai command: --default-authentication-plugin=mysql_native_password volumes: - mysql_data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d # 初始化脚本 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 volumes: - redis_data:/data 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: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana_data:/var/lib/grafana # 自动加载数据源和仪表盘配置 - ./grafana/provisioning:/etc/grafana/provisioning # 挂载本地仪表盘 JSON 文件目录 - ./grafana/dashboards:/var/lib/grafana/dashboards 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 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:80/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" # ---------------------------------------------------- # 11. Jaeger (链路追踪) # ---------------------------------------------------- jaeger: image: jaegertracing/all-in-one:latest container_name: ppanel-jaeger restart: always ports: - "16686:16686" # Jaeger UI - "4317:4317" # OTLP gRPC - "4318:4318" # OTLP HTTP environment: - LOG_LEVEL=debug - COLLECTOR_OTLP_ENABLED=true networks: - ppanel_net 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: networks: ppanel_net: name: ppanel_net driver: bridge