diff --git a/docker-stack.yml b/docker-stack.yml new file mode 100644 index 00000000..d34d3e62 --- /dev/null +++ b/docker-stack.yml @@ -0,0 +1,307 @@ +networks: + traefik-public: + external: true + name: traefik-public +services: + backend: + build: + args: + INSTALL_DEV: "false" + context: /home/aurthur/Development/Python/felicity/felicity_lims/backend + dockerfile: backend.dockerfile + depends_on: + db: + condition: service_started + deploy: + labels: + - traefik.enable=true + - traefik.constraint-label-stack=felicity.com + - traefik.http.routers.felicity-com-backend-http.rule=PathPrefix(`/api`) || + PathPrefix(`/docs`) || PathPrefix(`/redoc`) + - traefik.http.services.felicity-com-backend.loadbalancer.server.port=80 + environment: + BACKEND_CORS_ORIGINS: '["http://localhost", "http://localhost:4200", "http://localhost:3000", + "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", + "https://localhost:8080", "http://dev.felicity.com", "https://stag.felicity.com", + "https://felicity.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]' + DOCKER_IMAGE_BACKEND: lims_backend + DOCKER_IMAGE_CELERYWORKER: lims_celeryworker + DOCKER_IMAGE_FRONTEND: lims_frontend + DOMAIN: localhost + EMAILS_FROM_EMAIL: info@felicity.com + FIRST_SUPERUSER: admin@felicity.com + FIRST_SUPERUSER_PASSWORD: admin + FLOWER_BASIC_AUTH: admin:admin + PGADMIN_DEFAULT_EMAIL: admin@felicity.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_LISTEN_PORT: '5050' + POSTGRES_DB: app + POSTGRES_PASSWORD: felicity + POSTGRES_SERVER: db + POSTGRES_USER: postgres + PROJECT_NAME: felicity + SECRET_KEY: 88d08895c7ddd073af5a7d284a9f58a55391ff66755814af98b693064c2aec77 + SENTRY_DSN: '' + SERVER_HOST: https://localhost + SERVER_NAME: localhost + SMTP_HOST: '' + SMTP_PASSWORD: '' + SMTP_PORT: '587' + SMTP_TLS: "True" + SMTP_USER: '' + STACK_NAME: felicity-com + TRAEFIK_PUBLIC_NETWORK: traefik-public + TRAEFIK_PUBLIC_TAG: traefik-public + TRAEFIK_TAG: felicity.com + USERS_OPEN_REGISTRATION: "False" + image: lims_backend:latest + celeryworker: + build: + args: + INSTALL_DEV: "false" + context: /home/aurthur/Development/Python/felicity/felicity_lims/backend + dockerfile: celeryworker.dockerfile + depends_on: + db: + condition: service_started + queue: + condition: service_started + environment: + BACKEND_CORS_ORIGINS: '["http://localhost", "http://localhost:4200", "http://localhost:3000", + "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", + "https://localhost:8080", "http://dev.felicity.com", "https://stag.felicity.com", + "https://felicity.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]' + DOCKER_IMAGE_BACKEND: lims_backend + DOCKER_IMAGE_CELERYWORKER: lims_celeryworker + DOCKER_IMAGE_FRONTEND: lims_frontend + DOMAIN: localhost + EMAILS_FROM_EMAIL: info@felicity.com + FIRST_SUPERUSER: admin@felicity.com + FIRST_SUPERUSER_PASSWORD: admin + FLOWER_BASIC_AUTH: admin:admin + PGADMIN_DEFAULT_EMAIL: admin@felicity.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_LISTEN_PORT: '5050' + POSTGRES_DB: app + POSTGRES_PASSWORD: felicity + POSTGRES_SERVER: db + POSTGRES_USER: postgres + PROJECT_NAME: felicity + SECRET_KEY: 88d08895c7ddd073af5a7d284a9f58a55391ff66755814af98b693064c2aec77 + SENTRY_DSN: '' + SERVER_HOST: https://localhost + SERVER_NAME: localhost + SMTP_HOST: '' + SMTP_PASSWORD: '' + SMTP_PORT: '587' + SMTP_TLS: "True" + SMTP_USER: '' + STACK_NAME: felicity-com + TRAEFIK_PUBLIC_NETWORK: traefik-public + TRAEFIK_PUBLIC_TAG: traefik-public + TRAEFIK_TAG: felicity.com + USERS_OPEN_REGISTRATION: "False" + image: lims_celeryworker:latest + db: + deploy: + placement: + constraints: + - node.labels.felicity-com.app-db-data == true + environment: + BACKEND_CORS_ORIGINS: '["http://localhost", "http://localhost:4200", "http://localhost:3000", + "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", + "https://localhost:8080", "http://dev.felicity.com", "https://stag.felicity.com", + "https://felicity.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]' + DOCKER_IMAGE_BACKEND: lims_backend + DOCKER_IMAGE_CELERYWORKER: lims_celeryworker + DOCKER_IMAGE_FRONTEND: lims_frontend + DOMAIN: localhost + EMAILS_FROM_EMAIL: info@felicity.com + FIRST_SUPERUSER: admin@felicity.com + FIRST_SUPERUSER_PASSWORD: admin + FLOWER_BASIC_AUTH: admin:admin + PGADMIN_DEFAULT_EMAIL: admin@felicity.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_LISTEN_PORT: '5050' + PGDATA: /var/lib/postgresql/data/pgdata + POSTGRES_DB: app + POSTGRES_PASSWORD: felicity + POSTGRES_SERVER: db + POSTGRES_USER: postgres + PROJECT_NAME: felicity + SECRET_KEY: 88d08895c7ddd073af5a7d284a9f58a55391ff66755814af98b693064c2aec77 + SENTRY_DSN: '' + SMTP_HOST: '' + SMTP_PASSWORD: '' + SMTP_PORT: '587' + SMTP_TLS: "True" + SMTP_USER: '' + STACK_NAME: felicity-com + TRAEFIK_PUBLIC_NETWORK: traefik-public + TRAEFIK_PUBLIC_TAG: traefik-public + TRAEFIK_TAG: felicity.com + USERS_OPEN_REGISTRATION: "False" + image: postgres:12 + volumes: + - app-db-data:/var/lib/postgresql/data/pgdata:rw + flower: + command: + - --broker=amqp://guest@queue:5672// + deploy: + labels: + - traefik.enable=true + - traefik.docker.network=traefik-public + - traefik.constraint-label=traefik-public + - traefik.http.routers.felicity-com-flower-http.rule=Host(`flower.localhost`) + - traefik.http.routers.felicity-com-flower-http.entrypoints=http + - traefik.http.routers.felicity-com-flower-http.middlewares=felicity-com-https-redirect + - traefik.http.routers.felicity-com-flower-https.rule=Host(`flower.localhost`) + - traefik.http.routers.felicity-com-flower-https.entrypoints=https + - traefik.http.routers.felicity-com-flower-https.tls=true + - traefik.http.routers.felicity-com-flower-https.tls.certresolver=le + - traefik.http.services.felicity-com-flower.loadbalancer.server.port=5555 + environment: + BACKEND_CORS_ORIGINS: '["http://localhost", "http://localhost:4200", "http://localhost:3000", + "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", + "https://localhost:8080", "http://dev.felicity.com", "https://stag.felicity.com", + "https://felicity.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]' + DOCKER_IMAGE_BACKEND: lims_backend + DOCKER_IMAGE_CELERYWORKER: lims_celeryworker + DOCKER_IMAGE_FRONTEND: lims_frontend + DOMAIN: localhost + EMAILS_FROM_EMAIL: info@felicity.com + FIRST_SUPERUSER: admin@felicity.com + FIRST_SUPERUSER_PASSWORD: admin + FLOWER_BASIC_AUTH: admin:admin + PGADMIN_DEFAULT_EMAIL: admin@felicity.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_LISTEN_PORT: '5050' + POSTGRES_DB: app + POSTGRES_PASSWORD: felicity + POSTGRES_SERVER: db + POSTGRES_USER: postgres + PROJECT_NAME: felicity + SECRET_KEY: 88d08895c7ddd073af5a7d284a9f58a55391ff66755814af98b693064c2aec77 + SENTRY_DSN: '' + SMTP_HOST: '' + SMTP_PASSWORD: '' + SMTP_PORT: '587' + SMTP_TLS: "True" + SMTP_USER: '' + STACK_NAME: felicity-com + TRAEFIK_PUBLIC_NETWORK: traefik-public + TRAEFIK_PUBLIC_TAG: traefik-public + TRAEFIK_TAG: felicity.com + USERS_OPEN_REGISTRATION: "False" + image: mher/flower + networks: + default: null + traefik-public: null + frontend: + build: + args: + FRONTEND_ENV: production + context: /home/aurthur/Development/Python/felicity/felicity_lims/frontend + deploy: + labels: + - traefik.enable=true + - traefik.constraint-label-stack=felicity.com + - traefik.http.routers.felicity-com-frontend-http.rule=PathPrefix(`/`) + - traefik.http.services.felicity-com-frontend.loadbalancer.server.port=80 + image: lims_frontend:latest + pgadmin: + depends_on: + db: + condition: service_started + deploy: + labels: + - traefik.enable=true + - traefik.docker.network=traefik-public + - traefik.constraint-label=traefik-public + - traefik.http.routers.felicity-com-pgadmin-http.rule=Host(`pgadmin.localhost`) + - traefik.http.routers.felicity-com-pgadmin-http.entrypoints=http + - traefik.http.routers.felicity-com-pgadmin-http.middlewares=felicity-com-https-redirect + - traefik.http.routers.felicity-com-pgadmin-https.rule=Host(`pgadmin.localhost`) + - traefik.http.routers.felicity-com-pgadmin-https.entrypoints=https + - traefik.http.routers.felicity-com-pgadmin-https.tls=true + - traefik.http.routers.felicity-com-pgadmin-https.tls.certresolver=le + - traefik.http.services.felicity-com-pgadmin.loadbalancer.server.port=5050 + environment: + BACKEND_CORS_ORIGINS: '["http://localhost", "http://localhost:4200", "http://localhost:3000", + "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", + "https://localhost:8080", "http://dev.felicity.com", "https://stag.felicity.com", + "https://felicity.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]' + DOCKER_IMAGE_BACKEND: lims_backend + DOCKER_IMAGE_CELERYWORKER: lims_celeryworker + DOCKER_IMAGE_FRONTEND: lims_frontend + DOMAIN: localhost + EMAILS_FROM_EMAIL: info@felicity.com + FIRST_SUPERUSER: admin@felicity.com + FIRST_SUPERUSER_PASSWORD: admin + FLOWER_BASIC_AUTH: admin:admin + PGADMIN_DEFAULT_EMAIL: admin@felicity.com + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_LISTEN_PORT: '5050' + POSTGRES_DB: app + POSTGRES_PASSWORD: felicity + POSTGRES_SERVER: db + POSTGRES_USER: postgres + PROJECT_NAME: felicity + SECRET_KEY: 88d08895c7ddd073af5a7d284a9f58a55391ff66755814af98b693064c2aec77 + SENTRY_DSN: '' + SMTP_HOST: '' + SMTP_PASSWORD: '' + SMTP_PORT: '587' + SMTP_TLS: "True" + SMTP_USER: '' + STACK_NAME: felicity-com + TRAEFIK_PUBLIC_NETWORK: traefik-public + TRAEFIK_PUBLIC_TAG: traefik-public + TRAEFIK_TAG: felicity.com + USERS_OPEN_REGISTRATION: "False" + image: dpage/pgadmin4 + networks: + default: null + traefik-public: null + proxy: + command: + - --providers.docker + - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `felicity.com`) + - --providers.docker.exposedbydefault=false + - --providers.docker.swarmmode + - --accesslog + - --log + - --api + deploy: + labels: + - traefik.enable=true + - traefik.docker.network=traefik-public + - traefik.constraint-label=traefik-public + - traefik.http.middlewares.felicity-com-https-redirect.redirectscheme.scheme=https + - traefik.http.middlewares.felicity-com-https-redirect.redirectscheme.permanent=true + - traefik.http.routers.felicity-com-proxy-http.rule=Host(`localhost`) || Host(`www.localhost`) + - traefik.http.routers.felicity-com-proxy-http.entrypoints=http + - traefik.http.routers.felicity-com-proxy-https.rule=Host(`localhost`) || Host(`www.localhost`) + - traefik.http.routers.felicity-com-proxy-https.entrypoints=https + - traefik.http.routers.felicity-com-proxy-https.tls=true + - traefik.http.routers.felicity-com-proxy-https.tls.certresolver=le + - traefik.http.services.felicity-com-proxy.loadbalancer.server.port=80 + - traefik.http.middlewares.felicity-com-www-redirect.redirectregex.regex=^https?://(www.)?(localhost)/(.*) + - traefik.http.middlewares.felicity-com-www-redirect.redirectregex.replacement=https://localhost/$${3} + - traefik.http.routers.felicity-com-proxy-https.middlewares=felicity-com-www-redirect + - traefik.http.routers.felicity-com-proxy-http.middlewares=felicity-com-www-redirect,felicity-com-https-redirect + placement: + constraints: + - node.role == manager + image: traefik:v2.2 + networks: + default: null + traefik-public: null + volumes: + - /var/run/docker.sock:/var/run/docker.sock:rw + queue: + image: rabbitmq:3 +version: '3.3' +volumes: + app-db-data: {} +