123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- # To make it easier to self-host, we have a preset docker compose config that also
- # has a container with a Postgres instance running.
- # You can tweak around this file to match your instances
- # PROFILES EXPLANATION:
- #
- # We use Docker Compose profiles to manage different deployment scenarios and avoid port conflicts.
- #
- # These are all the available profiles:
- # - default: All-in-one service + database + auto-migration (recommended for most users)
- # - default-no-db: All-in-one service without database (for users with external DB)
- # - backend: The backend service only
- # - app: The main Hoppscotch application only
- # - admin: The self-host admin dashboard only
- # - webapp: The static web app server only
- # - database: Just the PostgreSQL database
- # - except-webapp: All services except webapp for local development
- # - deprecated: All deprecated services (not recommended)
- # USAGE:
- #
- # To run the default setup: docker compose --profile default up
- # To run without database: docker compose --profile default-no-db up
- # To run specific components: docker compose --profile backend up
- # To run all except webapp: docker compose --profile except-webapp up
- # To run deprecated services: docker compose --profile deprecated up
- # NOTE: The default and default-no-db profiles should not be mixed with individual service
- # profiles as they would conflict on ports.
- services:
- # This service runs the backend app in the port 3170
- hoppscotch-backend:
- profiles: ["backend", "except-webapp"]
- container_name: hoppscotch-backend
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: backend
- env_file:
- - ./.env
- restart: always
- environment:
- # Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
- - DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300
- - PORT=8080
- volumes:
- # Uncomment the line below when modifying code. Only applicable when using the "dev" target.
- # - ./packages/hoppscotch-backend/:/usr/src/app
- - /usr/src/app/node_modules/
- depends_on:
- hoppscotch-db:
- condition: service_healthy
- ports:
- - "3180:80"
- - "3170:3170"
- # The main hoppscotch app. This will be hosted at port 3000
- # NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for
- # the SH admin dashboard server at packages/hoppscotch-selfhost-web/Caddyfile
- hoppscotch-app:
- profiles: ["app"]
- container_name: hoppscotch-app
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: app
- env_file:
- - ./.env
- depends_on:
- - hoppscotch-backend
- ports:
- - "3080:80"
- - "3000:3000"
- # The Self Host dashboard for managing the app. This will be hosted at port 3100
- # NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for
- # the SH admin dashboard server at packages/hoppscotch-sh-admin/Caddyfile
- hoppscotch-sh-admin:
- profiles: ["admin", "except-webapp"]
- container_name: hoppscotch-sh-admin
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: sh_admin
- env_file:
- - ./.env
- depends_on:
- - hoppscotch-backend
- ports:
- - "3280:80"
- - "3100:3100"
- # The static server for serving web content to desktop shell, hosted at port 3200
- hoppscotch-webapp-server:
- profiles: ["webapp"]
- container_name: hoppscotch-webapp-server
- env_file:
- - ./.env
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: webapp_server
- ports:
- - "3200:3200"
- # The service that spins up all services at once in one container
- hoppscotch-aio:
- profiles: ["default", "default-no-db"]
- container_name: hoppscotch-aio
- restart: unless-stopped
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: aio
- env_file:
- - ./.env
- depends_on:
- hoppscotch-db:
- condition: service_healthy
- ports:
- - "3000:3000"
- - "3100:3100"
- - "3170:3170"
- - "3200:3200"
- - "3080:80"
- # The preset DB service, you can delete/comment the below lines if
- # you are using an external postgres instance
- # This will be exposed at port 5432
- hoppscotch-db:
- profiles: ["default", "database", "except-webapp"]
- image: postgres:15
- ports:
- - "5432:5432"
- user: postgres
- environment:
- # The default user defined by the docker image
- POSTGRES_USER: postgres
- # NOTE: Please UPDATE THIS PASSWORD!
- POSTGRES_PASSWORD: testpass
- POSTGRES_DB: hoppscotch
- healthcheck:
- test:
- [
- "CMD-SHELL",
- "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",
- ]
- interval: 5s
- timeout: 5s
- retries: 10
- # Auto-migration service - handles database migrations automatically
- hoppscotch-migrate:
- profiles: ["default", "except-webapp"]
- build:
- dockerfile: prod.Dockerfile
- context: .
- target: backend
- env_file:
- - ./.env
- depends_on:
- hoppscotch-db:
- condition: service_healthy
- command: sh -c "pnpx prisma migrate deploy"
- # All the services listed below are deprecated
- # These services are kept for backward compatibility but should not be used for new deployments
- hoppscotch-old-backend:
- profiles: ["deprecated"]
- container_name: hoppscotch-old-backend
- build:
- dockerfile: packages/hoppscotch-backend/Dockerfile
- context: .
- target: prod
- env_file:
- - ./.env
- restart: always
- environment:
- # Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
- - DATABASE_URL=postgresql://postgres:testpass@hoppscotch-db:5432/hoppscotch?connect_timeout=300
- - PORT=3000
- volumes:
- # Uncomment the line below when modifying code. Only applicable when using the "dev" target.
- # - ./packages/hoppscotch-backend/:/usr/src/app
- - /usr/src/app/node_modules/
- depends_on:
- hoppscotch-db:
- condition: service_healthy
- ports:
- - "3170:3000"
- hoppscotch-old-app:
- profiles: ["deprecated"]
- container_name: hoppscotch-old-app
- build:
- dockerfile: packages/hoppscotch-selfhost-web/Dockerfile
- context: .
- env_file:
- - ./.env
- depends_on:
- - hoppscotch-old-backend
- ports:
- - "3000:8080"
- hoppscotch-old-sh-admin:
- profiles: ["deprecated"]
- container_name: hoppscotch-old-sh-admin
- build:
- dockerfile: packages/hoppscotch-sh-admin/Dockerfile
- context: .
- env_file:
- - ./.env
- depends_on:
- - hoppscotch-old-backend
- ports:
- - "3100:8080"
- # DEPLOYMENT SCENARIOS:
- # 1. Default deployment (recommended):
- # docker compose --profile default up
- # This will start: AIO + database + auto-migration
- #
- # 2. Default deployment without database:
- # docker compose --profile default-no-db up
- # This will start: AIO only (use when you have an external database)
- #
- # 3. Individual service deployment:
- # docker compose --profile backend up # Just the backend
- # docker compose --profile app up # Just the app
- # docker compose --profile admin up # Just the admin dashboard
- # docker compose --profile webapp up # Just the static web server
- # docker compose --profile database up # Just the database
- #
- # 4. Development deployment:
- # docker compose --profile except-webapp up # All services except webapp
- #
- # 5. Deprecated services:
- # docker compose --profile deprecated up
- # This will start all deprecated services (not recommended for new deployments)
- #
- # Remember: The default and default-no-db profiles should not be mixed with individual service
- # profiles as they would conflict on ports.
|