2.4 KiB
2.4 KiB
RemnaWave VPN Panel (Go)
MVP panel on Go with:
- main page
- registration
- authorization
- personal cabinet
- VPN config purchase via real external API and permanent key
One-click install/uninstall/reinstall (Ubuntu)
Requirements:
- Docker Engine + Docker Compose plugin installed
bashavailable (default on Ubuntu)
First setup:
- Copy
.env.exampleto.env - Fill real values in
.env:POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORDDATABASE_URLAPI_BASE_URLAPI_BUY_PATHAPI_KEYADMIN_EMAILADMIN_PASSWORD
Make scripts executable once:
chmod +x install.sh uninstall.sh reinstall.sh
One-click commands:
./install.sh
./uninstall.sh
./reinstall.sh
install.sh- build and start paneluninstall.sh- stop and remove container(s)reinstall.sh- full restart with rebuild
If you see /usr/bin/env: 'bash\r': No such file or directory, convert line endings:
sed -i 's/\r$//' install.sh uninstall.sh reinstall.sh
chmod +x install.sh uninstall.sh reinstall.sh
After install: http://localhost:3050
Run locally without Docker
- Copy env file:
.env.example->.env
- Set real values:
DATABASE_URL(example:postgres://postgres:postgres@localhost:5432/remnawave?sslmode=disable)API_BASE_URLAPI_BUY_PATHAPI_KEYADMIN_EMAILADMIN_PASSWORD
- Start:
go run .
Open: http://localhost:3050
Run in Docker Compose manually
docker compose up --build
Database (PostgreSQL 17)
- PostgreSQL 17 runs as
postgresservice indocker-compose.yml - App uses
DATABASE_URLto connect - Tables are auto-created on startup:
userspurchasesservers
- Admin user is auto-created/updated from:
ADMIN_EMAILADMIN_PASSWORD
External API contract expected
POST ${API_BASE_URL}${API_BUY_PATH}
Headers:
Authorization: Bearer <API_KEY>Content-Type: application/json
Request JSON:
{
"email": "user@example.com",
"plan": "monthly"
}
Roles and admin panel
- Default registered users get role:
user - Built-in administrator is created from env:
ADMIN_EMAILADMIN_PASSWORD
- Admin panel URL:
/admin - Admin features:
- Add VPN servers
- Toggle server status online/offline
- Delete servers
Response JSON:
{
"config": "vpn://...."
}