Перейти к содержанию

Обзор развертывания 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

Запуск

cd /opt/appwrite
docker compose up -d

Контейнеры автоматически поднимутся в фоне. Если при первом запуске возникает ошибка, можно посмотреть логи:

docker compose logs -f

Остановка и перезапуск

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.

При каждом обновлении пересоздаются контейнеры с новыми образами, но тома сохраняют данные (БД, кеш, сертификаты).

Эти команды позволяют быстро поддерживать приложение в актуальном состоянии и при необходимости быстро восстановить работу после сбоев.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×