# PanelHosting Панель управления хостингом (аналог FastPanel) на Go + Docker + PostgreSQL. Биллинг и оплата — в планах. Сейчас реализована база данных и инфраструктура для панели. ## Стек - **Go 1.23** — backend - **PostgreSQL 16** — хранение данных - **Docker Compose** — локальная разработка - **golang-migrate** — миграции схемы ## Деплой на сервер ```bash # Клонировать (подставьте токен вместо ) git clone https://@git.evilfox.cc/test2/panelhosting.git /opt/host cd /opt/host bash scripts/server-setup.sh ``` Если каталог `/opt/host` уже есть, но пустой — удалите его или клонируйте в него заново. ## Быстрый старт ### 1. Переменные окружения ```bash cp .env.example .env ``` ### 2. Запуск PostgreSQL ```bash docker compose up -d postgres ``` ### 3. Миграции Через Docker: ```bash docker compose --profile migrate run --rm migrate ``` Или локально: ```bash export DATABASE_URL=postgres://panel:panel_secret@localhost:5432/panel?sslmode=disable go run ./cmd/migrate ``` ### 4. Запуск панели Через Docker (порт **8000**): ```bash docker compose up -d panel ``` Или локально: ```bash export DATABASE_URL=postgres://panel:panel_secret@localhost:5432/panel?sslmode=disable export HTTP_PORT=8000 go run ./cmd/panel ``` Откройте `http://localhost:8000` — если админ ещё не создан, появится форма регистрации. После входа — панель управления сайтами. ### API **Авторизация** - `POST /api/v1/auth/login` — `{"username":"admin","password":"..."}` → cookie `panel_session` - `POST /api/v1/auth/logout` — выход (требует сессию) - `GET /api/v1/auth/me` — текущий пользователь **Сайты** (требуют авторизацию) - `GET /api/v1/sites` — список сайтов - `POST /api/v1/sites` — создать сайт ```json { "name": "mysite", "domain": "example.com", "php_version": "8.3" } ``` **PHP** - `GET /api/v1/php-versions` — доступные версии PHP **SSL (Let's Encrypt)** - При создании сайта с `issue_ssl: true` автоматически выпускается сертификат - `POST /api/v1/sites/{id}/ssl/issue` — повторный выпуск - `GET /.well-known/acme-challenge/{token}` — HTTP-01 challenge Требования для SSL: - `ACME_EMAIL` в `.env` - DNS домена указывает на IP сервера - Порт 80 доступен для HTTP-01 (nginx → webroot или панель) Сертификаты сохраняются в БД и в `SSL_STORAGE_PATH/live/{domain}/` **Setup** - `GET /health` — healthcheck - `GET /api/v1/setup/status` — `{"setup_required": true|false}` - `POST /api/v1/setup/register` — создание первого суперадмина (только пока нет пользователей) ## Структура проекта ``` cmd/ migrate/ — CLI для применения миграций panel/ — точка входа панели (API в разработке) internal/ config/ — конфигурация из env database/ — пул соединений и миграции models/ — Go-модели migrations/ — SQL-схема ``` ## Схема БД | Раздел | Таблицы | |--------|---------| | Auth | `users`, `sessions`, `api_keys` | | Серверы | `servers`, `server_access` | | Сайты | `sites`, `domains` | | Сервисы | `databases`, `database_users`, `ftp_accounts`, `ssl_certificates` | | Почта | `mail_domains`, `mail_accounts` | | DNS | `dns_zones`, `dns_records` | | Операции | `cron_jobs`, `backups`, `jobs` | | Аудит | `audit_logs` | ## Лицензия Proprietary