Руководство по правке фронтенда dix.su¶
Структура проектов¶
dixsu-infra/ ← единый монорепо, одна ветка prod (см. docs/DEPLOYMENT.md)
├── modulauth/ ← Spring Boot (Java) — основной сервис
├── dixu_proxy/ ← Elixir Phoenix — прокси туннелей
└── nginx/ ← конфиг обратного прокси
modulauth — шаблоны и статика¶
Где лежат файлы¶
modulauth/src/main/resources/
├── templates/ ← HTML-шаблоны (Thymeleaf)
│ ├── landing.html ← главная страница dix.su
│ ├── clarity.html ← страница проверки /clarity
│ ├── protected-page.html ← личный кабинет /auth/protected
│ ├── admin-catalog.html ← панель управления /admin
│ ├── tunnels.html ← tunnels.dix.su (проверка туннелей)
│ ├── link-info.html ← link.dix.su (проверка ссылок)
│ ├── tunnel-landing.html ← лендинг /tunnel
│ ├── profile-landing.html ← лендинг /profile
│ ├── shortlinks-landing.html ← лендинг /shortlinks
│ ├── otzovik.html ← страница отзывика /otzovik
│ ├── privacy.html ← политика конфиденциальности
│ └── fragments/
│ └── site-layout.html ← шапка, футер, мобильное меню (nav, footer, navStyles, navScript)
├── static/
│ ├── css/ ← стили (admin.css и др.)
│ ├── js/ ← скрипты (admin-profile.js и др.)
│ └── img/ ← картинки, favicon
└── db/migration/ ← SQL-миграции Flyway (V1__, V2__...)
Как добавить пункт в главное меню¶
Файл: templates/fragments/site-layout.html
Десктоп-nav (строки ~52-57):
<div class="nav-links">
<a href="https://dix.su/profile">Визитка</a>
<a href="https://dix.su/shortlinks">Ссылки</a>
<a href="https://dix.su/tunnel">Туннель</a>
<a href="https://dix.su/clarity">Проверка</a> <!-- ← новый пункт -->
<a href="https://dix.su/otzovik">Отзовик</a>
</div>
Мобильный nav (строки ~64-70) — тот же список, продублировать туда же.
Как добавить новую страницу¶
- Создать
templates/my-page.html— взять за основу любой*-landing.html - Добавить метод в
LandingController.java: - Если страница должна быть публичной — убедиться что путь есть в
SecurityConfig.javaв спискеpermitAll() - Собрать и задеплоить
Нужна ли пересборка?¶
Да — всегда. Шаблоны и статика запекаются в JAR при сборке. Изменения в файлах на диске не применяются автоматически.
# На VPS:
bash /root/dixsu/rebuild_modulauth.sh
# Пересобирает modulauth, перезапускает контейнер.
# Flyway автоматически применяет новые SQL-миграции при старте.
Workflow правок¶
# 1. Отредактировать файл локально
# Пример: modulauth/src/main/resources/templates/clarity.html
# 2. Закоммитить и запушить (один монорепо, ветка prod — см. docs/DEPLOYMENT.md)
git add modulauth/src/main/resources/templates/clarity.html
git commit -m "fix: описание правки"
git push origin prod
# 3. Применить на сервере
ssh -p 1022 root@217.114.43.49 \
"cd /root/dixsu && git pull && docker compose build modulauth --no-cache && docker compose up -d modulauth"
Добавить SQL-миграцию¶
Создать файл с именем следующей версии (см. последнюю в
modulauth/src/main/resources/db/migration/, на 2026-06-21 это V35):
dixu_proxy — шаблоны Elixir¶
Особенность: нет отдельных HTML-файлов¶
Прокси не использует Phoenix HEEx/EEx шаблонные файлы — весь HTML встроен прямо в функции контроллера в виде строк Elixir. Это сделано намеренно: прокси рендерит только несколько служебных страниц (заморозка туннеля, офлайн), и выносить их в файлы не было нужды.
Где найти HTML¶
Файл: dixu_proxy/lib/dixu_proxy_web/controllers/proxy_controller.ex
# Страница «Заморожен пользователем»
defp frozen_user_html(slug) do
"""
<!DOCTYPE html>...
"""
end
# Страница «Заблокирован администратором»
defp frozen_admin_html(slug) do
"""
<!DOCTYPE html>...
"""
end
Страница «Устройство офлайн» (текстовый ответ):
Как изменить HTML страниц прокси¶
- Открыть
dixu_proxy/lib/dixu_proxy_web/controllers/proxy_controller.ex - Найти нужную функцию (
frozen_user_html,frozen_admin_html) - Отредактировать HTML внутри тройных кавычек
""" - Закоммитить, запушить, пересобрать
git add dixu_proxy/lib/dixu_proxy_web/controllers/proxy_controller.ex
git commit -m "fix: обновить страницу заморозки"
git push origin prod
ssh -p 1022 root@217.114.43.49 \
"cd /root/dixsu && git pull && docker compose build dixu_proxy --no-cache && docker compose up -d dixu_proxy"
Нужна ли пересборка?¶
Да. Elixir компилирует код в BEAM-байткод. Изменение .ex файла требует перекомпиляции и перезапуска контейнера.
nginx — конфиг¶
Где лежит¶
При старте контейнера nginx envsubst подставляет переменные и кладёт результат в /etc/nginx/conf.d/dixu.conf.
Нужна ли пересборка?¶
Нет rebuild, но нужно пересоздать контейнер:
git add nginx/dixu.conf.template
git commit -m "fix: nginx правка"
git push origin prod
ssh -p 1022 root@217.114.43.49 \
"cd /root/dixsu && git pull origin prod && docker compose up -d --force-recreate nginx"