diff --git a/DEPLOY.md b/DEPLOY.md index 33505e2..439bf2e 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -17,8 +17,8 @@ curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER # Перелогиньтесь или: newgrp docker -# Git и Go (для установщика) -sudo apt install -y git golang-go +# Git (Go на сервере не обязателен — установка через Docker) +sudo apt install -y git ``` Проверка: @@ -28,6 +28,8 @@ docker --version docker compose version ``` +> **Go не нужен.** Установщик запускается внутри контейнера. + --- ## 2. Клонирование проекта @@ -74,26 +76,23 @@ docker compose ps ## 4. Установщик (первичная настройка) -Интерактивно задаёт домен, БД и учётку администратора. +Интерактивно задаёт домен, БД и учётку администратора. **Go на сервере не нужен.** -### Вариант A — Go на сервере +### Вариант A — один скрипт (рекомендуется) ```bash -go run ./cmd/install +chmod +x scripts/setup.sh +./scripts/setup.sh ``` -### Вариант B — сборка установщика +### Вариант B — установщик в Docker вручную ```bash -go build -o install ./cmd/install -./install -``` +docker compose up -d postgres +# дождитесь healthy: docker compose ps -### Вариант C — установщик в Docker - -```bash -docker compose build -docker compose run --rm panel /app/install +docker compose build install +docker compose --profile tools run --rm install ``` При запросах укажите: @@ -102,7 +101,7 @@ docker compose run --rm panel /app/install |------|--------|------------| | Домен панели | `panel.example.com` | Для ссылок и nginx | | Порт приложения | `8080` | Внешний порт в compose | -| Хост БД | `postgres` | Имя сервиса в docker-compose | +| Хост БД | **`postgres`** | Обязательно имя сервиса Docker, не `localhost` | | Порт БД | `5432` | | | Пользователь БД | `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 | | Порт занят | Смените `APP_PORT` в `.env` и в `docker-compose.yml` | | Регистрация закрыта | Админ уже есть — используйте `/login` | diff --git a/README.md b/README.md index 8f36500..4f90c87 100644 --- a/README.md +++ b/README.md @@ -24,16 +24,23 @@ Полная инструкция: **[DEPLOY.md](DEPLOY.md)** -### Кратко +### Кратко (без Go, только Docker) ```bash git clone https://git.evilfox.cc/test/vpn-panel.git cd vpn-panel -docker compose up -d postgres -go run ./cmd/install # или ./install после сборки +chmod +x scripts/setup.sh +./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` diff --git a/docker-compose.yml b/docker-compose.yml index 846584c..f4e9b1d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,16 +17,31 @@ services: timeout: 5s 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: build: . container_name: vpn-panel-app restart: unless-stopped - env_file: - - .env ports: - "${APP_PORT:-8080}:8080" environment: 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: postgres: condition: service_healthy diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100644 index 0000000..43570e1 --- /dev/null +++ b/scripts/setup.sh @@ -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"