feat: add docker support

This commit is contained in:
typical bob 2025-04-19 20:35:49 +06:00
parent ad1ded7abb
commit 5c4c47688d
3 changed files with 90 additions and 6 deletions

View file

@ -1,10 +1,25 @@
DATABASE_URL="postgresql://user:password@localhost:5432/db?schema=public"
# Database credentials
PG_USER=p-stream_user
# Use a strong password
PG_PASSWORD=password
PG_DB=p-stream_backend
DATABASE_URL="postgresql://${PG_USER}:${PG_PASSWORD}@localhost:5432/${PG_DB}?schema=public"
DATABASE_URL_DOCKER="postgresql://${PG_USER}:${PG_PASSWORD}@postgres:5432/${PG_DB}?schema=public"
# App metadata
META_NAME=''
META_DESCRIPTION=''
# Security (generate with `openssl rand -base64 24` or use https://bitwarden.com/password-generator/)
CRYPTO_SECRET=''
# API Keys
# From https://www.themoviedb.org/settings/api
TMDB_API_KEY=''
# From https://trakt.tv/oauth/applications
TRAKT_CLIENT_ID=''
TRAKT_SECRET_ID=''
# Optional: Captcha
CAPTCHA=false
CAPTCHA_CLIENT_KEY=''
# USE A RANDOM PASSWORD GENERATOR LIKE THIS: https://bitwarden.com/password-generator/ NEVER SHARE
CRYPTO_SECRET=''
TMDB_API_KEY=''
TRAKT_CLIENT_ID=''
TRAKT_SECRET_ID=''

17
Dockerfile Normal file
View file

@ -0,0 +1,17 @@
FROM node:23-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build
EXPOSE 3000
CMD ["sh", "-c", "npx prisma migrate deploy && node .output/server/index.mjs"]

52
docker-compose.yml Normal file
View file

@ -0,0 +1,52 @@
services:
postgres:
image: postgres:15-alpine
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U $$PG_USER -d $$PG_DB" ]
interval: 5s
retries: 10
timeout: 2s
environment:
- POSTGRES_USER=${PG_USER}
- POSTGRES_PASSWORD=${PG_PASSWORD}
- POSTGRES_DB=${PG_DB}
volumes:
- postgres-data:/var/lib/postgresql/data
env_file:
- .env
ports:
- '5432:5432'
networks:
- p-stream-network
p-stream:
build: .
restart: unless-stopped
environment:
DATABASE_URL: ${DATABASE_URL_DOCKER:?database URL required}
META_NAME: ${META_NAME}
META_DESCRIPTION: ${META_DESCRIPTION}
CRYPTO_SECRET: ${CRYPTO_SECRET:?crypto secret required}
TMDB_API_KEY: ${TMDB_API_KEY:?TMDB API key password required}
TRAKT_CLIENT_ID: ${TRAKT_CLIENT_ID:?TMDB client ID password required}
TRAKT_SECRET_ID: ${TRAKT_SECRET_ID:?TMDB secret ID password required}
CAPTCHA: ${CAPTCHA}
CAPTCHA_CLIENT_KEY: ${CAPTCHA_CLIENT_KEY}
NODE_ENV: ${NODE_ENV:-production}
env_file:
- .env
ports:
- '3000:3000'
depends_on:
postgres:
condition: service_healthy
networks:
- p-stream-network
networks:
p-stream-network:
driver: bridge
volumes:
postgres-data: