Skip to content

Latest commit

 

History

History
383 lines (265 loc) · 9.4 KB

File metadata and controls

383 lines (265 loc) · 9.4 KB

Установка

Что потребуется

  • Linux-сервер (любой современный дистрибутив). Примеры ниже используют apt для Debian/Ubuntu.
  • Docker и плагин Docker Compose.
  • Node.js 20+ / npm - frontend собирается на хосте, а не внутри Docker.
  • Для интеграции с Remnawave: рабочий экземпляр Remnawave и API-токен для него (опционально — можно работать в автономном режиме).
  • Для production: домен (два имени, например olcwave.example.org и olcsub.example.org), указывающий на сервер. Caddy автоматически получает для них HTTPS-сертификаты.

API-контейнер взаимодействует с Docker daemon хоста через:

/var/run/docker.sock
  • так он запускает OLCRTC-контейнеры.

1. Установка Docker

curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker

Проверка:

docker --version
docker compose version

Если вы хотите запускать docker без sudo, добавьте пользователя в группу docker и перезайдите:

sudo usermod -aG docker "$USER"

2. Установка Node.js

# Debian/Ubuntu - NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version   # v20+

3. Клонирование репозитория

git clone https://github.com/invdevv/olcwave.git
cd olcwave

4. Сборка olcrtc контейнера

cd backend/olcrtc
docker build . --tag olcrtc
cd ../..  

5. Сборка xraycore контейнера

cd backend/xraycore
docker build . --tag xraycore
docker run -d --name olcwave-xraycore xraycore
docker stop olcwave-xraycore
cd ../..  

6. Настройка backend

cp backend/.env.example backend/.env
nano backend/.env

Все переменные описаны в configuration.md.

Выберите режим работы:

# Автономный режим (без Remnawave)
RW_ENABLED=false

# Интеграция с Remnawave
# RW_ENABLED=true
# RW_API_URL=https://your-remnawave-host
# RW_API_TOKEN=...

Переменные, которые обязательно нужно изменить перед первым запуском:

POSTGRES_PASSWORD=<something strong>
ADMIN_USERNAME=admin
ADMIN_PASSWORD=<something strong>
JWT_SECRET_KEY=<random string>                # openssl rand -hex 32

Примечание: backend/.env передается в API-контейнер во время запуска через env_file в docker-compose.yaml (он не встраивается в образ - находится в .dockerignore). Если позже изменить файл, достаточно перезапустить API:

docker compose up -d api

7. Настройка frontend

cp frontend/.env.example frontend/.env
$EDITOR frontend/.env
# Куда браузер обращается для API backend.
# Caddy обслуживает SPA и API через один домен и удаляет префикс /api,
# поэтому здесь указывается <домен панели>/api:
VITE_API_URL=https://olcwave.example.org/api

# Ссылка подписки, отображаемая/копируемая в UI.
# {uuid} заменяется для каждого пользователя.
VITE_SUB_URL_TEMPLATE=https://olcsub.example.org/{uuid}

Эти значения встраиваются в собранный JavaScript во время сборки (шаг 7).

Изменили их -> пересоберите frontend.


8. Сборка frontend и страницы подписки

Caddy раздает статические файлы из:

frontend/dist
subscriptionPage/dist

поэтому сборка выполняется один раз на хосте:

cd frontend
npm ci
npm run build         # создает frontend/dist
cd ..

cd subscriptionPage
npm ci
npm run build         # создает subscriptionPage/dist
cd ..

9. Настройка доменов в Caddy

Конфигурация Caddy находится в шаблоне:

caddy/Caddyfile.template

При запуске install.sh он автоматически генерирует caddy/Caddyfile из шаблона, подставляя ваши домены.

При ручной настройке скопируйте шаблон и замените плейсхолдеры:

cp caddy/Caddyfile.template caddy/Caddyfile

Отредактируйте caddy/Caddyfile, заменив {{PANEL_DOMAIN}} и {{SUB_DOMAIN}} на свои домены.

Итоговый файл будет выглядеть так:

olcwave.example.org {
    handle_path /api/* {
        reverse_proxy api:8000
    }

    handle {
        root * /srv/frontend/dist
        try_files {path} /index.html
        file_server
    }
}


olcsub.example.org {
    @check path_regexp check ^/(?P<id>[^/]+)/check$

    handle @check {
        rewrite * /sub/{re.id}/check
        reverse_proxy api:8000
    }

    @browser header_regexp browser User-Agent (?i)^Mozilla/

    handle @browser {
        root * /srv/subscriptionPage/dist
        try_files {path} /index.html
        file_server
    }

    handle {
        rewrite * /sub{uri}
        reverse_proxy api:8000
    }
}
  • olcwave.example.org обслуживает SPA панели и проксирует /api/* в backend, удаляя префикс /api.
  • olcsub.example.org обрабатывает три типа запросов:
    1. GET /<uuid>/check — проверка существования подписки (проксируется в /sub/<uuid>/check);
    2. Браузерные запросы — обслуживает SPA страницы подписки;
    3. Все остальное (OLCBox, curl) — возвращает raw-текст подписки.

Compose публикует порты:

80
443

Они нужны Caddy для автоматического HTTPS на настоящих доменах.

Если нужен только обычный HTTP для быстрого тестирования, используйте:

:80 {
    handle_path /api/* {
        reverse_proxy api:8000
    }

    handle {
        root * /srv/frontend/dist
        try_files {path} /index.html
        file_server
    }
}

В таком режиме Caddy работает через HTTP без сертификатов.


10. Запуск всего

docker compose up -d

Будут запущены три контейнера:

  • olcwave-postgres - база данных
  • olcwave-api - FastAPI backend (ждет, пока PostgreSQL станет готов)
  • olcwave-caddy - reverse proxy + сервер статических файлов

Backend автоматически создает таблицы базы данных при первом запуске.

Отдельный шаг миграции пока не требуется.

Caddy использует два Docker volume для хранения данных:

  • caddy_data — сертификаты TLS/ACME;
  • caddy_config — директория конфигурации API.

11. Проверка

docker ps

Вы должны увидеть:

olcwave-postgres
olcwave-api
olcwave-caddy

Все должны иметь статус:

Up

Если routing включён, также будет запущен olcwave-xraycore.

Проверить логи API:

docker compose logs -f api

После этого вашу панель и войдите используя:

ADMIN_USERNAME
ADMIN_PASSWORD

из:

backend/.env

Локальный вариант / только HTTP

Есть файл:

docker-compose-dev.yaml

который запускает только:

  • PostgreSQL;
  • API.

Без Caddy.

Для локальной разработки обычно проще запускать backend и frontend напрямую на хосте.

См. development.md.


Обновление

git pull

cd frontend && npm ci && npm run build && cd ..

cd subscriptionPage && npm ci && npm run build && cd ..

cd backend/olcrtc && docker build . --tag olcrtc --no-cache && cd ../..

cd backend/xraycore && docker build . --tag xraycore --no-cache && docker run -d --name olcwave-xraycore xraycore && docker stop olcwave-xraycore && cd ../..

docker compose up -d --build

Что происходит:

  • frontend пересобирается, если он изменился;
  • API image пересобирается;
  • контейнеры перезапускаются.

Если изменился только:

backend/.env

пересборка не нужна.

Файл читается при старте контейнера, поэтому достаточно:

docker compose up -d api