构建与部署

XYGo Admin 2025-02-20 140 次阅读

生产环境构建、Nginx 配置与 Docker 部署指南

构建与部署

前端构建

bash 复制代码
cd web

# 构建生产版本
pnpm build

构建产物输出到 web/dist/ 目录。构建配置:

  • Target: ES2015
  • 压缩:Terser(自动移除 console 和 debugger)
  • Gzip:vite-plugin-compression 自动生成 .gz 文件
  • Chunk 警告阈值:2000KB

后端构建

bash 复制代码
cd server

# 编译为可执行文件
go build -o xygoadmin main.go

# 或使用 GoFrame CLI
gf build

Nginx 配置

nginx 复制代码
server {
    listen 80;
    server_name your-domain.com;

    # 前端静态文件
    location / {
        root /var/www/xygoadmin/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 后台 API 代理
    location /admin/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 会员 API 代理
    location /member/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 前台公共 API
    location /site/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 系统接口
    location /system/ {
        proxy_pass http://127.0.0.1:8000;
    }

    # 验证码
    location /captcha/ {
        proxy_pass http://127.0.0.1:8000;
    }

    # 附件访问
    location /attachment/ {
        proxy_pass http://127.0.0.1:8000;
    }

    # WebSocket
    location /socket/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    # Gzip
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml;
    gzip_min_length 1024;
}

Docker 部署

Dockerfile(后端)

dockerfile 复制代码
FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY server/ .
RUN go build -o xygoadmin main.go

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/xygoadmin .
COPY --from=builder /app/manifest/config/ ./manifest/config/
EXPOSE 8000
CMD ["./xygoadmin"]

docker-compose.yml

yaml 复制代码
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
      - redis
    environment:
      - GF_GCFG_FILE=config.yaml

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: xygoadmin
      POSTGRES_PASSWORD: 123456
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  pgdata:

进程管理

生产环境建议使用 systemd 或 supervisor 管理后端进程:

ini 复制代码
# /etc/systemd/system/xygoadmin.service
[Unit]
Description=XYGo Admin Server
After=network.target

[Service]
Type=simple
User=www
WorkingDirectory=/var/www/xygoadmin/server
ExecStart=/var/www/xygoadmin/server/xygoadmin
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target