13 августа, 2018 11:35 дп
GitLab CE (Community Edition) – это приложение с открытым исходным кодом, предназначенное для хранения репозиториев Git, которое также предоставляет функции разработки (например, отслеживание ошибок). Вы можете разместить это приложение в своей собственной инфраструктуре. GitLab обеспечивает гибкость при развертывании внутреннего хранилища для команды разработчиков, а также позволяет другим пользователям (например, сторонним участникам разработки) публиковать свои собственные проекты.
Приложение GitLab легко установить и настроить на своей машине. Данный мануал поможет вам в этом.
- Требования
- Установка зависимостей
- Установка GitLab
- Настройка брандмауэра
- Настройка GitLab
- Настройка GitLab с помощью веб-интерфейса
- Настройка профиля
- Изменение имени пользователя
- Добавление SSH-ключа
- Ограничение или блокировка открытой регистрации (опционально)
- Блокировка регистрации
- Ограничение регистрации по домену
- Ограничение возможности создавать проекты
- Обновление сертификатов Let’s Encrypt
- Заключение
- Установка клиента Let’s Encrypt
- Подготовка к проверке прав на домен
- Запрос сертификата Let’s Encrypt
- Настройка GitLab для поддержки сертификата Let’s Encrypt
- Настройка брандмауэра для поддержки трафика HTTPS
- Обновление настроек GitLab
- Автоматическое обновление сертификата Let’s Encrypt
- GitLab Pages custom domains (FREE)
- Set up a custom domain
- Requirements
- Steps
- Get the verification code
- Set up DNS records
- Verify the domain’s ownership
- Add more domain aliases
- Adding an SSL/TLS certificate to Pages
- Manual addition of SSL/TLS certificates
- Force HTTPS for GitLab Pages websites
- Troubleshooting
- GitLab Pages Let’s Encrypt certificates (FREE)
- Enabling Let’s Encrypt integration for your custom domain
- Message «GitLab is obtaining a Let’s Encrypt SSL certificate for this domain. This process can take some time. Please try again later. » hangs for more than an hour
- Nginx Series Overview
- Configure Nginx
- Configure GitLab
- Configure GitLab-Shell
- Restart GitLab and Nginx
- Additional Resources
- Some docs on the Internet
- Review the SSL certificate content
- Generate self-signed SAN SSL certificate
- Review the SAN SSL certificate
- Save the SSL certificate
- Configure HTTPS on Gitlab
- Update Gitlab config
- Check the website SSL certificate from the command line
- By certuil for Windows only
- Update the certificate in case of renewal
Требования
- Свежий сервер Ubuntu 18.04, настроенный по этому мануалу.
- 2 ядра, 8 Гб RAM минимум (согласно требованиям GitLab к аппаратному обеспечению). Использовать своп-пространство не рекомендуется.
- Домен, направленный на ваш сервер. Здесь мы используем условный домен example.com.
Установка зависимостей
Сначала нужно установить программы, которые обеспечат корректную работу приложения GitLab. Все они находятся в официальном репозитории Ubuntu.
Обновите индекс пакетов и установите зависимости приложения:
sudo apt update
sudo apt install ca-certificates curl openssh-server postfix
Возможно, некоторые из этих программ вы установили ранее. При установке postfix выберите Internet Site. На следующем экране введите домен или IP сервера, чтобы система могла отправлять уведомления.
Установка GitLab
Процесс установки GitLab очень прост. Для этого можно использовать загрузочный сценарий.
Перейдите в каталог /tmp и загрузите в него сценарий.
cd /tmp
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
При желании вы можете ознакомиться с содержимым сценария (также его можно найти по этой ссылке).
Убедившись, что сценарий не выполнит никаких лишних действий, вы можете запустить его:
sudo bash /tmp/script.deb.sh
Сценарий подготовит сервер к поддержке репозиториев GitLab. Благодаря этому вы сможете управлять пакетами GitLab с помощью стандартных инструментов управления пакетами, предлагаемых операционной системой. Теперь можно установить приложение GitLab:
sudo apt install gitlab-ce
Эта команда установит все необходимые компоненты.
Настройка брандмауэра
После установки GitLab нужно открыть порт приложения в брандмауэре (если вы следовали руководству по начальной настройке сервера, вы заблокировали порты с помощью ufw).
Просмотрите текущее состояние брандмауэра:
sudo ufw status
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
На данный момент брандмауэр не блокирует только SSH. Чтобы открыть приложение GitLab, нужно настроить трафик HTTP. Поскольку GitLab поддерживает бесплатные TLS/SSL сертификаты от Let’s Encrypt, можно также включить доступ HTTPS.
Для этого достаточно добавить HTTP и HTTPS в файл /etc/services.
Если ранее вы по какой-то причине не добавили в этот список OpenSSH, сделайте это сейчас.
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
Снова проверьте состояние ufw.
sudo ufw status
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
Теперь у вас есть доступ к веб-интерфейсу GitLab.
Настройка GitLab
Прежде чем начать работу с приложением, отредактируйте конфигурации GitLab.
sudo nano /etc/gitlab/gitlab.rb
В начале файла найдите строку external_url. Укажите в ней ваше доменное имя. Вместо http укажите https, чтобы в дальнейшем приложение GitLab могло использовать шифрование при помощи сертификата Let’s Encrypt.
Сохраните и закройте файл. Введите следующую команду, чтобы обновить параметры Gitlab:
sudo gitlab-ctl reconfigure
Команда инициализирует GitLab, используя данные о вашем сервере. Это полностью автоматизированный процесс, и в дальнейшем вам не придется отвечать на какие-либо запросы программы. Этот процесс также настроит сертификат Let’s Encrypt для вашего домена.
Настройка GitLab с помощью веб-интерфейса
Чтобы получить доступ к интерфейсу GitLab, перейдите по ссылке:
На экране появится приветственная страница, которая предложит выбрать пароль администратора.
Выберите и подтвердите надёжный пароль и нажмите Change your password.
После этого появится форма аутентификации. Введите свои учётные данные:
Нажмите Sign in. На экране появится страница, которая предложит вам добавить новые проекты.
Теперь можно внести поправки в настройки GitLab.
Настройка профиля
Добавьте новые данные в свой профиль. При установке GitLab заполняет профиль данными по умолчанию, которые рекомендуется изменить.
Чтобы отредактировать профиль, кликните на иконку пользователя в правом верхнем углу интерфейса. В выпадающем меню выберите Settings. Вы попадёте в раздел настроек Profile, где вы сможете выбрать новую аватарку, указать имя, адрес электронной почты и т.п.
По умолчанию приложение использует в полях Name и Email такие значения:
Замените их своими данными. Выбранное вами имя будут видеть другие пользователи, а электронная почта будет использоваться уведомлений интерфейса Git и т.д.
Чтобы обновить данные, нажмите кнопку Update Profile settings.
На предоставленный адрес электронной почты вы получите письмо с подтверждением. Следуйте инструкциям письма, чтобы подтвердить свой аккаунт и начать работу в GitLab.
Изменение имени пользователя
В верхнем меню выберите Account.
По умолчанию аккаунт администратора использует имя root. Очевидно, что такое имя используется очень часто, а потому оно небезопасно и его нужно сразу изменить.
Примечание: Конечно, после изменения имени у вас останутся все права.
Теперь при входе в аккаунт GitLab используйте это имя пользователя вместо root.
Добавление SSH-ключа
В большинстве случаев для взаимодействия между Git и GitLab используются SSH-ключи. Добавьте открытый ключ SSH в аккаунт GitLab.
Если у вас уже есть пара ключей SSH на локальной машине, вы можете просмотреть их:
Команда вернёт объемный результат:
Скопируйте этот ключ и вернитесь в настройки профиля.
Если же команда cat вернула следующее сообщение:
cat: /home/8host/.ssh/id_rsa.pub: No such file or directory
то у вас нет SSH-ключей. Чтобы создать такую пару ключей, введите:
Примите стандартные параметры и выберите надёжный пароль, который защитит ключи.
Просмотрите открытый ключ:
Скопируйте ключ и вернитесь в настройки профиля GitLab. Откройте меню SSH Keys.
В предложенное поле введите скопированный открытый ключ, выберите для него описательное название и нажмите Add key.
Теперь вы можете управлять проектами и репозиториями GitLab с локальной машины, не предоставляя при этом учётных данных GitLab.
Ограничение или блокировка открытой регистрации (опционально)
На данный момент посадочная страница вашего экземпляра GitLab позволяет любому пользователю пройти регистрацию и создать аккаунт. Это удобно, если вы разрабатываете общедоступные проекты и поощряете участие в разработке сторонних пользователей. Если же это закрытый проект, вы можете ограничить или совсем заблокировать возможность регистрироваться. Для этого нажмите на значок гаечного ключа в правом верхнем углу.
На появившейся странице вы увидите общие сведения о своем экземпляре GitLab. Для настройки выберите в выпадающем меню пункт Settings.
В глобальных настройках GitLab вы сможете изменить ряд параметров, в том числе и заблокировать возможность регистрации.
Блокировка регистрации
Чтобы полностью отключить такую возможность, откройте раздел Sign-up Restrictions. Уберите галочку в Sign-up enabled, а затем нажмите Save.
Форма регистрации исчезнет с посадочной страницы приложения.
Ограничение регистрации по домену
Если GitLab поддерживает адреса электронной почты, связанные с одним доменом, вы можете ограничить возможность регистрации на основе этого домена.
Откройте Sign-up Restrictions и поставьте галочку в Send confirmation email on sign-up. Это позволит пользователям регистрироваться только после проверки адреса электронной почты.
Затем добавьте домен (или домены) в белый список, поле Whitelisted domains for sign-ups. Каждый домен должен находиться в отдельной строке.
Whitelisted domains for sign-ups
example.com
*. example.com
Примечание: Символ * включает поддержку алиасов доменов.
Нажмите Save changes. Форма регистрации исчезнет с посадочной страницы приложения.
Ограничение возможности создавать проекты
По умолчанию любой новый пользователь может создать 10 проектов максимум. Если вы хотите привлечь к разработке проекта новых пользователей и при этом ограничить их право создавать новые проекты, откройте Account and Limit Settings.
Вы сможете добавлять новых пользователей вручную, у них будет доступ к внутренним и внешним проектам.
Сохраните новые настройки.
Новые пользователи смогут создавать аккаунты, однако не смогут добавлять новые проекты.
Обновление сертификатов Let’s Encrypt
По умолчанию GitLab имеет запланированную задачу, предназначенную для обновления сертификатов Let’s Encrypt после полуночи каждый четвертый день. Вы можете изменить эти параметры в файле /etc/gitlab/gitlab.rb. Например, если вы хотите обновлять сертификаты каждый 7-й день в 12:30, вы можете настроить задачу следующим образом:
Также вы можете отключить автоматическое обновление сертификатов, добавив в файл /etc/gitlab/gitlab.rb такую строку:
Заключение
Теперь у вас есть рабочий экземпляр GitLab. Вы можете переместить свои проекты и управлять доступом к ним. GitLab регулярно добавляет новые функции и обновляет платформу, поэтому нужно регулярно проверять домашнюю страницу проекта, чтобы быть в курсе любых улучшений или важных изменений.
4 октября, 2016 12:15 пп
GitLab CE (Community Edition) – это приложение с открытым исходным кодом, предназначенное для хранения репозиториев Git, которое также предоставляет функции разработки.
По умолчанию GitLab обслуживает страницы через незашифрованные соединения HTTP. Как и любое другое приложение, обрабатывающее конфиденциальную информацию, GitLab нуждается в настройке TLS/SSL. Таким образом можно защитить базу кода проекта от посторонних вмешательств и предотвратить перехват учётных данных.
Проект Let’s Encrypt бесплатно предоставляет подписанный SSL-сертификат любому сайту или веб-приложению (при условии, что вы можете доказать, что вы являетесь владельцем домена, для которого запрашиваете сертификат). Центру сертификации Let’s Encrypt доверяют все современные браузеры.
Данное руководство поможет настроить GitLab для поддержки SSL-сертификата Let’s Encrypt. Этот сертификат защитит исходящие соединения и конфиденциальные данные от злоумышленников.
- Сервер Ubuntu 16.04.
- Предварительно установленное приложение GitLab (руководство по установке можно найти здесь).
- FQDN. Если у вас нет домена, вы не сможете получить сертификат Let’s Encrypt. Чтобы получить домен, обратитесь к регистратору доменных имен.
Установка клиента Let’s Encrypt
Чтобы получить SSL-сертификат для GitLab, нужно установить клиент Let’s Encrypt.
Клиент Let’s Encrypt был переименован в certbot, но в репозитории Ubuntu 16.04 он по-прежнему называется letsencrypt. Эта версия клиента подойдёт. Обновите индекс пакетов и установите letsencrypt:
sudo apt-get update
sudo apt-get install letsencrypt
После установки клиента Let’s Encrypt нужно подготовить сервер к проверке прав на домен.
Подготовка к проверке прав на домен
Чтобы получить подписанный SSL-сертификат от ЦС Let’s Encrypt, нужно подтвердить права на домен, для которого предназначен этот сертификат. Существует несколько методов подтвердить право собственности на домен, при этом всегда требуется root-доступ к серверу.
Для обслуживания GitLab используется внутренний веб-сервер Nginx, встроенный в само приложение. Это упрощает установку приложения, однако настройка веб-сервера становится сложнее.
Поскольку приложение GitLab использует встроенный веб-сервер Nginx, этот веб-сервер и будет лучшим методом подтверждения прав на домен. Клиент Let’s Encrypt сможет с его помощью обслужить файл через порт 80. Это доказывает, что пользователь, который запрашивает подпись сертификата, имеет права администратора на веб-сервере, а значит – и права на домен.
Для начала создайте фиктивный root-каталог:
sudo mkdir -p /var/www/letsencrypt
Затем настройте веб-сервер Nginx, встроенный в GitLab, для использования этого каталога. Откройте конфигурационный файл GitLab.
Добавьте в него строку, которая введёт пользовательскую директиву в конфигурационный файл Nginx. Найдите в файле раздел GitLab Nginx и добавьте в него такую строку:
После этого в каталоге .well-known, который находится в root-каталоге сервера, появится файл, с помощью которого Let’s Encrypt проверит право на домен.
Обновите настройки Nginx и GitLab:
Сервер готов к проверке прав собственности на домен.
Запрос сертификата Let’s Encrypt
Теперь клиент Let’s Encrypt может подтвердить право на домен и запросить сертификат. Чтобы получить сертификат и отказаться от автоматической настройки веб-сервера, используйте подкоманду certonly.
Версия Let’s Encrypt, которая находится в репозитории Ubuntu 16.04, требует использовать при этом три опции:
- задать аутентификатор (-a webroot),
- указать каталог document root (-w /var/www/letsencrypt),
- указать домен (-d your_domain).
sudo letsencrypt certonly -a webroot -w /var/www/letsencrypt -d your_domain
Программа предложит указать адрес электронной почты. Укажите действительный адрес электронной почты, с помощью которого Let’s Encrypt сможет сообщать вам об истечении срока действия сертификата и отправлять другую важную информацию.
Примите условия использования сервиса Let’s Encrypt; для этого нажмите Agree.
Если ЦС Let’s Encrypt смог подтвердить ваше право на домен, вы увидите:
Все сертификаты и ключи можно просмотреть в каталоге /etc/letsencrypt/live/your_domain:
sudo ls /etc/letsencrypt/live/your_domain
cert.pem chain.pem fullchain.pem privkey.pem
Для настройки сертификата нужны пути к файлам fullchain.pem и privkey.pem.
Настройка GitLab для поддержки сертификата Let’s Encrypt
Теперь нужно настроить приложение GitLab для шифрования трафика через TLS/SSL.
Откройте конфигурационный файл GitLab:
Найдите external_url; скорее всего, на данный момент эта строка содержит примерно такую ссылку:
Замените http на https:
. . .
external_url ‘https://your_domain’
. . .
Найдите раздел GitLab Nginx и добавьте в него следующие строки.
- Строка ssl_certificate задаёт путь к файлу fullchain.pem.
- Строка ssl_certificate_key задаёт путь к файлу privkey.pem.
Настройка брандмауэра для поддержки трафика HTTPS
sudo ufw allow https
Rule added
Rule added (v6)
Запросите состояние ufw, чтобы убедиться, что порт открыт.
sudo ufw status
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Теперь трафик HTTPS больше не блокируется.
Обновление настроек GitLab
Обновите настройки GitLab, чтобы включить поддержку SSL.
Теперь GitLab принимает трафик HTTPS. Чтобы убедиться в этом, откройте домен сервера GitLab в браузере.
Примечание: Укажите протокол HTTP, чтобы проверить автоматическую переадресацию на HTTPS.
Обратите внимание на адресную строку: браузер должен автоматически перенаправить трафик на HTTPS.
Теперь приложение GitLab защищено шифрованием TLS/SSL.
Автоматическое обновление сертификата Let’s Encrypt
TLS/SSL-сертификаты Let’s Encrypt действительны в течение 90 дней. Чтобы успеть обновить сертификат до истечения срока его действия, настройте автоматическое обновление сертификатов.
Клиент Let’s Encrypt предоставляет для этого подкоманду renew. Она обновит сертификат, до истечения срока которого осталось 30 дней, используя параметры, заданные в запросе последнего сертификата.
Команда автоматически пропустит все сертификаты, до истечения срока которых остаётся более 30 дней, потому её можно запускать часто.
sudo crontab -e
По запросу выберите текстовый редактор.
На экране появится текстовый файл с текущей таблицей crontab. Добавьте в конец файла:
Теперь клиент Let’s Encrypt будет проверять сертификаты каждые 12 часов. Результаты проверки можно просмотреть в каталоге /var/log/le-renew.log.
На обновление сертификата может уйти несколько минут. После этого перезапустите процесс Nginx с помощью команды gitlab-ctl.
Приложение GitLab шифрует трафик с помощью подписанного сертификата TLS/SSL. Теперь вы можете использовать его для управления проектами, размещения кода, настройки непрерывной интеграции и т.д.
GitLab Pages custom domains (FREE)
You can use custom domains:
To use one or more custom domain names:
Set up a custom domain
To set up Pages with a custom domain name, read the requirements and steps below.
Requirements
- A GitLab Pages website up and running, served under the default Pages domain
(*.gitlab.io, for GitLab.com). - A custom domain name example.com or subdomain subdomain.example.com.
- Access to your domain’s server control panel to set up DNS records:
A DNS record (A, ALIAS, or CNAME) pointing your domain to the GitLab Pages server. If
there are multiple DNS records on that name, you must use an ALIAS record.A DNS TXT record to verify your domain’s ownership. - A DNS record (A, ALIAS, or CNAME) pointing your domain to the GitLab Pages server. If
there are multiple DNS records on that name, you must use an ALIAS record. - A DNS TXT record to verify your domain’s ownership.
- Set either external_http or external_https in /etc/gitlab/gitlab.rb to the IP and port of
your Pages Daemon.
If you don’t have IPv6, you can omit the IPv6 address.# Redirect pages from HTTP to HTTPS
# The secondary IPs for the GitLab Pages daemon
# The secondary IPs for the GitLab Pages daemon
Steps
To add your custom domain to GitLab Pages:
- In the upper-right corner, select New Domain.
- In Domain, enter the domain name.
- Optional. In Certificate, turn off the Automatic certificate management using Let’s Encrypt toggle to add an SSL/TLS certificate. You can also add the certificate and key later.
- Select Create New Domain.
Get the verification code
After you add a new domain to Pages, the verification code prompts you. Copy the values from GitLab
and paste them in your domain’s control panel as a TXT record on the next step.
Set up DNS records
- For root domains, example.com.
- For subdomains, subdomain.example.com.
- For both.
For root domains
Root domains (example.com) require:
WARNING:
If you use your root domain for your GitLab Pages website
only, and if your domain registrar supports this feature, you can
add a DNS apex CNAME record instead of an A record. The main
advantage of doing so is that when GitLab Pages IP on GitLab.com
changes for whatever reason, you don’t need to update your A record.
There may be a few exceptions, but this method is not recommended
as it most likely doesn’t work if you set an MX record for your root domain.
For subdomains
Subdomains (subdomain.example.com) require:
For both root and subdomains
There are a few cases where you need to point both the subdomain and root
domain to the same website, for instance, example.com and www.example.com.
- A DNS A record for the domain.
- A DNS ALIAS/CNAME record for the subdomain.
- A DNS TXT record for each.
- Do not use a CNAME record if you want to point your
domain.com to your GitLab Pages site. Use an A record instead. - Do not add any special chars after the default Pages
domain. For example, don’t point subdomain.domain.com to
or namespace.gitlab.io/. Some domain hosting providers may request a trailing dot (namespace.gitlab.io.), though. - GitLab Pages IP on GitLab.com has changed
from 52.167.214.135 to 35.185.44.232 in 2018.
Verify the domain’s ownership
Once you have added all the DNS records:
As soon as your domain becomes active, your website is available through your domain name.
WARNING:
Considering GitLab instances with domain verification enabled,
if the domain can’t be verified for 7 days, it’s removed
from the GitLab project.
Add more domain aliases
You can add more than one alias (custom domains and subdomains) to the same project.
An alias can be understood as having many doors leading to the same room.
- In GitLab, add the domain to GitLab Pages and get the verification code.
- In GitLab, verify your domain.
- Navigate to your domain’s dashboard and select Page Rules
on the top nav. - Select Create Page Rule.
- Enter the domain www.domain.com and select + Add a Setting.
- From the dropdown list, choose Forwarding URL, then select the
status code 301 — Permanent Redirect. - Enter the destination URL https://domain.com.
Adding an SSL/TLS certificate to Pages
Read this document for an overview on SSL/TLS certification.
To secure your custom domain with GitLab Pages you can opt by:
Manual addition of SSL/TLS certificates
- A GitLab Pages website up and running accessible via a custom domain.
- A PEM certificate: it is the certificate generated by the CA,
which needs to be added to the field Certificate (PEM). - A private key, it’s an encrypted key which validates
your PEM against your domain.
- In the upper-right corner, select New Domain.
- In Domain, enter the domain name.
- In Certificate, turn off the Automatic certificate management using Let’s Encrypt toggle to add an SSL/TLS certificate.
- Select Create New Domain.
- Select Save changes.
- Add the PEM certificate to its corresponding field.
- If your certificate is missing its intermediate, copy
and paste the root certificate (usually available from your CA website)
and paste it in the same field as your PEM certificate,
just jumping a line between them. - Copy your private key and paste it in the last field.
Do not open certificates or encryption keys in
regular text editors. Always use code editors (such as
Sublime Text, Atom, Dreamweaver, Brackets, etc).
Force HTTPS for GitLab Pages websites
It works with both the GitLab default domain and with your custom
domain (as long as you’ve set a valid certificate for it).
To enable this setting:
- Select the Force HTTPS (requires valid certificates) checkbox.
- Select Save changes.
Troubleshooting
dig _gitlab-pages-verification-code.YOUR-PAGES-DOMAIN TXT
Expect the output:
In some cases it can help to add the verification code with the same domain name as you are trying to register.
For a root domain:
For a subdomain:
GitLab Pages Let’s Encrypt certificates (FREE)
The GitLab Pages integration with Let’s Encrypt (LE) allows you
to use LE certificates for your Pages website with custom domains
without the hassle of having to issue and update them yourself;
GitLab does it for you, out-of-the-box.
Let’s Encrypt is a free, automated, and
open source Certificate Authority.
WARNING:
This feature covers only certificates for custom domains, not the wildcard certificate required to run Pages daemon (FREE SELF). Wildcard certificate generation is tracked in this issue.
Before you can enable automatic provisioning of an SSL certificate for your domain, make sure you have:
- Created a project in GitLab
containing your website’s source code. - Acquired a domain (example.com) and added a DNS entry
pointing it to your Pages website. The top-level domain (.com) must be a
public suffix. - Added your domain to your Pages project
and verified your ownership. - Verified your website is up and running, accessible through your custom domain.
Enabling Let’s Encrypt integration for your custom domain
Once you’ve met the requirements, enable Let’s Encrypt integration:
- Turn on the Automatic certificate management using Let’s Encrypt toggle.
- Select Save changes.
Once enabled, GitLab obtains a LE certificate and add it to the
associated Pages domain. GitLab also renews it automatically.
- Issuing the certificate and updating Pages configuration
can take up to an hour. - If you already have an SSL certificate in domain settings it
continues to work until replaced by the Let’s Encrypt certificate.
Introduced in GitLab 13.0.
- Make sure you have properly set only one CNAME or A DNS record for your domain.
- Make sure your domain doesn’t have an AAAA DNS record.
- If you have a CAA DNS record for your domain or any higher level domains, make sure it includes letsencrypt.org.
- Make sure your domain is verified.
Message «GitLab is obtaining a Let’s Encrypt SSL certificate for this domain. This process can take some time. Please try again later. » hangs for more than an hour
- Next to the domain name, select Remove.
- Add the domain again, and verify it.
- Enable Let’s Encrypt integration for your domain.
- Make sure you have properly set only one CNAME or A DNS record for your domain.
- Make sure your domain doesn’t have an AAAA DNS record.
- If you have a CAA DNS record for your domain or any higher level domains, make sure it includes letsencrypt.org.
Update 19th Sept 2014: We added a reference to the GitLab Omnibus Readme as additional resources at the bottom of this post.
Nginx Series Overview
Before changing any GitLab configuration, you need a valid SSL certificate. In case you already bought a certificate from a certificate authority, you can go straight ahead to the next section. Else, you probably need to generate your own certificate. When using self-signed certificates, browsers will show a message that the page you’re visiting cannot be trusted. Make sure everybody who’ll access the GitLab URL knows this.
# Create a 2048 bit private key
# If the ssl directory doesn’t exist, please create it first
sudo openssl genrsa -out «/etc/nginx/ssl/gitlab.key» 2048
# This command generates the certificate signing request
sudo openssl req -new -key «/etc/nginx/ssl/gitlab.key» -out «/etc/nginx/ssl/gitlab.csr»
You’ll be asked a lot of questions now.
The code above has examples in the fields which you should fill for your certificate. Please set the Common Name/FQDN to the url you’re running GitLab. If you run your GitLab instance on git.yourdomain.com, please your git.yourdomain.com as FQDN!
Now you can finish this up and create the signed certificate:
sudo openssl x509 -req -days 365 -in «/etc/nginx/ssl/gitlab.csr» -signkey «/etc/nginx/ssl/gitlab.key» -out «/etc/nginx/ssl/gitlab.crt»
This certificate is valid for one year (365 days).
Configure Nginx
The GitLab project provides a very useful and handy nginx configuration file. This can be used with some adjustments. Please copy the contents of the GitLab nginx configuration file to your nginx configuration file.
Configure GitLab
Before changing the configuration of GitLab, stop the running instance.
sudo service gitlab stop
Now, navigate to your GitLab installation directory, default is /home/git/gitlab. Use your favorite editor and open config/gitlab.yml configuration file. Change the port to 443 and set https to true.
If you’re having trouble with Gravatar and the profile pictures cannot be resolved correctly, please disable Gravatar support as well.
Configure GitLab-Shell
The GitLab-Shell is responsible for any git interaction. You need to update the configuration to the new HTTPS settings. Navigate to the GitLab-Shell directory, default is home/git/gitlab-shell. Open the config.yml with your favorite editor and change the gitlab_url to use https:// over http://. When using a self-signed certificate, you also have to set self_signed_cert to true.
Restart GitLab and Nginx
The configuration is done. Restart GitLab and Nginx
sudo service gitlab start
sudo service nginx restart
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
You’re done. Go to your domain and check if Gitlab is running. You’ll probably get the warning regarding insecure certificates in case of self-signed certificate usage.
Additional Resources
September 16, 2018
6 minute read
Gitlab-CE default installation goes with HTTPS disable. We need to generate a SSL certificate, and bind it to the HTTPS of Gitlab-CE.
Some docs on the Internet
OpenSSL has the option to generate the certificate in one line, this post splits it into 3 steps (the private key, the request file, and the certificate) in order to get a clear understanding of the certificate generation procedure.
Review the SSL certificate content
DO NOT use password protected certificate key (in case the lack of the switch -nodes for no DES), to remove the password from the key:
openssl rsa -in certificate_before.key -out certificate_after.key
Generate self-signed SAN SSL certificate
Pay attention to -extensions v3_req in the end of the command, it’s the extension tag name in the gitlab.copdips.local.cnf file. If you dont specify it, the output certificate won’t have the extension part, so no SAN neither.
Review the SAN SSL certificate
The default Signature Algorithm has been already SHA256. Some online docs tell to add the switch -sha256 when using openssl req, but it’s deprecated with the new version of OpenSSL. BTW, the RSA private key default bits is 2048. My OpenSSL version on Ubuntu 1804 is OpenSSL 1.1.0g 2 Nov 2017
Save the SSL certificate
/srv/gitlab1083/ssl/ is the physical gitlab location on my Ubuntu server which is pointed to /etc/gitlab/ssl its docker container.
Configure HTTPS on Gitlab
Hereunder the content of uncommented lines in the Gitlab configuration file:
Update Gitlab config
When you changed the configuration file, to take effect:
Check the website SSL certificate from the command line
For Linux :
For Windows with OpenSSL installed:
My OpenSSL is installed with GIT on Windows. GitForWindows installs also many other powerful Linux commands (grep, ssh, tail, and also vim, etc.) ported to Windows.
By certuil for Windows only
You should explicitly download the certificate at first, and then view the content locally, so this method is not cool.
Hope Powershell team can get this done by one single cmdlet in the future Powershell releases.
# try catch is useful if ssl cert is not valid. ServicePoint is always kept even for invalid ssl cert.
Or a nice cmdlet Test-WebServerSSL written by the MVP Vadims Podāns.
Update the certificate in case of renewal
Here is the official doc.