Пост

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

  1. Репозиторий с Hugo-сайтом.
  2. GitLab CI собирает сайт в HTML.
  3. Docker-образ с Nginx разворачивается на сервере.
  4. 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 станет ещё ближе к «настоящему продакшену» 🚀

Авторский пост защищен лицензией CC BY 4.0 .