CI/CD в домашнем lab: GitLab + Docker + Kubernetes
CI/CD — это не только про большие компании. Даже в домашнем home lab вы можете внедрить DevOps-практики:
- автоматически собирать Docker-образы,
- тестировать код,
- выкатывать обновления на свой сервер или кластер.
В этом посте я расскажу, как настроить CI/CD-пайплайн на базе GitLab, Docker и Kubernetes.
Вы узнаете:
- как развернуть GitLab в homelab,
- как работает GitLab Runner,
- как связать всё это с Docker и Kubernetes,
- как сделать полноценный пайплайн для pet-проекта.
🔹 Что такое CI/CD простыми словами
- Continuous Integration (CI) — программисты постоянно коммитят код, а система сама его собирает и тестирует.
- Continuous Delivery (CD) — после успешной сборки система разворачивает приложение в тестовом окружении.
- Continuous Deployment — автоматический деплой сразу в продакшен.
👉 Даже для домашних проектов CI/CD полезен: вы экономите время, меньше багов и получаете «боевую» практику.
🔹 Установка GitLab в homelab
Вариант 1. Docker Compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.local'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.local'
ports:
- "80:80"
- "443:443"
- "22:22"
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
После запуска GitLab будет доступен по http://gitlab.local.
Вариант 2. Установка на отдельный сервер
- Скачайте пакет с официального сайта.
- Настройте доступ по HTTPS.
- Включите SSH для работы с репозиториями.
👉 В homelab чаще используют Docker — проще обновлять и переносить.
🔹 GitLab Runner — сердце CI/CD
GitLab Runner — это агент, который выполняет задачи из пайплайнов.
Установка Runner
1
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
Регистрация Runner
1
gitlab-runner register
- Введите URL GitLab.
- Токен можно взять в настройках проекта.
- Выберите тип: docker (для контейнеров) или shell.
🔹 CI/CD с Docker
Простейший .gitlab-ci.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
stages:
- build
- deploy
build:
stage: build
script:
- docker build -t myapp:latest .
- docker save myapp:latest > myapp.tar
artifacts:
paths:
- myapp.tar
deploy:
stage: deploy
script:
- docker load < myapp.tar
- docker run -d -p 8080:80 myapp:latest
👉 Теперь при каждом пуше в репозиторий приложение собирается и разворачивается на сервере.
🔹 CI/CD с Kubernetes
Если у вас уже есть кластер (например, Minikube или Proxmox + K3s), то GitLab Runner может деплоить туда.
Пример пайплайна для Kubernetes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
stages:
- build
- deploy
build:
stage: build
script:
- docker build -t registry.local/myapp:$CI_COMMIT_SHA .
- docker push registry.local/myapp:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=registry.local/myapp:$CI_COMMIT_SHA
👉 Так вы получаете «почти продакшен» DevOps прямо у себя дома.
🔹 Практический сценарий: блог на Hugo
- Репозиторий с Hugo-сайтом.
- GitLab CI собирает сайт в HTML.
- Docker-образ с Nginx разворачивается на сервере.
- Kubernetes-кластер обеспечивает масштабируемость.
Пайплайн:
- commit → build → test → deploy.
- В итоге при каждом изменении сайт обновляется сам.
🔹 Сравнение: без CI/CD vs с CI/CD
| Подход | Без CI/CD | С CI/CD |
|---|---|---|
| Сборка | Ручная | Автоматическая |
| Тестирование | Иногда, вручную | Автоматически на каждом коммите |
| Деплой | SSH + копирование файлов | Автоматический |
| Ошибки | Замечаются поздно | Ловятся на этапе тестов |
| Скорость релиза | Долго | Быстро |
🔹 Проблемы и решения
- ❌ Runner падает при перезапуске → ✅ добавить
--restart always. - ❌ Не хватает ресурсов → ✅ вынести GitLab на отдельный сервер.
- ❌ Долго билдится Docker → ✅ использовать кэширование слоёв.
- ❌ Нет HTTPS → ✅ настроить Traefik или Nginx Proxy Manager.
🔹 Итоги
CI/CD — это не только для корпораций.
Даже дома можно:
- изучить DevOps-подходы,
- автоматизировать деплой своих pet-проектов,
- получить опыт, который пригодится на работе.
👉 Начните с простого пайплайна на Docker, а затем попробуйте Kubernetes.
Ваш homelab станет ещё ближе к «настоящему продакшену» 🚀
