X
    Categories: Tutorials

Install GitLab on a CentOS Linux VPS with Nginx and MySQL

GitLab is a self-hosted git repository management system. It is used by more than 100,000 organizations worldwide. Today we will show you how to install GitLab on your CentOS VPS. For instructions about how to install GitLab on an Ubuntu VPS, you can check our Install GitLab on Debian tutorial.

To run GitLab on your server you will need to have Ruby 2.0 or 2.1 installed on your server. GitLab requires 2 CPU cores and 2GB of RAM so it can support up to 500 users. This makes our SSD 2 VPS hosting plan suitable for your needs. You will need to have MySQL or PostgreSL and Redis. Additional packages will be installed. When it comes to this tutorial, we are using our CentOS 6 64bit full template.

The first step is to add the required repositories to your system. You can do this using the following commands:

wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 https://www.fedoraproject.org/static/0608B895.txt
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget -O /etc/yum.repos.d/PUIAS_6_computational.repo https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/install/centos/PUIAS_6_computational.repo
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

Installing the required packages

Next thing you need to do is update all your system software, remove the unnecessary packages and install the required packages.

yum update -y
yum remove git httpd sendmail -y
yum -y install nginx zlib-devel openssl-devel git redis perl-CPAN ncurses-devel gdbm-devel glibc-devel tcl-devel curl-devel byacc db4-devel sqlite-devel libxml2 libxml2-devel libffi libffi-devel libxslt libxslt-devel libyaml libyaml-devel libicu libicu-devel system-config-firewall-tui sudo wget crontabs gettext perl-Time-HiRes cmake gettext-devel readline readline-devel libcom_err-devel.i686 libcom_err-devel.x86_64 expat-devel logwatch logrotate patch

Create a system user for GitLab:

adduser --shell /bin/bash --home-dir /home/git/ git

Now edit the ‘/etc/sudoers’ file and add ‘/usr/local/bin’ at the end of:

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

It should look like this:

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

Download Git source and extract it in your ‘/tmp’ directory. At the moment of writing, the latest version available is 2.1.3.

mkdir /tmp/git
cd /tmp/git
wget https://www.kernel.org/pub/software/scm/git/git-2.1.3.tar.gz 
tar -xzvf git-2.1.3.tar.gz
cd git-2.1.3/
./configure
make
make prefix=/usr/local install

After doing this, you will need to download and install Ruby on your CentOS VPS. At the moment of writing, the latest version available is 2.1.5.

mkdir /tmp/ruby
cd /tmp/ruby
wget ftp://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz 
tar -xzvf ruby-2.1.5.tar.gz
cd ruby-2.1.5
./configure --disable-install-rdoc
make
make prefix=/usr/local install

Once the installation of Ruby is completed, it is time to create a database. You can do this using the following commands:

mysql -u root -p 
CREATE USER 'git'@'localhost' IDENTIFIED BY 'PaSsWoRd';
CREATE DATABASE `gitlabdb` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT ALL ON `gitlabdb`.* TO 'git'@'localhost';

Do not forget to change ‘PaSsWoRd’ with a password of your choice.

Now, let’s configure Redis. Open the ‘/etc/redis.conf’ file with an editor of your choice and set ‘port 0’.

port 0

Then, add the following lines at the end of the file:

unixsocket /var/run/redis/redis.sock
unixsocketperm 0775

Restart the service and add git to the redis group:

service redis restart
usermod -aG redis git

Now, let’s install GitLab. We assume that you have a full root access to your Linux VPS so you should execute all these commands as root. Also, you can change the ‘7-4-stable’ to the latest stable version available.

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

Edit ‘config/gitlab.yml’ and follow the instructions at the top of the file.

sudo -u git -H nano config/gitlab.yml

Execute the commands:

chown -R git log/
chmod -R u+rwX log/
chown -R git tmp/
chmod -R u+rwX tmp/
chmod -R u+rwX tmp/sockets/
chmod -R u+rwX tmp/pids/
chmod -R u+rwX  public/uploads
sudo -u git -H mkdir /home/git/gitlab-satellites
chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

Then, copy the ‘config/unicorn.rb.example’ file to ‘config/unicorn.rb’. Edit the ‘config/unicorn.rb’ file and set the number of workers to match the number of cores on your CentOS VPS.

sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H nano config/unicorn.rb

Please note, ‘unicorn.rb’ and ‘gitlab.yml’ should contain the same information.

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

Now, copy ‘config/database.yml.mysql’ to ‘config/database.yml’ and edit the file. Please note that you will need to change the secure password with your ‘PaSsWoRd’ value.

sudo -u git cp config/database.yml.mysql config/database.yml
sudo -u git -H nano config/database.yml
sudo -u git -H chmod o-rwx config/database.yml

Install Bundler, gems, GitLab shell and initialize the database.

gem install bundler
cd /home/git/gitlab
sudo -u git -H bundle install --deployment --without development test postgres aws
sudo -u git -H bundle exec rake gitlab:shell:install[v2.1.0] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
restorecon -Rv /home/git/.ssh
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=YourPassword

Please change ‘YourPassword’ with your password. Also, you can review and modify the ‘config.yml’ file.

sudo -u git -H nano /home/git/gitlab-shell/config.yml

We are approaching the end of this tutorial. It is now time to install the init script. You can use the following commands:

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

Set the logrotate, check the status, compile the assets and then start the GitLab:

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
service gitlab start

OK, it is time to configure Nginx on your server and generate an SSL.

get -O /etc/nginx/conf.d/gitlab.conf https://gitlab.com/gitlab-org/gitlab-ce/raw/master/lib/support/nginx/gitlab-ssl
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl/
openssl genrsa -des3 -out gitlab.key 1024
openssl req -new -key gitlab.key -out gitlab.csr
cp gitlab.key gitlab.key.org
openssl rsa -in gitlab.key.org -out gitlab.key
openssl x509 -req -days 365 -in gitlab.csr -signkey gitlab.key -out gitlab.crt

Edit the ‘/etc/nginx/conf.d/gitlab.conf’ file to match your FQDN and your SSL path. Also, you will need to comment the following lines:

#  listen [::]:80 default_server;
#  listen [::]:443 ssl default_server;

Finally, run the following commands:

usermod -a -G git nginx
chmod g+rx /home/git/
service nginx start
chkconfig gitlab on
chkconfig nginx on
chkconfig redis on

That’s it. If you followed closely every single step of this tutorial, you should be able to access your newly installed GitLab using your domain name or your CentOS VPS IP address. For example, if your IP address is 12.34.56.78 you need to enter https://12.34.56.78 .

Of course you don’t have to do any of this if you use one of our Linux VPS hosting services, in which case you can simply ask our expert Linux admins to install GitLab for you. They are available 24×7 and will take care of your request immediately.

PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.