В цій статті я розкажу, як розгорнути в себе власний хостинг GIT-репозиторіїв, який в деякій мірі може замінити github чи bitbucket. Його функціонал підійде як для малих, так і для великих проектів, над якими працює багато розробників. І називається цей продукт, як ви вже зрозуміли з заголовка, — GitLab.
Трохи про GitLab
GitLab був заснований українцем, а згодом отримав чималі інвестиції і зараз дуже активно розвивається. Є дві версії: безкоштовна Community Edition (CE) та платна Enterprise Edition (EE). Різницю між версіями можна взнати тут.
Безкоштовної версії цілком достатньо для повноцінної командної роботи. Туди входить наступний функціонал:
- GIT-репозиторій;
- мерж-реквести та ревю коду;
- файловий менеджер для перегляду GIT-репозиторіїв;
- перегляд історії активності членів команди, графіків комітів, дерева розгалужень, історії змін тощо;
- баг-трекер або простий менеджер задач з можливістю об’єднувати задачі в майлстоуни — щось на зразок спринтів в методиці Scrum;
- система неперервної інтеграції (Continuous Integration) та софт для розгортання ранерів для запуску тестів і компіляції білдів з подальшим автоматичним деплоєм;
- веб-хуки;
- можливість створювати і керувати сніпетами коду;
- wiki;
- інтеграція з іншими системами;
- і багато інших функцій, число і якість яких постійно зростає.
Вимоги для GitLab
Щоб розгорнути в себе GitLab для комфортної роботи, потрібен сервер чи офісний комп’ютер мінімум з двоядерним процесором та 2 GB оперативної пам’яті. Якщо у вас буде більше 100 користувачів, тоді вимоги будуть вищими. Більш детально про це можна почитати тут. Для простої інсталяції та оновлень варто використати Debian, Ubuntu або CentOS.
Якщо вагаєтесь, де можна дешево розгорнути собі GitLab і де взяти безкоштовний домен, тоді можу порадити VPS за 6.9 € на місяць і безкоштовний домен pp.ua.
Також можете спробувати на digitalocean або vultr, які дадуть більш потужні віртуалки, але дорожчі. (Якщо зареєструєтесь за посиланнями вище, то тримаєте $10 бонусу на рахунок).
Встановлення GitLab
Буду описувати встановлення GitLab на Debian Linux 8 Jessie, тому для початку встановлюємо його і встановлюємо exim4. Як це все робиться, я описував у попередніх публікаціях.
В GitLab використовується Redis, тому раджу додати наступну опцію, щоб зменшити вірогідність помилок з пам’яттю:
# echo "vm.overcommit_memory=1" | tee -a /etc/sysctl.conf # sysctl -p
Додаємо репозиторії GitLab, для цього просто виконуємо наступну команду, яка все зробить сама:
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
Встановлюємо GitLab:
# aptitude install gitlab-ce
Після завершення потрібно виконати команду, яка згенерує файли конфігурацій різних програм, які необхідні для роботи, і запустить GitLab:
# gitlab-ctl reconfigure
Все, GitLab встановлено. Тепер можна відкрити в браузері домен чи IP-адресу сервера і авторизуватись початковими даними, які після авторизації треба буде змінити, а також додати до профілю користувача існуючий email:
Логін: root
Пароль: 5iveL!fe
Як бачите, встановлення не було складним, проте перш ніж використовувати GitLab в роботі, треба його хоча б мінімально налаштувати.
Мінімальні налаштування GitLab
У файлі конфігурацій GitLab є багато різних налаштувань, але для роботи достатньо налаштувати лише кілька з них. Решту можна підналаштовувати з часом за необхідністю.
Усі основні налаштування лежать в одному файлі, тож відкриємо в редакторі цей файл:
# nano /etc/gitlab/gitlab.rb
Усі налаштування мають закоментовані опції, які визначають значення за замовчуванням. Тому необхідні опції треба розкоментувати і вказати своє значення.
Якщо у вас є домен під GitLab, тоді вкажіть URL:
external_url 'http://gitlab.example.com'
Для того щоб було зручно бачити час у Вашому часовому поясі, вкажіть його:
gitlab_rails['time_zone'] = 'Europe/Kiev'
GitLab буде розсилати сповіщення на електронну пошту, тому варто вказати коректні From з ім’ям та Reply-To:
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com' gitlab_rails['gitlab_email_display_name'] = 'My GitLab' gitlab_rails['gitlab_email_reply_to'] = 'no.reply@example.com'
Для того щоб GitLab міг розсилати пошту, потрібно включити SMTP і після цього буде використовуватись локальний exim4:
gitlab_rails['smtp_enable'] = true
Якщо на сервері поруч з GitLab потрібно запустити ще якісь веб-сервіси чи сайти, тоді треба прописати опцію, яка дозволить додавати свої файли конфігурацій nginx, який використовує GitLab:
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"
Для роботи GitLab використовується unicorn, кількість процесів якого рекомендується вказати по формулі кількість процесорів + 1:
unicorn['worker_processes'] = 3 # for 2 CPU
Після змін конфігурацій треба виконати наступні команди:
# gitlab-ctl reconfigure # gitlab-ctl restart
Якщо ви використовуєте піддомен для GitLab, а на основному у вас нічого немає, тоді можна на ньому розмістити статичну сторінку-заглушку.
Створимо директорію для додаткових налаштувань nginx (щоб це працювало, не забудьте прописати опцію nginx[‘custom_nginx_config’], про яку я писав вище):
# mkdir -p /etc/nginx/conf.d
І створимо файл налаштувань nginx:
# nano /etc/nginx/conf.d/example.com.conf
Пропишемо простий конфіг статичної сторінки:
server { server_name example.com; charset utf8; # error_log /var/log/nginx/example.com.error.log; # access_log /var/log/nginx/example.com.access.log main; location / { alias /var/www/example.com/; expires max; add_header Pragma private; add_header Cache-Control private; } }
Створимо директорію, звідки буде роздаватись статика:
# mkdir -p /var/www/example.com
Тепер закидаємо в цю директорію основний файл index.html з іншими файлам за необхідністю та встановлюємо права:
# chmod 755 $(find /var/www -type d) # chmod 644 $(find /var/www -type f)
Перша команда встановить усім директоріям рекурсивно права 775, а друга — всім файлам 664.
Тепер перезапускаємо nginx, і все повинно запрацювати:
# gitlab-ctl restart nginx
На завершення
Оскільки GitLab час від часу оновлюється, то варто його в себе оновлювати. Це робиться звичайним оновленням пакетів:
# aptitude update # aptitude upgrade
Після оновлення раджу зупинити GitLab та перезавантажити сервер:
# gitlab-ctl stop # reboot
Якщо хтось з вас вже використовує GitLab в роботі, то буду радий обмінятись досвідом по детальному налаштуванню та ефективному робочому workflow, коментуйте.