Gitlab Kurulumu – Gitlab – Mysql – CentOS

Merhaba

Gitlab yazılımını CentOS dağıtımına kurulumu için aşağıdaki adımları izleyebilirsiniz.

1 – CentOS kurulumu

CentOS kurulumunda 32 bit yada 64bit fark etmemektedir. Önemli olan nokta CentOS minimal imajın kurulu olmasıdır. Bu döküman CentOS 6.3 x64 minimal  iso üzerinden anlatım yapmaktadır.

2 – CentOS update’leri ve Repo’lar

Gitlab kurulumuna başlamadan önce update işlemlerini gerçekleştiriniz.

[root@out1 ~]# yum upgrade
[root@out1 ~]# yum install wget

Gitlab kurulumu için gerekli olan ruby vb paketlerin ilgili versiyonlarını bulabileceğimiz repoları ekleyelim.

Bunun için öncelikel EPEL repo’su için gerekli GPG key’ini sisteme yüklememiz gerekmekte.

[root@out1 ~]# wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 https://www.fedoraproject.org/static/0608B895.txt
[root@out1 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

Ardından EPEL rpm’ini kuruyoruz.

[root@out1 ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

EPEL repo’sundan başka ihtiyacımız PUIAS repo’su. Bu repo’nun sisteme yüklenmesi gerekli.

touch  /etc/yum.repos.d/PUIAS_6_computational.repo

Bu oluşturulan dosyayı metin editoru ile açıp aşağıdaki satırları içine kaydedip çıkınız.

[PUIAS_6_computational]
name=PUIAS computational Base $releasever - $basearch
mirrorlist=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch/mirrorlist
#baseurl=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puias

PUIAS için GPG key’lerini sisteme tanıtalım.

wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-puias http://springdale.math.ias.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-puias

Eklenen repoların sisteme işlediğini kontrol etmek için aşağıdaki komutu yazınız. Komut çıktısı aşağıda görüldüğü gibi olmalıdır. Repoları yeni eklediğimiz için bu repoların update’i gerçekleşecektir.

yum repolist

repo id                 repo name                                                status
PUIAS_6_computational   PUIAS computational Base 6 - x86_64                      2,018
base                    CentOS-6 - Base                                          4,802
epel                    Extra Packages for Enterprise Linux 6 - x86_64           7,879
extras                  CentOS-6 - Extras                                           12
updates                 CentOS-6 - Updates                                         814
repolist: 15,525

3 – Gitlab için bağımlılıkların kurulması

Aşağıdaki komut ile sistem güncelleştirmelerini yapıp, gerekli bağımlılıkları kurunuz.

yum -y update
yum -y groupinstall 'Development Tools'
yum -y install vim-enhanced readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git patch

Buradaki vim-enchanced benim seçtiğim metin editörü için gereklidir.

Gitlab için gerekli Python versiyonu 2.5+ ‘dır. Python 3.x için henüz hizmet verilmemektedir. Bu nedenle aşağıdaki komut ile Python 2.5+ versiyon kullandığınızdan emin olun.

python --version

4 – Redis Konfigürasyonu

Redis key-value sistemidir. Redis’in sistem açılışında çalışması ve şimdi servise başlaması için aşağıdaki komutları yazınız.

chkconfig redis on
service redis start

5 – Mail Server

Gitlab kullanıcılara mail gönderebilmektedir. Mail servisi olarak postfix kullanmanızı öneririm.

yum -y install postfix

Postfix konfigürasyonuna bu yazıda değinilmeyecektir.

6 – Ruby

Gitlab Ruby teknolojilerini kullanmaktadır. Bunun için ilgili Ruby versiyonunu kurmanız gerekmektedir. CentOS minimal ile hali hazırda Ruby paketleri gelmemektedir. Eğer mevcutta kurulu Ruby varsa aşağıdaki komut ile kaldırınız.

yum remove ruby

İlgili Ruby versiyonunun kurulumu için aşağıdaki adımları takip ediniz.

mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz
cd ruby-2.0.0-p353
./configure --disable-install-rdoc
make
make install

İlgili Ruby versiyonu indirilip derlenmektedir. Bu işlem, CentOS sunucusunun CPU gücüne bağlı olarak zaman alabilir.

Bundler GEM’in kurulması

gem install bundler --no-ri --no-rdoc

Ruby’nin PATH değişkenine etki etmesi için sistemden çıkış yapıp tekrardan giriş yapmanız gerekmektedir. İlgili Ruby versiyonunun düzgün şekilde kurulduğunu test etmek için aşağıdaki komutlara ve çıktılarına bakınız.

which ruby
# /usr/local/bin/ruby
ruby -v
# ruby 2.0.0p0 (2013-12-25 revision 44422) [x86_64-linux]

7 – Sistem Kullanıcılarının Oluşturulması

Sistemde git adında user oluşturulacaktır.

adduser --system --shell /sbin/nologin --comment 'GitLab' --create-home --home-dir /home/git/ git

Bir güvenlik adımı olarak bu kullanıcının terminalden login olup komut çalıştıramaması gerekir. Bunun için aşağıdaki adımları uygulayabilirsiniz.

visudo

Açılan dosyada aşağıdaki satırı arayınız.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Bu satırın sonuna /usr/local/bin ekleyip dosyayı kaydedip çıkınız.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

8 – Gitlab Shell

Öncelikle git klasörüne gidip gitlab shell’in clone’unu indiriyoruz.

cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v1.8.0
cd gitlab-shell

Hali hazırda gelen konfigürasyonu dosyasını uygun isimde kopyalayınız.

sudo -u git -H cp config.yml.example config.yml

Ardından bu dosya içerisinde ki gitlab_url değişkenini hizmet vereceğiniz domain ile değiştiriniz. Bu yazıda http://gel.mehmetince.net kullanılacaktır.

sudo -u git -H vi config.yml
# Url to gitlab instance. Used for api calls. Should end with a slash.
# gitlab_url: "http://gel.mehmetince.net/"

Ve setup çalıştırılır.

sudo -u git -H /usr/local/bin/ruby ./bin/install

9 – Veri tabanı

Gitlab Postgresql veya MySQL ile çalışabilir. Bu yazıda MySQL tercih edilmiştir.

Mysql Kurulur.

yum install -y mysql-server mysql-devel
chkconfig mysqld on
service mysqld start

Mysql kurulumu için güvenli kurulum scripti kullanılmalıdır! Scriptin sorduğu sorulara Yes diyerek devam ediniz.

/usr/bin/mysql_secure_installation

Root için şifre girilmesi istendiğinde, güçlü ve random şifre seçmenizi öneririm. Bunun için http://www.random.org/strings/ kullanabilirsiniz.

Mysql’e bağlanıp git adından bir mysql kullanıcısı oluşturulmalıdır. İlgili adımları aşağıdan takip ediniz.

mysql -u root -p

# supersecret'i kendi şifreniz ile değiştirin.z
CREATE USER 'git'@'localhost' IDENTIFIED BY 'supersecret';

# Create the GitLab production database
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

# Grant the GitLab user necessary permissopns on the table.
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';

10 – Gitlab Kurulumu

Gitlab kurulumu için aşağıdaki adımları uygulayınız.

cd /home/git

# Gitlab'ın kaynak kodlarının sunucuya indirilmesi. 
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-5-stable gitlab
cd /home/git/gitlab

Gitlab klasörü altında konfigürasyon dosyasının düzenlenmesi gerekmektedir.

gitlab.yml dosyasında localhost yazan yere hizmet vereceğiniz domain’i yazmanız gerekmektedir. Örn: gel.mehmetince.net

Ardından dizin ve izinlerin ayarlanması için aşağıdaki komutları uygulayınız.

cd /home/git/gitlab

# 
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# localhost yazan yere hizmet vereceğiniz domain'i yazınız.
#
# Ayrıca bin_path'i /usr/local/bin/git olarak değiştiriniz.
#
sudo -u git -H vi config/gitlab.yml

# Make sure GitLab can write to the log/ and tmp/ directories
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo chmod -R u+rwX  tmp/

# Create directory for satellites
sudo -u git -H mkdir /home/git/gitlab-satellites

# Create directories for sockets/pids and make sure GitLab can write to them
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/

# Create public/uploads directory otherwise backup will fail
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads

# Copy the example Unicorn config
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

# Copy the example Rack attack config
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Ardından gitlab için ilgili kullanıcı bilgilerinin tanımlanması gerekmektedir.

Burada ki önemli nokta user.email için tanımlanan mail adresi ile gitlab.yml dosyasında tanımladığınız adresin aynı olmasıdır.

sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"
sudo -u git -H git config --global core.autocrlf input

11 – Veri tabanı ayarları

Kurulumunu yaptığımız MySQL için gitlab tanımlamalarını gerçekleştireceğiz.

Database bilgilerini barındıran dosyayı kopyaladıktan sonra metin editörü ile açıyoruz.

cd /home/git/gitlab
sudo -u git -H cp config/database.yml{.mysql,}
sudo -u git -H chmod o-rwx config/database.yml
sudo -u git -H vi config/database.yml

database.yml içerisinde sadece production kısmı için güncellemeler yapıyoruz. Bu döküman için ilgili tanımlamalar aşağıda yapılmıştır. Sizde kendi şifrenizi ilgili satıra yazarak dosyayı kaydedip çıkınız.

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlabhq_production
  pool: 10
  username: git
  password: "supergizlisifre"
  # host: localhost
  # socket: /tmp/mysql.sock

12 – GEM Yüklenmesi ve Veri Tabanı Hazırlanması

Bu adımda aşağıda ki komutları çalıştırınız.

cd /home/git/gitlab

sudo -u git -H /usr/local/bin/bundle install --deployment --without development test postgres aws

Bu komut bir çok paket indirip kuracaktır. En son “Post-install message from httparty: When you HTTParty, you must party hard!” yazısını gördüğünüzde her şey yolunda demektir.

Ardından sıra veritabanında tabloları oluşturmaya geldi. Aşağıdaki komutu çalıştırınız. Komut veri tabanı oluşturmak isteyecektir, bu soruya Yes dedikten sonra işlemler gerçekleşecektir.

sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

Giriş bilgileriniz. Bu bilgileri ilk oturumu gerçekleştirdiğinizde Gitlab değiştirmeniz için size zorlayacaktır.

Administrator account created:

login.........admin@local.host
password......5iveL!fe

13 – INIT Script Kurulumu

Sunucunun yeniden başlatıldığı gibi durumlarda servislerinde start anında ayağa kalkması gerekmektedir. Ayrıca herhangi bir durumda servisi yeniden başlatmak istediğinizde init script’ler kullanılır. Bu scriptler genelde /etc/init.d/ klasörü altında bulunur. Gitlab’ımız için gerekli olan init scriptini indirip bu dizine kaydediyoruz. Ardından start anında çalışması için gerekli komutları veriyoruz. Bu işlemler için aşağıdaki komutları çalıştırınız.

wget -O /etc/init.d/gitlab https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/init/sysvinit/centos/gitlab-unicorn
chmod +x /etc/init.d/gitlab
chkconfig --add gitlab
chkconfig gitlab on

14 – Logrotate ayarlanması

Logların belli bir düzen ve döngüde tutulması ile ilgili ayarların yapılması gereklidir. Bunun için aşağıda ki komutu çalıştırıyoruz.

sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

15 – Kontroller

Gitlab’ın çevresel değişkenlerinin düzgün konfigüre edilip edilmediğini kontrol etmek için aşağıda ki komutu çalıştırınız. Komut çıktısı da aşağıdakine benzer olacaktır.

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

#Komut çıktısı
System information
System:		CentOS release 6.5 (Final)
Current User:	git
Using RVM:	no
Ruby Version:	2.0.0p353
Gem Version:	2.0.14
Bundler Version:1.5.3
Rake Version:	10.1.0

GitLab information
Version:	6.5.1
Revision:	2ffa03a
Directory:	/home/git/gitlab
DB Adapter:	mysql2
URL:		http://gel.mehmetince.net
HTTP Clone URL:	http://gel.mehmetince.net/some-project.git
SSH Clone URL:	git@gel.mehmetince.net:some-project.git
Using LDAP:	no
Using Omniauth:	no

GitLab Shell
Version:	1.8.0
Repositories:	/home/git/repositories/
Hooks:		/home/git/gitlab-shell/hooks/
Git:		/usr/bin/git

16 – Gitlab servisini başlatmak

Şimdiye kadar ki işlemler tamam ise artık Gitlab servisini başlatabilirsiniz.

service gitlab start

Komut unicorn ve sidekiq adından iki adet servisi başlatacaktır.

17 – Assets’lerin derlenmesi

Gitlab assets’lerinin derlenmesi için aşağıda ki komutu çalıştırıyoruz. Bu komut ile gitlab’ın kullandığı css, png vb assets dosyaları derlenecektir.

sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

18 – Web Servisinin Konfigüre Edilmesi

Gitlab Apache ve Nginx ile birlikte koşturulabilir. Apache tercihini yapacak arkadaşları bu linkin 7. maddesini okumalarını öneriyorum. Bu döküman Nginx kurulumunu tercih etmektedir.

yum -y install nginx
chkconfig nginx on
usermod -a -G git nginx
chmod g+rx /home/git/
wget -O /etc/nginx/conf.d/gitlab.conf https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/web-server/nginx/gitlab-ssl

Gitlab’a web üzerinden erişirken HTTPS kullanılmalıdır. Bunun içinde bir adet self-signed ssl sertifikası oluşturmalıyız. SSL sertifikasının oluşturulması aşamasındaki bilgileri doğru girmeye özen gösteriniz. Bu dökümanda ele alınmayacak olan “Sertifika İmzalatma” sürecine daha sonra ihtiyaç duyduğunuz problem yaşamamanız için bu bilgilerin doğru olması önemlidir.

cd /etc/nginx/
sudo openssl req -new -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
sudo chmod o-r gitlab.key

İlk adım olarak /etc/nginx/conf.d/gitlab.conf dosyasını metin editörü ile açıp server_name değişkenine hizmet vereceğiniz URL’i atamanız.

# Dosyanın sadece ilgili satırları aşağıda bulunmaktadır. Sadece ilgili satırları değiştirmelisiniz.
server {
    listen *:80;
    server_name gel.mehmetince.net;
    ...

server {
    listen 443 ssl;
    server_name gel.mehmetince.net;
    ...

Metin editörü ile /home/git/gitlab-shell/config.yml dosyasını açıp aşağıda ki şekilde değişiklik yapıyoruz.

Burada ki önemli noktalar;

  • gitlab_url’in https‘e dönmüş olması.
  • ca_file’ın başında ki diyez işaretinin kaldırılıp /etc/nginx/gitlab.crt olarak değiştirilmesi ( ca_file ile self_signed_cert ‘in aynı sütundan başladığına emin olunuz. Syntax hatasına neden olmasın.)
  • self_signed_cert’in true ya atanması.
# Url to gitlab instance. Used for api calls. Should end with a slash.
gitlab_url: "https://gel.mehmetince.net/"

http_settings:
#  user: someone
#  password: somepass
  ca_file: /etc/nginx/gitlab.crt
#  ca_path: /etc/pki/tls/certs
  self_signed_cert: true

Son olarak metin editörü ile /home/git/gitlab/config/gitlab.yml dosyasının açılarak aşağıda ki port ve https değişikliğinin yapılması gerekmektedir.

  gitlab:
    ## Web server settings
    host: gel.mehmetince.net
    port: 443
    https: true

Ve Nginx servisini başlatıyoruz.

service nginx start

19 – Iptables ayarları

Aşağıdaki komutları çalıştırıyoruz. Bu komutlar sayesinde kullanıcılar http servisimize erişebilecektir.

lokkit -s http -s https -s ssh
service iptables restart

20 – Son Kontroller

Aşağıda ki komutları çalıştırarak son kontrolleri gerçekleştiriniz.

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

Aşağıdakine benzer bir hata alırsanız bunu önemsemeyiniz.

Init script up-to-date? ... no
  Try fixing it:
  Redownload the init script
  For more information see:
  doc/install/installation.md in section "Install Init Script"
  Please fix the error above and rerun the checks.

21 – Son

http://gel.mehmetince.net

Gitlab giriş ekranı

 

Kaynakça:

Bu yazının asıl baba kaynağı aşağıdaki linktedir. Bu linkteki yazıyı hazırlayan insanlara sonsuz teşekkürler.
https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos