How to Integrate Managed Database on DigitalOcean App Platform
Create a PostgreSQL managed database cluster in the same region as your app, attach it via App Platform control panel ensuring trusted sources, remove conflicting dev DATABASE_* env vars, parse DATABASE_URL with SSL in your app's database config, and redeploy. Common issues like connection errors stem from leftover env vars or unedited app spec; fix takes 30-60 minutes.
Prerequisites
- Existing Strapi or Node.js app deployed on DigitalOcean App Platform
- DigitalOcean account with Control Panel access and billing enabled
- PostgreSQL selected as database engine
- Access to app source code for config edits
- Same region for app and database to avoid connectivity issues
Step-by-Step Instructions
Create Managed Database Cluster
Attach Database to Your App
Install pg-connection-string Dependency
package.json, add the pg-connection-string dependency: npm install pg-connection-string This parses the auto-propagated DATABASE_URL into host, port, database, user, and password components required for Strapi config.Update Strapi Database Config for CommonJS
config/database.js to parse DATABASE_URL with SSL. Use this CommonJS configuration: const parse = require('pg-connection-string').parse; const { host, port, database, user, password } = parse(process.env.DATABASE_URL); module.exports = ({ env }) => ({ connection: { client: 'postgres', connection: { host, port, database, user, password, ssl: { rejectUnauthorized: false }, }, debug: false, }, });Update Strapi Database Config for ES Modules
config/database.js as follows: const parse = require('pg-connection-string').parse; const { host, port, database, user, password } = parse(process.env.DATABASE_URL); export default ({ env }) => ({ connection: { client: 'postgres', connection: { host, port, database, user, password, ssl: { ca: env('DATABASE_CA'), }, }, debug: false, }, }); This uses DATABASE_CA for certificate validation.Configure Environment Variables
DATABASE_* vars from dev setup to avoid conflicts. Add: DATABASE_URL = ${dbClusterName.DATABASE_URL} and DATABASE_CA = ${dbClusterName.CA_CERT}, replacing dbClusterName with your actual cluster name from app spec.Edit App Spec if Needed
databases: [{ engine: PG, name: db-example, version: '16' }]) and no conflicting env vars exist. Delete problematic vars, upload edited spec, and redeploy.Verify Deployment and Connectivity
Common Issues & Troubleshooting
Database connection errors during deployment
Remove leftover dev DATABASE_* env vars; they conflict with auto-propagated DATABASE_URL and DATABASE_CA. Edit app spec file to confirm no manual DB vars.
App cannot connect after region mismatch
Recreate database cluster in same region as app; dev DBs cannot migrate regions, managed ones can but require reattachment.
SSL or trusted sources blocking connection
Enable trusted sources on DB and add app explicitly via Network Access tab, or select 'Add app as trusted source' during attachment. Use correct SSL config in database.js.
Build fails after config changes
Ensure pg-connection-string is installed and committed. Download/edit/upload app spec if env vars persist in file.
Private endpoint connectivity issues
Contact support to enable VPC for app, then configure private networking per docs for internal DB endpoints.