Вводная часть
Генерал: “Товарищи офицеры, если вы такие тупые, что не можете запомнить самых простых вещей - записывайте! Я же записываю..”
Старый анекдот
Достаточно долгое время я пользовался и на десктопе, и на телефоне для заметок и записок Keep от гугла. Но всегда хотелось большего в деле хранения и просмотра базы знаний. Конечно на свете есть OneNote, но под линукс его нет, есть Evernote, но он хочет каких-то конских денег для использования.
Но однажды попалась на глаза опенсорсная альтернатива Evernote - Joplin.
Что есть в комплекте
- Возможность хранения заметок в блокнотах (можно вкладывать блокнот в блокнот, в блокнот, в блокнот…)
- Хранение картинок и объектов
- Редактирование в Markdown и, на десктопе, обычным редактором в word-like стиле
- Есть приложение под все популярные платформы
- Есть веб-клиппер под разные
нормальныебраузеры, позвляющий при открытом клиенте Joplin сохранять страничку как заметку - Возможность создавать задачи (не пользовался)
- Возможность синхронизироваться с кучей облаков и, через webdav, с такими сервисами как Yandex Disk, например (честно скажу с ним не пробовал)
- Возможность поставить собственный сервер и хранить все в нем, чем я незамедлительно и воспользовался
- И многое другое, включая расширение плагинами
Для начала я поставил приложение из плеймаркета на свой андроид-телефон.
Поигрался без всяких синхронизаций (читай локально на телефоне). Работает прекрасно.
Потом попробовал посинхронизироваться в уже имеющийся у меня webdav-сервер. Тоже работает. Но с картинками в заметках уже начались некие тормоза.
Тогда было принято решение копать в сторону своего сервера.
На Github, где собственно и ведется разработка проекта, был увиден файл docker-compose.server.yml
. На его основе (+ небольшой гуглёж) и был поднят сервак.
Как и что по установке сервера
- Предполагается, что docker и docker-compose на сервере уже есть и учить никого как их ставить (из чего состоит 99% статей как поднять очередной супер-пупер-мега прожект) и настраивать не нужно. Кому нужно - нагуглите себе рецептов сами. Их в поисковике просто тонны, на всех языках мира.
- Ставить будем приложение в docker. Хранение данных будет в БД, конкретно в PostgreSQL. Запуск через docker-compose.
- Для начала на сервере необходим файлик с переменными, в дальнейшем использующимися в docker-compose и называться он должен
.env
. Внутри следующее:
POSTGRES_PASSWORD=пароль_на_postgres
POSTGRES_USER=пользователь_в_postgres
POSTGRES_DATABASE=название_базы_в_postgres
POSTGRES_PORT=5432
APP_BASE_URL=https://домен.вашего.сайта.с.joplin.ru
- Пароли и пользователей, как и имя базы, можно придумать любые, лишь бы устраивало.
- По имени сайта: я себе зарегал у своего DNS-провайдера быстренько имечко, получил у LetsEncrypt на него сертификат, настроил в nginx проксирование на поднятый в последующем в докере сервак, чем сердце и успокоилось. Про настройку прокси ниже.
- Затем рядом с файлом
.env
положил файликdocker-compose.yml
выглядящий так:
version: '3'
services:
db:
image: postgres:13
volumes:
- ./data/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_DB=${POSTGRES_DATABASE}
app:
image: joplin/server:latest
depends_on:
- db
ports:
- "127.0.0.1:22300:22300"
restart: unless-stopped
environment:
- APP_PORT=22300
- APP_BASE_URL=${APP_BASE_URL}
- DB_CLIENT=pg
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DATABASE=${POSTGRES_DATABASE}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PORT=${POSTGRES_PORT}
- POSTGRES_HOST=db
- В файле описано, что надо поднять postgres-сервак и сервак с приложением (вроде на nodejs, но это не точно, да и пофиг абсолютно)
- Контейнер с приложением оккупирует порт 22300, что нам понадобится для проксирования
- Далее, как водится:
docker-compose pull
docker-compose up -d
и получаем запущенный сервак Joplin - Там, где мы запускали наш сервер, появится каталог
data
, где будут храниться файлы БД PostgreSQL, в которых и будут находиться наши заметки. Нужно для бэкапа. - Далее про проксирование:
server {
listen 80;
listen [::]:80;
server_name your.name.ru;
include acme;
return 301 https://$server_name$request_uri;
}
server {
server_name your.name.ru;
listen name.ru:443 ssl; # default_server;
ssl_certificate /etc/letsencrypt/live/your.name.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.name.ru/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/your.name.ru/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 67.207.67.3 8.8.8.8;
client_max_body_size 1000m;
# исключим возврат на http-версию сайта
add_header Strict-Transport-Security "max-age=31536000";
location ~ /\.git {
deny all;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://127.0.0.1:22300/;
}
access_log /var/log/nginx/joplin.log;
}
- Везде your.name.ru и name.ru надо заменить на свои сайты
Собственно всё. Заходим на наш joplin-сайт, логинимся admin@localhost
и пароль admin
, меняем логины-пароли и наслаждаемся.
Одно но, не смог, да и не собирался настраивать почтовые рассылки с сервера. Показались ни к чему. Заведение пользователя все равно через админку, там же есть все “отправленные” письма со всеми реквизитами для активации аккаунта.
Как выглядит приложение
На андроид
На линукс