# Инструкция по развёртыванию VPN Panel Репозиторий: **https://git.evilfox.cc/test/vpn-panel.git** --- ## 1. Подготовка сервера Рекомендуется VPS с Ubuntu 22.04/24.04 или Debian 12. ```bash # Обновление системы sudo apt update && sudo apt upgrade -y # Docker curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER # Перелогиньтесь или: newgrp docker # Git (Go на сервере не обязателен — установка через Docker) sudo apt install -y git ``` Проверка: ```bash docker --version docker compose version ``` > **Go не нужен.** Установщик запускается внутри контейнера. --- ## 2. Клонирование проекта ```bash cd /opt sudo git clone https://git.evilfox.cc/test/vpn-panel.git sudo chown -R $USER:$USER vpn-panel cd vpn-panel ``` Если репозиторий приватный — используйте токен или SSH: ```bash # HTTPS с токеном Gitea git clone https://USER:TOKEN@git.evilfox.cc/test/vpn-panel.git # или SSH git clone git@git.evilfox.cc:test/vpn-panel.git ``` --- ## 3. Запуск PostgreSQL ```bash docker compose up -d postgres docker compose ps ``` Дождитесь статуса `healthy` у контейнера `vpn-panel-db`. По умолчанию (до `.env`): | Параметр | Значение | |----------|------------| | Хост | `postgres` (только Docker-сеть) | | Порт | `5432` (с интернета **закрыт**, наружу не пробрасывается) | | БД | `vpnpanel` | | Пользователь | `vpnpanel` | | Пароль | `changeme` (смените в установщике) | --- ## 4. Установщик (первичная настройка) Интерактивно задаёт домен, БД и учётку администратора. **Go на сервере не нужен.** ### Вариант A — один скрипт (рекомендуется) ```bash chmod +x scripts/setup.sh ./scripts/setup.sh ``` ### Вариант B — установщик в Docker вручную ```bash docker compose up -d postgres # дождитесь healthy: docker compose ps docker compose build install docker compose --profile tools run --rm install ``` При запросах укажите: | Поле | Пример | Примечание | |------|--------|------------| | Домен панели | `panel.example.com` | Для ссылок и nginx | | Порт приложения | `8080` | Внешний порт в compose | | Хост БД | **`postgres`** | Обязательно имя сервиса Docker, не `localhost` | | Порт БД | `5432` | | | Пользователь БД | `vpnpanel` | | | Пароль БД | *свой надёжный* | | | Имя БД | `vpnpanel` | | | Email админа | `admin@example.com` | **единственный** админ | | Пароль админа | *мин. 8 символов* | | Будет создан файл `.env` (права `600`). **Не коммитьте `.env` в git.** --- ## 5. Запуск панели ```bash docker compose up -d --build docker compose logs -f panel ``` Проверка: ```bash curl http://127.0.0.1:8080/health # {"status":"ok","core":"xray"} ``` В браузере: `http://IP_СЕРВЕРА:8080` --- ## 6. HTTPS (Nginx + Let's Encrypt) Пример для домена `panel.example.com`: ```bash sudo apt install -y nginx certbot python3-certbot-nginx ``` `/etc/nginx/sites-available/vpn-panel`: ```nginx server { listen 80; server_name panel.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ```bash sudo ln -s /etc/nginx/sites-available/vpn-panel /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx sudo certbot --nginx -d panel.example.com ``` В `.env` обновите `APP_DOMAIN=panel.example.com`. --- ## 7. Файрвол ```bash sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp # Если без nginx — открыть порт панели: # sudo ufw allow 8080/tcp sudo ufw enable ``` --- ## 8. Регистрация администратора - Если установщик уже создал админа — войдите на `/login`. - Если нет — один раз откройте `/register` (пока админа нет в БД). После первого админа `/register` закрывается. --- ## 9. Обновление ```bash cd /opt/vpn-panel git pull docker compose up -d --build ``` --- ## 10. Резервное копирование БД ```bash docker exec vpn-panel-db pg_dump -U vpnpanel vpnpanel > backup_$(date +%F).sql ``` Восстановление: ```bash cat backup.sql | docker exec -i vpn-panel-db psql -U vpnpanel vpnpanel ``` --- ## Устранение неполадок | Проблема | Решение | |----------|---------| | `Command 'go' not found` | Не ставьте Go — используйте `./scripts/setup.sh` или `docker compose --profile tools run --rm install` | | `env file .env not found` | Обновите репозиторий (`git pull`) или создайте `.env`: `cp .env.example .env` и отредактируйте | | `password authentication failed` | Пароль в установщике ≠ пароль при первом запуске тома. Enter = `changeme`, или сброс: `docker volume rm vpn-panel_pgdata` | | `DATABASE_URL не задан` | Запустите установщик в Docker или создайте `.env` из `.env.example` | | Нет подключения к БД | `docker compose ps`, проверьте `healthy` у postgres | | Порт занят | Смените `APP_PORT` в `.env` и в `docker-compose.yml` | | Регистрация закрыта | Админ уже есть — используйте `/login` | Логи: ```bash docker compose logs panel docker compose logs postgres ``` --- ## Переменные `.env` (справочник) ```env APP_PORT=8080 APP_DOMAIN=panel.example.com DATABASE_URL=postgres://vpnpanel:PASSWORD@postgres:5432/vpnpanel?sslmode=disable SECRET_KEY=<случайная строка, генерируется установщиком> INSTALLED=true POSTGRES_USER=vpnpanel POSTGRES_PASSWORD=PASSWORD POSTGRES_DB=vpnpanel POSTGRES_HOST=postgres POSTGRES_PORT=5432 ``` --- ## Связь с Xray-core Панель подготовлена под ядро [Xray-core](https://github.com/XTLS/Xray-core). Установка и конфигурация Xray на нодах — отдельный этап (будет добавлен в следующих версиях).