140 lines
4.1 KiB
Markdown
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
|