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