Fix deploy without Go: Docker installer, optional .env

This commit is contained in:
vpn-panel
2026-05-21 18:58:35 +03:00
parent 3c2f5226d1
commit 74d5d34679
4 changed files with 75 additions and 22 deletions
+17 -16
View File
@@ -17,8 +17,8 @@ curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER sudo usermod -aG docker $USER
# Перелогиньтесь или: newgrp docker # Перелогиньтесь или: newgrp docker
# Git и Go (для установщика) # Git (Go на сервере не обязателен — установка через Docker)
sudo apt install -y git golang-go sudo apt install -y git
``` ```
Проверка: Проверка:
@@ -28,6 +28,8 @@ docker --version
docker compose version docker compose version
``` ```
> **Go не нужен.** Установщик запускается внутри контейнера.
--- ---
## 2. Клонирование проекта ## 2. Клонирование проекта
@@ -74,26 +76,23 @@ docker compose ps
## 4. Установщик (первичная настройка) ## 4. Установщик (первичная настройка)
Интерактивно задаёт домен, БД и учётку администратора. Интерактивно задаёт домен, БД и учётку администратора. **Go на сервере не нужен.**
### Вариант A — Go на сервере ### Вариант A — один скрипт (рекомендуется)
```bash ```bash
go run ./cmd/install chmod +x scripts/setup.sh
./scripts/setup.sh
``` ```
### Вариант B — сборка установщика ### Вариант B — установщик в Docker вручную
```bash ```bash
go build -o install ./cmd/install docker compose up -d postgres
./install # дождитесь healthy: docker compose ps
```
### Вариант C — установщик в Docker docker compose build install
docker compose --profile tools run --rm install
```bash
docker compose build
docker compose run --rm panel /app/install
``` ```
При запросах укажите: При запросах укажите:
@@ -102,7 +101,7 @@ docker compose run --rm panel /app/install
|------|--------|------------| |------|--------|------------|
| Домен панели | `panel.example.com` | Для ссылок и nginx | | Домен панели | `panel.example.com` | Для ссылок и nginx |
| Порт приложения | `8080` | Внешний порт в compose | | Порт приложения | `8080` | Внешний порт в compose |
| Хост БД | `postgres` | Имя сервиса в docker-compose | | Хост БД | **`postgres`** | Обязательно имя сервиса Docker, не `localhost` |
| Порт БД | `5432` | | | Порт БД | `5432` | |
| Пользователь БД | `vpnpanel` | | | Пользователь БД | `vpnpanel` | |
| Пароль БД | *свой надёжный* | | | Пароль БД | *свой надёжный* | |
@@ -218,7 +217,9 @@ cat backup.sql | docker exec -i vpn-panel-db psql -U vpnpanel vpnpanel
| Проблема | Решение | | Проблема | Решение |
|----------|---------| |----------|---------|
| `DATABASE_URL не задан` | Запустите `./install` или создайте `.env` из `.env.example` | | `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` и отредактируйте |
| `DATABASE_URL не задан` | Запустите установщик в Docker или создайте `.env` из `.env.example` |
| Нет подключения к БД | `docker compose ps`, проверьте `healthy` у postgres | | Нет подключения к БД | `docker compose ps`, проверьте `healthy` у postgres |
| Порт занят | Смените `APP_PORT` в `.env` и в `docker-compose.yml` | | Порт занят | Смените `APP_PORT` в `.env` и в `docker-compose.yml` |
| Регистрация закрыта | Админ уже есть — используйте `/login` | | Регистрация закрыта | Админ уже есть — используйте `/login` |
+11 -4
View File
@@ -24,16 +24,23 @@
Полная инструкция: **[DEPLOY.md](DEPLOY.md)** Полная инструкция: **[DEPLOY.md](DEPLOY.md)**
### Кратко ### Кратко (без Go, только Docker)
```bash ```bash
git clone https://git.evilfox.cc/test/vpn-panel.git git clone https://git.evilfox.cc/test/vpn-panel.git
cd vpn-panel cd vpn-panel
docker compose up -d postgres chmod +x scripts/setup.sh
go run ./cmd/install # или ./install после сборки ./scripts/setup.sh
```
docker compose up -d --build Или вручную:
```bash
docker compose up -d postgres
docker compose build install
docker compose --profile tools run --rm install # создаёт .env, хост БД: postgres
docker compose up -d --build panel
``` ```
Панель: `http://ВАШ_ДОМЕН:8080` Панель: `http://ВАШ_ДОМЕН:8080`
+17 -2
View File
@@ -17,16 +17,31 @@ services:
timeout: 5s timeout: 5s
retries: 10 retries: 10
install:
build: .
profiles: ["tools"]
stdin_open: true
tty: true
working_dir: /work
volumes:
- .:/work
entrypoint: ["/app/install"]
depends_on:
postgres:
condition: service_healthy
panel: panel:
build: . build: .
container_name: vpn-panel-app container_name: vpn-panel-app
restart: unless-stopped restart: unless-stopped
env_file:
- .env
ports: ports:
- "${APP_PORT:-8080}:8080" - "${APP_PORT:-8080}:8080"
environment: environment:
APP_PORT: "8080" APP_PORT: "8080"
APP_DOMAIN: ${APP_DOMAIN:-localhost}
DATABASE_URL: ${DATABASE_URL:-postgres://vpnpanel:changeme@postgres:5432/vpnpanel?sslmode=disable}
SECRET_KEY: ${SECRET_KEY:-change-me-run-install-first}
INSTALLED: ${INSTALLED:-false}
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
# Установка без Go — только Docker
set -e
cd "$(dirname "$0")/.."
echo "=== VPN Panel — установка (Docker) ==="
if [ ! -f .env ]; then
echo "Файл .env не найден — запускаем установщик..."
docker compose up -d postgres
echo "Ожидание PostgreSQL..."
for i in $(seq 1 30); do
if docker compose exec -T postgres pg_isready -U "${POSTGRES_USER:-vpnpanel}" -d "${POSTGRES_DB:-vpnpanel}" >/dev/null 2>&1; then
break
fi
sleep 2
done
docker compose build install
docker compose --profile tools run --rm install
else
echo "Найден .env — пропускаем установщик."
docker compose up -d postgres
fi
echo "Запуск панели..."
docker compose up -d --build panel
echo ""
echo "Готово. Панель: http://${APP_DOMAIN:-localhost}:${APP_PORT:-8080}"
echo "Проверка: curl -s http://127.0.0.1:${APP_PORT:-8080}/health"