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;
}