# NEODB Docker Compose File # # Note: may not be secure for production usage, use at your own risk # # The following env variable are expected from .env or command line # - NEODB_SECRET_KEY # - NEODB_SITE_DOMAIN # - NEODB_SITE_NAME # - NEODB_DATA x-shared: neodb-service: &neodb-service build: . image: ${NEODB_IMAGE:-neodb/neodb:latest} environment: NEODB_DEBUG: NEODB_SECRET_KEY: NEODB_SITE_NAME: NEODB_SITE_DOMAIN: NEODB_SITE_INTRO: NEODB_SITE_HEAD: NEODB_SITE_LOGO: NEODB_SITE_ICON: NEODB_USER_ICON: NEODB_SITE_COLOR: NEODB_SITE_LINKS: NEODB_SITE_DESCRIPTION: NEODB_ALTERNATIVE_DOMAINS: NEODB_PREFERRED_LANGUAGES: NEODB_INVITE_ONLY: NEODB_LOGIN_MASTODON_WHITELIST: NEODB_MASTODON_CLIENT_SCOPE: NEODB_DISABLE_DEFAULT_RELAY: NEODB_DISABLE_CRON_JOBS: NEODB_SEARCH_PEERS: NEODB_SEARCH_SITES: NEODB_MIN_MARKS_FOR_DISCOVER: NEODB_DISCOVER_UPDATE_INTERVAL: NEODB_DISCOVER_FILTER_LANGUAGE: NEODB_DISCOVER_SHOW_LOCAL_ONLY: NEODB_DISCOVER_SHOW_POPULAR_POSTS: NEODB_SENTRY_DSN: TAKAHE_SENTRY_DSN: NEODB_SENTRY_SAMPLE_RATE: NEODB_DB_URL: ${NEODB_DB_URL:-postgres://neodb:aubergine@neodb-db/neodb} TAKAHE_DB_URL: ${TAKAHE_DB_URL:-postgres://takahe:aubergine@takahe-db/takahe} NEODB_REDIS_URL: ${NEODB_REDIS_URL:-redis://redis:6379/0} NEODB_SEARCH_URL: ${NEODB_SEARCH_URL:-typesense://user:eggplant@typesense:8108/catalog} NEODB_EMAIL_URL: NEODB_EMAIL_FROM: no-reply@${NEODB_SITE_DOMAIN} NEODB_ENABLE_LOCAL_ONLY: NEODB_ENABLE_LOGIN_BLUESKY: NEODB_ENABLE_LOGIN_THREADS: NEODB_EXTRA_APPS: NEODB_FANOUT_LIMIT_DAYS: TAKAHE_FANOUT_LIMIT_DAYS: NEODB_DOWNLOADER_PROXY_LIST: NEODB_DOWNLOADER_BACKUP_PROXY: NEODB_DOWNLOADER_SAVE_DIR: NEODB_MEDIA_ROOT: /www/m NEODB_VENV: /neodb-venv TAKAHE_ENVIRONMENT: ${ENVIRONMENT:-production} TAKAHE_SECRET_KEY: ${NEODB_SECRET_KEY} TAKAHE_MAIN_DOMAIN: ${NEODB_SITE_DOMAIN} TAKAHE_MEDIA_URL: https://${NEODB_SITE_DOMAIN}/media/ TAKAHE_EMAIL_FROM: no-reply@${NEODB_SITE_DOMAIN} TAKAHE_DATABASE_SERVER: ${TAKAHE_DATABASE_SERVER:-postgres://takahe:aubergine@takahe-db/takahe} TAKAHE_CACHES_DEFAULT: ${TAKAHE_CACHES_DEFAULT:-redis://redis:6379/0} TAKAHE_MEDIA_BACKEND: local://www/media/ TAKAHE_MEDIA_ROOT: /www/media TAKAHE_USE_PROXY_HEADERS: true TAKAHE_STATOR_CONCURRENCY: ${TAKAHE_STATOR_CONCURRENCY:-4} TAKAHE_STATOR_CONCURRENCY_PER_MODEL: ${TAKAHE_STATOR_CONCURRENCY_PER_MODEL:-2} TAKAHE_VAPID_PUBLIC_KEY: TAKAHE_VAPID_PRIVATE_KEY: TAKAHE_DEBUG: ${NEODB_DEBUG:-False} TAKAHE_VENV: /takahe-venv THREADS_APP_ID: THREADS_APP_SECRET: SPOTIFY_API_KEY: TMDB_API_V3_KEY: GOOGLE_API_KEY: DISCOGS_API_KEY: IGDB_API_CLIENT_ID: IGDB_API_CLIENT_SECRET: DISCORD_WEBHOOKS: SLACK_API_TOKEN: SSL_ONLY: restart: "unless-stopped" volumes: - ${NEODB_DATA:-../data}/neodb-media:/www/m - ${NEODB_DATA:-../data}/takahe-media:/www/media - ${NEODB_DATA:-../data}/takahe-cache:/www/cache - ${NEODB_DATA:-../data}/www-root:/www/root - ./custom/edition.custom.html:/neodb/catalog/templates/edition.html <<<<<<< HEAD - ./custom/common_libs.custom.html:/neodb/common/templates/common_libs.html ======= >>>>>>> b0ec90060ab08edd9f9fc48cd8125e82dedbafd3 depends_on: - redis - neodb-db - typesense - takahe-db profiles: - production dev-neodb-service: &dev-neodb-service <<: *neodb-service # environment: # NEODB_DEBUG: True volumes: - ${NEODB_DATA:-../data}/www-root:/www/root - ${NEODB_DATA:-../data}/neodb-media:/www/m - ${NEODB_DATA:-../data}/takahe-media:/www/media - ${NEODB_DATA:-../data}/takahe-cache:/www/cache - ${NEODB_DATA:-../data}/nginx-log:/var/log/nginx - ${NEODB_SRC:-.}:/neodb - ${TAKAHE_SRC:-./neodb-takahe}:/takahe profiles: - dev services: redis: image: redis:alpine command: redis-server --save 60 1 --loglevel warning volumes: - ${NEODB_DATA:-../data}/redis:/data typesense: image: typesense/typesense:${TYPESENSE_VERSION:-0.25.2} restart: "on-failure" # healthcheck: # test: ['CMD', 'curl', '-vf', 'http://127.0.0.1:8108/health'] # ports: # - "18108:8108" environment: GLOG_minloglevel: 2 volumes: - ${NEODB_DATA:-../data}/typesense:/data command: "--data-dir /data --api-key=eggplant" neodb-db: image: postgres:${POSTGRES_VERSION:-14-alpine} healthcheck: test: ["CMD", "pg_isready", "-U", "neodb"] volumes: - ${NEODB_DATA:-../data}/neodb-db:/var/lib/postgresql/data environment: - POSTGRES_DB=neodb - POSTGRES_USER=neodb - POSTGRES_PASSWORD=aubergine takahe-db: image: postgres:${POSTGRES_VERSION:-14-alpine} healthcheck: test: ["CMD", "pg_isready", "-U", "takahe"] volumes: - ${NEODB_DATA:-../data}/takahe-db:/var/lib/postgresql/data environment: - POSTGRES_DB=takahe - POSTGRES_USER=takahe - POSTGRES_PASSWORD=aubergine migration: <<: *neodb-service restart: "no" command: /bin/neodb-init depends_on: neodb-db: condition: service_healthy typesense: condition: service_started redis: condition: service_started takahe-db: condition: service_healthy neodb-web: <<: *neodb-service command: ${NEODB_VENV:-/neodb-venv}/bin/gunicorn boofilsic.wsgi -w ${NEODB_WEB_WORKER_NUM:-8} --preload --max-requests 2000 --timeout 60 -b 0.0.0.0:8000 healthcheck: test: [ "CMD", "wget", "-qO/tmp/test", "--header", "X-Forwarded-Proto: https", "http://127.0.0.1:8000/nodeinfo/2.0/", ] depends_on: migration: condition: service_completed_successfully neodb-web-api: <<: *neodb-service command: ${NEODB_VENV:-/neodb-venv}/bin/gunicorn boofilsic.wsgi -w ${NEODB_API_WORKER_NUM:-4} --preload --max-requests 2000 --timeout 30 -b 0.0.0.0:8000 healthcheck: test: [ "CMD", "wget", "-qO/tmp/test", "--header", "X-Forwarded-Proto: https", "http://127.0.0.1:8000/nodeinfo/2.0/", ] depends_on: migration: condition: service_completed_successfully neodb-worker: <<: *neodb-service command: neodb-manage rqworker --with-scheduler import export mastodon fetch crawl ap cron depends_on: migration: condition: service_completed_successfully neodb-worker-extra: <<: *neodb-service command: neodb-manage rqworker-pool --num-workers ${NEODB_RQ_WORKER_NUM:-4} mastodon fetch crawl ap depends_on: migration: condition: service_completed_successfully takahe-web: <<: *neodb-service command: ${TAKAHE_VENV:-/takahe-venv}/bin/gunicorn --chdir /takahe takahe.wsgi -w ${TAKAHE_WEB_WORKER_NUM:-8} --max-requests 2000 --timeout 60 --preload -b 0.0.0.0:8000 healthcheck: test: [ "CMD", "wget", "-qO/tmp/test", "--header", "X-Forwarded-Proto: https", "http://127.0.0.1:8000/api/v1/instance", ] depends_on: migration: condition: service_completed_successfully takahe-stator: <<: *neodb-service command: takahe-manage runstator stop_signal: SIGINT depends_on: migration: condition: service_completed_successfully nginx: <<: *neodb-service user: "root:root" command: nginx-start environment: NEODB_WEB_SERVER: neodb-web:8000 NEODB_API_SERVER: neodb-web-api:8000 TAKAHE_WEB_SERVER: takahe-web:8000 NGINX_CONF: /neodb/misc/nginx.conf.d/neodb.conf depends_on: takahe-web: condition: service_started neodb-web: condition: service_started ports: - "${NEODB_PORT:-8000}:8000" shell: <<: *neodb-service command: bash profiles: ["tools"] root: <<: *neodb-service command: bash profiles: ["tools"] user: "root:root" dev-neodb-web: <<: *dev-neodb-service command: neodb-manage runserver 0.0.0.0:8000 stop_signal: SIGINT dev-neodb-worker: <<: *dev-neodb-service # command: neodb-manage rqworker-pool --num-workers 4 import export mastodon fetch crawl ap cron command: neodb-manage rqworker --with-scheduler import export mastodon fetch crawl crawl ap cron dev-takahe-web: <<: *dev-neodb-service command: takahe-manage runserver 0.0.0.0:8000 stop_signal: SIGINT dev-takahe-stator: <<: *dev-neodb-service command: takahe-manage runstator stop_signal: SIGINT dev-nginx: <<: *dev-neodb-service user: "root:root" command: nginx-start environment: NEODB_WEB_SERVER: dev-neodb-web:8000 TAKAHE_WEB_SERVER: dev-takahe-web:8000 NGINX_CONF: /neodb/misc/nginx.conf.d/neodb-dev.conf depends_on: dev-takahe-web: condition: service_started dev-neodb-web: condition: service_started ports: - "${NEODB_PORT:-8000}:8000" dev-shell: <<: *dev-neodb-service command: bash profiles: ["tools"] dev-root: <<: *dev-neodb-service command: bash profiles: ["tools"] user: "root:root"