189 lines
5.8 KiB
Markdown
189 lines
5.8 KiB
Markdown
# 🐳 MC Panel - Docker Build & Push Guide
|
||
|
||
## 📋 Обзор
|
||
|
||
Этот проект настроен для сборки и публикации Docker образов в registry `registry.nevetime.ru/mc-panel`.
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### Вариант 1: Сборка и публикация (рекомендуется)
|
||
```bash
|
||
BUILD_AND_PUSH_DOCKER.bat
|
||
```
|
||
|
||
### Вариант 2: Раздельные команды
|
||
```bash
|
||
# Сборка образа
|
||
BUILD_DOCKER.bat
|
||
|
||
# Публикация образа
|
||
PUSH_DOCKER.bat
|
||
```
|
||
|
||
## 📦 Создаваемые теги
|
||
|
||
При сборке создаются 3 тега:
|
||
- `registry.nevetime.ru/mc-panel:latest` - последняя версия
|
||
- `registry.nevetime.ru/mc-panel:<git-hash>` - привязка к коммиту (например: `abc1234`)
|
||
- `registry.nevetime.ru/mc-panel:1.1.0` - версия релиза
|
||
|
||
## 🔧 Требования
|
||
|
||
1. **Docker Desktop** - должен быть установлен и запущен
|
||
2. **Git** (опционально) - для автоматического тегирования по хешу коммита
|
||
3. **Доступ к registry** - учетные данные для `registry.nevetime.ru`
|
||
|
||
## 🔐 Авторизация в Registry
|
||
|
||
Перед первой публикацией выполните:
|
||
```bash
|
||
docker login registry.nevetime.ru
|
||
```
|
||
|
||
Введите ваши учетные данные:
|
||
- Username: `<ваш_username>`
|
||
- Password: `<ваш_password>`
|
||
|
||
## 📝 Описание скриптов
|
||
|
||
### BUILD_DOCKER.bat
|
||
Собирает Docker образ с тремя тегами:
|
||
- Проверяет наличие Docker
|
||
- Получает git hash (если доступен)
|
||
- Собирает multi-stage образ (frontend + backend)
|
||
- Создает теги: latest, git-hash, version
|
||
|
||
### PUSH_DOCKER.bat
|
||
Публикует все теги в registry:
|
||
- Проверяет наличие Docker
|
||
- Последовательно публикует все 3 тега
|
||
- Выводит статус каждой операции
|
||
|
||
### BUILD_AND_PUSH_DOCKER.bat
|
||
Комбинированный скрипт:
|
||
- Запускает BUILD_DOCKER.bat
|
||
- При успехе запускает PUSH_DOCKER.bat
|
||
- Останавливается при ошибках
|
||
|
||
## 🏗️ Структура Dockerfile
|
||
|
||
```dockerfile
|
||
# Stage 1: Frontend build (Node.js)
|
||
FROM node:18-alpine AS frontend-builder
|
||
# ... сборка React приложения
|
||
|
||
# Stage 2: Backend + Frontend
|
||
FROM python:3.11-slim
|
||
# ... установка Python зависимостей
|
||
# ... копирование backend
|
||
# ... копирование собранного frontend
|
||
```
|
||
|
||
## 🔄 CI/CD с Drone
|
||
|
||
Проект также настроен для автоматической сборки через Drone CI:
|
||
|
||
### Пайплайны:
|
||
1. **code-quality** - проверка качества кода (lint, security)
|
||
2. **build-and-publish** - сборка и публикация образа
|
||
|
||
### Триггеры:
|
||
- Push в ветки: `main`, `master`, `develop`
|
||
- Создание тегов
|
||
|
||
### Секреты Drone:
|
||
Настройте в Drone UI:
|
||
- `docker_username` - имя пользователя registry
|
||
- `docker_password` - пароль registry
|
||
|
||
## 📊 Размер образа
|
||
|
||
Благодаря multi-stage build:
|
||
- Frontend build stage: ~500MB (не включается в финальный образ)
|
||
- Final image: ~200-300MB (Python + compiled frontend)
|
||
|
||
## 🐛 Устранение неполадок
|
||
|
||
### Docker не запущен
|
||
```
|
||
[ERROR] Docker is not installed or not running!
|
||
```
|
||
**Решение:** Запустите Docker Desktop
|
||
|
||
### Ошибка авторизации
|
||
```
|
||
unauthorized: authentication required
|
||
```
|
||
**Решение:** Выполните `docker login registry.nevetime.ru`
|
||
|
||
### Ошибка сборки
|
||
```
|
||
[ERROR] Build failed!
|
||
```
|
||
**Решение:**
|
||
- Проверьте логи сборки
|
||
- Убедитесь что все файлы на месте (frontend/package.json, backend/requirements.txt)
|
||
- Проверьте Dockerfile на ошибки
|
||
|
||
### Git не найден
|
||
Если git не установлен, используется тег `local` вместо git hash.
|
||
Это нормально для локальной разработки.
|
||
|
||
## 📌 Использование образа
|
||
|
||
### Docker Compose
|
||
```yaml
|
||
version: '3.8'
|
||
services:
|
||
mc-panel:
|
||
image: registry.nevetime.ru/mc-panel:latest
|
||
ports:
|
||
- "8000:8000"
|
||
volumes:
|
||
- ./backend/data:/app/backend/data
|
||
- ./backend/servers:/app/backend/servers
|
||
environment:
|
||
- SECRET_KEY=your-secret-key
|
||
```
|
||
|
||
### Docker Run
|
||
```bash
|
||
docker run -d \
|
||
-p 8000:8000 \
|
||
-v $(pwd)/backend/data:/app/backend/data \
|
||
-v $(pwd)/backend/servers:/app/backend/servers \
|
||
registry.nevetime.ru/mc-panel:latest
|
||
```
|
||
|
||
## 🔄 Обновление версии
|
||
|
||
Для создания нового релиза:
|
||
1. Обновите версию в `BUILD_DOCKER.bat` (строка `VERSION=1.1.0`)
|
||
2. Создайте git tag: `git tag v1.1.0`
|
||
3. Запустите сборку: `BUILD_AND_PUSH_DOCKER.bat`
|
||
4. Push тега: `git push origin v1.1.0`
|
||
|
||
## 📚 Дополнительная информация
|
||
|
||
- Registry: `registry.nevetime.ru`
|
||
- Repository: `mc-panel`
|
||
- Base images: `node:18-alpine`, `python:3.11-slim`
|
||
- Exposed port: `8000`
|
||
- Health check: `/api/auth/oidc/providers`
|
||
|
||
## ✅ Checklist перед публикацией
|
||
|
||
- [ ] Docker Desktop запущен
|
||
- [ ] Авторизация в registry выполнена
|
||
- [ ] Все изменения закоммичены в git
|
||
- [ ] Версия обновлена (если нужно)
|
||
- [ ] Тесты пройдены
|
||
- [ ] Образ собран успешно
|
||
- [ ] Образ опубликован в registry
|
||
|
||
---
|
||
|
||
**Версия документа:** 1.0
|
||
**Дата:** 2026-01-15
|
||
**Проект:** MC Panel v1.1.0
|