Как стать автором
Обновить
2076.95
Timeweb Cloud
То самое облако

Развертывание GitLab CE в контейнерах Docker за обратным прокси

Время на прочтение3 мин
Количество просмотров38K


В этом руководстве мы рассмотрим, как быстро поднять свой GitLab сервер на контейнерах Docker, находящийся за обратным прокси сервером NGINX. Предполагается, что у вас уже установлен движок контейнеризации приложений Docker и Compose, а также обратный прокси сервер NGINX.

GitLab сервер будет доступен по адресу: git.example.com. Также не забываем добавить А запись для домена git.example.com в DNS.

Итак, для начала создадим структуру каталогов для нашего GitLab:

mkdir -p /opt/gitlab/{config,logs,data}


Далее приводим файл docker-compose.yml к следующему содержимому:

version: '3.7'
 
services:
  web:
    image: 'gitlab/gitlab-ce:15.2.0-ce.0'
    restart: always
    hostname: 'git.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://git.example.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '127.0.0.1:8080:80'
      - '2224:22'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
    shm_size: '256m'

В качестве образа мы используем последнюю версию GitLab Community Edition 15.2.0 (на момент написания статьи), вешаем GitLab на loopback интерфейс, а для ssh используем нестандартный порт 2224.

Выполняем билд и запускаем контейнеры:

docker compose -f /opt/gitlab/docker-compose.yml up -d –build


Проверяем статус контейнеров:

docker ps


Теперь необходимо отредактировать основной конфиг файл GitLab и раскомментировать следующие параметры:
vi /opt/gitlab/config/gitlab.rb

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "git@example.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['gitlab_email_from'] = 'git@example.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
  "Host" => "git.example.com",
  "X-Real-IP" => "$remote_addr",
  "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on",
  "Upgrade" => "$http_upgrade",
  "Connection" => "$connection_upgrade"
}


Мы разрешили использовать отправку писем через SMTP, а также указали параметры nginx для работы за обратным прокси. Для вступления в силу изменений, перезапускаем контейнеры:

docker compose -f /opt/gitlab/docker-compose.yml restart


Создадим конфиг виртуального хоста на стороне обратного прокси NGINX:

server {
    listen       80;
    server_name  git.example.com;
 
    location / {
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
 
        proxy_pass                  http://localhost:8080;
        proxy_read_timeout     90;
    }
 
    error_log   /var/log/nginx/git_example_com_error.log error;
    access_log  /var/log/nginx/git_example_com_access.log;
}


Проверяем и перечитываем конфиг:

nginx -t
nginx -s reload


С помощью пакета certbot и python3-certbot-nginx можем получить SSL сертификат от Let’s Encrypt:

certbot --nginx -d git.example.com
nginx -t
nginx -s reload


Открываем сайт git.example.com в браузере и пытаемся авторизоваться. Пароль от root можно получить следующей командой на сервере:

docker exec -it gitlab-web-1 grep 'Password:' /etc/gitlab/initial_root_password


Источники:
docs.gitlab.com/ee/install/docker.html
www.czerniga.it/2021/11/14/how-to-install-gitlab-using-docker-compose

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии13

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud

Истории