Вчера мы рассказали (https://t.me/interface31/5557), как быстро установить собственный сервер заметок Joplin при помощи Docker, но у него есть один недостаток – он работает по незащищенному протоколу HTTP и публично публиковать такие сервисы категорически не рекомендуется.
Как быть? Ничего сложного, технически Joplin Server – обычное веб-приложение, а следовательно все наши вопросы решит установленный перед ним обратный прокси и поддержкой HTTPS.
Вариантов тут великое множество, если у вас уже есть подобная инфраструктура, то имеет смысл рассматривать ее. Если же нет, то будем обходиться собственными силами и желательно сделать это максимально просто.
Исходя из этого мы решили использовать веб-сервер Caddy, почему именно его, а не NGINX/ Angie? Потому что Caddy предельно прост и вы это сами скоро увидите.
Так как мы уже используем Docker, то нет смысла разделять разные службы по разным местам, проще объединить их все в один compose-файл, что обеспечит проекту отличную управляемость и переносимость.
Поехали. Мы дадим инструкцию с нуля, если вы уже развернули Joplin-сервер, то часть шагов можно пропустить, но даже если вы их выполните ничего страшного и деструктивного не случится.
Создаем папку проекта и compose-файл в ней:
mkdir -p /opt/joplin
nano /opt/joplin/docker-compose.yml
Приводим его содержимое к следующему виду:
services:
db:
image: postgres:17
volumes:
- ./data/postgres:/var/lib/postgresql/data
restart: always
environment:
POSTGRES_PASSWORD: MyPa$$worD
POSTGRES_USER: joplin-user
POSTGRES_DB: joplindb
app:
image: joplin/server:latest
container_name: joplin-server
depends_on:
- db
restart: always
environment:
APP_PORT: 8080
APP_BASE_URL: https://joplin.example.com
DB_CLIENT: pg
POSTGRES_PASSWORD: MyPa$$worD
POSTGRES_DATABASE: joplindb
POSTGRES_USER: joplin-user
POSTGRES_PORT: 5432
POSTGRES_HOST: db
caddy:
image: caddy:2
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./data/caddy:/data
- ./config/caddy:/config
Что изменилось в нем, кроме добавления секции caddy? Мы убрали проброс портов для контейнера Joplin, теперь он полностью изолирован во внутренней сети.
Также обратите внимание на APP_BASE_URL, теперь там https://joplin.example.com, т.е. явно указан протокол – HTTPS и отсутствует внутренний порт, потому что именно так мы будем обращаться к серверу через обратный прокси.
Следующим шагом следует создать конфигурационный файл для Caddy:
mkdir -p /opt/joplin/caddy
nano /opt/joplin/caddy/Caddyfile
После чего внесем в него следующее содержимое:
joplin.example.com {
reverse_proxy app:8080
}И всё? И всё! Этим и хорош Caddy, не нужно ничего расписывать, он сам по умолчанию получит для указанного домена сертификаты Let’s Encrypt и настроит максимально надежное современное шифрование.
Сохраняем конфигурационный файл и запускаем проект:
docker compose up -d
Теперь открываем указанный в
APP_BASE_URL адрес и убеждаемся, что наш сервер работает по защищенному протоколу с сертификатом Let’s Encrypt и максимальным уровнем шифрования.
