insforge 1.2.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -1,613 +1,613 @@
1
- # Deploy InsForge to Google Cloud Compute Engine
2
-
3
- This guide will walk you through deploying InsForge on Google Cloud Compute Engine using Docker Compose.
4
-
5
- ## 📋 Prerequisites
6
-
7
- - Google Cloud Account with billing enabled
8
- - Basic knowledge of SSH and command-line operations
9
- - Domain name (optional, for custom domain setup)
10
-
11
- ## 🚀 Deployment Steps
12
-
13
- ### 1. Create and Configure Compute Engine Instance
14
-
15
- #### 1.1 Create Google Cloud Project
16
-
17
- 1. **Log into Google Cloud Console** at [console.cloud.google.com](https://console.cloud.google.com)
18
- 2. **Click "Select a project"** in the top navigation bar
19
- 3. **Click "New Project"**
20
- 4. **Enter project name** (e.g., `insforge-deployment`)
21
- 5. **Click "Create"**
22
- 6. **Wait for project creation to complete**
23
-
24
- #### 1.2 Enable Required APIs
25
-
26
- 1. In your project, navigate to **APIs & Services** → **Library**
27
- 2. Search for and enable these APIs:
28
- - **Compute Engine API**
29
- - **Cloud Storage API** (if using for backups)
30
- - **Cloud SQL Admin API** (if using Cloud SQL)
31
-
32
- #### 1.3 Create Compute Engine Instance
33
-
34
- 1. Navigate to **Compute Engine** → **VM instances**
35
- 2. Click **"Create Instance"**
36
- 3. Configure your instance:
37
- - **Name**: `insforge-server` (or your preferred name)
38
- - **Region**: Choose a region close to your users
39
- - **Zone**: Select an availability zone (e.g., us-central1-a)
40
- - **Machine configuration**:
41
- - **Series**: N2 or E2
42
- - **Machine type**: `e2-medium` or larger (minimum 2 vCPU, 4 GB RAM)
43
- - For production: `e2-standard-2` (2 vCPU, 8 GB RAM) recommended
44
- - For testing: `e2-small` (2 vCPU, 2 GB RAM) minimum
45
- - **Boot disk**:
46
- - **Operating system**: Ubuntu LTS (Ubuntu 22.04 LTS or newer)
47
- - **Boot disk type**: Balanced persistent disk
48
- - **Size**: 30 GB (minimum 20 GB recommended)
49
- - **Firewall**:
50
- - Allow HTTP traffic: **Checked**
51
- - Allow HTTPS traffic: **Checked**
52
-
53
- #### 1.4 Configure Firewall Rules
54
-
55
- 1. Navigate to **VPC network** → **Firewall**
56
- 2. Create or modify firewall rules to allow the following ports:
57
-
58
- | Name | Direction | Targets | Protocols/ports | Source filters |
59
- |------|-----------|---------|-----------------|----------------|
60
- | insforge-ssh | Ingress | insforge-server | tcp:22 | Your IP address |
61
- | insforge-http | Ingress | insforge-server | tcp:80 | 0.0.0.0/0 |
62
- | insforge-https | Ingress | insforge-server | tcp:443 | 0.0.0.0/0 |
63
- | insforge-backend | Ingress | insforge-server | tcp:7130 | 0.0.0.0/0 |
64
- | insforge-frontend | Ingress | insforge-server | tcp:7131 | 0.0.0.0/0 |
65
- | insforge-deno | Ingress | insforge-server | tcp:7133 | 0.0.0.0/0 |
66
- | insforge-postgrest | Ingress | insforge-server | tcp:5430 | 0.0.0.0/0 |
67
- | insforge-postgres | Ingress | insforge-server | tcp:5432 | 0.0.0.0/0 (only if needed externally) |
68
-
69
- > ⚠️ **Security Note**: For production, restrict PostgreSQL (5432) to specific IP addresses or remove external access entirely. Consider using a reverse proxy (nginx) and exposing only ports 80/443.
70
-
71
- ### 2. Connect to Your Compute Engine Instance
72
-
73
- 1. In the Google Cloud Console, go to **Compute Engine** → **VM instances**
74
- 2. Find your instance and click the **SSH** button in the same row, or:
75
-
76
- ```bash
77
- # Use gcloud CLI to SSH (if you have gcloud SDK installed locally)
78
- gcloud compute ssh insforge-server --zone=your-zone
79
- ```
80
-
81
- ### 3. Install Dependencies
82
-
83
- #### 3.1 Update System Packages
84
-
85
- ```bash
86
- sudo apt update && sudo apt upgrade -y
87
- ```
88
-
89
- #### 3.2 Install Docker
90
-
91
- ```bash
92
- # Add Docker's official GPG key
93
- sudo apt-get update
94
- sudo apt-get install ca-certificates curl gnupg
95
- sudo install -m 0755 -d /etc/apt/keyrings
96
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
97
- sudo chmod a+r /etc/apt/keyrings/docker.gpg
98
-
99
- # Add Docker repository
100
- echo \
101
- "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
102
- "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
103
- sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
104
-
105
- # Install Docker
106
- sudo apt-get update
107
- sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
108
- ```
109
-
110
- #### 3.3 Add Your User to Docker Group
111
-
112
- After installing Docker, you need to add your user to the `docker` group to run Docker commands without `sudo`:
113
-
114
- ```bash
115
- # Add your user to the docker group
116
- sudo usermod -aG docker $USER
117
-
118
- # Apply the group changes
119
- newgrp docker
120
- ```
121
-
122
- **Verify it works:**
123
-
124
- ```bash
125
- # This should now work without sudo
126
- docker ps
127
- ```
128
-
129
- > 💡 **Note**: If `docker ps` doesn't work immediately, log out and log back in via SSH, then try again.
130
-
131
- > ⚠️ **Security Note**: Adding a user to the `docker` group grants them root-equivalent privileges on the system. This is acceptable for single-user environments like your Compute Engine instance, but be cautious on shared systems.
132
-
133
- #### 3.4 Install Git
134
-
135
- ```bash
136
- sudo apt install git -y
137
- ```
138
-
139
- ### 4. Deploy InsForge
140
-
141
- #### 4.1 Clone Repository
142
-
143
- ```bash
144
- cd ~
145
- git clone https://github.com/insforge/insforge.git
146
- cd insforge
147
- ```
148
-
149
- #### 4.2 Create Environment Configuration
150
-
151
- Create your `.env` file with production settings:
152
-
153
- ```bash
154
- nano .env
155
- ```
156
-
157
- Add the following configuration (customize the values):
158
-
159
- ```env
160
- # ============================================
161
- # Server Configuration
162
- # ============================================
163
- PORT=7130
164
-
165
- # ============================================
166
- # Database Configuration
167
- # ============================================
168
- POSTGRES_USER=postgres
169
- POSTGRES_PASSWORD=your-secure-postgres-password
170
- POSTGRES_DB=insforge
171
-
172
- # ============================================
173
- # Security & Authentication
174
- # ============================================
175
- # IMPORTANT: Generate a strong random secret for production
176
- JWT_SECRET=your-secret-key-here-must-be-32-char-or-above
177
- ENCRYPTION_KEY=your-32-char-encryption-key-here
178
-
179
- # Admin Account (used for initial setup)
180
- ADMIN_EMAIL=admin@example.com
181
- ADMIN_PASSWORD=change-this-password
182
-
183
- # ============================================
184
- # API Configuration
185
- # ============================================
186
- # Replace with your Compute Engine external IP or domain
187
- API_BASE_URL=http://your-external-ip:7130
188
- VITE_API_BASE_URL=http://your-external-ip:7130
189
-
190
- # ============================================
191
- # OAuth Providers (Optional)
192
- # ============================================
193
- # Google OAuth
194
- GOOGLE_CLIENT_ID=
195
- GOOGLE_CLIENT_SECRET=
196
-
197
- # GitHub OAuth
198
- GITHUB_CLIENT_ID=
199
- GITHUB_CLIENT_SECRET=
200
-
201
- # ============================================
202
- # AWS Storage Configuration (Optional)
203
- # ============================================
204
- # For S3 file storage
205
- AWS_S3_BUCKET=
206
- AWS_REGION=
207
- AWS_ACCESS_KEY_ID=
208
- AWS_SECRET_ACCESS_KEY=
209
-
210
- # ============================================
211
- # AI/LLM Configuration (Optional)
212
- # ============================================
213
- OPENROUTER_API_KEY=
214
-
215
- # ============================================
216
- # Multi-tenant Cloud Configuration (Optional)
217
- # ============================================
218
- DEPLOYMENT_ID=
219
- PROJECT_ID=
220
- APP_KEY=
221
- ACCESS_API_KEY=
222
-
223
- # ============================================
224
- # Advanced Configuration
225
- # ============================================
226
- DENO_ENV=production
227
- WORKER_TIMEOUT_MS=30000
228
- ```
229
-
230
- **Generate Secure Secrets:**
231
-
232
- ```bash
233
- # Generate JWT_SECRET (32+ characters)
234
- openssl rand -base64 32
235
-
236
- # Generate ENCRYPTION_KEY (must be exactly 32 characters)
237
- openssl rand -base64 24
238
- ```
239
-
240
- > 💡 **Important**: Save these secrets securely. You'll need them if you ever migrate or restore your instance.
241
-
242
- #### 4.3 Start InsForge Services
243
-
244
- ```bash
245
- # Pull Docker images and start services
246
- docker compose up -d
247
-
248
- # View logs to ensure everything started correctly
249
- docker compose logs -f
250
- ```
251
-
252
- Press `Ctrl+C` to exit log view.
253
-
254
- #### 4.4 Verify Services
255
-
256
- ```bash
257
- # Check running containers
258
- docker compose ps
259
-
260
- # You should see 5 running services:
261
- # - insforge-postgres
262
- # - insforge-postgrest
263
- # - insforge
264
- # - insforge-deno
265
- # - insforge-vector
266
- ```
267
-
268
- ### 5. Access Your InsForge Instance
269
-
270
- #### 5.1 Test Backend API
271
-
272
- ```bash
273
- curl http://your-external-ip:7130/api/health
274
- ```
275
-
276
- Expected response:
277
- ```json
278
- {
279
- "status": "ok",
280
- "version": "1.0.0",
281
- "service": "Insforge OSS Backend",
282
- "timestamp": "2025-10-17T..."
283
- }
284
- ```
285
-
286
- #### 5.2 Access Dashboard
287
-
288
- Open your browser and navigate to:
289
- ```text
290
- http://your-external-ip:7131
291
- ```
292
-
293
- #### 5.3 ⚠️ Important: Custom Admin Credentials Configuration
294
-
295
- > **🚧 Active Development Notice**: InsForge is currently in active development and testing. The credential management system is being developed. The following is a temporary workaround that will be replaced with a secure implementation in future releases.
296
-
297
- **If you customize admin credentials** in your `.env` file (which is recommended), you must **also update the frontend login page** to match. This is a temporary requirement during our development phase.
298
-
299
- **Step 1: Update `.env` file**
300
-
301
- ```env
302
- # In your .env file
303
- ADMIN_EMAIL=your-custom-admin@example.com
304
- ADMIN_PASSWORD=your-secure-password-here
305
-
306
- ```
307
-
308
- After updating your `.env` file, manually edit the login page:
309
-
310
- ```bash
311
- nano ~/insforge/frontend/src/features/login/page/LoginPage.tsx
312
- ```
313
-
314
- Find this section (around line 38-41):
315
- ```typescript
316
- defaultValues: {
317
- email: 'admin@example.com',
318
- password: 'change-this-password',
319
- },
320
- ```
321
-
322
- Update the default values to match your `.env` file:
323
- ```typescript
324
- defaultValues: {
325
- email: 'your-custom-admin@example.com', // Update to match your ADMIN_EMAIL
326
- password: 'your-secure-password-here', // Update to match your ADMIN_PASSWORD
327
- },
328
- ```
329
-
330
- ### 6. Configure Domain (Optional but Recommended)
331
-
332
- #### 6.1 Reserve a Static External IP
333
-
334
- 1. In Google Cloud Console, go to **VPC network** → **External IP addresses**
335
- 2. Click **Reserve Static Address**
336
- 3. **Name**: `insforge-ip`
337
- 4. **Type**: Regional or Global (Regional for VM instances)
338
- 5. **Region**: Same as your VM instance
339
- 6. **Click Reserve**
340
-
341
- #### 6.2 Update DNS Records
342
-
343
- Point your domain's DNS records to the reserved static IP:
344
- ```text
345
- api.yourdomain.com → your-static-external-ip
346
- app.yourdomain.com → your-static-external-ip
347
- ```
348
-
349
- #### 6.3 Install Nginx Reverse Proxy
350
-
351
- ```bash
352
- sudo apt install nginx -y
353
- ```
354
-
355
- Create Nginx configuration:
356
-
357
- ```bash
358
- sudo nano /etc/nginx/sites-available/insforge
359
- ```
360
-
361
- Add the following configuration:
362
-
363
- ```nginx
364
- # Backend API
365
- server {
366
- listen 80;
367
- server_name api.yourdomain.com;
368
-
369
- location / {
370
- proxy_pass http://localhost:7130;
371
- proxy_http_version 1.1;
372
- proxy_set_header Upgrade $http_upgrade;
373
- proxy_set_header Connection 'upgrade';
374
- proxy_set_header Host $host;
375
- proxy_set_header X-Real-IP $remote_addr;
376
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
377
- proxy_set_header X-Forwarded-Proto $scheme;
378
- proxy_cache_bypass $http_upgrade;
379
- }
380
- }
381
-
382
- # Frontend Dashboard
383
- server {
384
- listen 80;
385
- server_name app.yourdomain.com;
386
-
387
- location / {
388
- proxy_pass http://localhost:7131;
389
- proxy_http_version 1.1;
390
- proxy_set_header Upgrade $http_upgrade;
391
- proxy_set_header Connection 'upgrade';
392
- proxy_set_header Host $host;
393
- proxy_set_header X-Real-IP $remote_addr;
394
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
395
- proxy_set_header X-Forwarded-Proto $scheme;
396
- proxy_cache_bypass $http_upgrade;
397
- }
398
- }
399
- ```
400
-
401
- Enable the configuration:
402
-
403
- ```bash
404
- sudo ln -s /etc/nginx/sites-available/insforge /etc/nginx/sites-enabled/
405
- sudo nginx -t
406
- sudo systemctl reload nginx
407
- ```
408
-
409
- #### 6.4 Install SSL Certificate (Recommended)
410
-
411
- ```bash
412
- # Install Certbot
413
- sudo apt install certbot python3-certbot-nginx -y
414
-
415
- # Obtain SSL certificates
416
- sudo certbot --nginx -d api.yourdomain.com -d app.yourdomain.com
417
-
418
- # Follow the prompts to complete setup
419
- ```
420
-
421
- Update your `.env` file with HTTPS URLs:
422
-
423
- ```bash
424
- cd ~/insforge
425
- nano .env
426
- ```
427
-
428
- Change:
429
- ```env
430
- API_BASE_URL=https://api.yourdomain.com
431
- VITE_API_BASE_URL=https://api.yourdomain.com
432
- ```
433
-
434
- Restart services:
435
-
436
- ```bash
437
- docker compose down
438
- docker compose up -d
439
- ```
440
-
441
- ## 🔧 Management & Maintenance
442
-
443
- ### View Logs
444
-
445
- ```bash
446
- # All services
447
- docker compose logs -f
448
-
449
- # Specific service
450
- docker compose logs -f insforge
451
- docker compose logs -f postgres
452
- docker compose logs -f deno
453
- ```
454
-
455
- ### Stop Services
456
-
457
- ```bash
458
- docker compose down
459
- ```
460
-
461
- ### Restart Services
462
-
463
- ```bash
464
- docker compose restart
465
- ```
466
-
467
- ### Update InsForge
468
-
469
- ```bash
470
- cd ~/insforge
471
- git pull origin main
472
- docker compose down
473
- docker compose up -d --build
474
- ```
475
-
476
- ### Backup Database
477
-
478
- ```bash
479
- # Create backup
480
- docker exec insforge-postgres pg_dump -U postgres insforge > backup_$(date +%Y%m%d_%H%M%S).sql
481
-
482
- # Store backup in Google Cloud Storage (optional)
483
- # First, install Google Cloud CLI and authenticate
484
- # Then:
485
- gsutil cp backup_$(date +%Y%m%d_%H%M%S).sql gs://your-backup-bucket/
486
- ```
487
-
488
- ### Monitor Resources
489
-
490
- ```bash
491
- # Check disk usage
492
- df -h
493
-
494
- # Check memory usage
495
- free -h
496
-
497
- # Check Docker stats
498
- docker stats
499
- ```
500
-
501
- ## 🐛 Troubleshooting
502
-
503
- ### Services Won't Start
504
-
505
- ```bash
506
- # Check logs for errors
507
- docker compose logs
508
-
509
- # Check disk space
510
- df -h
511
-
512
- # Check memory
513
- free -h
514
-
515
- # Restart Docker daemon
516
- sudo systemctl restart docker
517
- docker compose up -d
518
- ```
519
-
520
- ### Cannot Connect to Database
521
-
522
- ```bash
523
- # Check if PostgreSQL is running
524
- docker compose ps postgres
525
-
526
- # Check PostgreSQL logs
527
- docker compose logs postgres
528
-
529
- # Verify credentials in .env file
530
- cat .env | grep POSTGRES
531
- ```
532
-
533
- ### Port Already in Use
534
-
535
- ```bash
536
- # Check what's using the port
537
- sudo netstat -tulpn | grep :7130
538
-
539
- # Kill the process or change port in docker-compose.yml
540
- ```
541
-
542
- ### Out of Memory
543
-
544
- Consider upgrading to a larger instance type:
545
- ```text
546
- - Current: e2-small (2 vCPU, 2 GB RAM)
547
- - Upgrade to: e2-standard-2 (2 vCPU, 8 GB RAM)
548
- ```
549
-
550
- ### SSL Certificate Issues
551
-
552
- ```bash
553
- # Renew certificates
554
- sudo certbot renew
555
-
556
- # Test renewal
557
- sudo certbot renew --dry-run
558
- ```
559
-
560
- ## 📊 Performance Optimization
561
-
562
- ### For Production Workloads
563
-
564
- 1. **Upgrade Instance Type**: Use `e2-standard-2` or `e2-standard-4`
565
- 2. **Use Cloud SQL**: Migrate from containerized PostgreSQL to Google Cloud SQL for better reliability
566
- 3. **Enable Cloud Monitoring**: Monitor metrics and set up alerts
567
- 4. **Configure Backups**: Set up automated daily backups
568
- 5. **Use Cloud Storage**: Configure Google Cloud Storage for file uploads instead of local storage
569
-
570
- ### Database Optimization
571
-
572
- ```conf
573
- # Increase PostgreSQL shared_buffers (edit postgresql.conf in docker-init/db/)
574
- # Recommended: 25% of available RAM
575
- shared_buffers = 1GB
576
- effective_cache_size = 3GB
577
- ```
578
-
579
- ## 🔒 Security Best Practices
580
-
581
- 1. **Change Default Passwords**: Update admin and database passwords
582
- 2. **Enable Firewall**: Use Google Cloud Firewall rules effectively
583
- 3. **Regular Updates**: Keep system and Docker images updated
584
- 4. **SSL/TLS**: Always use HTTPS in production
585
- 5. **Backup Regularly**: Automate database backups
586
- 6. **Monitor Logs**: Set up log monitoring and alerts
587
- 7. **Limit SSH Access**: Restrict SSH to specific IP addresses
588
- 8. **Use Service Accounts**: Instead of API keys where possible
589
-
590
- ## 🆘 Support & Resources
591
-
592
- - **Documentation**: [https://docs.insforge.dev](https://docs.insforge.dev)
593
- - **GitHub Issues**: [https://github.com/insforge/insforge/issues](https://github.com/insforge/insforge/issues)
594
- - **Discord Community**: [https://discord.com/invite/MPxwj5xVvW](https://discord.com/invite/MPxwj5xVvW)
595
-
596
- ## 📝 Cost Estimation
597
-
598
- **Monthly Google Cloud Costs (approximate):**
599
-
600
- | Component | Type | Monthly Cost |
601
- |-----------|------|--------------|
602
- | Compute Engine | e2-medium (2 vCPU, 4 GB RAM) | ~$29 |
603
- | Persistent Disk (30 GB) | Standard | ~$3 |
604
- | Network Egress | First 1GB free | Variable |
605
- | **Total** | | **~$32/month** |
606
-
607
- > 💡 **Cost Optimization**: Use sustained use discounts for 24/7 running instances to save up to 30%. Consider preemptible instances for development/testing environments.
608
-
609
- ---
610
-
611
- **Congratulations! 🎉** Your InsForge instance is now running on Google Cloud Compute Engine. You can start building applications by connecting AI agents to your backend platform.
612
-
613
- For other production deployment strategies, check out our [deployment guides](./README.md).
1
+ # Deploy InsForge to Google Cloud Compute Engine
2
+
3
+ This guide will walk you through deploying InsForge on Google Cloud Compute Engine using Docker Compose.
4
+
5
+ ## 📋 Prerequisites
6
+
7
+ - Google Cloud Account with billing enabled
8
+ - Basic knowledge of SSH and command-line operations
9
+ - Domain name (optional, for custom domain setup)
10
+
11
+ ## 🚀 Deployment Steps
12
+
13
+ ### 1. Create and Configure Compute Engine Instance
14
+
15
+ #### 1.1 Create Google Cloud Project
16
+
17
+ 1. **Log into Google Cloud Console** at [console.cloud.google.com](https://console.cloud.google.com)
18
+ 2. **Click "Select a project"** in the top navigation bar
19
+ 3. **Click "New Project"**
20
+ 4. **Enter project name** (e.g., `insforge-deployment`)
21
+ 5. **Click "Create"**
22
+ 6. **Wait for project creation to complete**
23
+
24
+ #### 1.2 Enable Required APIs
25
+
26
+ 1. In your project, navigate to **APIs & Services** → **Library**
27
+ 2. Search for and enable these APIs:
28
+ - **Compute Engine API**
29
+ - **Cloud Storage API** (if using for backups)
30
+ - **Cloud SQL Admin API** (if using Cloud SQL)
31
+
32
+ #### 1.3 Create Compute Engine Instance
33
+
34
+ 1. Navigate to **Compute Engine** → **VM instances**
35
+ 2. Click **"Create Instance"**
36
+ 3. Configure your instance:
37
+ - **Name**: `insforge-server` (or your preferred name)
38
+ - **Region**: Choose a region close to your users
39
+ - **Zone**: Select an availability zone (e.g., us-central1-a)
40
+ - **Machine configuration**:
41
+ - **Series**: N2 or E2
42
+ - **Machine type**: `e2-medium` or larger (minimum 2 vCPU, 4 GB RAM)
43
+ - For production: `e2-standard-2` (2 vCPU, 8 GB RAM) recommended
44
+ - For testing: `e2-small` (2 vCPU, 2 GB RAM) minimum
45
+ - **Boot disk**:
46
+ - **Operating system**: Ubuntu LTS (Ubuntu 22.04 LTS or newer)
47
+ - **Boot disk type**: Balanced persistent disk
48
+ - **Size**: 30 GB (minimum 20 GB recommended)
49
+ - **Firewall**:
50
+ - Allow HTTP traffic: **Checked**
51
+ - Allow HTTPS traffic: **Checked**
52
+
53
+ #### 1.4 Configure Firewall Rules
54
+
55
+ 1. Navigate to **VPC network** → **Firewall**
56
+ 2. Create or modify firewall rules to allow the following ports:
57
+
58
+ | Name | Direction | Targets | Protocols/ports | Source filters |
59
+ |------|-----------|---------|-----------------|----------------|
60
+ | insforge-ssh | Ingress | insforge-server | tcp:22 | Your IP address |
61
+ | insforge-http | Ingress | insforge-server | tcp:80 | 0.0.0.0/0 |
62
+ | insforge-https | Ingress | insforge-server | tcp:443 | 0.0.0.0/0 |
63
+ | insforge-backend | Ingress | insforge-server | tcp:7130 | 0.0.0.0/0 |
64
+ | insforge-frontend | Ingress | insforge-server | tcp:7131 | 0.0.0.0/0 |
65
+ | insforge-deno | Ingress | insforge-server | tcp:7133 | 0.0.0.0/0 |
66
+ | insforge-postgrest | Ingress | insforge-server | tcp:5430 | 0.0.0.0/0 |
67
+ | insforge-postgres | Ingress | insforge-server | tcp:5432 | 0.0.0.0/0 (only if needed externally) |
68
+
69
+ > ⚠️ **Security Note**: For production, restrict PostgreSQL (5432) to specific IP addresses or remove external access entirely. Consider using a reverse proxy (nginx) and exposing only ports 80/443.
70
+
71
+ ### 2. Connect to Your Compute Engine Instance
72
+
73
+ 1. In the Google Cloud Console, go to **Compute Engine** → **VM instances**
74
+ 2. Find your instance and click the **SSH** button in the same row, or:
75
+
76
+ ```bash
77
+ # Use gcloud CLI to SSH (if you have gcloud SDK installed locally)
78
+ gcloud compute ssh insforge-server --zone=your-zone
79
+ ```
80
+
81
+ ### 3. Install Dependencies
82
+
83
+ #### 3.1 Update System Packages
84
+
85
+ ```bash
86
+ sudo apt update && sudo apt upgrade -y
87
+ ```
88
+
89
+ #### 3.2 Install Docker
90
+
91
+ ```bash
92
+ # Add Docker's official GPG key
93
+ sudo apt-get update
94
+ sudo apt-get install ca-certificates curl gnupg
95
+ sudo install -m 0755 -d /etc/apt/keyrings
96
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
97
+ sudo chmod a+r /etc/apt/keyrings/docker.gpg
98
+
99
+ # Add Docker repository
100
+ echo \
101
+ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
102
+ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
103
+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
104
+
105
+ # Install Docker
106
+ sudo apt-get update
107
+ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
108
+ ```
109
+
110
+ #### 3.3 Add Your User to Docker Group
111
+
112
+ After installing Docker, you need to add your user to the `docker` group to run Docker commands without `sudo`:
113
+
114
+ ```bash
115
+ # Add your user to the docker group
116
+ sudo usermod -aG docker $USER
117
+
118
+ # Apply the group changes
119
+ newgrp docker
120
+ ```
121
+
122
+ **Verify it works:**
123
+
124
+ ```bash
125
+ # This should now work without sudo
126
+ docker ps
127
+ ```
128
+
129
+ > 💡 **Note**: If `docker ps` doesn't work immediately, log out and log back in via SSH, then try again.
130
+
131
+ > ⚠️ **Security Note**: Adding a user to the `docker` group grants them root-equivalent privileges on the system. This is acceptable for single-user environments like your Compute Engine instance, but be cautious on shared systems.
132
+
133
+ #### 3.4 Install Git
134
+
135
+ ```bash
136
+ sudo apt install git -y
137
+ ```
138
+
139
+ ### 4. Deploy InsForge
140
+
141
+ #### 4.1 Clone Repository
142
+
143
+ ```bash
144
+ cd ~
145
+ git clone https://github.com/insforge/insforge.git
146
+ cd insforge
147
+ ```
148
+
149
+ #### 4.2 Create Environment Configuration
150
+
151
+ Create your `.env` file with production settings:
152
+
153
+ ```bash
154
+ nano .env
155
+ ```
156
+
157
+ Add the following configuration (customize the values):
158
+
159
+ ```env
160
+ # ============================================
161
+ # Server Configuration
162
+ # ============================================
163
+ PORT=7130
164
+
165
+ # ============================================
166
+ # Database Configuration
167
+ # ============================================
168
+ POSTGRES_USER=postgres
169
+ POSTGRES_PASSWORD=your-secure-postgres-password
170
+ POSTGRES_DB=insforge
171
+
172
+ # ============================================
173
+ # Security & Authentication
174
+ # ============================================
175
+ # IMPORTANT: Generate a strong random secret for production
176
+ JWT_SECRET=your-secret-key-here-must-be-32-char-or-above
177
+ ENCRYPTION_KEY=your-32-char-encryption-key-here
178
+
179
+ # Admin Account (used for initial setup)
180
+ ADMIN_EMAIL=admin@example.com
181
+ ADMIN_PASSWORD=change-this-password
182
+
183
+ # ============================================
184
+ # API Configuration
185
+ # ============================================
186
+ # Replace with your Compute Engine external IP or domain
187
+ API_BASE_URL=http://your-external-ip:7130
188
+ VITE_API_BASE_URL=http://your-external-ip:7130
189
+
190
+ # ============================================
191
+ # OAuth Providers (Optional)
192
+ # ============================================
193
+ # Google OAuth
194
+ GOOGLE_CLIENT_ID=
195
+ GOOGLE_CLIENT_SECRET=
196
+
197
+ # GitHub OAuth
198
+ GITHUB_CLIENT_ID=
199
+ GITHUB_CLIENT_SECRET=
200
+
201
+ # ============================================
202
+ # AWS Storage Configuration (Optional)
203
+ # ============================================
204
+ # For S3 file storage
205
+ AWS_S3_BUCKET=
206
+ AWS_REGION=
207
+ AWS_ACCESS_KEY_ID=
208
+ AWS_SECRET_ACCESS_KEY=
209
+
210
+ # ============================================
211
+ # AI/LLM Configuration (Optional)
212
+ # ============================================
213
+ OPENROUTER_API_KEY=
214
+
215
+ # ============================================
216
+ # Multi-tenant Cloud Configuration (Optional)
217
+ # ============================================
218
+ DEPLOYMENT_ID=
219
+ PROJECT_ID=
220
+ APP_KEY=
221
+ ACCESS_API_KEY=
222
+
223
+ # ============================================
224
+ # Advanced Configuration
225
+ # ============================================
226
+ DENO_ENV=production
227
+ WORKER_TIMEOUT_MS=30000
228
+ ```
229
+
230
+ **Generate Secure Secrets:**
231
+
232
+ ```bash
233
+ # Generate JWT_SECRET (32+ characters)
234
+ openssl rand -base64 32
235
+
236
+ # Generate ENCRYPTION_KEY (must be exactly 32 characters)
237
+ openssl rand -base64 24
238
+ ```
239
+
240
+ > 💡 **Important**: Save these secrets securely. You'll need them if you ever migrate or restore your instance.
241
+
242
+ #### 4.3 Start InsForge Services
243
+
244
+ ```bash
245
+ # Pull Docker images and start services
246
+ docker compose up -d
247
+
248
+ # View logs to ensure everything started correctly
249
+ docker compose logs -f
250
+ ```
251
+
252
+ Press `Ctrl+C` to exit log view.
253
+
254
+ #### 4.4 Verify Services
255
+
256
+ ```bash
257
+ # Check running containers
258
+ docker compose ps
259
+
260
+ # You should see 5 running services:
261
+ # - insforge-postgres
262
+ # - insforge-postgrest
263
+ # - insforge
264
+ # - insforge-deno
265
+ # - insforge-vector
266
+ ```
267
+
268
+ ### 5. Access Your InsForge Instance
269
+
270
+ #### 5.1 Test Backend API
271
+
272
+ ```bash
273
+ curl http://your-external-ip:7130/api/health
274
+ ```
275
+
276
+ Expected response:
277
+ ```json
278
+ {
279
+ "status": "ok",
280
+ "version": "1.0.0",
281
+ "service": "Insforge OSS Backend",
282
+ "timestamp": "2025-10-17T..."
283
+ }
284
+ ```
285
+
286
+ #### 5.2 Access Dashboard
287
+
288
+ Open your browser and navigate to:
289
+ ```text
290
+ http://your-external-ip:7131
291
+ ```
292
+
293
+ #### 5.3 ⚠️ Important: Custom Admin Credentials Configuration
294
+
295
+ > **🚧 Active Development Notice**: InsForge is currently in active development and testing. The credential management system is being developed. The following is a temporary workaround that will be replaced with a secure implementation in future releases.
296
+
297
+ **If you customize admin credentials** in your `.env` file (which is recommended), you must **also update the frontend login page** to match. This is a temporary requirement during our development phase.
298
+
299
+ **Step 1: Update `.env` file**
300
+
301
+ ```env
302
+ # In your .env file
303
+ ADMIN_EMAIL=your-custom-admin@example.com
304
+ ADMIN_PASSWORD=your-secure-password-here
305
+
306
+ ```
307
+
308
+ After updating your `.env` file, manually edit the login page:
309
+
310
+ ```bash
311
+ nano ~/insforge/frontend/src/features/login/page/LoginPage.tsx
312
+ ```
313
+
314
+ Find this section (around line 38-41):
315
+ ```typescript
316
+ defaultValues: {
317
+ email: 'admin@example.com',
318
+ password: 'change-this-password',
319
+ },
320
+ ```
321
+
322
+ Update the default values to match your `.env` file:
323
+ ```typescript
324
+ defaultValues: {
325
+ email: 'your-custom-admin@example.com', // Update to match your ADMIN_EMAIL
326
+ password: 'your-secure-password-here', // Update to match your ADMIN_PASSWORD
327
+ },
328
+ ```
329
+
330
+ ### 6. Configure Domain (Optional but Recommended)
331
+
332
+ #### 6.1 Reserve a Static External IP
333
+
334
+ 1. In Google Cloud Console, go to **VPC network** → **External IP addresses**
335
+ 2. Click **Reserve Static Address**
336
+ 3. **Name**: `insforge-ip`
337
+ 4. **Type**: Regional or Global (Regional for VM instances)
338
+ 5. **Region**: Same as your VM instance
339
+ 6. **Click Reserve**
340
+
341
+ #### 6.2 Update DNS Records
342
+
343
+ Point your domain's DNS records to the reserved static IP:
344
+ ```text
345
+ api.yourdomain.com → your-static-external-ip
346
+ app.yourdomain.com → your-static-external-ip
347
+ ```
348
+
349
+ #### 6.3 Install Nginx Reverse Proxy
350
+
351
+ ```bash
352
+ sudo apt install nginx -y
353
+ ```
354
+
355
+ Create Nginx configuration:
356
+
357
+ ```bash
358
+ sudo nano /etc/nginx/sites-available/insforge
359
+ ```
360
+
361
+ Add the following configuration:
362
+
363
+ ```nginx
364
+ # Backend API
365
+ server {
366
+ listen 80;
367
+ server_name api.yourdomain.com;
368
+
369
+ location / {
370
+ proxy_pass http://localhost:7130;
371
+ proxy_http_version 1.1;
372
+ proxy_set_header Upgrade $http_upgrade;
373
+ proxy_set_header Connection 'upgrade';
374
+ proxy_set_header Host $host;
375
+ proxy_set_header X-Real-IP $remote_addr;
376
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
377
+ proxy_set_header X-Forwarded-Proto $scheme;
378
+ proxy_cache_bypass $http_upgrade;
379
+ }
380
+ }
381
+
382
+ # Frontend Dashboard
383
+ server {
384
+ listen 80;
385
+ server_name app.yourdomain.com;
386
+
387
+ location / {
388
+ proxy_pass http://localhost:7131;
389
+ proxy_http_version 1.1;
390
+ proxy_set_header Upgrade $http_upgrade;
391
+ proxy_set_header Connection 'upgrade';
392
+ proxy_set_header Host $host;
393
+ proxy_set_header X-Real-IP $remote_addr;
394
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
395
+ proxy_set_header X-Forwarded-Proto $scheme;
396
+ proxy_cache_bypass $http_upgrade;
397
+ }
398
+ }
399
+ ```
400
+
401
+ Enable the configuration:
402
+
403
+ ```bash
404
+ sudo ln -s /etc/nginx/sites-available/insforge /etc/nginx/sites-enabled/
405
+ sudo nginx -t
406
+ sudo systemctl reload nginx
407
+ ```
408
+
409
+ #### 6.4 Install SSL Certificate (Recommended)
410
+
411
+ ```bash
412
+ # Install Certbot
413
+ sudo apt install certbot python3-certbot-nginx -y
414
+
415
+ # Obtain SSL certificates
416
+ sudo certbot --nginx -d api.yourdomain.com -d app.yourdomain.com
417
+
418
+ # Follow the prompts to complete setup
419
+ ```
420
+
421
+ Update your `.env` file with HTTPS URLs:
422
+
423
+ ```bash
424
+ cd ~/insforge
425
+ nano .env
426
+ ```
427
+
428
+ Change:
429
+ ```env
430
+ API_BASE_URL=https://api.yourdomain.com
431
+ VITE_API_BASE_URL=https://api.yourdomain.com
432
+ ```
433
+
434
+ Restart services:
435
+
436
+ ```bash
437
+ docker compose down
438
+ docker compose up -d
439
+ ```
440
+
441
+ ## 🔧 Management & Maintenance
442
+
443
+ ### View Logs
444
+
445
+ ```bash
446
+ # All services
447
+ docker compose logs -f
448
+
449
+ # Specific service
450
+ docker compose logs -f insforge
451
+ docker compose logs -f postgres
452
+ docker compose logs -f deno
453
+ ```
454
+
455
+ ### Stop Services
456
+
457
+ ```bash
458
+ docker compose down
459
+ ```
460
+
461
+ ### Restart Services
462
+
463
+ ```bash
464
+ docker compose restart
465
+ ```
466
+
467
+ ### Update InsForge
468
+
469
+ ```bash
470
+ cd ~/insforge
471
+ git pull origin main
472
+ docker compose down
473
+ docker compose up -d --build
474
+ ```
475
+
476
+ ### Backup Database
477
+
478
+ ```bash
479
+ # Create backup
480
+ docker exec insforge-postgres pg_dump -U postgres insforge > backup_$(date +%Y%m%d_%H%M%S).sql
481
+
482
+ # Store backup in Google Cloud Storage (optional)
483
+ # First, install Google Cloud CLI and authenticate
484
+ # Then:
485
+ gsutil cp backup_$(date +%Y%m%d_%H%M%S).sql gs://your-backup-bucket/
486
+ ```
487
+
488
+ ### Monitor Resources
489
+
490
+ ```bash
491
+ # Check disk usage
492
+ df -h
493
+
494
+ # Check memory usage
495
+ free -h
496
+
497
+ # Check Docker stats
498
+ docker stats
499
+ ```
500
+
501
+ ## 🐛 Troubleshooting
502
+
503
+ ### Services Won't Start
504
+
505
+ ```bash
506
+ # Check logs for errors
507
+ docker compose logs
508
+
509
+ # Check disk space
510
+ df -h
511
+
512
+ # Check memory
513
+ free -h
514
+
515
+ # Restart Docker daemon
516
+ sudo systemctl restart docker
517
+ docker compose up -d
518
+ ```
519
+
520
+ ### Cannot Connect to Database
521
+
522
+ ```bash
523
+ # Check if PostgreSQL is running
524
+ docker compose ps postgres
525
+
526
+ # Check PostgreSQL logs
527
+ docker compose logs postgres
528
+
529
+ # Verify credentials in .env file
530
+ cat .env | grep POSTGRES
531
+ ```
532
+
533
+ ### Port Already in Use
534
+
535
+ ```bash
536
+ # Check what's using the port
537
+ sudo netstat -tulpn | grep :7130
538
+
539
+ # Kill the process or change port in docker-compose.yml
540
+ ```
541
+
542
+ ### Out of Memory
543
+
544
+ Consider upgrading to a larger instance type:
545
+ ```text
546
+ - Current: e2-small (2 vCPU, 2 GB RAM)
547
+ - Upgrade to: e2-standard-2 (2 vCPU, 8 GB RAM)
548
+ ```
549
+
550
+ ### SSL Certificate Issues
551
+
552
+ ```bash
553
+ # Renew certificates
554
+ sudo certbot renew
555
+
556
+ # Test renewal
557
+ sudo certbot renew --dry-run
558
+ ```
559
+
560
+ ## 📊 Performance Optimization
561
+
562
+ ### For Production Workloads
563
+
564
+ 1. **Upgrade Instance Type**: Use `e2-standard-2` or `e2-standard-4`
565
+ 2. **Use Cloud SQL**: Migrate from containerized PostgreSQL to Google Cloud SQL for better reliability
566
+ 3. **Enable Cloud Monitoring**: Monitor metrics and set up alerts
567
+ 4. **Configure Backups**: Set up automated daily backups
568
+ 5. **Use Cloud Storage**: Configure Google Cloud Storage for file uploads instead of local storage
569
+
570
+ ### Database Optimization
571
+
572
+ ```conf
573
+ # Increase PostgreSQL shared_buffers (edit postgresql.conf in docker-init/db/)
574
+ # Recommended: 25% of available RAM
575
+ shared_buffers = 1GB
576
+ effective_cache_size = 3GB
577
+ ```
578
+
579
+ ## 🔒 Security Best Practices
580
+
581
+ 1. **Change Default Passwords**: Update admin and database passwords
582
+ 2. **Enable Firewall**: Use Google Cloud Firewall rules effectively
583
+ 3. **Regular Updates**: Keep system and Docker images updated
584
+ 4. **SSL/TLS**: Always use HTTPS in production
585
+ 5. **Backup Regularly**: Automate database backups
586
+ 6. **Monitor Logs**: Set up log monitoring and alerts
587
+ 7. **Limit SSH Access**: Restrict SSH to specific IP addresses
588
+ 8. **Use Service Accounts**: Instead of API keys where possible
589
+
590
+ ## 🆘 Support & Resources
591
+
592
+ - **Documentation**: [https://docs.insforge.dev](https://docs.insforge.dev)
593
+ - **GitHub Issues**: [https://github.com/insforge/insforge/issues](https://github.com/insforge/insforge/issues)
594
+ - **Discord Community**: [https://discord.com/invite/MPxwj5xVvW](https://discord.com/invite/MPxwj5xVvW)
595
+
596
+ ## 📝 Cost Estimation
597
+
598
+ **Monthly Google Cloud Costs (approximate):**
599
+
600
+ | Component | Type | Monthly Cost |
601
+ |-----------|------|--------------|
602
+ | Compute Engine | e2-medium (2 vCPU, 4 GB RAM) | ~$29 |
603
+ | Persistent Disk (30 GB) | Standard | ~$3 |
604
+ | Network Egress | First 1GB free | Variable |
605
+ | **Total** | | **~$32/month** |
606
+
607
+ > 💡 **Cost Optimization**: Use sustained use discounts for 24/7 running instances to save up to 30%. Consider preemptible instances for development/testing environments.
608
+
609
+ ---
610
+
611
+ **Congratulations! 🎉** Your InsForge instance is now running on Google Cloud Compute Engine. You can start building applications by connecting AI agents to your backend platform.
612
+
613
+ For other production deployment strategies, check out our [deployment guides](./README.md).