fix: Coolify-friendly docker-compose with deployment guide
This commit is contained in:
108
COOLIFY_DEPLOYMENT_GUIDE.md
Normal file
108
COOLIFY_DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
# Coolify Deployment Guide - "Quick Fix" Method
|
||||||
|
|
||||||
|
## Environment Variables (Add in Coolify UI)
|
||||||
|
|
||||||
|
```
|
||||||
|
ADMIN_EMAIL=admin@sparkplatform.com
|
||||||
|
ADMIN_PASSWORD=SecurePass2024!Change
|
||||||
|
DB_USER=sparkuser
|
||||||
|
DB_PASSWORD=DbPass2024!Change
|
||||||
|
DB_DATABASE=directus
|
||||||
|
KEY=nGs2S6Ue/tl03SNao1BIkXPxQtoEIZoUs+roKurD3UlSK8x9XrjyKySWf7tr0ABPkH7SB9wEzYnCDEX4ycB01Q==
|
||||||
|
SECRET=bVu+i1Yqp6aoxpe/o0ySfeE4GSAQCdlitOVCBZklQFcayXPQ1Nwc5jhLUjjrSIJsI1CH6UyRMsLo/fVSIf997w==
|
||||||
|
DIRECTUS_ADMIN_TOKEN=
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deployment Steps
|
||||||
|
|
||||||
|
1. **In Coolify:** Create new Docker Compose deployment
|
||||||
|
2. **Paste the docker-compose.yaml** from this repo
|
||||||
|
3. **Add environment variables** (above)
|
||||||
|
4. **CRUCIAL:** After saving, go to **Service Configuration**:
|
||||||
|
- For `directus` service: Set domain to `spark.jumpstartscaling.com`
|
||||||
|
- For `frontend` service: Set domain to `launch.jumpstartscaling.com`
|
||||||
|
5. **Deploy!**
|
||||||
|
|
||||||
|
## Login
|
||||||
|
|
||||||
|
- URL: https://spark.jumpstartscaling.com
|
||||||
|
- Email: `admin@sparkplatform.com`
|
||||||
|
- Password: `SecurePass2024!Change`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# "Pro" Method (Recommended for Production)
|
||||||
|
|
||||||
|
## Why Split Services?
|
||||||
|
|
||||||
|
- ✅ Automated database backups to S3/R2
|
||||||
|
- ✅ Independent scaling
|
||||||
|
- ✅ Data persists even if you delete the app
|
||||||
|
- ✅ One-click version upgrades
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
1. **PostgreSQL** (Coolify Managed Database)
|
||||||
|
2. **Redis** (Coolify Managed Database)
|
||||||
|
3. **Directus** (Docker Service)
|
||||||
|
4. **Frontend** (Public Repository)
|
||||||
|
|
||||||
|
## Setup Steps
|
||||||
|
|
||||||
|
### 1. Create Databases
|
||||||
|
|
||||||
|
**PostgreSQL:**
|
||||||
|
- Coolify → Add Resource → PostgreSQL
|
||||||
|
- After creation: Settings → Change image to `postgis/postgis:16-3.4-alpine`
|
||||||
|
- Note the internal URL (e.g., `tcp://uuid:5432`)
|
||||||
|
|
||||||
|
**Redis:**
|
||||||
|
- Coolify → Add Resource → Redis
|
||||||
|
- Note the internal URL (e.g., `tcp://uuid:6379`)
|
||||||
|
|
||||||
|
### 2. Deploy Directus
|
||||||
|
|
||||||
|
- Add Resource → Docker-based
|
||||||
|
- **Environment Variables:**
|
||||||
|
```
|
||||||
|
KEY=nGs2S6Ue/tl03SNao1BIkXPxQtoEIZoUs+roKurD3UlSK8x9XrjyKySWf7tr0ABPkH7SB9wEzYnCDEX4ycB01Q==
|
||||||
|
SECRET=bVu+i1Yqp6aoxpe/o0ySfeE4GSAQCdlitOVCBZklQFcayXPQ1Nwc5jhLUjjrSIJsI1CH6UyRMsLo/fVSIf997w==
|
||||||
|
ADMIN_EMAIL=admin@sparkplatform.com
|
||||||
|
ADMIN_PASSWORD=SecurePass2024!Change
|
||||||
|
DB_CLIENT=postgres
|
||||||
|
DB_HOST=<postgres-internal-host>
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_DATABASE=directus
|
||||||
|
DB_USER=<from-postgres-service>
|
||||||
|
DB_PASSWORD=<from-postgres-service>
|
||||||
|
PUBLIC_URL=https://spark.jumpstartscaling.com
|
||||||
|
CORS_ENABLED=true
|
||||||
|
CORS_ORIGIN=https://launch.jumpstartscaling.com
|
||||||
|
```
|
||||||
|
- **Domain:** `spark.jumpstartscaling.com`
|
||||||
|
|
||||||
|
### 3. Deploy Frontend
|
||||||
|
|
||||||
|
- Add Resource → Public Repository
|
||||||
|
- Point to: `https://gitthis.jumpstartscaling.com/gatekeeper/net.git`
|
||||||
|
- **Build Pack:** Nixpacks or Dockerfile
|
||||||
|
- **Build Environment Variables:**
|
||||||
|
```
|
||||||
|
PUBLIC_DIRECTUS_URL=https://spark.jumpstartscaling.com
|
||||||
|
PUBLIC_PLATFORM_DOMAIN=launch.jumpstartscaling.com
|
||||||
|
```
|
||||||
|
- **Domain:** `launch.jumpstartscaling.com`
|
||||||
|
|
||||||
|
## Traffic Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
User Browser → launch.jumpstartscaling.com (Frontend)
|
||||||
|
→ spark.jumpstartscaling.com (Directus API)
|
||||||
|
|
||||||
|
Directus → tcp://postgres-uuid:5432 (Internal)
|
||||||
|
→ tcp://redis-uuid:6379 (Internal)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
Would you like me to help migrate your existing data from the docker-compose volumes to Coolify Managed Databases?
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
services:
|
services:
|
||||||
postgresql:
|
postgresql:
|
||||||
image: 'postgis/postgis:16-3.4-alpine'
|
image: 'postgis/postgis:16-3.4-alpine'
|
||||||
platform: linux/amd64
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- 'postgres-data:/var/lib/postgresql/data'
|
- 'postgres-data:/var/lib/postgresql/data'
|
||||||
environment:
|
environment:
|
||||||
@@ -9,28 +9,26 @@ services:
|
|||||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
POSTGRES_DB: ${DB_DATABASE}
|
POSTGRES_DB: ${DB_DATABASE}
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_DATABASE}']
|
test: [ 'CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_DATABASE}' ]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
networks:
|
|
||||||
- default
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: 'redis:7-alpine'
|
image: 'redis:7-alpine'
|
||||||
command: 'redis-server --appendonly yes'
|
command: 'redis-server --appendonly yes'
|
||||||
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- 'redis-data:/data'
|
- 'redis-data:/data'
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD', 'redis-cli', 'ping']
|
test: [ 'CMD', 'redis-cli', 'ping' ]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
networks:
|
|
||||||
- default
|
|
||||||
|
|
||||||
directus:
|
directus:
|
||||||
image: 'directus/directus:11'
|
image: 'directus/directus:11'
|
||||||
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- 'directus-uploads:/directus/uploads'
|
- 'directus-uploads:/directus/uploads'
|
||||||
- 'directus-extensions:/directus/extensions'
|
- 'directus-extensions:/directus/extensions'
|
||||||
@@ -51,15 +49,8 @@ services:
|
|||||||
CORS_ENABLED: 'true'
|
CORS_ENABLED: 'true'
|
||||||
CORS_ORIGIN: 'https://launch.jumpstartscaling.com,http://localhost:4321'
|
CORS_ORIGIN: 'https://launch.jumpstartscaling.com,http://localhost:4321'
|
||||||
PUBLIC_URL: 'https://spark.jumpstartscaling.com'
|
PUBLIC_URL: 'https://spark.jumpstartscaling.com'
|
||||||
labels:
|
|
||||||
- 'traefik.enable=true'
|
|
||||||
- 'traefik.http.routers.directus.rule=Host(`spark.jumpstartscaling.com`)'
|
|
||||||
- 'traefik.http.routers.directus.entrypoints=https'
|
|
||||||
- 'traefik.http.routers.directus.tls.certresolver=letsencrypt'
|
|
||||||
- 'traefik.http.services.directus.loadbalancer.server.port=8055'
|
|
||||||
- 'traefik.docker.network=coolify'
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD', 'wget', '--no-verbose', '--tries=1', '--spider', 'http://localhost:8055/server/health']
|
test: [ 'CMD', 'wget', '--no-verbose', '--tries=1', '--spider', 'http://localhost:8055/server/health' ]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
@@ -69,39 +60,21 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
redis:
|
redis:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
networks:
|
|
||||||
- coolify
|
|
||||||
- default
|
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
context: ./frontend
|
context: ./frontend
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
PUBLIC_DIRECTUS_URL: 'https://spark.jumpstartscaling.com'
|
PUBLIC_DIRECTUS_URL: 'https://spark.jumpstartscaling.com'
|
||||||
DIRECTUS_ADMIN_TOKEN: ${DIRECTUS_ADMIN_TOKEN}
|
DIRECTUS_ADMIN_TOKEN: ${DIRECTUS_ADMIN_TOKEN}
|
||||||
PUBLIC_PLATFORM_DOMAIN: 'launch.jumpstartscaling.com'
|
PUBLIC_PLATFORM_DOMAIN: 'launch.jumpstartscaling.com'
|
||||||
labels:
|
|
||||||
- 'traefik.enable=true'
|
|
||||||
- 'traefik.http.routers.frontend.rule=Host(`launch.jumpstartscaling.com`)'
|
|
||||||
- 'traefik.http.routers.frontend.entrypoints=https'
|
|
||||||
- 'traefik.http.routers.frontend.tls.certresolver=letsencrypt'
|
|
||||||
- 'traefik.http.services.frontend.loadbalancer.server.port=4321'
|
|
||||||
- 'traefik.docker.network=coolify'
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- directus
|
- directus
|
||||||
networks:
|
|
||||||
- coolify
|
|
||||||
- default
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres-data:
|
postgres-data:
|
||||||
redis-data:
|
redis-data:
|
||||||
directus-uploads:
|
directus-uploads:
|
||||||
directus-extensions:
|
directus-extensions:
|
||||||
|
|
||||||
networks:
|
|
||||||
coolify:
|
|
||||||
external: true
|
|
||||||
default:
|
|
||||||
driver: bridge
|
|
||||||
|
|||||||
Reference in New Issue
Block a user