Make Docker Compose Coolify-ready
This commit is contained in:
@@ -3,10 +3,18 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/fiscal
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=postgres
|
||||
POSTGRES_DB=fiscal
|
||||
POSTGRES_HOST=localhost
|
||||
|
||||
# Backend
|
||||
PORT=3001
|
||||
NODE_ENV=development
|
||||
JWT_SECRET=change-this-to-a-random-secret-key
|
||||
BETTER_AUTH_SECRET=change-this-to-a-random-secret-key
|
||||
BETTER_AUTH_BASE_URL=http://localhost:3001
|
||||
GITHUB_ID=
|
||||
GITHUB_SECRET=
|
||||
GOOGLE_ID=
|
||||
GOOGLE_SECRET=
|
||||
|
||||
# Frontend
|
||||
NEXT_PUBLIC_API_URL=http://localhost:3001
|
||||
|
||||
12
COOLIFY.md
12
COOLIFY.md
@@ -23,6 +23,13 @@ POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=your_password
|
||||
POSTGRES_DB=fiscal
|
||||
PORT=3001
|
||||
BETTER_AUTH_SECRET=your-random-long-secret
|
||||
BETTER_AUTH_BASE_URL=https://api.your-fiscal-domain.com
|
||||
JWT_SECRET=your-jwt-secret-key-min-32-characters
|
||||
GITHUB_ID=your-github-oauth-client-id
|
||||
GITHUB_SECRET=your-github-oauth-client-secret
|
||||
GOOGLE_ID=your-google-oauth-client-id
|
||||
GOOGLE_SECRET=your-google-oauth-client-secret
|
||||
NEXT_PUBLIC_API_URL=https://your-fiscal-domain.com
|
||||
```
|
||||
|
||||
@@ -63,10 +70,15 @@ NEXT_PUBLIC_API_URL=https://your-fiscal-domain.com
|
||||
- `DATABASE_URL` - PostgreSQL connection string
|
||||
- `PORT` - Server port (default: 3001)
|
||||
- `NODE_ENV` - Environment (development/production)
|
||||
- `BETTER_AUTH_SECRET` - Required in production; use a long random secret
|
||||
- `BETTER_AUTH_BASE_URL` - Public backend URL used for auth callbacks
|
||||
|
||||
### Frontend
|
||||
- `NEXT_PUBLIC_API_URL` - Backend API URL
|
||||
|
||||
`NEXT_PUBLIC_API_URL` is used at image build time in the frontend Docker build.
|
||||
Set it in Coolify before deploying so the generated client bundle points to the correct backend URL.
|
||||
|
||||
## Database Setup
|
||||
|
||||
The application will automatically create the database schema on startup. To manually run migrations:
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { betterAuth } from "better-auth";
|
||||
import { Pool } from "pg";
|
||||
|
||||
const defaultDatabaseUrl = `postgres://${process.env.POSTGRES_USER || 'postgres'}:${process.env.POSTGRES_PASSWORD || 'postgres'}@${process.env.POSTGRES_HOST || 'localhost'}:5432/${process.env.POSTGRES_DB || 'fiscal'}`;
|
||||
|
||||
export const auth = betterAuth({
|
||||
database: new Pool({
|
||||
connectionString: process.env.DATABASE_URL || 'postgres://postgres:postgres@localhost:5432/fiscal',
|
||||
connectionString: process.env.DATABASE_URL || defaultDatabaseUrl,
|
||||
}),
|
||||
emailAndPassword: {
|
||||
enabled: true,
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import postgres from 'postgres';
|
||||
|
||||
const sql = postgres(process.env.DATABASE_URL || 'postgres://postgres:postgres@localhost:5432/fiscal', {
|
||||
const defaultDatabaseUrl = `postgres://${process.env.POSTGRES_USER || 'postgres'}:${process.env.POSTGRES_PASSWORD || 'postgres'}@${process.env.POSTGRES_HOST || 'localhost'}:5432/${process.env.POSTGRES_DB || 'fiscal'}`;
|
||||
|
||||
const sql = postgres(process.env.DATABASE_URL || defaultDatabaseUrl, {
|
||||
max: 10,
|
||||
idle_timeout: 20,
|
||||
connect_timeout: 10
|
||||
|
||||
@@ -3,13 +3,13 @@ services:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: fiscal
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-fiscal}
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres -d fiscal"]
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-fiscal}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
@@ -21,19 +21,22 @@ services:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- path: ./.env
|
||||
required: false
|
||||
- path: ../.env
|
||||
required: false
|
||||
environment:
|
||||
DATABASE_URL: postgres://postgres:postgres@postgres:5432/fiscal
|
||||
PORT: 3001
|
||||
JWT_SECRET: change-this-to-a-random-secret-key
|
||||
GITHUB_ID: ${GITHUB_ID}
|
||||
GITHUB_SECRET: ${GITHUB_SECRET}
|
||||
GOOGLE_ID: ${GOOGLE_ID}
|
||||
GOOGLE_SECRET: ${GOOGLE_SECRET}
|
||||
DATABASE_URL: ${DATABASE_URL:-postgres://postgres:postgres@postgres:5432/fiscal}
|
||||
PORT: ${PORT:-3001}
|
||||
POSTGRES_HOST: postgres
|
||||
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET:-local-dev-better-auth-secret-change-me}
|
||||
BETTER_AUTH_BASE_URL: ${BETTER_AUTH_BASE_URL:-http://localhost:3001}
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD", "bun", "-e", "require('http').createServer(() => {}).listen(3001)"]
|
||||
test: ["CMD-SHELL", "wget -q --spider http://localhost:3001/api/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -44,9 +47,11 @@ services:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://backend:3001}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
NEXT_PUBLIC_API_URL: http://backend:3001
|
||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://backend:3001}
|
||||
depends_on:
|
||||
- backend
|
||||
networks:
|
||||
|
||||
@@ -9,6 +9,8 @@ RUN npm install
|
||||
|
||||
# Build
|
||||
FROM base AS builder
|
||||
ARG NEXT_PUBLIC_API_URL=http://backend:3001
|
||||
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
RUN mkdir -p public && npm run build
|
||||
@@ -18,6 +20,8 @@ FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ARG NEXT_PUBLIC_API_URL=http://backend:3001
|
||||
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
|
||||
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
Reference in New Issue
Block a user