Перейти к содержанию

Контейнерные стеки — руководство пользователя

Контейнерный стек dix.su — это готовый docker-compose.yml, который поднимает ваш сервис вместе с туннелем к dix.su. Подходит для тех, кто хочет запустить интернет-магазин, git-хостинг или другой web-сервис за туннелем — без настройки туннельного клиента вручную.

Требования: Docker и Docker Compose (v2) на машине, где будет работать стек.


Шаг 1 — Получить slug и токен

Зайдите на dix.su/auth/protected → «Туннель». Вам нужны два значения:

  • Slug — уникальное имя вашего туннеля (например, myshop)
  • Token — секретный токен для подключения

Скопируйте их — они понадобятся в .env.


Шаг 2 — Клонировать нужный стек

Стек Назначение Репозиторий Мин. RAM
django_shop Интернет-магазин (Django + Oscar) git@gitlab.com:dixsu/market/django_shop.git 512 МБ
dixsu-git Git-хостинг (Forgejo) + Docker/OCI-реестр и реестры пакетов git@gitlab.com:dixsu/market/dixsu-git.git 512 МБ
dixsu-plausible Аналитика посещений (Plausible CE) git@gitlab.com:dixsu/market/dixsu-plausible.git 2 ГБ ¹
dixsu-test Тестовый сервис для проверки туннеля git@gitlab.com:dixsu/market/dixsu-test.git 128 МБ

¹ dixsu-plausible требует CPU с SSE 4.2 (x86) или NEON (ARM) и минимум 2 ГБ RAM из-за ClickHouse. Подходит для Raspberry Pi 4 (4 GB), RPi 5, мини-ПК и любого VPS. На смартфонах (Redmi 4 / Note 8) этот стек не запустится.

git clone git@gitlab.com:dixsu/market/django_shop.git
cd django_shop

Шаг 3 — Создать .env

cp .env.template .env

Откройте .env и заполните обязательные поля:

# ── dix.su туннель ────────────────────────────────────────
DIXSU_SLUG=myshop            # ← ваш slug
DIXSU_TOKEN=abc123xyz        # ← ваш токен

# ── Django (для стека django_shop) ────────────────────────
SECRET_KEY=замените-на-50-случайных-символов
DEBUG=false
ALLOWED_HOSTS=myshop.dix.su,localhost
SITE_URL=https://myshop.dix.su

# ── База данных ────────────────────────────────────────────
DB_NAME=shopdb
DB_USER=shop
DB_PASSWORD=сильный-пароль

# ── Первый администратор ───────────────────────────────────
ADMIN_USER=admin
ADMIN_EMAIL=ваш@email.com
ADMIN_PASSWORD=сильный-пароль-для-входа

SECRET_KEY можно сгенерировать командой:

python3 -c "import secrets; print(secrets.token_hex(32))"


Шаг 4 — Запустить стек

docker compose up -d

Docker скачает образы, запустит приложение и туннельный клиент. Через 15–30 секунд ваш сервис будет доступен по адресу https://myshop.dix.su.

Проверить, что туннель поднялся

docker compose logs tunnel

Ищите строку:

[info] Joined channel proxy:myshop

Проверить статус в личном кабинете

Зайдите на dix.su/auth/protected → «Туннель». Вы увидите бейдж 📦 активен · docker-стек.


Управление стеком

Остановить

docker compose down

Перезапустить после обновления конфига

docker compose up -d

Посмотреть логи приложения

docker compose logs -f app

Обновить стек

git pull
docker compose up -d --build app

Туннельный контейнер не нужно пересобирать при обновлении приложения.


Email-уведомления (необязательно)

По умолчанию стек не отправляет письма (dummy-бэкенд). Это сделано намеренно — при первом запуске вы видите корректную работу магазина без настройки SMTP.

Чтобы включить реальную отправку, откройте .env и:

  1. Закомментируйте строку с dummy:

    # EMAIL_BACKEND=django.core.mail.backends.dummy.EmailBackend
    

  2. Раскомментируйте строку с smtp:

    EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
    

  3. Заполните SMTP-параметры:

    EMAIL_HOST=smtp.gmail.com
    EMAIL_PORT=587
    EMAIL_HOST_USER=ваш@gmail.com
    EMAIL_HOST_PASSWORD=пароль-приложения
    EMAIL_USE_TLS=true
    

  4. Перезапустите стек:

    docker compose up -d
    


Чем docker-стек отличается от прямого туннеля

Параметр Прямой туннель Docker-стек
Установка клиента вручную, бинарник docker compose up
Запуск сервиса ваш сервис уже работает стартует вместе с туннелем
SSH/RDP/VNC через туннель доступно (при тарифе VIP+) недоступно
Иконка статуса в ЛК ⚡ прямой 📦 docker-стек
Порт туннеля определяет вы (поле в ЛК) LOCAL_PORT в docker-compose.yml

Почему нет SSH/RDP/VNC для docker-стека

Эти протоколы требуют прямого доступа к порту на хост-машине или к службам, запущенным вне контейнера (SSH-демон, рабочий стол). Туннель внутри Docker имеет доступ только к сервисам в той же docker-сети — подключиться к SSH хост-машины через контейнер не получится. Тумблеры SSH/RDP/VNC в ЛК заблокированы для docker-стеков с подсказкой об этом.


Частые вопросы

Туннель запустился, но сайт не открывается

  • Убедитесь, что контейнер app тоже запустился: docker compose ps
  • Проверьте логи приложения: docker compose logs app
  • Проверьте, что LOCAL_PORT в docker-compose.yml совпадает с портом, на котором слушает приложение

Joined channel не появляется в логах tunnel

  • Проверьте slug и токен в .env — они должны совпадать с данными из личного кабинета
  • Убедитесь, что ваш туннель не заморожен (проверьте статус на dix.su)

Как сменить slug/токен

Обновите .env и перезапустите только контейнер tunnel:

docker compose restart tunnel

Можно ли запустить стек на VPS

Да — любой Linux с Docker подойдёт. Скопируйте репозиторий стека на VPS, создайте .env и запустите docker compose up -d. Туннель сам выйдет наружу через dix.su — открывать порты на VPS не нужно.

Стек dixsu-plausible не запускается / ClickHouse падает

ClickHouse требует CPU с поддержкой SSE 4.2 (x86) или NEON (ARM). Проверьте:

# x86 — должно выводить что-то:
grep -m1 sse4_2 /proc/cpuinfo

# ARM — должно выводить "asimd" или "neon":
grep -m1 -E "asimd|neon|fp" /proc/cpuinfo

Если признаков нет — этот стек на данном железе не запустится. Также убедитесь, что доступно минимум 2 ГБ RAM: free -h.

Как добавить сайт в Plausible после первого запуска

Откройте https://ваш-slug.dix.su → создайте пользователя → добавьте сайт с доменом, который хотите отслеживать → вставьте выданный <script>-тег в <head> этого сайта.