TREK - self-hosted планировщик путешествий: создаете поездку, расставляете точки на карте (что посмотреть, где остановиться), раскладываете по дням, ведете бюджет с мультивалютой, списки вещей и дорожный дневник. Все совместно - участники видят изменения в реальном времени; есть встроенный AI-помощник. Работает self-contained из коробки: карта на Leaflet и OpenStreetMap, поиск мест через OSM, погода через Open-Meteo - без внешних ключей. Это ваш личный TripIt на своем сервере в РФ: план поездки, бюджет и заметки не уходят в чужое облако.

Что внутри

  • TREK - веб-приложение на Node.js/NestJS: поездки, карта, маршрут, бюджет, списки, дневник, участники.
  • SQLite - встроенная база (файл в томе, отдельный сервер БД не нужен).
  • Фронт на React/Vite отдается тем же образом; контейнер read-only с hardening.
  • Встроенный Caddy - reverse-proxy и авто-TLS (Let's Encrypt) поверх приложения.

Как войти

  1. Адрес формируется из IP сервера: замените точки на дефисы и добавьте .fatmetal.net. Пример: IP 45.15.159.3 -> https://45-15-159-3.fatmetal.net/ (этот же адрес - при входе по SSH и в файле кредов /root/trek-credentials.txt).
  2. Администратор создается на первом старте: логин admin@<ваш-домен> и случайный пароль лежат в файле кредов. Войдите и смените пароль.
  3. Открытую регистрацию новых пользователей включите или закройте в Admin > Settings. Интерфейс переводится на русский (выбор в профиле).

Свой домен

Направьте A/CNAME на этот сервер, задайте DOMAIN=ваш.домен в /etc/trek-mp/params.env, затем bash /opt/trek-mp/install.sh - Caddy перевыпустит сертификат, а APP_URL/ALLOWED_ORIGINS обновятся под новый домен. Полная инструкция - на сервере: cat /root/trek-credentials.txt.

Требования

Ubuntu 24.04, открытые порты 80/443. Два контейнера (TREK + Caddy). Стек легкий: в простое около 310 МБ RAM, база - SQLite-файл, хватает тарифа CPU2-RAM4-DISK50. Своего TLS у приложения нет - его выпускает встроенный Caddy. Базовый функционал работает без внешних ключей; обложки (Unsplash), спутниковые тайлы (Mapbox) и SSO (OIDC) - опционально, по своим ключам.

Подробный разбор с замерами и скриншотами