Files

258 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по развёртыванию 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 на нодах — отдельный этап (будет добавлен в следующих версиях).