Back to Apps
Appwrite

Deploy Appwrite on Your Own Server

Secure Backend Server for Web, Mobile & Flutter Developers.

📦 Other

Want to deploy Appwrite on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Appwrite?

Appwrite is a self-hosted solution that provides developers with a set of easy-to-use and integrate REST APIs to manage their core backend needs. Description of all available environment variables: https://appwrite.io/docs/environment-variables

Learn more

Self-Host Appwrite

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

General
3

Deploy

Copy the configuration and run it on your server.

services:
  appwrite:
    image: appwrite/appwrite:1.4.13
    environment:
      _APP_ASSISTANT_OPENAI_API_KEY: ""
      _APP_CONSOLE_WHITELIST_EMAILS: ""
      _APP_CONSOLE_WHITELIST_IPS: ""
      _APP_CONSOLE_WHITELIST_ROOT: enabled
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOMAIN: localhost
      _APP_DOMAIN_FUNCTIONS: localhost
      _APP_DOMAIN_TARGET: localhost
      _APP_ENV: production
      _APP_EXECUTOR_HOST: http://appwrite-executor/v1
      _APP_EXECUTOR_SECRET: 15c04e8ff101c078
      _APP_FUNCTIONS_BUILD_TIMEOUT: "900"
      _APP_FUNCTIONS_CPUS: ""
      _APP_FUNCTIONS_MEMORY: ""
      _APP_FUNCTIONS_RUNTIMES: node-18.0
      _APP_FUNCTIONS_SIZE_LIMIT: "30000000"
      _APP_FUNCTIONS_TIMEOUT: "900"
      _APP_GRAPHQL_MAX_BATCH_SIZE: "10"
      _APP_GRAPHQL_MAX_COMPLEXITY: "250"
      _APP_GRAPHQL_MAX_DEPTH: "3"
      _APP_INFLUXDB_HOST: appwrite-influxdb
      _APP_INFLUXDB_PORT: "8086"
      _APP_LOCALE: en
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_MAINTENANCE_INTERVAL: "86400"
      _APP_MAINTENANCE_RETENTION_ABUSE: "86400"
      _APP_MAINTENANCE_RETENTION_AUDIT: "1209600"
      _APP_MAINTENANCE_RETENTION_CACHE: "2592000"
      _APP_MAINTENANCE_RETENTION_EXECUTION: "1209600"
      _APP_MAINTENANCE_RETENTION_SCHEDULES: ""
      _APP_MAINTENANCE_RETENTION_USAGE_HOURLY: "8640000"
      _APP_MIGRATIONS_FIREBASE_CLIENT_ID: ""
      _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_OPTIONS_ABUSE: enabled
      _APP_OPTIONS_FORCE_HTTPS: disabled
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SMS_FROM: ""
      _APP_SMS_PROVIDER: ""
      _APP_SMTP_HOST: ""
      _APP_SMTP_PASSWORD: ""
      _APP_SMTP_PORT: ""
      _APP_SMTP_SECURE: ""
      _APP_SMTP_USERNAME: ""
      _APP_STATSD_HOST: appwrite-telegraf
      _APP_STATSD_PORT: "8125"
      _APP_STORAGE_ANTIVIRUS: disabled
      _APP_STORAGE_ANTIVIRUS_HOST: clamav
      _APP_STORAGE_ANTIVIRUS_PORT: "3310"
      _APP_STORAGE_BACKBLAZE_ACCESS_KEY: ""
      _APP_STORAGE_BACKBLAZE_BUCKET: ""
      _APP_STORAGE_BACKBLAZE_REGION: us-west-004
      _APP_STORAGE_BACKBLAZE_SECRET: ""
      _APP_STORAGE_DEVICE: Local
      _APP_STORAGE_DO_SPACES_ACCESS_KEY: ""
      _APP_STORAGE_DO_SPACES_BUCKET: ""
      _APP_STORAGE_DO_SPACES_REGION: us-east-1
      _APP_STORAGE_DO_SPACES_SECRET: ""
      _APP_STORAGE_LIMIT: "30000000"
      _APP_STORAGE_LINODE_ACCESS_KEY: ""
      _APP_STORAGE_LINODE_BUCKET: ""
      _APP_STORAGE_LINODE_REGION: eu-central-1
      _APP_STORAGE_LINODE_SECRET: ""
      _APP_STORAGE_PREVIEW_LIMIT: "20000000"
      _APP_STORAGE_S3_ACCESS_KEY: ""
      _APP_STORAGE_S3_BUCKET: ""
      _APP_STORAGE_S3_REGION: us-east-1
      _APP_STORAGE_S3_SECRET: ""
      _APP_STORAGE_WASABI_ACCESS_KEY: ""
      _APP_STORAGE_WASABI_BUCKET: ""
      _APP_STORAGE_WASABI_REGION: eu-central-1
      _APP_STORAGE_WASABI_SECRET: ""
      _APP_SYSTEM_EMAIL_ADDRESS: team@appwrite.io
      _APP_SYSTEM_EMAIL_NAME: Appwrite
      _APP_SYSTEM_RESPONSE_FORMAT: ""
      _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: certs@appwrite.io
      _APP_USAGE_STATS: enabled
      _APP_VCS_GITHUB_APP_ID: ""
      _APP_VCS_GITHUB_APP_NAME: ""
      _APP_VCS_GITHUB_CLIENT_ID: ""
      _APP_VCS_GITHUB_CLIENT_SECRET: ""
      _APP_VCS_GITHUB_PRIVATE_KEY: ""
      _APP_VCS_GITHUB_WEBHOOK_SECRET: ""
      _APP_WORKER_PER_CORE: "6"
    volumes:
      - appwrite-uploads:/storage/uploads
      - appwrite-cache:/storage/cache
      - appwrite-config:/storage/config
      - appwrite-certificates:/storage/certificates
      - appwrite-functions:/storage/functions
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
      - appwrite-influxdb
  appwrite-assistant:
    image: appwrite/assistant:0.2.2
    environment:
      _APP_ASSISTANT_OPENAI_API_KEY: ""
  appwrite-executor:
    image: openruntimes/executor:0.4.5
    environment:
      OPR_EXECUTOR_DOCKER_HUB_PASSWORD: ""
      OPR_EXECUTOR_DOCKER_HUB_USERNAME: ""
      OPR_EXECUTOR_ENV: production
      OPR_EXECUTOR_INACTIVE_TRESHOLD: "60"
      OPR_EXECUTOR_LOGGING_CONFIG: ""
      OPR_EXECUTOR_LOGGING_PROVIDER: ""
      OPR_EXECUTOR_MAINTENANCE_INTERVAL: "3600"
      OPR_EXECUTOR_NETWORK: captain-overlay-network
      OPR_EXECUTOR_RUNTIMES: node-18.0
      OPR_EXECUTOR_SECRET: 15c04e8ff101c078
      OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY: ""
      OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET: ""
      OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION: us-west-004
      OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET: ""
      OPR_EXECUTOR_STORAGE_DEVICE: Local
      OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY: ""
      OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET: ""
      OPR_EXECUTOR_STORAGE_DO_SPACES_REGION: us-east-1
      OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET: ""
      OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY: ""
      OPR_EXECUTOR_STORAGE_LINODE_BUCKET: ""
      OPR_EXECUTOR_STORAGE_LINODE_REGION: eu-central-1
      OPR_EXECUTOR_STORAGE_LINODE_SECRET: ""
      OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY: ""
      OPR_EXECUTOR_STORAGE_S3_BUCKET: ""
      OPR_EXECUTOR_STORAGE_S3_REGION: us-east-1
      OPR_EXECUTOR_STORAGE_S3_SECRET: ""
      OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY: ""
      OPR_EXECUTOR_STORAGE_WASABI_BUCKET: ""
      OPR_EXECUTOR_STORAGE_WASABI_REGION: eu-central-1
      OPR_EXECUTOR_STORAGE_WASABI_SECRET: ""
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - appwrite-functions:/storage/functions
      - appwrite-builds:/storage/builds
      - /tmp:/tmp
  appwrite-influxdb:
    image: appwrite/influxdb:1.5.0
    volumes:
      - appwrite-influxdb:/var/lib/influxdb
  appwrite-maintenance:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOMAIN: localhost
      _APP_DOMAIN_FUNCTIONS: localhost
      _APP_DOMAIN_TARGET: localhost
      _APP_ENV: production
      _APP_MAINTENANCE_INTERVAL: "86400"
      _APP_MAINTENANCE_RETENTION_ABUSE: "86400"
      _APP_MAINTENANCE_RETENTION_AUDIT: "1209600"
      _APP_MAINTENANCE_RETENTION_CACHE: "2592000"
      _APP_MAINTENANCE_RETENTION_EXECUTION: "1209600"
      _APP_MAINTENANCE_RETENTION_SCHEDULES: ""
      _APP_MAINTENANCE_RETENTION_USAGE_HOURLY: "8640000"
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
  appwrite-mariadb:
    environment:
      MARIADB_DATABASE: appwrite
      MARIADB_PASSWORD: 9df4c8d832b992cd
      MARIADB_ROOT_PASSWORD: de76297dab87c152
      MARIADB_USER: user
    volumes:
      - appwrite-mariadb:/var/lib/mysql
  appwrite-realtime:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_OPTIONS_ABUSE: enabled
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PORT: "6379"
      _APP_USAGE_STATS: enabled
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-redis:
    volumes:
      - appwrite-redis:/data
  appwrite-schedule:
    environment:
      _APP_DB_HOST: ${APP_DB_HOST}
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
  appwrite-telegraf:
    image: appwrite/telegraf:1.4.0
    environment:
      _APP_INFLUXDB_HOST: appwrite-influxdb
      _APP_INFLUXDB_PORT: "8086"
  appwrite-usage:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_INFLUXDB_HOST: appwrite-influxdb
      _APP_INFLUXDB_PORT: "8086"
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_USAGE_AGGREGATION_INTERVAL: "30"
      _APP_USAGE_STATS: enabled
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-influxdb
      - appwrite-mariadb
  appwrite-worker-audits:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-worker-builds:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOMAIN: localhost
      _APP_ENV: production
      _APP_EXECUTOR_HOST: http://appwrite-executor/v1
      _APP_EXECUTOR_SECRET: 15c04e8ff101c078
      _APP_FUNCTIONS_BUILD_TIMEOUT: "900"
      _APP_FUNCTIONS_CPUS: ""
      _APP_FUNCTIONS_MEMORY: ${APP_FUNCTIONS_MEMORY}
      _APP_FUNCTIONS_SIZE_LIMIT: "30000000"
      _APP_FUNCTIONS_TIMEOUT: "900"
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_OPTIONS_FORCE_HTTPS: disabled
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_STORAGE_BACKBLAZE_ACCESS_KEY: ""
      _APP_STORAGE_BACKBLAZE_BUCKET: ""
      _APP_STORAGE_BACKBLAZE_REGION: us-west-004
      _APP_STORAGE_BACKBLAZE_SECRET: ""
      _APP_STORAGE_DEVICE: Local
      _APP_STORAGE_DO_SPACES_ACCESS_KEY: ""
      _APP_STORAGE_DO_SPACES_BUCKET: ""
      _APP_STORAGE_DO_SPACES_REGION: us-east-1
      _APP_STORAGE_DO_SPACES_SECRET: ""
      _APP_STORAGE_LINODE_ACCESS_KEY: ""
      _APP_STORAGE_LINODE_BUCKET: ""
      _APP_STORAGE_LINODE_REGION: eu-central-1
      _APP_STORAGE_LINODE_SECRET: ""
      _APP_STORAGE_S3_ACCESS_KEY: ""
      _APP_STORAGE_S3_BUCKET: ""
      _APP_STORAGE_S3_REGION: us-east-1
      _APP_STORAGE_S3_SECRET: ""
      _APP_STORAGE_WASABI_ACCESS_KEY: ""
      _APP_STORAGE_WASABI_BUCKET: ""
      _APP_STORAGE_WASABI_REGION: eu-central-1
      _APP_STORAGE_WASABI_SECRET: ""
      _APP_VCS_GITHUB_APP_ID: ""
      _APP_VCS_GITHUB_APP_NAME: ""
      _APP_VCS_GITHUB_PRIVATE_KEY: ""
    volumes:
      - appwrite-functions:/storage/functions
      - appwrite-builds:/storage/builds
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-worker-certificates:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOMAIN: localhost
      _APP_DOMAIN_FUNCTIONS: localhost
      _APP_DOMAIN_TARGET: localhost
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: certs@appwrite.io
      _APP_WORKER_PER_CORE: "6"
    volumes:
      - appwrite-config:/storage/config
      - appwrite-certificates:/storage/certificates
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-worker-databases:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-worker-deletes:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_ENV: production
      _APP_EXECUTOR_HOST: http://appwrite-executor/v1
      _APP_EXECUTOR_SECRET: 15c04e8ff101c078
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_STORAGE_BACKBLAZE_ACCESS_KEY: ""
      _APP_STORAGE_BACKBLAZE_BUCKET: ""
      _APP_STORAGE_BACKBLAZE_REGION: us-west-004
      _APP_STORAGE_BACKBLAZE_SECRET: ""
      _APP_STORAGE_DEVICE: Local
      _APP_STORAGE_DO_SPACES_ACCESS_KEY: ""
      _APP_STORAGE_DO_SPACES_BUCKET: ""
      _APP_STORAGE_DO_SPACES_REGION: us-east-1
      _APP_STORAGE_DO_SPACES_SECRET: ""
      _APP_STORAGE_LINODE_ACCESS_KEY: ""
      _APP_STORAGE_LINODE_BUCKET: ""
      _APP_STORAGE_LINODE_REGION: eu-central-1
      _APP_STORAGE_LINODE_SECRET: ""
      _APP_STORAGE_S3_ACCESS_KEY: ""
      _APP_STORAGE_S3_BUCKET: ""
      _APP_STORAGE_S3_REGION: us-east-1
      _APP_STORAGE_S3_SECRET: ""
      _APP_STORAGE_WASABI_ACCESS_KEY: ""
      _APP_STORAGE_WASABI_BUCKET: ""
      _APP_STORAGE_WASABI_REGION: eu-central-1
      _APP_STORAGE_WASABI_SECRET: ""
      _APP_WORKER_PER_CORE: "6"
    volumes:
      - appwrite-uploads:/storage/uploads
      - appwrite-cache:/storage/cache
      - appwrite-functions:/storage/functions
      - appwrite-builds:/storage/builds
      - appwrite-certificates:/storage/certificates
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
  appwrite-worker-functions:
    environment:
      _APP_DB_HOST: appwrite-mariadb
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOCKER_HUB_PASSWORD: ""
      _APP_DOCKER_HUB_USERNAME: ""
      _APP_ENV: production
      _APP_EXECUTOR_HOST: http://appwrite-executor/v1
      _APP_EXECUTOR_SECRET: 15c04e8ff101c078
      _APP_FUNCTIONS_BUILD_TIMEOUT: "900"
      _APP_FUNCTIONS_CPUS: ""
      _APP_FUNCTIONS_MEMORY: ""
      _APP_FUNCTIONS_TIMEOUT: "900"
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_USAGE_STATS: enabled
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
      - appwrite-executor
  appwrite-worker-mails:
    environment:
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SMTP_HOST: ""
      _APP_SMTP_PASSWORD: ""
      _APP_SMTP_PORT: ""
      _APP_SMTP_SECURE: ""
      _APP_SMTP_USERNAME: ""
      _APP_SYSTEM_EMAIL_ADDRESS: team@appwrite.io
      _APP_SYSTEM_EMAIL_NAME: Appwrite
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
  appwrite-worker-messaging:
    environment:
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SMS_FROM: ""
      _APP_SMS_PROVIDER: ""
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
  appwrite-worker-migrations:
    environment:
      _APP_DB_HOST: ${APP_DB_HOST}
      _APP_DB_PASS: 9df4c8d832b992cd
      _APP_DB_PORT: "3306"
      _APP_DB_SCHEMA: appwrite
      _APP_DB_USER: user
      _APP_DOMAIN: localhost
      _APP_DOMAIN_TARGET: localhost
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_MIGRATIONS_FIREBASE_CLIENT_ID: ""
      _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: ${APP_REDIS_HOST}
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: certs@appwrite.io
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-mariadb
  appwrite-worker-webhooks:
    environment:
      _APP_ENV: production
      _APP_LOGGING_CONFIG: ""
      _APP_LOGGING_PROVIDER: ""
      _APP_OPENSSL_KEY_V1: 6ad9989ab7b021948932eeb223ab35f7a0b2af223eefa5cf0f232cdce4a469fa6aff4d9daae5b99475d44a4acdf85072516ea84b3dfd36bf1ca0661779182c26abf0be1922ba0d7e5bdb10e52b368749c1dd4e6b6c2531336a8e24fb845154e75705e6568d3cdb283062e3edff812c2677ac8e02a44824c4eb3cbcd2c0c262e9
      _APP_REDIS_HOST: appwrite-redis
      _APP_REDIS_PASS: ""
      _APP_REDIS_PORT: "6379"
      _APP_REDIS_USER: ""
      _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: certs@appwrite.io
      _APP_WORKER_PER_CORE: "6"
    depends_on:
      - appwrite-redis
      - appwrite-mariadb
volumes:
  appwrite-uploads: {}
  appwrite-cache: {}
  appwrite-config: {}
  appwrite-certificates: {}
  appwrite-functions: {}
  appwrite-builds: {}
  appwrite-influxdb: {}
  appwrite-mariadb: {}
  appwrite-redis: {}

Then run:

docker compose up -d
4

Access

Once started, access your app at http://localhost:80

Why Self-Host Appwrite?

Full Data Ownership

Your data stays on your servers. No third-party access.

No Monthly Fees

Pay only for your server. No per-seat or usage charges.

Complete Control

Customize, backup, and scale on your own terms.

Privacy & Compliance

Meet GDPR, HIPAA, or internal security requirements.

Technical Details

Docker Image

appwrite/appwrite:${APP_VERSION}

Official Docs

appwrite.io

Want to go faster?

Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.

Install on any Linux server:

sh -c "$(curl -sSL https://get.senate.sh)"