OpenVZ - GitLab

Instrukcja instalacji jest ogólna dostępna i znajduje się tutaj:
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md

Standardowo:

apt-get update && apt-get upgrade -y

dpkg-reconfigure dash

wybieramy No


Instalacja NodeJS (domyślnie debian nie ma w swoich repozytoriach)

apt-get install curl -y
curl -sL https://deb.nodesource.com/setup | bash -

apt-get install -y nodejs

 


Instalacja GITa

apt-get install -y sudo build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake libkrb5-dev


Niestety GitLab chce GIT w wersji 1.7.10 lub wyższej. A niestety Debian tego nie ma. Trzeba skompilować ze źródeł:


sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential

Potem przechodzimy do folderu

cd /tmp
curl -L --progress https://www.kernel.org/pub/software/scm/git/git-2.1.2.tar.gz | tar xz
cd git-2.1.2/
./configure
make prefix=/usr/local all
sudo make prefix=/usr/local install



Trzeba później pamiętać o zmianie ścieżki w pliku konfiguracyjnym (zmienić -> bin_path na /usr/local/bin/git)!


Instalacja rubyiego

mkdir /tmp/ruby && cd /tmp/ruby
curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.6.tar.gz | tar xz
cd ruby-2.1.6
./configure --disable-install-rdoc
make
sudo make install

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

Dodanie nowego użytkownika:

sudo adduser --disabled-login --gecos 'GitLab' git

Baza danych - ja będę korzystał z MySQL ponieważ na poprzednim serwerze miałem MySQL

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

# Upewniamy się, czy wersja MySQL jest wyższa niż 5.5.14

mysql --version


# Logujemy się do MySQL podając wcześniejsze hasło

mysql -u root -p


# Tworzymy użytkownika dla GitLaba (prompta tzn 'mysql>' nie wpisujemy) -> ustawiamy mu hasło wpisując w $password swoje hasło

mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';
mysql> SET storage_engine=INNODB;
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `gitlabhq_production`.* TO 'git'@'localhost';
mysql> \q

Spróbujmy się teraz podłączyć jako git z wcześniej ustawionym dla niego hasłem

sudo -u git -H mysql -u git -p -D gitlabhq_production

Jeśli pokazał się prompt 'mysql>' to jest ok :)

mysql> \q


Dalsza instalacja (na zasadzie kopiuj-wklej ; więcej szczegółów co który krok robi opisane jest w instrukcji instalacji)

sudo apt-get install redis-server
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig
sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf
echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.conf
echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf

mkdir /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis

if [ -d /etc/tmpfiles.d ]; then
  echo 'd  /var/run/redis  0755  redis  redis  10d  -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi

sudo service redis-server restart
sudo usermod -aG redis git


cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-10-stable gitlab
cd /home/git/gitlab
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo -u git -H editor config/gitlab.yml

!! W tym momencie zmieniamy bin_path na /usr/local/bin/git !!


sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX tmp/

sudo -u git -H mkdir /home/git/gitlab-satellites
sudo chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
sudo chmod -R u+rwX  public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
nproc

Możemy ustawić liczbę workerów na tyle, ile wyszło nam w nproc

sudo -u git -H editor config/unicorn.rb

sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Ustawienia domyślne dla GITa

sudo -u git -H "/usr/local/bin/git" config --global user.name "Git"
sudo -u git -H "/usr/local/bin/git" config --global user.email "Git@localhost"
sudo -u git -H "/usr/local/bin/git" config --global core.autocrlf input


sudo -u git cp config/database.yml.mysql config/database.yml -> tutaj zmieniamy hasło do mysql
sudo -u git -H chmod o-rwx config/database.yml
sudo -u git -H bundle install --deployment --without development test postgres aws
sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.2] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

Jeśli wszystko się udało, powinniśmy zobaczyć na konsoli:

login.........root
password......5iveL!fe


Jeszcze kilka szlifów:

sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo cp lib/support/init.d/gitlab.default.example /etc/default/gitlab
sudo update-rc.d gitlab defaults 21
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
sudo /etc/init.d/gitlab restart



Konfiguracja nginxa

sudo apt-get install -y nginx

sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

ustawiamy domenę (server name)

sudo editor /etc/nginx/sites-available/gitlab

sudo service nginx restart


Czas sprawdzić całą konfigurację:

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


Jeśli wystąpią jakieś błędy, należy je poprawić.

Jakby sidekiq nie działał to należy wywołać polecenie:

sudo -u git -H bundle exec rake sidekiq:start RAILS_ENV=production


Teraz wracamy na serwer matkę.

Dopisujemy kolejny wirtualny host:

server {
        server_name git.DOMENA  www.git.DOMENA;

        location / {
                proxy_set_header X-Real_IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
                proxy_pass http://192.168.0.103:80/;
        }
}


sudo service nginx restart

I przekierowanie portu 22 na maszynę z GitLabem, aby móc komunikować się z GitLabem przez SSH a nie tylko HTTP:

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.103:22


Gotowe :)