Ctrl K
ComunidadGuías…

docker-compose.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Local development compose. DB ports are bound to 127.0.0.1 only.
# For production self-hosting: https://david-crty.github.io/databasement/self-hosting/docker-compose

services:
  app:
    image: davidcrty/databasement-php
    build:
      context: docker/php
    volumes:
      - .:/app
      - app-data:/data
      # Pest's Test Impact Analysis baseline (~/.pest/tia). Kept in a named
      # volume so `make test-tia` doesn't have to re-record it after every
      # container recreate.
      - pest-cache:/home/application/.pest
    ports:
      - "2226:2226"
    environment:
      TZ: UTC
      XDG_CONFIG_HOME: /tmp
      # PUID/PGID for the application user (defaults to 1000:1000)
      # Set these to match your host user for proper file permissions
      PUID: 1000
      PGID: 1000
    depends_on:
      - rustfs

  worker:
    image: davidcrty/databasement-php
    build:
      context: docker/php
    volumes:
      - .:/app
      - app-data:/data
    environment:
      TZ: UTC
      ENABLE_QUEUE_WORKER: "true"
      ENABLE_WEB_SERVER: "false"
      ENABLE_SCHEDULER: "false"
      PUID: 1000
      PGID: 1000
    depends_on:
      - app
      - rustfs

#  agent:
#    image: davidcrty/databasement-php
#    restart: unless-stopped
#    environment:
#      DATABASEMENT_URL: 'http://app:2226'
#      DATABASEMENT_AGENT_TOKEN: ''
#    volumes:
#      - .:/app
#    depends_on:
#      - app

  mysql:
    image: mysql:8.4
    container_name: databasement-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: databasement
    ports:
      - "127.0.0.1:3307:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot" ]
      interval: 10s
      timeout: 5s
      retries: 5

  # Separate from `mysql` because the two are dumped by different clients:
  # MySQL servers by Oracle's mysqldump, MariaDB by mariadb-dump.
  mariadb:
    image: mariadb:11.8
    container_name: databasement-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: root
      MARIADB_DATABASE: databasement
    ports:
      - "127.0.0.1:3308:3306"
    volumes:
      - mariadb-data:/var/lib/mysql
    healthcheck:
      test: [ "CMD", "healthcheck.sh", "--connect", "--innodb_initialized" ]
      interval: 10s
      timeout: 5s
      retries: 5

  postgres:
    image: postgres:17
    container_name: databasement-postgres
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: databasement
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U root -d databasement" ]
      interval: 10s
      timeout: 5s
      retries: 5

  mongodb:
    image: mongo:7
    container_name: databasement-mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root
    ports:
      - "127.0.0.1:27017:27017"
    volumes:
      - mongodb-data:/data/db
    healthcheck:
      test: [ "CMD", "mongosh", "--eval", "db.adminCommand('ping')", "--quiet" ]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7
    container_name: databasement-redis
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
      - redis-data:/data
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 10s
      timeout: 5s
      retries: 5

  mssql:
    # azure-sql-edge is multi-arch (works on Apple Silicon); same TDS protocol as SQL Server
    image: mcr.microsoft.com/azure-sql-edge:latest
    container_name: databasement-mssql
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: "Databasement!Strong1"
    ports:
      - "127.0.0.1:1433:1433"
    volumes:
      - mssql-data:/var/opt/mssql
    healthcheck:
      test: ["CMD-SHELL", "nc -z localhost 1433 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 10

  firebird:
    image: firebirdsql/firebird:5
    container_name: databasement-firebird
    environment:
      FIREBIRD_ROOT_PASSWORD: masterkey
      FIREBIRD_DATABASE: sample.fdb
    volumes:
      - firebird-data:/var/lib/firebird/data

  ssh:
    image: linuxserver/openssh-server:latest
    container_name: databasement-ssh
    environment:
      PUID: 1000
      PGID: 1000
      TZ: UTC
      USER_NAME: testuser
      USER_PASSWORD: testpass
      PASSWORD_ACCESS: "true"
      DOCKER_MODS: linuxserver/mods:openssh-server-ssh-tunnel
    ports:
      - "127.0.0.1:2222:2222"
    healthcheck:
      test: [ "CMD-SHELL", "netstat -tlnp | grep -q ':2222'" ]
      interval: 10s
      timeout: 5s
      retries: 5

  rustfs:
    image: rustfs/rustfs:latest
    container_name: databasement-rustfs
    ports:
      - "127.0.0.1:9000:9000"
      - "127.0.0.1:9001:9001"
    environment:
      RUSTFS_ACCESS_KEY: rustfsadmin
      RUSTFS_SECRET_KEY: rustfsadmin
      RUSTFS_VOLUMES: /data
      RUSTFS_ADDRESS: ":9000"
      RUSTFS_CONSOLE_ADDRESS: ":9001"
    volumes:
      - rustfs-data:/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
      interval: 10s
      timeout: 5s
      retries: 5

# Samba server for local SMB volume testing (host: samba, share: backups, user: smbuser/smbpass)
#  samba:
#    image: ghcr.io/servercontainers/samba:latest
#    container_name: databasement-samba
#    environment:
#      ACCOUNT_smbuser: smbpass
#      UID_smbuser: "1000"
#      # force user = root so the share is writable regardless of the volume's ownership
#      SAMBA_VOLUME_CONFIG_backups: "[backups]; path=/shares/backups; valid users = smbuser; guest ok = no; read only = no; browseable = yes; force user = root"
#      SAMBA_CONF_LOG_LEVEL: "1"
#    volumes:
#      - samba-data:/shares/backups

# SFTP server for local testing
#  sftp:
#    image: atmoz/sftp
#    container_name: databasement-sftp
#    ports:
#      - "2222:22"
#    volumes:
#      - sftp-data:/home/sftpuser/backups
#    command: sftpuser:sftp123:1001:1001:backups

# FTP server for local testing
#  ftp:
#    image: fauria/vsftpd
#    container_name: databasement-ftp
#    ports:
#      - "20:20"
#      - "21:21"
#      - "21100-21110:21100-21110"
#    environment:
#      FTP_USER: ftpuser
#      FTP_PASS: ftp123
#      PASV_ADDRESS: ftp
#      PASV_MIN_PORT: 21100
#      PASV_MAX_PORT: 21110
#      PASV_ADDR_RESOLVE: "YES"
#    volumes:
#      - ftp-data:/home/vsftpd/ftpuser

# Dex OIDC provider for local OAuth testing
# Prerequisites: 1) Add "127.0.0.1 dex-local" to /etc/hosts
#                2) Set OAUTH_OIDC_ENABLED=true in .env.local
# Test users (password: databasement):
#   admin@databasement.com   (groups: databasement-admins, team-a)
#   user@databasement.com    (groups: databasement-members, team-b)
#   viewer@databasement.com  (groups: databasement-viewers)
#   outsider@databasement.com (no groups)
  dex:
    image: ghcr.io/dexidp/dex:v2.45.0
    container_name: databasement-dex
    volumes:
      - ./docker/dex/config.yaml:/etc/dex/config.yaml:ro
    ports:
      - "127.0.0.1:5556:5556"
    networks:
      default:
        aliases:
          - dex-local
    command: ["dex", "serve", "/etc/dex/config.yaml"]
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:5556/dex/.well-known/openid-configuration"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  app-data:
  pest-cache:
  mysql-data:
  mariadb-data:
  postgres-data:
  rustfs-data:
  sftp-data:
  mongodb-data:
  redis-data:
  mssql-data:
  firebird-data:
  ftp-data:
  samba-data: