Appwrite is an all-in-one, open-source backend platform designed to help you build applications faster and scale affordably. It provides the complete infrastructure you need, letting you build like a team of hundreds even if you're a solo developer. Stop worrying about complex backend setup and focus on creating great user experiences with your preferred programming languages and frameworks. The platform includes a comprehensive suite of services, available through a simple API:
With a security-first approach and a global network of Points of Presence ensuring low latency, you can safely build and scale your project. Developers have used the platform to reduce development time by 60% and cut infrastructure costs by as much as 700%, making it an ideal choice for passion projects, startups, and enterprise applications.
services:
traefik:
image: traefik:2.10
command:
- --providers.file.directory=/storage/config
- --providers.file.watch=true
- --providers.docker=true
- --providers.docker.exposedByDefault=false
- --providers.docker.constraints=Label(`traefik.constraint-label-stack`,`appwrite`)
- --entrypoints.appwrite_web.address=:80
- --entrypoints.appwrite_websecure.address=:443
- --api.dashboard=true
- --ping=true
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./config:/storage/config:ro
- ./certificates:/storage/certificates:ro
depends_on:
- appwrite
labels:
- traefik.enable=true
- traefik.constraint-label-stack=appwrite
appwrite:
image: appwrite/appwrite:1.5.4
restart: unless-stopped
env_file: .env
volumes:
- ./uploads:/storage/uploads
- ./cache:/storage/cache
- ./config:/storage/config
- ./certificates:/storage/certificates
- ./functions:/storage/functions
depends_on:
- mariadb
- redis
labels:
- traefik.enable=true
- traefik.constraint-label-stack=appwrite
- traefik.http.routers.appwrite_web.rule=PathPrefix(`/`)
- traefik.http.routers.appwrite_web.entrypoints=appwrite_web
- traefik.http.services.appwrite_web.loadbalancer.server.port=80
mariadb:
image: mariadb:10.7
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${_APP_DB_ROOT_PASS}
- MYSQL_DATABASE=${_APP_DB_SCHEMA}
- MYSQL_USER=${_APP_DB_USER}
- MYSQL_PASSWORD=${_APP_DB_PASS}
volumes:
- ./mariadb:/var/lib/mysql
command: 'mysqld --innodb-flush-method=O_DIRECT --wait_timeout=28800'
redis:
image: redis:7.0-alpine
restart: unless-stopped
volumes:
- ./redis:/data
realtime:
image: appwrite/appwrite:1.5.4
command: realtime
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
labels:
- traefik.enable=true
- traefik.constraint-label-stack=appwrite
- traefik.http.routers.appwrite_realtime.rule=PathPrefix(`/v1/realtime`)
- traefik.http.routers.appwrite_realtime.entrypoints=appwrite_web
- traefik.http.services.appwrite_realtime.loadbalancer.server.port=80
schedule:
image: appwrite/appwrite:1.5.4
command: schedule
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
executor:
image: appwrite/appwrite:1.5.4
command: executor
restart: unless-stopped
env_file: .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./functions:/storage/functions
- ./builds:/storage/builds
depends_on:
- mariadb
- redis
worker-audits:
image: appwrite/appwrite:1.5.4
command: worker-audits
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-builds:
image: appwrite/appwrite:1.5.4
command: worker-builds
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-certificates:
image: appwrite/appwrite:1.5.4
command: worker-certificates
restart: unless-stopped
env_file: .env
volumes:
- ./certificates:/storage/certificates
depends_on:
- mariadb
- redis
worker-databases:
image: appwrite/appwrite:1.5.4
command: worker-databases
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-deletes:
image: appwrite/appwrite:1.5.4
command: worker-deletes
restart: unless-stopped
env_file: .env
volumes:
- ./uploads:/storage/uploads
- ./cache:/storage/cache
- ./functions:/storage/functions
- ./builds:/storage/builds
depends_on:
- mariadb
- redis
worker-functions:
image: appwrite/appwrite:1.5.4
command: worker-functions
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-mails:
image: appwrite/appwrite:1.5.4
command: worker-mails
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-messaging:
image: appwrite/appwrite:1.5.4
command: worker-messaging
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-migrations:
image: appwrite/appwrite:1.5.4
command: worker-migrations
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis
worker-webhooks:
image: appwrite/appwrite:1.5.4
command: worker-webhooks
restart: unless-stopped
env_file: .env
depends_on:
- mariadb
- redis_APP_ENV=production
_APP_OPENSSL_KEY_V1=your_super_secret_openssl_key_here_must_be_long
_APP_DOMAIN=localhost
_APP_DOMAIN_TARGET=localhost
_APP_REDIS_HOST=redis
_APP_REDIS_PORT=6379
_APP_DB_HOST=mariadb
_APP_DB_PORT=3306
_APP_DB_SCHEMA=appwrite
_APP_DB_USER=appwrite
_APP_DB_PASS=your_super_secret_db_password
_APP_DB_ROOT_PASS=your_super_secret_db_root_password
_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=admin@example.com
_APP_OPTIONS_ABUSE=enabled
_APP_OPTIONS_FORCE_HTTPS=disabledAuto-fetched about 22 hours ago
Auto-fetched about 22 hours ago