Обзор развертывания Appwrite на сервере¶
Предпосылки и предварительные требования¶
- Операционная система – Debian/Ubuntu (или совместимая дистрибутив с apt).
- Docker – установленный и работающий.
- Docker Compose – доступный в системе.
- Права суперпользователя – для установки пакетов, создания директорий и запуска контейнеров.
- Домен – указанный в переменной
_APP_DOMAIN, который должен быть прописан в DNS. - Почтовый адрес –
_APP_EMAIL_CERTIFICATES, используется для получения сертификатов и уведомлений.
Структура файлов и каталогов¶
/opt/appwrite
├── docker-compose.yml # описание всех сервисов
├── .env # переменные окружения для контейнеров
Внутри каталога /opt/appwrite находятся два файла, которые загружаются по ссылкам: - https://appwrite.io/install/compose – основной docker-compose.yml.
- https://appwrite.io/install/env – шаблон переменных окружения.
При установке директория /opt/appwrite создаётся с правами 0755.
Файл .env имеет права 0644 и хранит чувствительные данные, такие как пароли и ключи.
Права доступа и безопасность¶
| Путь | Привилегии | Примечание |
|---|---|---|
/opt/appwrite | 0755 (755) | Доступ к директории разрешён всем пользователям, но изменение файлов ограничено. |
/opt/appwrite/.env | 0644 (644) | Чтение разрешено всем, но только root может менять. |
| Docker volumes (см. ниже) | Переменные из .env | Хранение данных БД и кеша в отдельных томах Docker. |
Базы данных¶
| Сервис | Дерево контейнера | Тома Docker | Основные переменные окружения |
|---|---|---|---|
| mariadb | appwrite-mariadb | appwrite-mariadb | MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD |
| redis | appwrite-redis | appwrite-redis | redis – встроенная конфигурация, задаёт память и политику удаления ключей |
База MariaDB хранит все данные приложения, а Redis используется как кэш и брокер сообщений. Тома Docker защищают данные от потери при перезапуске контейнеров.
Контейнеры Docker и их запуск¶
Основные сервисы¶
| Сервис | Описание |
|---|---|
| traefik | Реверс‑прокси, маршрутизация запросов, генерация TLS‑сертификатов. |
| appwrite | Основное приложение – REST API, управление пользователями. |
| appwrite‑realtime | WebSocket сервис для обмена событиями. |
| appwrite‑worker‑* | Рабочие процессы: аудиты, вебхуки, удаление файлов, базы, сообщения и т.д. |
| appwrite‑assistant | Ассистент на базе OpenAI. |
| openruntimes‑executor | Среда выполнения пользовательских функций. |
| mariadb | Хранилище данных. |
| redis | Кэш и брокер. |
Пример docker-compose.yml (основной)¶
services:
traefik:
image: traefik:2.11
container_name: appwrite-traefik
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- appwrite-config:/storage/config:ro
- appwrite-certificates:/storage/certificates:ro
networks:
- gateway
- appwrite
appwrite:
image: appwrite/appwrite:1.5.10
container_name: appwrite
restart: unless-stopped
networks:
- appwrite
environment: *x-logging (список переменных из .env)
volumes:
- appwrite-uploads:/storage/uploads
- appwrite-cache:/storage/cache
- appwrite-config:/storage/config
- appwrite-certificates:/storage/certificates
- appwrite-functions:/storage/functions
depends_on:
- mariadb
- redis
... (другие workers и вспомогательные сервисы)
mariadb:
image: mariadb:10.11
container_name: appwrite-mariadb
restart: unless-stopped
volumes:
- appwrite-mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${ansible_ssh_pass}
MYSQL_DATABASE: ${_APP_DB_SCHEMA}
MYSQL_USER: root@hostkey.com
MYSQL_PASSWORD: ${ansible_ssh_pass}
redis:
image: redis:7.2.4-alpine
container_name: appwrite-redis
restart: unless-stopped
volumes:
- appwrite-redis:/data
Запуск¶
Контейнеры автоматически поднимутся в фоне. Если при первом запуске возникает ошибка, можно посмотреть логи:
Остановка и перезапуск¶
docker compose down # остановить и удалить контейнеры
docker compose up -d # запустить заново
docker compose restart appwrite # только приложение
Обновление¶
docker compose pull # скачать последние образы
docker compose up -d --build # перезапустить с новыми образами
Прокси серверы¶
- Traefik – основной прокси. В конфигурации заданы два входа: HTTP (
:80) и HTTPS (:443). TLS‑сертификаты автоматически генерируются и обновляются. - nginx-certbot – альтернативный контейнер (
jonasal/nginx-certbot:latest) из шаблонаcompose.yml.j2. Он монтирует директорию/etc/letsencryptи может использоваться, если необходимо более гибкое управление конфигурацией Nginx. В текущей развернутой конфигурации он не включён по умолчанию, но можно добавить, развернув шаблон.
Настройки прав, Запуск, остановка и обновление¶
- Запуск –
docker compose up -d. - Остановка –
docker compose down. - Перезапуск конкретного сервиса –
docker compose restart <service>. - Обновление –
docker compose pull+docker compose up -d --build.
При каждом обновлении пересоздаются контейнеры с новыми образами, но тома сохраняют данные (БД, кеш, сертификаты).
Эти команды позволяют быстро поддерживать приложение в актуальном состоянии и при необходимости быстро восстановить работу после сбоев.