Initial commit: VPN panel on Go, PostgreSQL 17, Docker, Xray-core
This commit is contained in:
@@ -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 на нодах — отдельный этап (будет добавлен в следующих версиях).
|
||||
Reference in New Issue
Block a user