Установка self-hosted GitLab на VPS: SSL, бекапи, оновлення
TL;DR
У цьому докладному посібнику ми крок за кроком налаштуємо self-hosted екземпляр GitLab на віртуальному приватному сервері (VPS), забезпечивши його безпечну роботу з використанням SSL/TLS, автоматичне резервне копіювання та готовність до майбутніх оновлень. Ви навчитеся вибирати відповідний VPS, готувати операційну систему Ubuntu 24.04 LTS, встановлювати GitLab Omnibus, налаштовувати HTTPS з Let's Encrypt та впроваджувати стратегію бекапів, щоб ваш репозиторій коду та CI/CD пайплайни завжди були доступні та захищені.
- Налаштування безпечного та продуктивного self-hosted GitLab на Ubuntu 24.04 LTS.
- Інтеграція HTTPS за допомогою Certbot та Let's Encrypt для шифрування трафіку.
- Впровадження автоматичного резервного копіювання даних GitLab для мінімізації ризиків.
- Застосування найкращих практик з обслуговування та оновлення системи.
- Вибір оптимальної конфігурації VPS або виділеного сервера під ваші потреби.
Що ми налаштовуємо і навіщо
У цьому посібнику ми займемося встановленням та налаштуванням GitLab — потужної платформи для управління життєвим циклом розробки програмного забезпечення. GitLab надає повний набір інструментів, включаючи управління Git-репозиторіями, відстеження завдань, CI/CD (безперервну інтеграцію та безперервну доставку), моніторинг, безпеку та багато іншого. Наша мета — розгорнути self-hosted версію GitLab на віртуальному приватному сервері (VPS), що дасть вам повний контроль над вашими даними, безпекою та конфігурацією.
У підсумку ви отримаєте повністю функціональний екземпляр GitLab, доступний за доменним ім'ям через захищене HTTPS-з'єднання. Він буде готовий до використання вашою командою для хостингу коду, управління проектами та автоматизації процесів розробки. Це ідеальне рішення для розробників, стартапів та невеликих команд, яким потрібна гнучкість та приватність, недоступні в публічних хмарних рішеннях.
Альтернативи та вибір self-hosted:
- Cloud-managed GitLab (GitLab.com): Це найпростіший спосіб розпочати роботу, оскільки GitLab бере на себе всі турботи щодо інфраструктури, оновлень та бекапів. Однак ви обмежені тарифними планами, не маєте повного контролю над даними (вони зберігаються на серверах GitLab), і кастомізація може бути обмежена. Для проектів з високими вимогами до безпеки або специфічними регуляціями це може бути неприйнятно.
- Self-hosted GitLab на VPS: Цей варіант дає вам максимальний контроль. Ви самі вибираєте сервер, операційну систему, налаштовуєте всі компоненти та відповідаєте за безпеку й обслуговування. Це вимагає технічних знань, але дозволяє адаптувати GitLab під будь-які потреби, інтегрувати його з внутрішньою інфраструктурою та забезпечувати повну приватність ваших даних. Це особливо актуально, якщо ви працюєте з чутливою інформацією або хочете мати повний контроль над своїм ланцюжком постачання ПЗ.
Вибір на користь self-hosted GitLab на VPS обумовлений прагненням до суверенітету даних, можливістю глибокої інтеграції з іншими внутрішніми сервісами та оптимізацією витрат у довгостроковій перспективі порівняно з постійно зростаючими витратами на хмарні сервіси при масштабуванні.
Який VPS-конфіг потрібен під це завдання
GitLab — досить ресурсоємний застосунок, особливо якщо ви плануєте активно використовувати CI/CD та розміщувати багато репозиторіїв. Правильний вибір конфігурації VPS є критичним для забезпечення стабільної та швидкої роботи.
Мінімальні вимоги для одного користувача або невеликої команди (до 5 осіб):
- Процесор (CPU): 2 ядра (vCPU) з частотою від 2.5 GHz.
- Оперативна пам'ять (RAM): 4 ГБ. GitLab дуже любить оперативну пам'ять, і 4 ГБ — це абсолютний мінімум, при якому система працюватиме без постійних свопів. Для комфортної роботи рекомендується 8 ГБ.
- Диск: 50 ГБ SSD. SSD-накопичувачі значно прискорюють операції введення-виведення, що критично для баз даних та роботи з Git-репозиторіями. Якщо планується багато репозиторіїв або великі файли, знадобиться більше місця.
- Мережа: 100 Мбіт/с або 1 Гбіт/с порт з необмеженим трафіком або достатнім обсягом (від 1 ТБ/місяць).
Рекомендований VPS-план для команди до 15-20 осіб з активним CI/CD:
- Процесор (CPU): 4 ядра (vCPU) з частотою від 2.8 GHz.
- Оперативна пам'ять (RAM): 8 ГБ або 16 ГБ. Це забезпечить стабільну роботу всіх компонентів GitLab, включаючи PostgreSQL, Redis та Gitaly, а також дозволить запускати кілька CI/CD пайплайнів одночасно.
- Диск: 100-200 ГБ NVMe SSD. NVMe надає ще вищу швидкість читання/запису, що помітно прискорить роботу з великими репозиторіями та проектами.
- Мережа: 1 Гбіт/с порт з необмеженим трафіком.
Для оренди VPS із зазначеними характеристиками, наприклад, 4 vCPU, 8-16 ГБ RAM, 100-200 ГБ NVMe SSD, можна розглянути пропозиції провайдерів. Відповідний варіант можна знайти тут: VPS із зазначеними характеристиками.
Коли потрібен dedicated, а не VPS?
Виділений сервер (dedicated server) стає необхідним, якщо:
- Велика команда (понад 50 користувачів): GitLab з великою кількістю активних користувачів та CI/CD-завдань може споживати значні ресурси.
- Високі вимоги до продуктивності: Для дуже активних CI/CD пайплайнів, великих монорепозиторіїв або специфічних робочих навантажень.
- Специфічні вимоги до безпеки/ізоляції: Якщо вам потрібна повна ізоляція від інших клієнтів провайдера, виділений сервер надає це.
- Необхідність у кастомному обладнанні: Для специфічних завдань (наприклад, GPU для машинного навчання в CI/CD) може знадобитися пряме управління залізом.
Якщо ви зіткнулися з такими потребами, розгляньте можливість взяти виділений сервер.
Локація: на що впливає
Вибір географічної локації VPS-сервера впливає на кілька ключових аспектів:
- Затримка (Latency): Чим ближче сервер до вашої команди та кінцевих користувачів, тим нижча затримка. Це критично для комфортної роботи з Git, швидкого завантаження веб-інтерфейсу та виконання CI/CD завдань.
- Законодавство: Розташування сервера визначає застосовне законодавство про дані. Це важливо для відповідності таким нормам, як GDPR, HIPAA або місцевим законам про зберігання даних.
- Вартість: Ціни на VPS можуть варіюватися залежно від регіону.
Рекомендується вибирати локацію, максимально близьку до основної частини вашої команди розробників.
Підготовка сервера
Перш ніж приступити до встановлення GitLab, необхідно виконати базове налаштування операційної системи. Ми будемо використовувати Ubuntu Server 24.04 LTS, оскільки це актуальна довгострокова версія, що підтримується до 2029 року.
1. Підключення по SSH та створення нового користувача
Після отримання даних для доступу до VPS (зазвичай це IP-адреса, логін root та пароль), підключіться до сервера:
ssh root@ВАША_IP_АДРЕСА
Створіть нового користувача з правами sudo для повсякденної роботи. Замініть ваш_пользователь на бажане ім'я:
# Додавання нового користувача
adduser ваш_пользователь
# Додавання користувача до групи sudo
usermod -aG sudo ваш_пользователь
Тепер вийдіть із сесії root та увійдіть під новим користувачем:
exit
ssh ваш_пользователь@ВАША_IP_АДРЕСА
2. Налаштування SSH-ключів (рекомендується)
Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Якщо у вас ще немає ключів, згенеруйте їх на локальній машині:
# На вашій локальній машині
ssh-keygen -t rsa -b 4096 -C "ваша_почта@example.com"
Потім скопіюйте публічний ключ на сервер:
# На вашій локальній машині
ssh-copy-id ваш_пользователь@ВАША_IP_АДРЕСА
Після цього ви можете відключити авторизацію за паролем для root у файлі /etc/ssh/sshd_config. Знайдіть рядки:
# PermitRootLogin prohibit-password
# PasswordAuthentication yes
І змініть їх на:
PermitRootLogin no
PasswordAuthentication no
Перезапустіть SSH-сервіс:
# На сервері, під вашим_користувачем
sudo systemctl restart sshd
3. Оновлення системи та встановлення базових утиліт
Переконайтеся, що система актуальна та встановлені необхідні пакети:
# Оновлення списку пакетів
sudo apt update
# Оновлення всіх встановлених пакетів
sudo apt upgrade -y
# Встановлення необхідних утиліт
sudo apt install -y curl wget gnupg2 ca-certificates apt-transport-https htop git unattended-upgrades
Unattended Upgrades: Цей пакет автоматично встановлює критичні оновлення безпеки, що вкрай важливо для підтримки сервера в актуальному та захищеному стані.
4. Налаштування файрволу (UFW)
Налаштуємо базовий файрвол UFW (Uncomplicated Firewall) для захисту сервера. За замовчуванням ми дозволимо лише SSH, HTTP, HTTPS:
# Дозволити SSH (за замовчуванням порт 22)
sudo ufw allow ssh
# Дозволити HTTP (порт 80)
sudo ufw allow http
# Дозволити HTTPS (порт 443)
sudo ufw allow https
# Увімкнути файрвол
sudo ufw enable
Підтвердіть увімкнення файрволу, натиснувши y. Перевірити статус можна командою sudo ufw status.
5. Встановлення Fail2ban (захист від брутфорсу)
Fail2ban сканує логи та автоматично банить IP-адреси, які показують ознаки шкідливої активності (наприклад, багаторазові невдалі спроби входу по SSH).
# Встановлення Fail2ban
sudo apt install -y fail2ban
# Запуск та увімкнення автозапуску Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Створіть файл конфігурації для Fail2ban, щоб він не перезаписувався при оновленнях:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Відкрийте /etc/fail2ban/jail.local та налаштуйте, наприклад, bantime (час бану) та findtime (період для виявлення спроб) під свої потреби. Переконайтеся, що секція [sshd] увімкнена (enabled = true).
# Приклад налаштування в /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Перезапустіть Fail2ban для застосування змін:
sudo systemctl restart fail2ban
Тепер ваш сервер готовий до встановлення GitLab.
Встановлення ПЗ — покроково
Ми будемо встановлювати GitLab Community Edition (CE) за допомогою Omnibus-пакета, який включає в себе всі необхідні компоненти (NGINX, PostgreSQL, Redis тощо) та значно спрощує процес встановлення та обслуговування. Для 2026 року будемо орієнтуватися на GitLab версії 20.x, яка буде актуальною на той момент.
Перед встановленням переконайтеся, що у вас є доменне ім'я, яке вказує на IP-адресу вашого VPS. Наприклад, gitlab.yourdomain.com.
1. Встановлення залежностей
Для додавання репозиторію GitLab потрібно кілька пакетів:
# Встановлення пакетів, необхідних для додавання репозиторію GitLab
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg2
2. Додавання репозиторію GitLab
Імпортуємо GPG-ключ GitLab та додамо офіційний репозиторій Omnibus-пакетів:
# Додавання GPG-ключа GitLab
curl https://packages.gitlab.com/gpg.key | sudo gpg --dearmor > /usr/share/keyrings/gitlab-archive-keyring.gpg
# Додавання репозиторію GitLab CE для Ubuntu 24.04 (Noble Numbat)
echo "deb [signed-by=/usr/share/keyrings/gitlab-archive-keyring.gpg] https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/gitlab-ce.list
Оновіть список пакетів після додавання нового репозиторію:
# Оновлення списку пакетів
sudo apt update
3. Встановлення GitLab Community Edition
Тепер можна встановити GitLab. У команді встановлення вкажемо зовнішній URL, який GitLab використовуватиме для генерації посилань та налаштування NGINX. Замініть gitlab.yourdomain.com на ваш домен.
# Встановлення GitLab CE із зазначенням зовнішнього URL
sudo EXTERNAL_URL="https://gitlab.yourdomain.com" apt install gitlab-ce
Ця команда встановить останню стабільну версію GitLab CE, доступну в репозиторії. Процес може зайняти деякий час, оскільки буде завантажено та встановлено багато компонентів.
4. Початкове налаштування та переконфігурація
Після встановлення GitLab автоматично запустить процес переконфігурації, який налаштує всі компоненти. Якщо ви не вказали EXTERNAL_URL під час встановлення або хочете змінити будь-які налаштування, ви можете зробити це у файлі /etc/gitlab/gitlab.rb.
Якщо вам потрібно переконфігурувати GitLab вручну (наприклад, після зміни gitlab.rb):
# Запуск процесу переконфігурації GitLab
sudo gitlab-ctl reconfigure
Ця команда перечитає файл gitlab.rb та застосує всі зміни, а також переконається, що всі служби GitLab запущені та налаштовані правильно.
5. Перевірка статусу сервісів GitLab
Переконайтеся, що всі компоненти GitLab запущені та працюють коректно:
# Перевірка статусу всіх сервісів GitLab
sudo gitlab-ctl status
Ви повинні побачити список сервісів (nginx, postgresql, redis, unicorn, sidekiq, gitaly тощо) зі статусом run.
6. Встановлення пароля для root-користувача GitLab
При першому встановленні GitLab генерує тимчасовий пароль для користувача root. Ви можете знайти його у файлі /etc/gitlab/initial_root_password, який існує лише 24 години після встановлення.
# Перегляд тимчасового пароля root
sudo cat /etc/gitlab/initial_root_password
Рекомендується відразу ж встановити новий, надійний пароль через веб-інтерфейс або через консоль Rails:
# Запуск консолі GitLab Rails
sudo gitlab-rails console
# Всередині консолі Rails
user = User.where(id: 1).first
user.password = 'ВАШ_НОВИЙ_НАДІЙНИЙ_ПАРОЛЬ'
user.password_confirmation = 'ВАШ_НОВИЙ_НАДІЙНИЙ_ПАРОЛЬ'
user.save!
# Вихід з консолі
exit
Тепер ви можете отримати доступ до веб-інтерфейсу GitLab за адресою https://gitlab.yourdomain.com, використовуючи логін root та ваш новий пароль.