手动部署
适用于不支持 Docker 或需要深度定制的场景。
构建后端
cd server
# 下载依赖(国内环境建议设置 GOPROXY)
export GOPROXY=https://goproxy.cn,direct
go mod download
# 编译
go build -o iforge ./cmd/server
# 运行
export IFORGE_HOME=/var/lib/iforge
./iforge
构建前端
cd web
# 安装依赖
npm install
# 构建(NEXT_PUBLIC_API_BASE 留空则动态适配 hostname)
NEXT_PUBLIC_API_BASE= npm run build
# 启动(需要 Node.js 运行时)
npm start
Systemd 服务
创建 /etc/systemd/system/iforge-server.service:
[Unit]
Description=iForge Server
After=network.target
[Service]
Type=simple
User=iforge
WorkingDirectory=/opt/iforge
Environment=IFORGE_HOME=/var/lib/iforge
Environment=IFORGE_HTTP_PORT=8081
Environment=IFORGE_SSH_PORT=2022
Environment=IFORGE_CI_ENABLED=true
Environment=IFORGE_CI_ALLOW_SHELL_EXECUTOR=false
ExecStart=/opt/iforge/iforge
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable iforge-server
sudo systemctl start iforge-server
安全配置
生产环境必须保持 IFORGE_CI_ALLOW_SHELL_EXECUTOR=false,以防止在宿主机直接执行用户代码。
Nginx 反向代理
server {
listen 80;
server_name iforge.example.com;
# 前端
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 后端 API
location /api/ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Git HTTP
location ~ ^/.+\.git(/.*)?$ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
SSH 协议
SSH Git 协议(端口 2022)不经过 Nginx,需直接开放端口或通过 SSH 端口转发。