Свой сервер

Golem Docs на собственном сервере.

Golem Docs бесплатен и вообще не нуждается в сервере. Сервер добавляет синхронизацию между устройствами, общий доступ и совместное редактирование в реальном времени. golemdocs.com держит такой сервер за 3 $ в месяц, а можно запустить свой в собственной учётной записи Cloudflare, и тогда файлы и учётные записи принадлежат вам.

Как это устроено

Сервер — это один Cloudflare Worker. Он же отдаёт приложение, так что ваш адрес становится Golem Docs для тех, кого вы впустите. Всё хранится в четырёх продуктах Cloudflare, и все они в вашей учётной записи:

WorkersФайлы приложения и API, через который люди входят и хранят свои документы.
D1Одна база данных: учётные записи, сеансы, общий доступ и список документов и папок каждого человека.
R2Сами документы, их изображения и их прежние версии.
Durable ObjectsКомната для каждого документа, пока люди редактируют его вместе.

Пока он работает только на Cloudflare. Если вы хотите разместить его где-то ещё, на своём компьютере или у другого провайдера, напишите мне, и я составлю план, как запустить его без Cloudflare.

Сколько это стоит

Для семьи это может ничего не стоить. Бесплатный тариф Cloudflare включает 100 000 запросов в день и 10 ГБ хранилища файлов; сверх 10 ГБ хранение стоит 0,015 $ за ГБ в месяц, то есть 100 ГБ обойдутся примерно в 1,35 $. Бесплатный тариф даёт мало процессорного времени на запрос, поэтому для длинных документов может понадобиться тариф Workers Paid: 5 $ в месяц и намного более высокие лимиты. Актуальные цифры — на странице цен Cloudflare.

Что понадобится

Настройка

Это занимает около получаса. Каждая команда выполняется в терминале, в папке, куда вы скачаете код.

1. Получите код и войдите в Cloudflare

Эта команда скачивает Golem Docs, устанавливает всё нужное и открывает браузер, чтобы дать доступ к вашей учётной записи Cloudflare.

git clone https://github.com/davidfig/golemdocs.git
cd golemdocs
pnpm install
pnpm --filter @golemdocs/server exec wrangler login

2. Создайте базу данных и хранилище

Сначала включите R2 в панели Cloudflare; Cloudflare может попросить способ оплаты даже в пределах бесплатного объёма. Затем эта команда создаёт базу данных и бакет хранилища и выводит идентификатор базы.

pnpm --filter @golemdocs/server cf:setup

3. Укажите учётную запись, базу и адрес

Скопируйте server/wrangler.local.example.json в server/wrangler.local.json и заполните: идентификатор учётной записи Cloudflare, идентификатор базы из шага 2 и ваш домен. Напишите workers.dev вместо домена, чтобы использовать бесплатный адрес.

{
  "ACCOUNT_ID": "…",
  "DIRECTORY_ID": "…",
  "DIRECTORY_DEV_ID": "",
  "DOMAIN": "docs.example.com"
}

4. Создайте таблицы и запустите сервер

Вторая команда собирает приложение, загружает его вместе с сервером и выводит адрес, по которому он доступен.

pnpm --filter @golemdocs/server cf:migrate
pnpm --filter @golemdocs/server deploy:prod

5. Создайте приложение для входа

На GitHub откройте Settings › Developer settings › OAuth Apps › New OAuth App. Укажите адрес вашего сервера и https://<ваш адрес>/api/auth/callback/github как адрес обратного вызова. Затем создайте client secret.

6. Решите, кто может входить

Каждая команда запрашивает значение. Выполняйте их в папке server.

cd server
pnpm exec wrangler secret put SINGLE_DATABASE --env=""
pnpm exec wrangler secret put ALLOWED_EMAILS --env=""
pnpm exec wrangler secret put ADMIN_EMAILS --env=""
pnpm exec wrangler secret put GITHUB_CLIENT_ID --env=""
pnpm exec wrangler secret put GITHUB_CLIENT_SECRET --env=""
SINGLE_DATABASEtrue: списки документов всех людей хранятся в одной базе, поэтому серверу не нужен API-токен Cloudflare.
ALLOWED_EMAILSКто может входить: полные адреса (me@example.com) или целый домен (@example.com) через запятую. Задайте это, иначе любой, кто найдёт ваш адрес, сможет зарегистрироваться и хранить файлы за ваш счёт.
ADMIN_EMAILSВаш собственный адрес. Администраторы всегда могут войти и читать отзывы, которые присылают люди.
LINK_WEBSITE, LINK_SUPPORT…Необязательно: куда ведут ссылки меню «Справка» и приветственного документа вместо golemdocs.com. В полном руководстве перечислены все.

7. Войдите

Откройте свой адрес и войдите через GitHub. Документы, созданные после входа, теперь хранятся на вашем сервере, и люди из вашего списка могут делиться ими друг с другом.

Обновления

Когда выходит новая версия, получите её и запустите тем же способом. Сначала прочитайте Журнал: если версия меняет способ хранения файлов или учётных записей, там об этом сказано.

git pull
pnpm install
pnpm --filter @golemdocs/server cf:migrate
pnpm --filter @golemdocs/server deploy:prod

Чем это отличается от golemdocs.com

Приложение и сервер распространяются по лицензии AGPL-3.0: если вы запускаете изменённую версию для других людей, предложите им её исходный код. Название и логотип Golem Docs остаются за этим проектом.