初始化
Build docker and publish / prepare (push) Has been cancelled
Build docker and publish / build (map[dockerfile:deploy/Dockerfile.admin image_name:ppanel-admin name:admin]) (push) Has been cancelled
Build docker and publish / build (map[dockerfile:deploy/Dockerfile.api image_name:ppanel-api name:api]) (push) Has been cancelled
Build docker and publish / build (map[dockerfile:deploy/Dockerfile.node image_name:ppanel-node name:node]) (push) Has been cancelled
Build docker and publish / build (map[dockerfile:deploy/Dockerfile.queue image_name:ppanel-queue name:queue]) (push) Has been cancelled
Build docker and publish / build (map[dockerfile:deploy/Dockerfile.scheduler image_name:ppanel-scheduler name:scheduler]) (push) Has been cancelled
Build docker and publish / deploy (push) Has been cancelled
Build docker and publish / notify (push) Has been cancelled

This commit is contained in:
2026-02-26 04:12:43 -08:00
commit 9dacd85a89
210 changed files with 8261 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /ppanel-admin ./apps/admin/admin.go
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /ppanel-admin .
COPY apps/admin/etc /app/etc
EXPOSE 8081
CMD ["./ppanel-admin", "-f", "etc/admin.yaml"]
+19
View File
@@ -0,0 +1,19 @@
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /ppanel-api ./apps/api/api.go
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /ppanel-api .
COPY apps/api/etc /app/etc
EXPOSE 8080
CMD ["./ppanel-api", "-f", "etc/api.yaml"]
+19
View File
@@ -0,0 +1,19 @@
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /ppanel-node ./apps/node/node.go
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /ppanel-node .
COPY apps/node/etc /app/etc
EXPOSE 8082
CMD ["./ppanel-node", "-f", "etc/node.yaml"]
+18
View File
@@ -0,0 +1,18 @@
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /ppanel-queue ./apps/queue/queue.go
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /ppanel-queue .
COPY apps/queue/etc /app/etc
CMD ["./ppanel-queue", "-f", "etc/queue.yaml"]
+18
View File
@@ -0,0 +1,18 @@
FROM golang:1.23-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -trimpath -o /ppanel-scheduler ./apps/scheduler/scheduler.go
FROM alpine:3.19
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /ppanel-scheduler .
COPY apps/scheduler/etc /app/etc
CMD ["./ppanel-scheduler", "-f", "etc/scheduler.yaml"]
+55
View File
@@ -0,0 +1,55 @@
version: '3.8'
services:
# Infrastructure
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: ppanel
volumes:
- mysql_data:/var/lib/mysql
- ../sql:/docker-entrypoint-initdb.d
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
# Observability
jaeger:
image: jaegertracing/all-in-one:1.57
ports:
- "16686:16686"
- "4317:4317"
- "4318:4318"
- "14268:14268"
environment:
COLLECTOR_OTLP_ENABLED: "true"
COLLECTOR_OTLP_HTTP_HOST_PORT: "0.0.0.0:4318"
COLLECTOR_OTLP_GRPC_HOST_PORT: "0.0.0.0:4317"
prometheus:
image: prom/prometheus:v2.51.0
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:10.4.0
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
depends_on:
- prometheus
- jaeger
volumes:
mysql_data:
redis_data:
+67
View File
@@ -0,0 +1,67 @@
# 云端部署用 docker-compose
# 镜像由 CI 预先构建并推送到镜像仓库
# 本地基础设施 (mysql/redis) 需提前独立部署
version: '3.8'
services:
ppanel-api:
image: ${PPANEL_REPO}/ppanel-api:${PPANEL_TAG:-latest}
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./etc/api:/app/etc
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
ppanel-admin:
image: ${PPANEL_REPO}/ppanel-admin:${PPANEL_TAG:-latest}
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- ./etc/admin:/app/etc
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
ppanel-node:
image: ${PPANEL_REPO}/ppanel-node:${PPANEL_TAG:-latest}
restart: unless-stopped
ports:
- "8082:8082"
volumes:
- ./etc/node:/app/etc
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
ppanel-queue:
image: ${PPANEL_REPO}/ppanel-queue:${PPANEL_TAG:-latest}
restart: unless-stopped
volumes:
- ./etc/queue:/app/etc
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
ppanel-scheduler:
image: ${PPANEL_REPO}/ppanel-scheduler:${PPANEL_TAG:-latest}
restart: unless-stopped
volumes:
- ./etc/scheduler:/app/etc
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
+119
View File
@@ -0,0 +1,119 @@
version: '3.8'
services:
ppanel-api:
build:
context: ..
dockerfile: deploy/Dockerfile.api
ports:
- "8080:8080"
- "6160:6160"
depends_on:
- mysql
- redis
- jaeger
volumes:
- ../apps/api/etc:/app/etc
ppanel-admin:
build:
context: ..
dockerfile: deploy/Dockerfile.admin
ports:
- "8081:8081"
- "6161:6161"
depends_on:
- mysql
- redis
- jaeger
volumes:
- ../apps/admin/etc:/app/etc
ppanel-node:
build:
context: ..
dockerfile: deploy/Dockerfile.node
ports:
- "8082:8082"
- "6162:6162"
depends_on:
- mysql
- redis
- jaeger
volumes:
- ../apps/node/etc:/app/etc
deploy:
replicas: 2
ppanel-queue:
build:
context: ..
dockerfile: deploy/Dockerfile.queue
depends_on:
- mysql
- redis
- jaeger
volumes:
- ../apps/queue/etc:/app/etc
ppanel-scheduler:
build:
context: ..
dockerfile: deploy/Dockerfile.scheduler
depends_on:
- mysql
- redis
- jaeger
volumes:
- ../apps/scheduler/etc:/app/etc
# Infrastructure
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: ppanel
volumes:
- mysql_data:/var/lib/mysql
- ../sql:/docker-entrypoint-initdb.d
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
# Observability
jaeger:
image: jaegertracing/all-in-one:1.57
ports:
- "16686:16686"
- "4317:4317"
- "4318:4318"
- "14268:14268"
environment:
COLLECTOR_OTLP_ENABLED: "true"
prometheus:
image: prom/prometheus:v2.51.0
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:10.4.0
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
depends_on:
- prometheus
- jaeger
volumes:
mysql_data:
redis_data:
+22
View File
@@ -0,0 +1,22 @@
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# 注意:在 Docker-compose (Mac) 中访问宿主机的服务,请使用 host.docker.internal
# 因为我们开发时,服务是直接跑在宿主机的 go run 上
- job_name: "zero-ppanel-api"
static_configs:
- targets: ["host.docker.internal:6160"]
- job_name: "zero-ppanel-admin"
static_configs:
- targets: ["host.docker.internal:6161"]
- job_name: "zero-ppanel-node"
static_configs:
- targets: ["host.docker.internal:6162"]
- job_name: "zero-ppanel-rpc-core"
static_configs:
- targets: ["host.docker.internal:6163"]