Проект предназначен для простого развертывания задач CTF, где участники могут потенциально нанести урон основному контейнеру и помешать решать задачи другим участникам.
Проект подойдет:
- Организационно-технической группе CTF
- DevOps-специалистам
- Участникам, желающим провести свои тренировки
- Развертывание отдельного контейнера для каждого участника
- Перезагрузка контейнера при возникновении ошибок у участника
- Полная остановка контейнера
- Автоматическая остановка и удаление контейнера через определенное время
- Возможность участника продлить "жизнь" контейнера
- Сервер на базе Linux
- Установленные Docker и Docker Compose
- Сервер должен выдерживать запуск
n/2
контейнеров с вашей задачей, гдеn
— количество участников мероприятия
git clone https://github.com/d1temnd/ctf_easy_per_deploy.git
cd ctf_easy_per_deploy
docker compose up --build -d
🔹 Web-интерфейс для участников будет доступен на порту 6664.
В вашей задаче обязательно должен быть Dockerfile
.
- Зарегистрируйтесь на hub.docker.com
- В папке с задачей выполните команду:
Введите учетные данные.
docker login
- Соберите проект:
docker build -t <userName>/<container_name>:<version> .
- Отправьте образ на Docker Hub:
docker image push <userName>/<container_name>:<version>
Пример конфигурационного файла:
environment:
- LEAVE_TIME=1800 # Время жизни контейнера (сек)
- ADD_TIME=600 # Время продления жизни контейнера (сек)
- IMAGES_NAME=<userName>/<container_name>:<version> # Образ контейнера на Docker Hub
- PORT_IN_CONTAINER=80 # Порт, на котором развернуто приложение внутри контейнера
- START_RANGE=9000 # Начало диапазона свободных портов
- STOP_RANGE=10000 # Конец диапазона свободных портов
- В проекте реализовано API для управления контейнерами, что позволяет интегрировать его в систему жюри.
- Для отслеживания состояния контейнеров используется база данных, в которой хранятся:
- Идентификатор пользователя
- ID контейнера
- Время запуска контейнера (в формате Unix Timestamp)
- Время завершения контейнера