Files
panelhosting/README.md
T

140 lines
4.1 KiB
Markdown

# PanelHosting
Панель управления хостингом (аналог FastPanel) на Go + Docker + PostgreSQL.
Биллинг и оплата — в планах. Сейчас реализована база данных и инфраструктура для панели.
## Стек
- **Go 1.23** — backend
- **PostgreSQL 16** — хранение данных
- **Docker Compose** — локальная разработка
- **golang-migrate** — миграции схемы
## Деплой на сервер
```bash
# Клонировать (подставьте токен вместо <TOKEN>)
git clone https://<TOKEN>@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