Два подхода к сборке
| Подход | Когда использовать |
|---|---|
| Docker Hub автоматическая сборка | Публичный репозиторий, не хотите вручную собирать на сервере |
| Прямая сборка на сервере из Git | Приватный репозиторий, полный контроль над процессом |
Подход 1: Прямая сборка на сервере из вашего Git
Самый простой способ — собирать образ прямо на сервере из вашего репозитория.
# На сервере
cd ~
git clone https://git.your-domain.com/your-username/Amnezia-Web-Panel.git
cd Amnezia-Web-Panel
# Собираем образ
sudo docker build -t amnezia-panel:custom .
# Запускаем
cd ~/amnezia-panel
docker compose down
docker compose up -d
Подход 2: Сборка с приватным репозиторием (SSH)
Если ваш Git-сервер требует аутентификацию, используйте SSH-ключи и BuildKit .
Dockerfile (адаптированный)
# syntax=docker/dockerfile:experimental
FROM python:3.11-slim
# Устанавливаем зависимости для Git over SSH
RUN apt-get update && apt-get install -y \
git openssh-client \
&& rm -rf /var/lib/apt/lists/*
# Настраиваем SSH для github.com/вашего Git-сервера
RUN mkdir -p -m 0700 ~/.ssh && \
ssh-keyscan github.com >> ~/.ssh/known_hosts
# Клонируем репозиторий через SSH (ключи передаются при сборке)
RUN --mount=type=ssh \
git clone git@github.com:your-org/Amnezia-Web-Panel.git /app
# Остальная часть сборки...
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
Команда сборки с пробросом SSH-агента
# Включаем BuildKit
export DOCKER_BUILDKIT=1
# Собираем с пробросом SSH
docker build --ssh default -t amnezia-panel:custom .
Docker Compose сборка (альтернатива)
services:
amnezia-panel:
build:
context: .
dockerfile: Dockerfile
ssh:
- default
image: amnezia-panel:custom
Подход 3: Автоматическая сборка на вашем Git-сервере (CI/CD)
Самый профессиональный подход — настроить GitLab CI или Gitea Actions.
stages:
- build
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY/amnezia-panel:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY/amnezia-panel:$CI_COMMIT_SHA
only:
- main
deploy:
stage: deploy
script:
- ssh root@your-server "docker pull $CI_REGISTRY/amnezia-panel:$CI_COMMIT_SHA && cd /root/amnezia-panel && docker compose up -d"
На сервере используете образ прямо из вашего registry:
services:
amnezia-panel:
image: your-git-server.com:5050/your-username/amnezia-panel:latest
# ... остальные настройки
Подход 4: Копирование исходников через volume (без пересборки)
Если хотите быстро тестировать изменения без пересборки образа:
services:
amnezia-panel:
image: amnezia-panel:base
volumes:
- /path/to/your/git/repo:/app
# ... остальное
Что я рекомендую для вашего случая
Учитывая, что:
-
У вас есть свой Git-сервер
-
Вы хотите быстро вносить изменения
-
Панель не требует частых пересборок ядра
# 1. На сервере один раз клонируем ваш репозиторий
git clone https://git.your-domain.com/your-username/Amnezia-Web-Panel.git /opt/amnezia-panel-src
# 2. В docker-compose.yml монтируем исходники
volumes:
- /opt/amnezia-panel-src:/app
# 3. При любом изменении кода просто перезапускаем контейнер
docker compose restart amnezia-panel
Это не требует пересборки образа при каждом изменении кода — просто git pull на сервере и перезапуск контейнера.