ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

InsForge 自托管部署完全指南:从 Docker Compose 到生产级安全加固

InsForge 自托管部署完全指南:从 Docker Compose 到生产级安全加固 InsForge 自托管部署完全指南从 Docker Compose 到生产级安全加固【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge本文围绕 InsForge 官方部署文档体系展开系统讲解如何将 InsForge 这套开源后端平台数据库、认证、存储、Serverless 函数、AI 网关等部署到你自己掌控的服务器上从四服务架构、部署前置要求、deploy/setup.sh一键拉取与密钥生成到反向代理、TLS、防火墙加固、更新回滚与自动化备份的完整生产链路。读完本文你将掌握在任何 Linux VPS 上从零搭建一个可对外服务的 InsForge 实例并具备维护与加固它的实战能力。自托管 ≠ 站点托管本文部署的是 InsForge 平台本身。如果你只是想把你用 InsForge 构建的应用发布上线应使用 Sites 托管而不是本文介绍的自托管方案。一、部署指南文档体系总览InsForge 仓库的 docs/deployment 目录集中存放了全部分平台部署指南覆盖「通用 VPS」「主流云厂商」「自托管 PaaS」三类场景分类指南适用场景通用任意 VPS部署与安全指南任何 Linux VPS 的完整部署走查Docker Compose、反向代理Nginx/Caddy、防火墙、SSH 加固、更新/回滚/自动备份云平台AWS EC2Amazon EC2 上使用 Docker Compose 部署含实例配置、域名与 SSL云平台Google Cloud Compute EngineGCP 虚拟机部署云平台Azure Virtual MachinesAzure VM 部署云平台Hetzner CloudHetzner VPS 部署含控制台防火墙配置云平台Containarium自托管 LXC MCP 控制平面多租户隔离支持 Agent 驱动部署自托管 PaaSCoolify在自有 Coolify 上以 Compose 资源部署仓库联动自动重建自托管 PaaSDokploy在自有 Dokploy 上以 Compose 应用部署支持 Auto Deploy官方同时声明云厂商走查类指南由社区维护可能滞后于最新版本始终以仓库中 deploy/docker-compose/ 目录为准——它是与发行版保持同步的权威部署形态。文档还列出了规划中的平台Digital OceanDroplet、Kubernetes生产级编排、Railway一键部署、Fly.io全球边缘部署目前均处于 Coming Soon 状态。二、架构概览四个核心服务部署文档明确了 InsForge 自托管架构由 4 个服务组成deploy/docker-compose/docker-compose.yml 中给出了完整定义服务职责内部端口PostgreSQL主数据库含加密扩展、定时任务、RLS 事件触发器5432PostgREST自动生成的 REST API 层容器内 3000映射宿主 5430InsForge BackendNode.js API 服务同时托管仪表盘前端7130Deno RuntimeServerless 函数运行时7133几个值得注意的实现细节从 compose 文件注释可确认PostgreSQL 镜像使用ghcr.io/insforge/postgres:v15.13.4通过command注入自定义配置postgresql.conf并把app.encryption_key作为自定义 GUC 传入供数据库端加密使用初始化脚本 deploy/docker-init/db/db-init.sql 会创建anon、authenticated、project_admin三个角色并注册一个 DDL 事件触发器——每当新建启用 RLS 的表时自动为其生成project_admin的默认策略。PostgREST使用postgrest/postgrest:v12.2.12数据库连接池PGRST_DB_POOL默认 50与后端POSTGREST_MAX_SOCKETS对齐该服务没有 healthcheck——amd64 镜像仅包含 24 个文件二进制 证书目录容器内没有任何 shell 可供探测强制加探测反而会永久显示 unhealthy。Deno Runtime基于denoland/deno:alpine-2.0.6以--no-lock运行 functions/server.ts因为functions/目录以只读方式挂载Deno 无法回写deno.lock函数代码运行在 Deno 自身的权限沙箱内。后端镜像Dockerfile通过 tini 作为 PID 1、su-exec从 root 降权到nodeUID 1000执行进程docker/entrypoint.sh负责在加入 Docker socket 组后完成降权——这是 Docker Compose 部署形态下默认非 root 运行的基础。三、通用部署要求无论选择哪个平台所有部署方式都共享以下前置条件来自部署文档的 General Requirements 章节支持Docker 与 Docker Compose容器化部署的基础最低 2 GB 内存推荐 4 GB20 GB 存储推荐 30 GBPostgreSQL 15 兼容可访问互联网用于外部服务调用其中 4 个服务共享一台 2 vCPU / 2 GB RAM 起步的 VPS 即可运转对于多用户的生产负载建议从 4 GB 起步并用docker stats观察资源占用后按需垂直扩容。四、平台选择按需求对号入座部署文档的「Choosing a Platform」章节给出了清晰的选型建议需求推荐理由新手入门AWS EC2Railway 待发布文档完善、使用广泛生产环境AWS EC2Kubernetes 待发布可靠、可扩展、功能丰富预算敏感Hetzner CloudEU VPS 性价比突出全球分发AWS CloudFrontFly.io 待发布全局 CDN / 边缘部署以 Hetzner 指南为例社区推荐的机型为 CX232 vCPU / 4 GB RAM / 40 GB 磁盘起步、CX334 vCPU / 8 GB RAM / 80 GB 磁盘用于生产InsForge 发布多架构镜像但指南默认按 x86 的 CX 系列走查。五、快速上手在任意 Linux VPS 上部署以 Ubuntu 22.04/24.04Debian 12 亦可为例完整的部署链路如下。5.1 初始化服务器ssh rootyour-server-ip apt update apt upgrade -y # 创建非 root 部署用户 adduser deploy usermod -aG sudo deploy su - deploy # 设置时区并启用自动安全更新 sudo timedatectl set-timezone UTC sudo apt install unattended-upgrades -y sudo dpkg-reconfigure -plow unattended-upgrades5.2 安装 Docker 与 Compose 插件sudo apt install ca-certificates curl gnupg -y sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y sudo usermod -aG docker deploy newgrp docker注意加入docker组等于获得宿主机 root 级权限这只适用于专用部署用户不要给共享服务器上的普通账户赋权。5.3 一键拉取自托管文件并生成密钥InsForge 提供了一个幂等的安装脚本 deploy/setup.shcurl -fsSL https://raw.githubusercontent.com/InsForge/InsForge/main/deploy/setup.sh | sh -s ~/insforge该脚本做了什么从源码可确认**稀疏检出sparse checkout**只拉取运行栈所需的最小文件集包括.env.example、deploy/docker-compose/docker-compose.yml、deploy/docker-init/db/三个初始化 SQL/配置、functions/函数运行时、deploy/backup.sh备份脚本等总计约 34KB而非 47MB 的完整仓库也可通过INSFORGE_NO_GIT1走 HTTPS 直取模式。生成并写入~/insforge/.env权限 600JWT_SECRET32 字节 hex与ENCRYPTION_KEY32 字节 hex刻意生成两个独立值ROOT_ADMIN_PASSWORD12 字节POSTGRES_PASSWORD16 字节Postgres 只在首次初始化集群时读取ACCESS_API_KEYik_前缀与ACCESS_ANON_KEYanon_前缀——CLI 与 SDK 的认证密钥。把COMPOSE_FILE固定为deploy/docker-compose/docker-compose.yml。不启动任何服务等待你检查.env。脚本可安全重复执行已有.env时保留你的值只补充或修正COMPOSE_FILE。若不想直接 pipe 执行可先下载审阅再运行curl -fsSL https://raw.githubusercontent.com/InsForge/InsForge/main/deploy/setup.sh -o setup.sh less setup.sh sh setup.sh ~/insforge5.4 启动并验证cd ~/insforge docker compose up -d docker compose ps应看到 4 个容器处于running/healthy状态随后验证健康检查端点curl http://localhost:7130/api/health # {status:ok,version:1.x.x,service:Insforge OSS Backend,timestamp:...}六、生产环境变量配置详解编辑~/insforge/.env对照 .env.example 完成生产配置。6.1 必改的安全变量# 必须与默认值不同用终端生成 JWT_SECRETopenssl rand -base64 32 的输出 ENCRYPTION_KEYopenssl rand -base64 24 的输出 ROOT_ADMIN_USERNAMEadmin ROOT_ADMIN_PASSWORD强唯一密码 # 公网 URL必须与你的域名/IP 一致 API_BASE_URLhttps://insforge.yourdomain.com VITE_API_BASE_URLhttps://insforge.yourdomain.com关键陷阱JWT_SECRET与ENCRYPTION_KEY必须是不同值。ENCRYPTION_KEY未设置时后端会回退到JWT_SECRET但事后轮换JWT_SECRET将导致所有已存储的密钥API Key、OAuth Token 等永久无法解密。setup.sh已按此原则生成两个独立值不要改动它们。6.2 数据库与端口变量POSTGRES_USERpostgres POSTGRES_DBinsforge POSTGRES_PORT5432 POSTGREST_PORT5430 APP_PORT7130 AUTH_PORT7131 DENO_PORT7133 COMPOSE_PROJECT_NAMEinsforgePOSTGRES_PASSWORD已由setup.sh生成Postgres 只在初始化时读取启动后再改无效。COMPOSE_PROJECT_NAME会作为所有容器、卷、网络的前缀。同一宿主机上的第二个实例必须换一个项目名和一组端口否则docker compose up会接管并重建第一个实例的容器。6.3 可选集成变量# OAuth 提供方启用社交登录时填写 GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET MICROSOFT_CLIENT_ID / MICROSOFT_CLIENT_SECRET DISCORD_CLIENT_ID / DISCORD_CLIENT_SECRET LINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRET X_CLIENT_ID / X_CLIENT_SECRET APPLE_CLIENT_ID / APPLE_CLIENT_SECRET # AI / LLMOpenRouter 兼容凭据首次启动写入加密密钥库 OPENROUTER_API_KEY MAX_COMPLETION_TOKENS16384 # S3 兼容存储留空则使用本地文件系统 S3_BUCKET / S3_REGION / S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY S3_ENDPOINT_URL # MinIO/RustFS/Wasabi/R2/COS/OSS 等自定义端点AWS S3 留空 S3_FORCE_PATH_STYLEtrue # 路径风格寻址MinIO 必需 S3_USE_PRESIGNED_URLS # false 时对象字节流经后端代理端点对浏览器不可达时必需 S3_MAX_OBJECT_SIZE_BYTES # 单次 S3 网关上传上限默认 53687091205GB # Deno 函数 WORKER_TIMEOUT_MS60000对存储方向仓库还提供了自带对象存储 overlay将COMPOSE_FILE追加:docker-compose.minio.yml或:docker-compose.rustfs.yml即可在 Docker 网络中旁挂 MinIO/RustFS代理模式已预配置但务必在生产前修改其默认凭据MINIO_ROOT_USER/MINIO_ROOT_PASSWORD或RUSTFS_ACCESS_KEY/RUSTFS_SECRET_KEY。更多细节见 自托管存储指南。修改环境变量后需重启生效cd ~/insforge docker compose down docker compose up -d七、反向代理与 HTTPS/TLS自托管形态下 7130 端口直接暴露并不理想生产环境应在前面放置反向代理提供 TLS 终止、HTTP/2 与无端口号的干净 URL。Option ANginx Certbot推荐创建/etc/nginx/sites-available/insforgeserver { listen 80; listen [::]:80; server_name insforge.yourdomain.com; add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header X-XSS-Protection 1; modeblock always; add_header Referrer-Policy strict-origin-when-cross-origin always; client_max_body_size 50M; # 与 .env 的 MAX_FILE_SIZE 匹配默认 50MB location / { proxy_pass http://127.0.0.1:7130; proxy_http_version 1.1; # WebSocket 支持Realtime 功能必需 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; 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; proxy_cache_bypass $http_upgrade; # 长请求超时如 AI 补全 proxy_read_timeout 120s; proxy_send_timeout 120s; } }启用站点并签发证书sudo ln -s /etc/nginx/sites-available/insforge /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d insforge.yourdomain.com # 验证自动续期证书 90 天过期 sudo certbot renew --dry-run sudo systemctl status certbot.timerOption BCaddy自动 HTTPSCaddy 配置更简单自动申请并续期 Lets Encrypt 证书insforge.yourdomain.com { reverse_proxy localhost:7130 header { X-Frame-Options SAMEORIGIN X-Content-Type-Options nosniff X-XSS-Protection 1; modeblock Referrer-Policy strict-origin-when-cross-origin } request_body { max_size 50MB } }拿到证书后把.env中的API_BASE_URL/VITE_API_BASE_URL更新为 HTTPS 地址并重启服务。此外安全指南建议生产环境收紧 CORS后端默认回显请求的Origin头并对函数代理响应设置Access-Control-Allow-Origin: *便于本地开发但过于宽松生产应限制为实际服务的域名。八、安全加固清单8.1 端口管理端口服务是否对外开放22SSH开放建议限制来源 IP80 / 443HTTP / HTTPS开放走反向代理5432 / 5430 / 7130 / 7131 / 7133PostgreSQL / PostgREST / InsForge / Deno绝不对外开放关键警告Docker 直接操作 iptables会绕过 UFW。默认 compose 若把端口绑定到0.0.0.0等于把 PostgreSQL含默认凭据直接暴露到公网。必须给所有发布端口加上127.0.0.1:前缀自托管镜像 compose 已默认如此如127.0.0.1:${POSTGRES_PORT:-5432}:5432。在自托管部署文件中5430、5433 等内部端口本就只绑定回环地址。8.2 UFW 防火墙sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH # 务必先放行 SSH 再 enable否则会被锁在门外 sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable8.3 SSH 加固与 Docker 安全用ssh-keygen -t ed25519生成密钥、ssh-copy-id分发然后在sshd_config中设置PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes、MaxAuthTries 3。安装 fail2ban 并对sshdjail 设置maxretry 5、bantime 3600。给 compose 服务加security_opt: [no-new-privileges:true]生产版 docker-compose.prod.yml 已内置可选加deploy.resources.limits限制内存/CPU。.env保持权限 600使用openssl rand -base64 32生成独立密钥绝不提交到版本控制、绝不复用默认口令。九、更新、回滚与备份9.1 更新前备份自托管安装自带 deploy/backup.sh一条命令同时完成数据库逻辑备份pg_dump与.env副本落盘到~/insforge/backups/cd ~/insforge ./deploy/backup.sh # 默认保留 14 天可 RETENTION_DAYS30 覆盖该脚本内部做了空文件校验pg_dump产出空文件即中止并报错、umask 077、失败 trap 清理等防护。9.2 更新流程自托管栈会从本机 checkout 读取 Postgres 配置与 Deno 函数源码所以更新不止是拉镜像cd ~/insforge git fetch origin main git diff HEAD origin/main -- deploy functions .env.example # 先审阅差异 git merge --ff-only origin/main sh deploy/setup.sh . # 拾取本次发行版新增的文件保留你的 .env docker compose pull docker compose down docker compose up -d docker compose logs -f --tail50 curl http://localhost:7130/api/health.env.example中的新增变量需要手工复制进你的.env。9.3 回滚在.env旁写pin.yml钉住旧版本镜像并追加到COMPOSE_FILEservices: insforge: image: ghcr.io/insforge/insforge-oss:v2.2.9COMPOSE_FILEdeploy/docker-compose/docker-compose.yml:pin.yml随后docker compose up -d即可回退确认正常后移除:pin.yml。若更新引入了数据库迁移问题可用备份的 SQL 通过psql恢复先只启动postgres服务并等待 healthy。9.4 定时自动备份crontab -e # 每天 3 点备份 0 3 * * * /home/deploy/insforge/deploy/backup.sh /home/deploy/insforge/backups/cron.log 21灾备建议用aws s3 sync或rsync将backups/同步到外部位置Hetzner 等云厂商的磁盘快照备份是逻辑备份的补充而非替代。十、监控与故障排查常用诊断命令docker compose ps # 服务状态 docker compose logs -f insforge # 跟踪指定服务日志 docker stats --no-stream # 资源占用 df -h free -h # 磁盘与内存健康检查端点https://your-domain/api/health可接入外部监控如每 5 分钟 curl 探测报警。常见问题与对策启用 UFW 后无法连接用 VPS 厂商的 Web 控制台带外登录重新ufw allow OpenSSH ufw enable。Docker 绕过 UFW所有发布端口绑定127.0.0.1。服务起不来先看docker compose logs postgres|insforge检查磁盘/内存必要时systemctl restart docker。端口冲突sudo ss -tlnp | grep :7130定位占用进程再改.env中的APP_PORT。数据库连接问题docker compose ps postgres确认健康docker compose exec postgres psql -U postgres -d insforge直连验证。十一、仓库中的权威部署资产最终以仓库内实际文件为准自托管镜像栈deploy/docker-compose/docker-compose.yml生产构建栈docker-compose.prod.yml含no-new-privileges与资源限制示例安装/密钥生成脚本deploy/setup.sh备份脚本deploy/backup.sh数据库初始化deploy/docker-init/db/db-init.sql、deploy/docker-init/db/jwt.sql、deploy/docker-init/db/postgresql.conf镜像构建Dockerfile、docker/entrypoint.sh函数运行时functions/server.ts、functions/worker-template.js全量环境变量说明.env.example十二、贡献部署指南如果你在未收录的平台上有成功的部署经验欢迎参照 AWS EC2 指南的模板补充新平台的部署文档并提交 Pull Request仓库参与规范见 CONTRIBUTING.md。小结InsForge 的自托管部署是一条「四服务 Docker Compose 栈 一键密钥生成 反向代理 安全加固 更新回滚备份」的完整链路。以 部署与安全指南 为总纲、Hetzner 等分平台指南为实例、deploy/ 目录为权威实现任何具备基础 Linux 与 Docker 经验的开发者都能在一台 2 GB 内存的 VPS 上运行起属于自己的 InsForge 后端平台并将其安全地维护在生产状态。【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表