name: affine services: affine: image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable} container_name: affine_server ports: - '3010:3010' depends_on: redis: condition: service_healthy postgres: condition: service_healthy affine_migration: condition: service_completed_successfully volumes: # custom configurations - ./config:/root/.affine/storage - ./uploads:/root/.affine/config env_file: - ../.env environment: - REDIS_SERVER_HOST=redis - DATABASE_URL=postgresql://${AFFINE_DB_USERNAME}:${AFFINE_DB_PASSWORD}@postgres:5432/${AFFINE_DB_DATABASE_NAME} - AFFINE_INDEXER_ENABLED=false restart: unless-stopped affine_migration: image: ghcr.io/toeverything/affine:stable container_name: affine_migration_job volumes: # custom configurations - ./uploads:/root/.affine/storage - ./config:/root/.affine/config command: ['sh', '-c', 'node ./scripts/self-host-predeploy.js'] env_file: - ../.env environment: - REDIS_SERVER_HOST=redis - DATABASE_URL=postgresql://${AFFINE_DB_USERNAME}:${AFFINE_DB_PASSWORD}@postgres:5432/${AFFINE_DB_DATABASE_NAME} - AFFINE_INDEXER_ENABLED=false depends_on: postgres: condition: service_healthy redis: condition: service_healthy redis: image: redis container_name: affine_redis healthcheck: test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped postgres: image: pgvector/pgvector:pg16 container_name: affine_postgres volumes: - ./postgres:/var/lib/postgresql/data environment: POSTGRES_USER: ${AFFINE_DB_USERNAME} POSTGRES_PASSWORD: ${AFFINE_DB_PASSWORD} POSTGRES_DB: ${AFFINE_DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # you better set a password for you database # or you may add 'POSTGRES_HOST_AUTH_METHOD=trust' to ignore postgres security policy POSTGRES_HOST_AUTH_METHOD: trust healthcheck: test: ['CMD', 'pg_isready', '-U', "${AFFINE_DB_USERNAME}", '-d', "${AFFINE_DB_DATABASE_NAME}"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped