258 lines
7.0 KiB
Markdown
258 lines
7.0 KiB
Markdown
# Инструкция по развёртыванию 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 на нодах — отдельный этап (будет добавлен в следующих версиях).
|