-
-
Notifications
You must be signed in to change notification settings - Fork 7.4k
-
First Check
- I added a very descriptive title here.
- I used the GitHub search to find a similar question and didn't find it.
- I searched in the documentation/README.
- I already searched in Google "How to do X" and didn't find any information.
- I already read and followed all the tutorial in the docs/README and didn't find an answer.
Commit to Help
- I commit to help with one of those options 👆
Example Code
services:
# --------------------
# Databases
# --------------------
user-db:
image: postgres:17
restart: always
env_file: .env
environment:
POSTGRES_USER: ${USER_DB_USER}
POSTGRES_PASSWORD: ${USER_DB_PASSWORD}
POSTGRES_DB: ${USER_DB}
volumes:
- user-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${USER_DB_USER} -d ${USER_DB}"]
interval: 10s
timeout: 5s
retries: 5
product-db:
image: postgres:17
restart: always
env_file: .env
environment:
POSTGRES_USER: ${PRODUCT_DB_USER}
POSTGRES_PASSWORD: ${PRODUCT_DB_PASSWORD}
POSTGRES_DB: ${PRODUCT_DB}
volumes:
- product-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${PRODUCT_DB_USER} -d ${PRODUCT_DB}"]
interval: 10s
timeout: 5s
retries: 5
order-db:
image: postgres:17
restart: always
env_file: .env
environment:
POSTGRES_USER: ${ORDER_DB_USER}
POSTGRES_PASSWORD: ${ORDER_DB_PASSWORD}
POSTGRES_DB: ${ORDER_DB}
volumes:
- order-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${ORDER_DB_USER} -d ${ORDER_DB}"]
interval: 10s
timeout: 5s
retries: 5
# --------------------
# Prestart Jobs
# --------------------
prestart-user:
image: '${DOCKER_IMAGE_USER_SERVICE?Variable not set}:${TAG-latest}'
build:
context: ./services/user-service
networks:
- traefik-public
- default
depends_on:
user-db:
condition: service_healthy
command: bash scripts/prestart.sh
env_file:
- .env
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${USER_DB_SERVER}
- POSTGRES_USER=${USER_DB_USER}
- POSTGRES_PASSWORD=${USER_DB_PASSWORD}
- POSTGRES_DB=${USER_DB}
- DATABASE_URL=postgresql://${USER_DB_USER}:${USER_DB_PASSWORD}@${USER_DB_SERVER}:5432/${USER_DB}
- SENTRY_DSN=${SENTRY_DSN}
prestart-product:
image: '${DOCKER_IMAGE_PRODUCT_SERVICE?Variable not set}:${TAG-latest}'
build:
context: ./services/product-service
networks:
- traefik-public
- default
depends_on:
product-db:
condition: service_healthy
command: bash scripts/prestart.sh
env_file:
- .env
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${PRODUCT_DB_SERVER}
- POSTGRES_USER=${PRODUCT_DB_USER}
- POSTGRES_PASSWORD=${PRODUCT_DB_PASSWORD}
- POSTGRES_DB=${PRODUCT_DB}
- DATABASE_URL=postgresql://${PRODUCT_DB_USER}:${PRODUCT_DB_PASSWORD}@${PRODUCT_DB_SERVER}:5432/${PRODUCT_DB}
- SENTRY_DSN=${SENTRY_DSN}
prestart-order:
image: '${DOCKER_IMAGE_ORDER_SERVICE?Variable not set}:${TAG-latest}'
build:
context: ./services/order-service
networks:
- traefik-public
- default
depends_on:
order-db:
condition: service_healthy
command: bash scripts/prestart.sh
env_file:
- .env
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${ORDER_DB_SERVER}
- POSTGRES_USER=${ORDER_DB_USER}
- POSTGRES_PASSWORD=${ORDER_DB_PASSWORD}
- POSTGRES_DB=${ORDER_DB}
- DATABASE_URL=postgresql://${ORDER_DB_USER}:${ORDER_DB_PASSWORD}@${ORDER_DB_SERVER}:5432/${ORDER_DB}
- SENTRY_DSN=${SENTRY_DSN}
# --------------------
# Microservices
# --------------------
user-service:
build: ./services/user-service
restart: always
networks:
- traefik-public
- default
depends_on:
user-db:
condition: service_healthy
restart: true
prestart-user:
condition: service_completed_successfully
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/users/utils/health-check/"]
interval: 10s
timeout: 5s
retries: 5
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${USER_DB_SERVER}
- POSTGRES_USER=${USER_DB_USER}
- POSTGRES_PASSWORD=${USER_DB_PASSWORD}
- POSTGRES_DB=${USER_DB}
- DATABASE_URL=postgresql://${USER_DB_USER}:${USER_DB_PASSWORD}@${USER_DB_SERVER}:5432/${USER_DB}
- SENTRY_DSN=${SENTRY_DSN}
- DATABASE_URL=postgresql://user_admin:user_pass@user-db:5432/user_db
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
# Service port
- traefik.http.services.user-service.loadbalancer.server.port=8000
# HTTP Router
- traefik.http.routers.user-service-http.rule= PathPrefix('/users')
- traefik.http.routers.user-service-http.entrypoints=http
# HTTPS Router
- traefik.http.routers.user-service-https.rule= PathPrefix('/users')
- traefik.http.routers.user-service-https.entrypoints=https
- traefik.http.routers.user-service-https.tls=true
- traefik.http.routers.user-service-https.tls.certresolver=le
- traefik.http.routers.user-service-http.middlewares=https-redirect
product-service:
build: ./services/product-service
restart: always
networks:
- traefik-public
- default
depends_on:
product-db:
condition: service_healthy
restart: true
prestart-product:
condition: service_completed_successfully
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8002/products/utils/health-check/"]
interval: 10s
timeout: 5s
retries: 5
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${PRODUCT_DB_SERVER}
- POSTGRES_USER=${PRODUCT_DB_USER}
- POSTGRES_PASSWORD=${PRODUCT_DB_PASSWORD}
- POSTGRES_DB=${PRODUCT_DB}
- DATABASE_URL=postgresql://${PRODUCT_DB_USER}:${PRODUCT_DB_PASSWORD}@${PRODUCT_DB_SERVER}:5432/${PRODUCT_DB}
- SENTRY_DSN=${SENTRY_DSN}
- DATABASE_URL=postgresql://product_admin:product_pass@product-db:5432/product_db
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
# Service port
- traefik.http.services.product-service.loadbalancer.server.port=8000
# HTTP Router
- traefik.http.routers.product-service-http.rule= PathPrefix(`/products`)
- traefik.http.routers.product-service-http.entrypoints=http
- traefik.http.routers.product-service-http.middlewares=https-redirect
# HTTPS Router
- traefik.http.routers.product-service-https.rule=PathPrefix(`/products`)
- traefik.http.routers.product-service-https.entrypoints=https
- traefik.http.routers.product-service-https.tls=true
- traefik.http.routers.product-service-https.tls.certresolver=le
order-service:
build: ./services/order-service
restart: always
networks:
- traefik-public
- default
depends_on:
order-db:
condition: service_healthy
restart: true
prestart-order:
condition: service_completed_successfully
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8003/orders/utils/health-check/"]
interval: 10s
timeout: 5s
retries: 5
environment:
- DOMAIN=${DOMAIN}
- FRONTEND_HOST=${FRONTEND_HOST?Variable not set}
- ENVIRONMENT=${ENVIRONMENT}
- BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS}
- SECRET_KEY=${SECRET_KEY?Variable not set}
- FIRST_SUPERUSER=${FIRST_SUPERUSER?Variable not set}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD?Variable not set}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- EMAILS_FROM_EMAIL=${EMAILS_FROM_EMAIL}
- POSTGRES_SERVER=${ORDER_DB_SERVER}
- POSTGRES_USER=${ORDER_DB_USER}
- POSTGRES_PASSWORD=${ORDER_DB_PASSWORD}
- POSTGRES_DB=${ORDER_DB}
- DATABASE_URL=postgresql://${ORDER_DB_USER}:${ORDER_DB_PASSWORD}@${ORDER_DB_SERVER}:5432/${ORDER_DB}
- SENTRY_DSN=${SENTRY_DSN}
- DATABASE_URL=postgresql://order_admin:order_pass@order-db:5432/order_db
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
# Service port
- traefik.http.services.order-service.loadbalancer.server.port=8000
# HTTP Router
- traefik.http.routers.order-service-http.rule=PathPrefix(`/orders`)
- traefik.http.routers.order-service-http.entrypoints=http
- traefik.http.routers.order-service-http.middlewares=https-redirect
# HTTPS Router
- traefik.http.routers.order-service-https.rule= PathPrefix(`/orders`)
- traefik.http.routers.order-service-https.entrypoints=https
- traefik.http.routers.order-service-https.tls=true
- traefik.http.routers.order-service-https.tls.certresolver=le
adminer:
image: adminer
restart: always
networks:
- traefik-public
- default
depends_on:
- user-db
environment:
- ADMINER_DESIGN=pepa-linha-dark
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-http.rule=Host(`adminer.${DOMAIN?Variable not set}`)
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-http.entrypoints=http
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-http.middlewares=https-redirect
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-https.rule=Host(`adminer.${DOMAIN?Variable not set}`)
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-https.entrypoints=https
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-https.tls=true
- traefik.http.routers.${STACK_NAME?Variable not set}-adminer-https.tls.certresolver=le
- traefik.http.services.${STACK_NAME?Variable not set}-adminer.loadbalancer.server.port=8080
# --------------------
# Frontend
# --------------------
frontend:
build:
context: ./frontend
args:
- VITE_API_URL=https://api.${DOMAIN}
- NODE_ENV=production
restart: always
networks:
- traefik-public
- default
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
# Service port
- traefik.http.services.frontend.loadbalancer.server.port=80
# HTTP Router
- traefik.http.routers.frontend-http.rule=Host(`dashboard.${DOMAIN}`)
- traefik.http.routers.frontend-http.entrypoints=http
- traefik.http.routers.frontend-http.middlewares=https-redirect
# HTTPS Router
- traefik.http.routers.frontend-https.rule=Host(`dashboard.${DOMAIN}`)
- traefik.http.routers.frontend-https.entrypoints=https
- traefik.http.routers.frontend-https.tls=true
- traefik.http.routers.frontend-https.tls.certresolver=le
# --------------------
# Volumes & Networks
# --------------------
volumes:
user-db-data:
product-db-data:
order-db-data:
networks:
traefik-public:
external: true
Description
https://github.com/sivajik34/FastCart
I'm trying to add micro services user_service order_service product_service and getting port issues.
below 3 are working
http://localhost:8001/users/docs#/
http://localhost:8002/products/docs#/
http://localhost:8003/orders/docs#/
but from frontend it is not working http://localhost:8000/users/users/me net::ERR_CONNECTION_REFUSED
it seems I'm not able to configure api gateway.
can you help me on this
Operating System
Windows
Operating System Details
windows
Python Version
python 3.12
Additional Context
No response
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment