Установка и настройка GitLab

Рассмотрим установку GitLab и настроим его так, чтобы авторизация шла через ActiveDirectory, а обычные пользователи не могли создавать проекты и группы. Разворачиваться все будет на дистрибутиве CentOS 7. Subversion конечно штука хорошая, но прогресс не стоит на месте.
http://it.icmp.ru/postimages/1181/7616/thumb/gitlab_0.png

UPDATE: Установка SSL
Конфигурация сервера:
Intel(R) Core(TM) i5 CPU 660 @ 3.33GHz [4 потока]
2x2GB RAM [1333Mhz]
2xHDD 500GB [ZFS Mirror]


Подключим репозиторий epel и установим git:
yum install epel-release.noarch
yum install git


Скачиваем GitLab и устанавливаем согласно рекомендации на странице загрузки:
curl -O https://downloads-packages.s3.amazonaws.com/centos-7.1.1503/gitlab-ce-7.10.1~omnibus-1.x86_64.rpm
rpm ivh gitlab-ce-7.10.1~omnibus-1.x86_64.rpm
gitlab-ctl reconfigure


Далее авторизуемся в gitlab и проведем первичную настройку:
http://server_ip
Username: root
Password: 5iveL!fe
Сходу попросят поменять пароль.


Идем в раздел admin area->settings:
Убираем галочку с пункта "signup enable" тем самым запрещаем регистрацию
Убираем галочку с "twitter enabled" чтобы gitlab не взаимодействовал с сервисом twitter
Ставим значение 0 в опции "default projects limit" т.е. пользователи могут создать 0 проектов
В "restricted visibility levels" выбираем private и internal (не обязательно)
"Home page url" оставьте пустым иначе получите ошибку "too many redirects"
Сохраняем и закрываем.


Далее идем в "/opt/gitlab/embedded/service/gitlab-rails/config" и редактируем gitlab.yml:
host: указываем доменное имя сервера например git.example.com
time_zone: Asia/Yakutsk
email_enabled: true
email_from: robot@example.com
email_display_name: 'Git Server такой то Компании'
default_can_create_group: false
username_changing_enabled: false


Настройка Active Directory:
ldap:
enabled: true
host: ip адрес сервера active directory
port: 636 (если у вас не используется ssl то 389)
uid: sAMAccountName
method: ssl (если порт 389 то поменяйте на plain)
bind_dn: 'логин пользователя с правами на чтение в active directory'
password: 'пароль'
active_directory: true
allow_username_or_email_login: false
base: dc=ad,dc=example,dc=com (если предположить что доменный адрес сервера active directory ad.example.com)
admin_group: git_admins (создаем в active directory такую группу и все кто входят в нее получат права админа)


Репозитории gitlab по умолчанию создаются в /var/opt/gitlab поэтому эту директорию лучше переместить в тот раздел где больше места. У меня таким разделом является /opt:
gitlab-ctl stop
mkdir /opt/repositories
mv /var/opt/gitlab /opt/repositories
ln -s /opt/repositories/gitlab /var/opt
gitlab-ctl start


Подводный камень ожидал с автозапуском gitlab. При попытке выполнить systemctl enable gitlab-runsvdir почему то получал ошибку что такого файла нету. Попытки пофиксить ни к чему не привели потому решил запускать через rc.local:
chmod a+x /etc/rc.local
Вписываем туда строку: /opt/gitlab/embedded/bin/runsvdir-start &
Для проверки можно перезагрузить сервер.
Теперь можно постучаться по доменному адресу.

Чтобы убедится, что все работает достаточно завести в Active Directory пользователя скажем test и указать ему почту test@gmail.com. Далее идем в веб-интерфейс и в вкладке авторизации LDAP вписываем данные пользователя test.
Если все сделано правильно, то в интерфейсе будут отсутствовать кнопки создания проектов и групп, а в профиле отображаться корректный почтовый адрес пользователя. Теперь если отключите пользователя, то gitlab не даст ему авторизоваться.
Если во время настройки все же авторизовались через Active Directory то надо перед проверкой удалить этого пользователя иначе пользователь все еще будет уметь создавать группы (ну или уберите галочку в настройках профиля).

В итоге из под коробки получаем следующее:
nginx для отдачи статики
unicorn для работы с ruby on rails
redis для кэширования

Чтобы обновить GitLab достаточно будет скачать rpm пакет новой версии и запустить его установку. Обновление пройдет в автоматическом режиме.

UPDATE: Установка SSL
Попросили установить SSL на gitlab.
Зарегистрируем новый ssl сертификат на startssl.com.
Записываем ключ в /etc/ssl/git/git.example.com.key
Записываем сертификат в /etc/ssl/git/git.example.com.crt
Избавляемся от passphrase:
openssl rsa -in /etc/ssl/git/git.example.com.crt -out /etc/ssl/git/git.example.com.crt

Скачиваем корневой и intermediate сертификаты:
wget http://www.startssl.com/certs/ca.pem -O /etc/ssl/git/ca.pem
wget http://www.startssl.com/certs/sub.class1.server.ca.pem -O /etc/ssl/git/sub.class1.server.ca.pem

Создаем сертификат chain:
cd /etc/ssl/git
cat git.example.com.crt ca.pem sub.class1.server.ca.pem > bundle_git.crt

Редактируем /opt/repositories/gitlab/nginx/conf:
server {
listen 80;

server_name git.example.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen *:443;
ssl on;
ssl_certificate /etc/ssl/git/bundle_git.crt;
ssl_certificate_key /etc/ssl/git/git.mytona.com.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
server_name git.example.com;
server_tokens off;
root /opt/gitlab/embedded/service/gitlab-rails/public;

client_max_body_size 250m;

access_log /var/log/gitlab/nginx/gitlab_access.log;
error_log /var/log/gitlab/nginx/gitlab_error.log;

location / {
try_files $uri $uri/index.html $uri.html @gitlab;
}

location /uploads/ {
gzip off;

proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;

proxy_set_header Host $http_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_set_header X-Frame-Options SAMEORIGIN;

proxy_pass http://gitlab;
}

location @gitlab {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;

proxy_set_header Host $http_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_set_header X-Frame-Options SAMEORIGIN;

proxy_pass http://gitlab;
}

location ~ ^/(assets)/ {
root /opt/gitlab/embedded/service/gitlab-rails/public;
gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
}
error_page 502 /502.html;
}
  • просмотров: ~12700
  • рейтинг: ?

Комментарии (5)

Вы - anonymous, войти ?

можно использовать bbcode-теги
[b]жирный текст[/b]
[i]курсив[/i]
[u]underline[/u]
[s]зачеркнутый текст[/s]
[size=20px]размер шрифта[/size]
всякие изменения текста
[left][/left]
[right][/right]
[center][/center]
позиционирование элементов: картинки, текст и т.д
[url][/url]
[email][/email]
внутри тега [url] помещайте ссылки, а внутри [email] адрес электронной почты;
так же [url] можно использовать в виде:
[url=http://example.com]пример[/url],
[url=http://test.ru][img]http://flickr.com/givemeimg.png[/img][/url]
[code][/code]
[quote][/quote]
внутри тега [code] можно помещать программный код (подстветка попытается включиться автоматически); для выделения цитат используйте [quote]
также можно напрямую указать язык [code=cpp]int i;[/code]
[list][/list]
создаем списки, каждый элемент пишется после [*].

Можно указывать маркер - [list=marker].
возможные маркеры 1(decimal), i(lower-roman), I(upper-roman), a(lower-alpha), A(upper-alpha). Примеры:

[list][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=1][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=A][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[table][/table]
оформляем таблицу, используя внутренние теги [tr] и [td].
[tr] - строка, [td] - поле в строке,
[table=100%] - можно задавать ширину в процентах, по-умолчанию ширина 100%
[td=2] - можно задавать сколько столбцов входит в это поле. Пример:

[table=50%][tr][td]столбец 1[/td][td]столбец 2[/td][/tr][tr][td]значение 1[/td][td]значение 2[/td][/tr][tr][td=2]сразу 2 столбца[/td][/tr][/table]
[img][/img]
тег для вставки фото или картинок, мы любим картинки. Примеры использования:

[img]http://ya.ru/logo.png[/img],
[img=100x100px]http://ya.ru/logo.png[/img]
[img=fullimg.url]thumbimg.url[/img],
Пожалуйста загружайте картинки на наш сайт, либо вставляйте с бекбоновских ресурсов.
[video][/video]
Проигрывает видео, внутрь вставляем ссылки на видео, поддерживается Play.Ykt.Ru(нужно вставить ссылку на страницу с видео) и tv.ykt.ru(нужно вставить ссылку на адрес файла)