Fix deploy without Go: Docker installer, optional .env
This commit is contained in:
@@ -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` |
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
Reference in New Issue
Block a user