Initial commit: VPN panel on Go, PostgreSQL 17, Docker, Xray-core

This commit is contained in:
vpn-panel
2026-05-21 18:55:14 +03:00
commit 3c2f5226d1
27 changed files with 1778 additions and 0 deletions
+255
View File
@@ -0,0 +1,255 @@
# Инструкция по развёртыванию 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 (для установщика)
sudo apt install -y git golang-go
```
Проверка:
```bash
docker --version
docker compose version
```
---
## 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) / `127.0.0.1` (с хоста) |
| Порт | `5432` |
| БД | `vpnpanel` |
| Пользователь | `vpnpanel` |
| Пароль | `changeme` (смените в установщике) |
---
## 4. Установщик (первичная настройка)
Интерактивно задаёт домен, БД и учётку администратора.
### Вариант A — Go на сервере
```bash
go run ./cmd/install
```
### Вариант B — сборка установщика
```bash
go build -o install ./cmd/install
./install
```
### Вариант C — установщик в Docker
```bash
docker compose build
docker compose run --rm panel /app/install
```
При запросах укажите:
| Поле | Пример | Примечание |
|------|--------|------------|
| Домен панели | `panel.example.com` | Для ссылок и nginx |
| Порт приложения | `8080` | Внешний порт в compose |
| Хост БД | `postgres` | Имя сервиса в docker-compose |
| Порт БД | `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
```
---
## Устранение неполадок
| Проблема | Решение |
|----------|---------|
| `DATABASE_URL не задан` | Запустите `./install` или создайте `.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 на нодах — отдельный этап (будет добавлен в следующих версиях).