AFFiNEv0.27.4
Документы и визуальные доски в одном пространстве на вашем сервере. Пишите как в Notion, раскладывайте идеи как в Miro и переключайтесь между страницей и холстом без переноса материалов.
Начните с текста, схемы или свободного холста: AFFiNE держит документы и Edgeless-доски в одном рабочем пространстве. Можно набросать структуру на доске и продолжить ее как документ, сохраняя материалы на своем сервере.
После заказа установщик поднимет приложение и хранилища, создаст администратора и выдаст HTTPS-адрес. На проверенном сервере установка до готового входа заняла около пяти минут; время скачивания образов и выпуска сертификата у другого заказа может отличаться.
Что внутри
- AFFiNE 0.27.4
- редактор документов и Edgeless-досок с синхронизацией рабочих пространств.
- PostgreSQL 16 с pgvector 0.8.1
- хранит учетные записи, документы и данные рабочего пространства.
- Redis 7.4.6
- обслуживает внутренние задачи и обмен данными приложения.
- Caddy из системного репозитория Ubuntu
- открывает приложение по HTTPS и обновляет сертификат Let's Encrypt; версия пакета зависит от репозитория на день заказа.
Безопасность
- Закрытая регистрацияустановщик создает администратора и запрещает посторонним заводить учетные записи через публичный адрес.
- Отдельный пароль базыустановщик генерирует его на сервере, поэтому пароль PostgreSQL не совпадает с паролем администратора.
- HTTPS и закрытый порт приложенияCaddy принимает внешние запросы, а AFFiNE слушает только
127.0.0.1:3010. - fail2banблокирует IP после пяти неудачных попыток входа по SSH на час.
Как войти
Адрес получается из IP сервера: замените точки на дефисы и добавьте
.fatmetal.net. Например, IP45.15.159.117даетhttps://45-15-159-117.fatmetal.net.Администратор уже создан. Логин -
admin@<адрес сервера без https://>(например,admin@45-15-159-117.fatmetal.net); пароль - пароль этого сервера из панели Fatmetal.На первом входе нажмите
Sign in and enable, затемEnable AFFiNE Syncи создайте документ в серверном рабочем пространстве.Demo Workspaceбез включенной синхронизации хранится в браузере.
Важно
Сохраняйте резервные копии обоих каталогов на сервере: /opt/affine/data (включая PostgreSQL и вложения) и /opt/affine/config. Одной копии базы недостаточно для файлов рабочего пространства.
Отправка писем в этом рецепте не настроена. Если нужны приглашения и восстановление пароля по почте, настройте SMTP по документации AFFiNE; работу этих функций на стенде не проверяли.
AFFiNE AI в этом рецепте отключен. Работа с внешними моделями и ключами провайдера в заказанной конфигурации не проверялась.
Лицензия
Редактор и часть исходного кода опубликованы под MIT, но официальный серверный образ AFFiNE 0.27.4 содержит текст лицензии AFFiNE EE. Он ограничивает использование EE-кода в production без подписки или отдельного договора. Публичные материалы AFFiNE одновременно называют self-hosted Community Edition бесплатной; состав и права именно этого образа для коммерческого использования остаются неясными. До применения в компании уточните условия у правообладателя.
Свой домен
Стартовый HTTPS-адрес работает без собственного домена. Переход на свой домен был проверен на тестовом сервере: сертификат выпустился, вход и документ сохранились.
- Создайте
A-запись своего домена на публичный IPv4 сервера. - Убедитесь, что
ping <ваш домен>показывает IP сервера. Пока адрес другой, дождитесь обновления DNS. - Подключитесь к серверу по SSH и впишите
DOMAIN=<ваш домен>в/etc/affine-mp/params.env. - Выполните
sudo bash /opt/affine-mp/install.shи дождитесь строкиreadyв/var/log/affine-mp.log. - Откройте
https://<ваш домен>. Логин остается исходным:admin@<IP сервера с дефисами вместо точек>.fatmetal.net. Например, для IP45.15.159.117этоadmin@45-15-159-117.fatmetal.net. Пароль - пароль этого сервера из панели Fatmetal.
Требования
На стенде с 4 vCPU и 8 ГБ RAM три работающих контейнера занимали около 214 МиБ оперативной памяти в простое без клиентской нагрузки. Для заказа берите тариф CPU4-RAM8-DISK100; его четыре ядра соответствуют рекомендации AFFiNE. Нагрузку команды и одновременную работу нескольких редакторов мы не измеряли.