Openstatus
www.openstatus.dev
1effective: |
2 builders:
3 builder:
4 fromImage:
5 path: node
6 digest: sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2
7 label:
8 org.opencontainers.image.base.digest: sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2
9 org.opencontainers.image.base.name: docker.io/node:24-slim
10 workdir: /app
11 env:
12 PROJECT_ID_VERCEL: test
13 CRON_SECRET: test
14 DATABASE_URL: http://libsql:8080
15 DATABASE_AUTH_TOKEN: test
16 UPSTASH_REDIS_REST_TOKEN: test
17 UPSTASH_REDIS_REST_URL: test
18 AUTH_SECRET: build-time-placeholder-min-32-chars-long
19 OPENPANEL_CLIENT_SECRET: test
20 VERCEL_AUTH_BEARER_TOKEN: test
21 TEAM_ID_VERCEL: test
22 TINY_BIRD_API_KEY: test
23 UNKEY_TOKEN: test
24 NEXT_PUBLIC_URL: http://localhost:3002
25 STRIPE_SECRET_KEY: test
26 UNKEY_API_ID: test
27 NEXT_PUBLIC_OPENPANEL_CLIENT_ID: test
28 PATH: $PNPM_HOME:$PATH
29 NODE_ENV: production
30 SELF_HOST: 'true'
31 PNPM_HOME: /pnpm
32 RESEND_API_KEY: test
33 copy:
34 - paths:
35 - .
36 target: /app/
37 run:
38 - corepack enable
39 - pnpm install --frozen-lockfile
40 - pnpm turbo run build --filter=@openstatus/dashboard
41 fromImage:
42 path: node
43 digest: sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2
44 label:
45 org.opencontainers.image.base.digest: sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2
46 org.opencontainers.image.base.name: docker.io/node:24-slim
47 io.dofigen.version: 2.5.1
48 user:
49 user: '1000'
50 group: '1000'
51 workdir: /app/apps/dashboard
52 copy:
53 - fromBuilder: builder
54 paths:
55 - /app/apps/dashboard/.next/standalone/apps/dashboard/
56 target: ./
57 chmod: '555'
58 - fromBuilder: builder
59 paths:
60 - /app/node_modules/
61 target: /app/node_modules/
62 - fromBuilder: builder
63 paths:
64 - /app/apps/dashboard/.next/static/
65 target: ./.next/static/
66 - fromBuilder: builder
67 paths:
68 - /app/apps/dashboard/public/
69 target: ./public/
70 root:
71 run:
72 - apt-get update
73 - apt-get install -y --no-install-recommends curl
74 - rm -rf /var/lib/apt/lists/*
75 cmd:
76 - node
77 - server.js
78 expose:
79 - port: 3000
80 healthcheck:
81 cmd: curl -f http://localhost:3000/ || exit 1
82 interval: 30s
83 timeout: 10s
84 start: 45s
85 retries: 3
86images:
87 docker.io:
88 library:
89 node:
90 24-slim:
91 digest: sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2
92resources:
93 dofigen.yml:
94 hash: 9f3113ec1095f913b3cc8e6202c7f1cc93087b2418ad8da90aa7ea0ccbd35579
95 content: |
96 builders:
97 # Stage 1: Next.js build with Node.js
98 builder:
99 fromImage: node:24-slim
100 workdir: /app
101 copy:
102 - . /app/
103 env:
104 NODE_ENV: production
105 PNPM_HOME: /pnpm
106 PATH: $PNPM_HOME:$PATH
107 # Build-time environment variables (placeholder values, overwritten by .env.docker at runtime)
108 DATABASE_URL: http://libsql:8080
109 DATABASE_AUTH_TOKEN: test
110 NEXT_PUBLIC_OPENPANEL_CLIENT_ID: test
111 NEXT_PUBLIC_URL: http://localhost:3002
112 TEAM_ID_VERCEL: test
113 PROJECT_ID_VERCEL: test
114 VERCEL_AUTH_BEARER_TOKEN: test
115 OPENPANEL_CLIENT_SECRET: test
116 RESEND_API_KEY: test
117 UPSTASH_REDIS_REST_URL: test
118 UPSTASH_REDIS_REST_TOKEN: test
119 UNKEY_TOKEN: test
120 UNKEY_API_ID: test
121 TINY_BIRD_API_KEY: test
122 CRON_SECRET: test
123 STRIPE_SECRET_KEY: test
124 AUTH_SECRET: build-time-placeholder-min-32-chars-long
125 SELF_HOST: "true"
126 run:
127 - corepack enable
128 - pnpm install --frozen-lockfile
129 - pnpm turbo run build --filter=@openstatus/dashboard
130
131 # Runtime stage
132 fromImage: node:24-slim
133 workdir: /app/apps/dashboard
134
135 # Copy artifacts from builder
136 copy:
137 # Copy Next.js standalone output
138 - fromBuilder: builder
139 source: /app/apps/dashboard/.next/standalone/apps/dashboard/
140 target: ./
141 chmod: "555"
142 # Copy root node_modules (required for pnpm symlinks)
143 - fromBuilder: builder
144 source: /app/node_modules/
145 target: /app/node_modules/
146 # Copy static assets
147 - fromBuilder: builder
148 source: /app/apps/dashboard/.next/static/
149 target: ./.next/static/
150 # Copy public directory
151 - fromBuilder: builder
152 source: /app/apps/dashboard/public/
153 target: ./public/
154
155 # Install curl for health checks
156 root:
157 run:
158 - apt-get update
159 - apt-get install -y --no-install-recommends curl
160 - rm -rf /var/lib/apt/lists/*
161
162 # Security: run as non-root user
163 user: "1000:1000"
164
165 # Expose port
166 expose: "3000"
167
168 # Health check
169 healthcheck:
170 interval: 30s
171 timeout: 10s
172 start: 45s
173 retries: 3
174 cmd: curl -f http://localhost:3000/ || exit 1
175
176 # Start application
177 cmd:
178 - node
179 - server.js