Joplin Server на Ubuntu 24.04: пошаговая установка
Joplin — удобный менеджер заметок с открытым исходным кодом, но по умолчанию он синхронизируется через Dropbox, OneDrive или Joplin Cloud — то есть ваши записи всё равно оседают на чужих серверах. Если заметки содержат пароли, рабочие переписки или личные данные, доверять их стороннему облаку не хочется. Решение — Joplin Server: собственный бэкенд синхронизации, который вы поднимаете на своём VPS и полностью контролируете. Ниже — рабочая установка на Ubuntu 24.04 через Docker Compose с PostgreSQL и SSL, без магии и лишних шагов.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Joplin Server и зачем свой, а не облако
Joplin Server — это отдельное приложение (не то же самое, что настольный Joplin), которое принимает синхронизацию от клиентов: десктопных приложений на Windows/macOS/Linux, мобильных на Android/iOS и веб-клипера для браузера. Технически это Node.js-бэкенд с веб-панелью администратора, который хранит заметки, вложения и историю версий в PostgreSQL.
Разница с готовым Joplin Cloud простая: там вы платите за подписку и данные лежат на серверах разработчиков (в целом заслуживающих доверия, но не под вашим контролем), здесь — разово арендуете сервер и данные физически находятся там, где скажете вы. Плюсы своего сервера:
- Полный контроль над данными и бэкапами — вы сами решаете, как и куда их копировать.
- Никаких лимитов на количество устройств или объём хранилища, кроме диска сервера.
- Можно держать сервер в конкретной юрисдикции (например, России или ЕС) — это часто важно с точки зрения комплаенса.
- На одном VPS с Joplin Server спокойно уживаются другие сервисы — например, Vaultwarden для паролей или файловое хранилище на Nextcloud.
Минус тоже честно назовём: обновления, бэкапы и мониторинг падений — теперь ваша забота, а не забота облачного провайдера. Для одного человека или небольшой команды (до 10-15 пользователей) это обычно занимает пару минут в месяц, если настроить автоматизацию сразу.
Требования к серверу и подготовка Ubuntu 24.04
Joplin Server лёгкий: даже с несколькими активными пользователями и тысячами заметок он не требователен к ресурсам.
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 ГБ | 2 ГБ |
| Диск | 15 ГБ SSD | 25-30 ГБ SSD |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Диск закладывайте с запасом на вложения — если вы храните в заметках фотографии и PDF, база быстро растёт. Понадобится домен (или поддомен вроде joplin.example.com) с A-записью на IP сервера — без него не получится честно выпустить SSL-сертификат, а Joplin Server требует HTTPS для нормальной работы клиентов.
Подключаемся по SSH и обновляем систему:
ssh root@ваш_ip
apt update && apt upgrade -y
apt install -y curl ca-certificates gnupg ufw
Сразу настроим базовый firewall — открываем только SSH, HTTP и HTTPS (подробный разбор всех правил и типичных ошибок есть в отдельной статье про UFW на Ubuntu 24.04):
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Порт для самого Joplin Server (обычно 22300) наружу открывать не нужно — к нему будет обращаться только nginx на этом же сервере, через localhost.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстанавливаем Docker и Docker Compose
Joplin Server официально распространяется как Docker-образ — это самый предсказуемый способ его развернуть, потому что не нужно вручную ставить Node.js нужной версии и разруливать зависимости. Если Docker ещё не установлен, поставьте его по официальному скрипту:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl enable --now docker
Проверяем, что Docker и плагин Compose работают:
docker --version
docker compose version
Если хотите разобрать этот шаг подробнее — от репозитория до прав пользователя без sudo — есть отдельная пошаговая установка Docker на Ubuntu 24.04 с нуля.
Docker Compose для Joplin Server с PostgreSQL
Создаём рабочую директорию и файл окружения с секретами — их лучше не хардкодить прямо в compose-файле:
mkdir -p /opt/joplin-server && cd /opt/joplin-server
nano .env
Содержимое .env (замените домен и пароль на свои, пароль — длинный и случайный):
APP_BASE_URL=https://joplin.example.com
APP_PORT=22300
POSTGRES_USER=joplin
POSTGRES_PASSWORD=замените_на_случайный_пароль
POSTGRES_DATABASE=joplin
Теперь docker-compose.yml:
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DATABASE}
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- joplin-net
app:
image: joplin/server:latest
restart: unless-stopped
depends_on:
- db
ports:
- "127.0.0.1:${APP_PORT}:${APP_PORT}"
environment:
- APP_PORT=${APP_PORT}
- APP_BASE_URL=${APP_BASE_URL}
- DB_CLIENT=pg
- POSTGRES_HOST=db
- POSTGRES_PORT=5432
- POSTGRES_DATABASE=${POSTGRES_DATABASE}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- MAILER_ENABLED=0
volumes:
- ./data/joplin:/home/joplin
networks:
- joplin-net
networks:
joplin-net:
Обратите внимание на два момента:
- Порт
appпробрасывается только на127.0.0.1— снаружи он недоступен, только через reverse proxy. Это защита от прямого обращения мимо SSL и мимо будущих правил доступа. MAILER_ENABLED=0отключает отправку писем (подтверждение регистрации, сброс пароля). Для личного использования или маленькой команды это нормально — пользователей вы создаёте вручную из панели администратора. Если нужна отправка почты, потребуется отдельно настроить SMTP-переменные (MAILER_HOST,MAILER_PORT,MAILER_SECURITY,MAILER_AUTH_USER,MAILER_AUTH_PASSWORD) — в официальной документации Joplin они описаны подробно, здесь не будем на них останавливаться, чтобы не раздувать статью.
Запускаем:
docker compose up -d
docker compose logs -f app
В логах должно появиться сообщение о том, что приложение слушает на указанном порту и подключение к базе прошло успешно. Если видите ошибки подключения к PostgreSQL — обычно дело в том, что контейнер db ещё не успел полностью инициализироваться при первом старте; подождите 10-15 секунд и перезапустите app:
docker compose restart app
Nginx reverse proxy и SSL по домену
Ставим nginx и certbot:
apt install -y nginx certbot python3-certbot-nginx
Создаём конфиг сайта:
nano /etc/nginx/sites-available/joplin.conf
server {
listen 80;
server_name joplin.example.com;
location / {
proxy_pass http://127.0.0.1:22300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# для синхронизации больших вложений
client_max_body_size 200M;
proxy_read_timeout 300s;
}
}
Активируем и проверяем:
ln -s /etc/nginx/sites-available/joplin.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Выпускаем сертификат — certbot сам допишет блок HTTPS и настроит редирект с 80 на 443:
certbot --nginx -d joplin.example.com
client_max_body_size стоит поднять заранее — по умолчанию nginx режет запросы больше 1 МБ, а Joplin синхронизирует вложения (фото, PDF, вложенные файлы) размером в десятки мегабайт. Если у вас уже стоит связка Caddy вместо nginx, автоматический SSL там настраивается ещё проще — сравнение обоих подходов есть в статье Caddy или nginx: что выбрать для сервера.
Проверьте, что домен открывается: https://joplin.example.com должен показать страницу входа Joplin Server.
Первый запуск, администратор и подключение клиентов
При первом старте Joplin Server создаёт учётную запись администратора по умолчанию:
- Логин:
admin@localhost - Пароль:
admin
Зайдите под ней сразу после первого открытия страницы и немедленно смените пароль — это первое, что нужно сделать, до создания рабочих аккаунтов. Дальше в разделе Users создайте отдельного пользователя для себя (не работайте под admin для повседневных заметок) и, если нужно, для остальных членов команды — каждому свой логин и лимит на объём хранилища при желании.
Подключение клиентов одинаковое на всех платформах:
- В настольном приложении Joplin: Настройки → Синхронизация.
- Target sync — выбираете Joplin Server (Beta).
- Указываете:
- Sync target URL:
https://joplin.example.com - Email: адрес созданного пользователя
- Password: его пароль
- Нажимаете Synchronise — Joplin проверит соединение и начнёт синхронизацию.
На мобильных приложениях (Android/iOS) шаги идентичны — тот же раздел настроек синхронизации, тот же набор из трёх полей. Если у вас уже были заметки локально до подключения к серверу, при первой синхронизации они автоматически загрузятся на сервер — конфликтов обычно не бывает, если это первое подключение "чистого" клиента.
Отдельно стоит настроить регулярный бэкап тома ./data/postgres (там вся база данных) — простейший вариант через pg_dump по крону или через docker compose exec db pg_dump -U joplin joplin > backup.sql, а дальше выгрузка бэкапа на другой сервер или в S3-совместимое хранилище. Хранить бэкап синхронизации на том же диске, что и сама синхронизация, — плохая идея: при отказе диска вы потеряете и данные, и их копию одновременно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли использовать Joplin Server без Docker, напрямую через Node.js?
Да, разработчики поддерживают и такой вариант, но он требует ручной установки нужной версии Node.js, сборки зависимостей и отдельного управления процессом (через systemd или pm2). Docker Compose проще в сопровождении и обновлении, поэтому в этой статье выбран он.
Что если я не хочу использовать PostgreSQL, можно SQLite?
Joplin Server технически поддерживает SQLite, но в документации сами разработчики отмечают, что это подходит только для тестирования — для рабочей эксплуатации, тем более с несколькими клиентами и параллельной синхронизацией, рекомендован именно PostgreSQL.
Как обновить Joplin Server до новой версии?
Смените тег образа в docker-compose.yml на нужную версию (или оставьте latest, если готовы автоматически получать новые версии), затем выполните docker compose pull && docker compose up -d. Перед обновлением на продакшене сначала сделайте бэкап базы данных.
Сколько пользователей выдержит один недорогой VPS?
Для личного использования и небольшой команды (5-15 человек с обычным объёмом заметок) конфигурации в 1-2 vCPU и 2 ГБ RAM обычно достаточно с запасом. Точные цифры зависят от объёма вложений и частоты синхронизации, поэтому воспринимайте это как ориентир, а не гарантию.
Нужен ли отдельный домен именно для Joplin, или можно поддомен?
Поддомен подходит без ограничений — joplin.example.com работает так же, как отдельный домен, лишь бы A-запись указывала на IP вашего сервера и certbot смог подтвердить владение при выпуске сертификата.
Что делать, если забыл пароль администратора?
Можно временно включить почтовую рассылку (MAILER_ENABLED=1 с настроенным SMTP) и воспользоваться сбросом пароля через письмо, либо напрямую отредактировать запись пользователя в таблице PostgreSQL — второй способ требует аккуратности и бэкапа базы перед изменением.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →