Skip to content

Commit d0c4782

Browse files
authored
docs: update demo app deployment guide with worker management and improved steps (#567)
# Updated Deployment Documentation for PgFlow Demo App This PR updates the deployment documentation with a more comprehensive and structured approach, including: - Added a new section for setting up vault secrets for worker management - Improved edge function deployment instructions with environment-specific commands - Separated Cloudflare webapp deployment from function deployment - Updated GitHub secrets section with more specific naming conventions - Added detailed instructions for updating production deployments with selective migrations - Enhanced troubleshooting section with worker-specific guidance - Updated preview deployment URLs to match current configuration - Added step-by-step instructions for both full deployments and individual components - Improved database reset and migration instructions - Added proper environment variable handling for different deployment environments These changes support the new worker management features and provide clearer guidance for both automated and manual deployments.
1 parent 5cd364e commit d0c4782

File tree

1 file changed

+118
-31
lines changed

1 file changed

+118
-31
lines changed

apps/demo/DEPLOYMENT.md

Lines changed: 118 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,65 +26,103 @@ For each project (production and preview):
2626
cd apps/demo
2727

2828
# Link to project
29-
supabase link --project-ref <PROJECT_REF>
29+
pnpm supabase link --project-ref <PROJECT_REF>
3030

3131
# Reset database (applies migrations + seed data)
32-
supabase db reset --linked
32+
pnpm supabase db reset
33+
```
34+
35+
### 3. Setting Up Vault Secrets
3336

34-
# Deploy Edge Functions
35-
supabase functions deploy --project-ref <PROJECT_REF>
37+
After database migrations, set up vault secrets for worker management:
38+
39+
```bash
40+
# From apps/demo, source the appropriate env file
41+
set -a; source .env.production # or .env.preview
42+
set +a
43+
44+
# Set up vault secrets and register worker
45+
psql "$SUPABASE_DB_URL" \
46+
-v service_role_key="$SUPABASE_SERVICE_ROLE_KEY" \
47+
-v project_ref="$SUPABASE_PROJECT_REF" <<'EOSQL'
48+
DELETE FROM vault.secrets WHERE name IN ('supabase_service_role_key', 'supabase_project_id');
49+
SELECT vault.create_secret(:'service_role_key', 'supabase_service_role_key');
50+
SELECT vault.create_secret(:'project_ref', 'supabase_project_id');
51+
SELECT pgflow.track_worker_function('article_flow_worker');
52+
EOSQL
3653
```
3754

38-
### 3. Edge Function Secrets
55+
### 4. Edge Function Secrets
3956

4057
Set environment variables for Edge Functions:
4158

4259
```bash
4360
# Set LLM API key (choose Groq or OpenAI)
44-
supabase secrets set GROQ_API_KEY=your_groq_key_here
61+
pnpm supabase secrets set GROQ_API_KEY=your_groq_key_here
4562
# OR
46-
supabase secrets set OPENAI_API_KEY=your_openai_key_here
63+
pnpm supabase secrets set OPENAI_API_KEY=your_openai_key_here
4764

4865
# Verify secrets are set
49-
supabase secrets list
66+
pnpm supabase secrets list
5067
```
5168

5269
Repeat for both production and preview projects.
5370

54-
### 4. Cloudflare Setup
71+
### 5. Deploy Edge Functions
72+
73+
```bash
74+
cd apps/demo
75+
76+
# For production
77+
set -a; source .env.production; set +a
78+
SUPABASE_ACCESS_TOKEN="$SUPABASE_ACCESS_TOKEN" pnpm supabase functions deploy article_flow_worker --project-ref "$SUPABASE_PROJECT_REF"
79+
80+
# For preview
81+
pnpm nx run demo:deploy:preview:functions
82+
```
83+
84+
### 6. Cloudflare Setup
5585

5686
```bash
5787
# Authenticate with Cloudflare
5888
pnpm wrangler login
5989

60-
# Deploy production (from repo root)
61-
pnpm nx deploy demo
90+
# Deploy production webapp (from repo root)
91+
cd apps/demo
92+
pnpm wrangler deploy
6293

6394
# Deploy preview
64-
pnpm nx deploy:preview demo
95+
pnpm nx run demo:deploy:preview:webapp
6596
```
6697

67-
### 5. GitHub Secrets
98+
### 7. GitHub Secrets
6899

69100
Add these secrets to your GitHub repository (Settings → Secrets):
70101

71102
**Supabase (Production):**
72103

73-
- `SUPABASE_ACCESS_TOKEN` - Personal access token from https://supabase.com/dashboard/account/tokens
74-
- `PRODUCTION_PROJECT_ID` - Production project ref
75-
- `PRODUCTION_DB_PASSWORD` - Production database password
104+
- `DEMO_PRODUCTION_SUPABASE_URL` - Production project URL
105+
- `DEMO_PRODUCTION_SUPABASE_ANON_KEY` - Production anon key
106+
- `DEMO_PRODUCTION_SUPABASE_PROJECT_REF` - Production project ref
107+
- `DEMO_PRODUCTION_SUPABASE_SERVICE_ROLE_KEY` - Production service role key
108+
- `DEMO_PRODUCTION_SUPABASE_DB_URL` - Production database connection string
109+
- `DEMO_PRODUCTION_SUPABASE_ACCESS_TOKEN` - Supabase personal access token
76110

77111
**Supabase (Preview):**
78112

79-
- `PREVIEW_PROJECT_ID` - Preview project ref
80-
- `PREVIEW_DB_PASSWORD` - Preview database password
113+
- `DEMO_PREVIEW_SUPABASE_URL` - Preview project URL
114+
- `DEMO_PREVIEW_SUPABASE_ANON_KEY` - Preview anon key
115+
- `DEMO_PREVIEW_SUPABASE_PROJECT_REF` - Preview project ref
116+
- `DEMO_PREVIEW_SUPABASE_SERVICE_ROLE_KEY` - Preview service role key
117+
- `DEMO_PREVIEW_SUPABASE_DB_URL` - Preview database connection string
118+
- `DEMO_PREVIEW_SUPABASE_ACCESS_TOKEN` - Supabase personal access token
81119

82120
**Cloudflare:**
83121

84122
- `CLOUDFLARE_API_TOKEN` - API token from Cloudflare dashboard
85123
- `CLOUDFLARE_ACCOUNT_ID` - Account ID from Cloudflare dashboard
86124

87-
### 6. Enable Supabase Branching (Optional)
125+
### 8. Enable Supabase Branching (Optional)
88126

89127
For automatic per-PR preview databases:
90128

@@ -95,53 +133,102 @@ For automatic per-PR preview databases:
95133
## Deployment URLs
96134

97135
- **Production**: https://demo.pgflow.dev
98-
- **Preview**: https://pr-{number}.pgflow-demo.workers.dev
136+
- **Preview**: https://pr-{number}-pgflow-demo.jumski.workers.dev
99137

100138
## Manual Deployments
101139

102140
### Production
103141

104142
```bash
105-
pnpm nx deploy demo
143+
# Full production deployment
144+
pnpm nx run demo:deploy
145+
146+
# Or step-by-step from apps/demo:
147+
cd apps/demo
148+
pnpm wrangler deploy
106149
```
107150

108151
### Preview
109152

110153
```bash
154+
# Full preview deployment (db + functions + webapp)
155+
pnpm nx run demo:deploy:preview
156+
111157
# With custom name (using script directly)
112158
cd apps/demo
113-
./scripts/deploy-preview.sh my-feature
114-
115-
# With custom name (using nx)
116-
PREVIEW_NAME=my-feature pnpm nx deploy:preview demo
159+
PREVIEW_NAME=my-feature ./scripts/deploy-preview.sh
117160

118161
# With PR number (CI)
119-
PR_NUMBER=123 pnpm nx deploy:preview demo
162+
PR_NUMBER=123 pnpm nx run demo:deploy:preview
120163

121164
# Default local preview
122-
pnpm nx deploy:preview demo
165+
pnpm nx run demo:deploy:preview
123166
```
124167

125168
### Reset Database
126169

127170
```bash
128171
cd apps/demo
129-
supabase link --project-ref <PROJECT_REF>
130-
supabase db reset --linked
172+
pnpm supabase link --project-ref <PROJECT_REF>
173+
pnpm supabase db reset
174+
```
175+
176+
## Updating Production Deployments
177+
178+
When updating production with new pgflow migrations, apply them selectively in order:
179+
180+
```bash
181+
cd apps/demo
182+
183+
# Link to production
184+
set -a; source .env.production; set +a
185+
SUPABASE_ACCESS_TOKEN="$SUPABASE_ACCESS_TOKEN" pnpm supabase link --project-ref "$SUPABASE_PROJECT_REF"
186+
187+
# Apply pgflow migrations in order
188+
pnpm supabase migration up --file 20251226231000_20251104080523_pgflow_upgrade_pgmq_1_5_1.sql
189+
pnpm supabase migration up --file 20251226232000_20251130000000_pgflow_auto_compilation.sql
190+
pnpm supabase migration up --file 20251226233000_20251209074533_pgflow_worker_management.sql
191+
192+
# Set up vault secrets (worker_management adds track_worker_function)
193+
psql "$SUPABASE_DB_URL" \
194+
-v service_role_key="$SUPABASE_SERVICE_ROLE_KEY" \
195+
-v project_ref="$SUPABASE_PROJECT_REF" <<'EOSQL'
196+
DELETE FROM vault.secrets WHERE name IN ('supabase_service_role_key', 'supabase_project_id');
197+
SELECT vault.create_secret(:'service_role_key', 'supabase_service_role_key');
198+
SELECT vault.create_secret(:'project_ref', 'supabase_project_id');
199+
SELECT pgflow.track_worker_function('article_flow_worker');
200+
EOSQL
201+
202+
# Deploy edge functions
203+
SUPABASE_ACCESS_TOKEN="$SUPABASE_ACCESS_TOKEN" pnpm supabase functions deploy article_flow_worker --project-ref "$SUPABASE_PROJECT_REF"
204+
205+
# Apply remaining migrations
206+
pnpm supabase migration up --file 20251230202447_20251225163110_pgflow_add_flow_input_column.sql
207+
208+
# Deploy webapp
209+
pnpm wrangler deploy
131210
```
132211

133212
## Troubleshooting
134213

135214
**Edge Functions failing:**
136215

137-
- Check secrets are set: `supabase secrets list`
216+
- Check secrets are set: `pnpm supabase secrets list`
138217
- Verify you're linked to correct project: `cat supabase/.branches/_current_branch`
218+
- Ensure GROQ_API_KEY or OPENAI_API_KEY is set
139219

140220
**Database out of sync:**
141221

142-
- Run `supabase db reset --linked` to reapply all migrations
222+
- Run `pnpm supabase db reset` to reapply all migrations
223+
- For production, use selective migration process above
224+
225+
**Worker not auto-restarting:**
226+
227+
- Verify vault secrets are set: `SELECT * FROM vault.secrets;`
228+
- Check worker is tracked: `SELECT * FROM pgflow.worker_functions;`
143229

144230
**Cloudflare deployment fails:**
145231

146232
- Ensure you're authenticated: `pnpm wrangler whoami`
147233
- Check wrangler.toml routes match your domain
234+
- For production, use `pnpm wrangler deploy` (no --env flag)

0 commit comments

Comments
 (0)