NPV-AM

← Все руководства

Разворачивание GitLab CI с Runner в Docker

20 июля 2026 · 10 мин чтения · Начальный

GitLab CI/CD — мощная система автоматизации сборки, тестирования и деплоя. В этом руководстве мы поднимим GitLab CE и GitLab Runner целиком в Docker-контейнерах, зарегистрируем Runner и разберём базовый .gitlab-ci.yml.

Шаг 1: Подготовка окружения

Убедитесь, что Docker и Docker Compose установлены на сервере:

docker --version
docker compose version

Выделите под GitLab минимум 4 ГБ RAM и 20 ГБ диска. Для прода рекомендуется выносить данные на отдельный диск:

sudo mkdir -p /srv/gitlab/config /srv/gitlab/logs /srv/gitlab/data

Шаг 2: Docker Compose для GitLab CE

Создайте файл docker-compose.yml:

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    hostname: gitlab.example.com
    restart: unless-stopped
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.example.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        prometheus_monitoring['enable'] = false
    ports:
      - "80:80"
      - "443:443"
      - "2222:22"
    volumes:
      - /srv/gitlab/config:/etc/gitlab
      - /srv/gitlab/logs:/var/log/gitlab
      - /srv/gitlab/data:/var/opt/gitlab
    shm_size: "256m"
docker compose up -d
Первый запуск занимает 5-10 минут. GitLab будет доступен на порту 80 после инициализации.

Шаг 3: Получение первичного пароля

Для входа в веб-интерфейс нужен пароль root-пользователя:

docker exec gitlab grep 'Password:' /etc/gitlab/initial_root_password

Этот файл автоматически удаляется через 24 часа. Создайте новый пароль через веб-интерфейс или CLI:

docker exec -it gitlab gitlab-rails console
user = User.find_by_username('root')
user.password = 'new_secure_password'
user.password_confirmation = 'new_secure_password'
user.save!
exit

Шаг 4: Запуск GitLab Runner в Docker

Runner можно запустить отдельным контейнером или зарегистрировать его на хосте. Вот запуск контейнера:

docker run -d \
  --name gitlab-runner \
  --restart unless-stopped \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

Шаг 5: Регистрация Runner

Перейдите в GitLab: Settings → CI/CD → Runners → New instance runner. Скопируйте токен и URL. Затем зарегистрируйте:

docker exec -it gitlab-runner gitlab-runner register \
  --non-interactive \
  --url "http://gitlab.example.com" \
  --token "YOUR_REGISTRATION_TOKEN" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --description "docker-runner"

После регистрации Runner будет доступен в списке:

docker exec gitlab-runner gitlab-runner list

Шаг 6: Пример .gitlab-ci.yml

Создайте файл в корне вашего репозитория:

stages:
  - build
  - test
  - deploy

variables:
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $DOCKER_IMAGE .
    - docker push $DOCKER_IMAGE
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
      - .npm/

test:
  stage: test
  image: $DOCKER_IMAGE
  script:
    - npm ci --cache .npm
    - npm test
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
      - .npm/

deploy:
  stage: deploy
  script:
    - echo "Deploying to production..."
    - docker pull $DOCKER_IMAGE
    - docker stop app || true
    - docker run -d --name app -p 3000:3000 $DOCKER_IMAGE
  only:
    - main
  when: manual

Шаг 7: Настройка кэширования и DinD

Для Docker-in-Docker (DinD) убедитесь, что Runner использует привилегированный режим. Отредактируйте конфиг Runner:

cat /srv/gitlab-runner/config/config.toml
[[runners]]
  [runners.docker]
    privileged = true
    volumes = ["/cache"]
    shm_size = 268435456

Кэширование ускоряет повторные сборки. Папка .npm/ или node_modules/ кэшируется между пайплайнами одного бранча. Для кэша зависимостей Go используйте:

cache:
  key: go-mod
  paths:
    - .gomod/

Шаг 8: Проверка работоспособности

Запушьте изменения и проверьте пайплайн:

git add .gitlab-ci.yml
git commit -m "Add CI/CD pipeline"
git push origin main

Перейдите в CI/CD → Pipelines и убедитесь, что задачи выполняются успешно. Логи доступны по клику на каждую задачу.

Для продакшена замените http:// на https:// и настройте TLS через Caddy или Traefik перед GitLab.