version: '3.4' services: api-dev: image: api-dev restart: always build: context: . dockerfile: ./api.dockerfile command: ["tactical-api"] environment: API_PORT: ${API_PORT} ports: - "8000:${API_PORT}" volumes: - tactical-data-dev:/opt/tactical - ..:/workspace:cached networks: dev: aliases: - tactical-backend app-dev: image: node:14-alpine restart: always command: /bin/sh -c "npm install npm@latest -g && npm install && npm run serve -- --host 0.0.0.0 --port ${APP_PORT}" working_dir: /workspace/web volumes: - ..:/workspace:cached ports: - "8080:${APP_PORT}" networks: dev: aliases: - tactical-frontend # nats nats-dev: image: ${IMAGE_REPO}tactical-nats:${VERSION} restart: always environment: API_HOST: ${API_HOST} API_PORT: ${API_PORT} DEV: 1 ports: - "4222:4222" volumes: - tactical-data-dev:/opt/tactical - ..:/workspace:cached networks: dev: aliases: - ${API_HOST} - tactical-nats # meshcentral container meshcentral-dev: image: ${IMAGE_REPO}tactical-meshcentral:${VERSION} restart: always environment: MESH_HOST: ${MESH_HOST} MESH_USER: ${MESH_USER} MESH_PASS: ${MESH_PASS} MONGODB_USER: ${MONGODB_USER} MONGODB_PASSWORD: ${MONGODB_PASSWORD} NGINX_HOST_IP: 172.21.0.20 networks: dev: aliases: - tactical-meshcentral - ${MESH_HOST} volumes: - tactical-data-dev:/opt/tactical - mesh-data-dev:/home/node/app/meshcentral-data depends_on: - mongodb-dev # mongodb container for meshcentral mongodb-dev: image: mongo:4.4 restart: always environment: MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER} MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD} MONGO_INITDB_DATABASE: meshcentral networks: dev: aliases: - tactical-mongodb volumes: - mongo-dev-data:/data/db # postgres database for api service postgres-dev: image: postgres:13-alpine restart: always environment: POSTGRES_DB: tacticalrmm POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASS} volumes: - postgres-data-dev:/var/lib/postgresql/data networks: dev: aliases: - tactical-postgres # redis container for celery tasks redis-dev: restart: always image: redis:6.0-alpine networks: dev: aliases: - tactical-redis init-dev: image: api-dev build: context: . dockerfile: ./api.dockerfile restart: on-failure command: ["tactical-init-dev"] environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASS: ${POSTGRES_PASS} APP_HOST: ${APP_HOST} API_HOST: ${API_HOST} MESH_HOST: ${MESH_HOST} MESH_USER: ${MESH_USER} TRMM_USER: ${TRMM_USER} TRMM_PASS: ${TRMM_PASS} HTTP_PROTOCOL: ${HTTP_PROTOCOL} APP_PORT: ${APP_PORT} depends_on: - postgres-dev - meshcentral-dev networks: - dev volumes: - tactical-data-dev:/opt/tactical - ..:/workspace:cached # container for celery worker service celery-dev: image: api-dev build: context: . dockerfile: ./api.dockerfile command: ["tactical-celery-dev"] restart: always networks: - dev volumes: - tactical-data-dev:/opt/tactical - ..:/workspace:cached depends_on: - postgres-dev - redis-dev # container for celery beat service celerybeat-dev: image: api-dev build: context: . dockerfile: ./api.dockerfile command: ["tactical-celerybeat-dev"] restart: always networks: - dev volumes: - tactical-data-dev:/opt/tactical - ..:/workspace:cached depends_on: - postgres-dev - redis-dev nginx-dev: # container for tactical reverse proxy image: ${IMAGE_REPO}tactical-nginx:${VERSION} restart: always environment: APP_HOST: ${APP_HOST} API_HOST: ${API_HOST} MESH_HOST: ${MESH_HOST} CERT_PUB_KEY: ${CERT_PUB_KEY} CERT_PRIV_KEY: ${CERT_PRIV_KEY} APP_PORT: ${APP_PORT} API_PORT: ${API_PORT} networks: dev: ipv4_address: 172.21.0.20 ports: - "80:80" - "443:443" volumes: - tactical-data-dev:/opt/tactical volumes: tactical-data-dev: postgres-data-dev: mongo-dev-data: mesh-data-dev: networks: dev: driver: bridge ipam: driver: default config: - subnet: 172.21.0.0/24