# Remote team self-host stack — Mattermost + Vikunja + Vaultwarden
# Curl + run:
#   curl -O https://osalt.dev/stack/remote-team/compose.yml
#   curl -O https://osalt.dev/stack/remote-team/.env.example && mv .env.example .env
#   docker compose up -d
#
# Not in this file (per stack editorial):
#   - Outline: needs postgres + redis + S3-compatible storage. See
#     https://github.com/outline/outline/blob/main/docker/docker-compose.yml.
#   - Jitsi Meet: multi-container (web + prosody + jicofo + jvb) with
#     STUN/TURN networking. See https://github.com/jitsi/docker-jitsi-meet.

services:
  mattermost-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${MATTERMOST_DB_USER:-mmuser}
      POSTGRES_PASSWORD: ${MATTERMOST_DB_PASSWORD:?set MATTERMOST_DB_PASSWORD in .env}
      POSTGRES_DB: ${MATTERMOST_DB_NAME:-mattermost}
    volumes:
      - mattermost_db:/var/lib/postgresql/data

  mattermost:
    image: mattermost/mattermost-team-edition:9.11
    restart: unless-stopped
    depends_on:
      - mattermost-db
    ports:
      - "${MATTERMOST_PORT:-8065}:8065"
    environment:
      TZ: ${TZ:-UTC}
      MM_SQLSETTINGS_DRIVERNAME: postgres
      MM_SQLSETTINGS_DATASOURCE: postgres://${MATTERMOST_DB_USER:-mmuser}:${MATTERMOST_DB_PASSWORD}@mattermost-db:5432/${MATTERMOST_DB_NAME:-mattermost}?sslmode=disable&connect_timeout=10
      MM_SERVICESETTINGS_SITEURL: ${MATTERMOST_SITE_URL:-http://localhost:8065}
    volumes:
      - mattermost_data:/mattermost/data
      - mattermost_logs:/mattermost/logs
      - mattermost_config:/mattermost/config
      - mattermost_plugins:/mattermost/plugins
      - mattermost_client_plugins:/mattermost/client/plugins

  vikunja:
    image: vikunja/vikunja:0.24.6
    restart: unless-stopped
    ports:
      - "${VIKUNJA_PORT:-3456}:3456"
    environment:
      VIKUNJA_SERVICE_PUBLICURL: ${VIKUNJA_PUBLIC_URL:-http://localhost:3456/}
      VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_JWT_SECRET:?set VIKUNJA_JWT_SECRET in .env}
      VIKUNJA_DATABASE_TYPE: sqlite
      VIKUNJA_DATABASE_PATH: /db/vikunja.db
    volumes:
      - vikunja_data:/db
      - vikunja_files:/app/vikunja/files

  vaultwarden:
    image: vaultwarden/server:1.32.6
    restart: unless-stopped
    ports:
      - "${VAULTWARDEN_PORT:-8222}:80"
    environment:
      DOMAIN: ${VAULTWARDEN_DOMAIN:-http://localhost:8222}
      ADMIN_TOKEN: ${VAULTWARDEN_ADMIN_TOKEN:?set VAULTWARDEN_ADMIN_TOKEN in .env}
      SIGNUPS_ALLOWED: ${VAULTWARDEN_SIGNUPS_ALLOWED:-false}
    volumes:
      - vaultwarden_data:/data

volumes:
  mattermost_db:
  mattermost_data:
  mattermost_logs:
  mattermost_config:
  mattermost_plugins:
  mattermost_client_plugins:
  vikunja_data:
  vikunja_files:
  vaultwarden_data:
