GitLab CE (Community Edition) is essentially a self-hosted opensource clone of the online Git code repository service GitHub.
The main installation guide for GitLab was written for installation on Ubuntu/Debian operating systems.
This guide covers the steps required for a fresh install of GitLab production server on CentOS 6.5 with Percona Server 5.6 (drop-in replacement for MySQL®).
1. Install the EPEL and RPMForge packages,and update CentOS 6.5.
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# yum -y update
2. Enable the RPMForge Extras. Open the RPMForge repo.
nano /etc/yum.repos.d/rpmforge.repo
and change enabled = 0
under [rpmforge-extras]
to enabled = 1
3. Add the EPEL SCL (Software Collections) repo to your CentOS installation.
# wget -P /etc/yum.repos.d http://people.redhat.com/bkabrda/scl_ruby193.repo
4. Then install the Development tools.
# yum -y groupinstall 'Development Tools'
5. Install the Percona repo and Percona Server 5.6
# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
# yum -y install Percona-Server-client-56 Percona-Server-server-56 Percona-Server-devel-56
6. Ok. Now install ruby193, git, redis and nginx (as well as a few other required packages). And start all the services.
(* The install command below should cover all the packages required to enable a smooth install of GitLab. However, depending on your base install of CentOS 6.5, you may require some extra packages not listed below. The installation process is pretty good at making clear what you're missing if anything.)
# service mysql start
# service redis start
# service nginx start
# chkconfig mysql on
# chkconfig redis on
# chkconfig nginx on
7. Add the user git and set the git globals.
# adduser -r -s /bin/bash -c 'Gitlab user' -m -d /home/git git
# chmod o+x /home/git
# su - git
[git@gitlab ~]$ git config --global user.name "GitLab"
[git@gitlab ~]$ git config --global user.email "gitlab@localhost"
[git@gitlab ~]$ git config --global core.autocrlf input
8. Still as the git user, clone the git repos.
[git@gitlab ~]$ git clone https://github.com/gitlabhq/gitlab-shell.git
[git@gitlab ~]$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
9. Extend your .bashrc ( [git@gitlab ~]$ nano .bashrc
) to have the following content which will load our scl environment for us when we login.
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
source /opt/rh/ruby193/enable
# User specific aliases and functions
10. Make sure the paths are right. You can test this by executing env
.
11. Logout and login again as user gitlab ( su - git
). If everything went fine you should be able to do this.
[git@gitlab ~]$ which ruby
/opt/rh/ruby193/root/usr/bin/ruby
[git@gitlab ~]$ ruby --version
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]
12. As git, cd into the git-shell dir and checkout version 1.7.1
[git@gitlab ~]$ cd gitlab-shell/
[git@gitlab gitlab-shell]$ git checkout v1.8.0
13. Copy the file config.yml.example
to config.yml
in the git-shell directory
cp config.yml.example config.yml
14. Install gitshell.
[git@gitlab gitlab-shell]$ ./bin/install
15. IMPORTANT. Do this still as the git user! Checkout gitlab 6.
[git@gitlab ~]$ cd gitlab
[git@gitlab gitlab]$ git checkout 6-6-stable
16. Now configure Gitlab and install the gems.
[git@gitlab gitlab]$ gem install json
[git@gitlab gitlab]$ gem install charlock_holmes --version '0.6.9.4'
17. Time to configure GitLab. Copy the example GitLab config and set the necessary file permissions, ownership, and create the required directories using the following commands.
[git@gitlab gitlab]$ cp /home/git/gitlab/config/gitlab.yml{.example,}
[git@gitlab gitlab]$ sed -i 's/localhost/gitlab.local.domb.com/g' /home/git/gitlab/config/gitlab.yml
[git@gitlab gitlab]$ chown -R git /home/git/gitlab/log/
[git@gitlab gitlab]$ chown -R git /home/git/gitlab/tmp/
[git@gitlab gitlab]$ chmod -R u+rwX /home/git/gitlab/log/
[git@gitlab gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/
[git@gitlab gitlab]$ mkdir /home/git/gitlab-satellites
[git@gitlab gitlab]$ mkdir /home/git/gitlab/tmp/pids/
[git@gitlab gitlab]$ mkdir /home/git/gitlab/tmp/sockets/
[git@gitlab gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/pids/
[git@gitlab gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/sockets/
[git@gitlab gitlab]$ mkdir /home/git/gitlab/public/uploads
[git@gitlab gitlab]$ chmod -R u+rwX /home/git/gitlab/public/uploads
18. Update your /home/git/gitlab/config/gitlab.yml
file with your host
(e.g. mygitlab.example.com), and email address ( email_from
).
19. Copy the /home/git/gitlab/config/unicorn.rb.example
to /home/git/gitlab/config/unicorn.rb
and configure it by uncommenting the follow section.
72 old_pid = "#{server.config[:pid]}.oldbin"
73 if old_pid != server.pid
74 begin
75 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
76 Process.kill(sig, File.read(old_pid).to_i)
77 rescue Errno::ENOENT, Errno::ESRCH
78 end
79 end
20. Change the user and password in the /home/git/gitlab/config/database.yml
file (create this file or rename the existing database.yml.mysql
file).
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: gitlabhq_production
pool: 5
username: gitlab
password: "mysql_password_here"
# host: localhost
# socket: /tmp/mysql.sock
21. Create a MySQL User in Percona
[git@gitlab gitlab]$ mysql -u root
# Create a user for GitLab. (change 'mysql_password_here' to a real password)
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'mysql_password_here';
# 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 permissions on the table.
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
22. Check you can login as the gitlab user.
[git@gitlab gitlab]$ mysql -u gitlab -p -D gitlabhq_production
23. As root, create a gitlab.conf
nginx config file # nano /etc/nginx/conf.d/gitlab.conf
, and add the following to it.
upstream gitlab {
server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}
server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a better
server_name gitlab.local.domb.com; # e.g., server_name mygitlab.example.com;
server_tokens off; # don't show the version number, a security best practice
root /home/git/gitlab/public;
# individual nginx logs for this gitlab vhost
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;
location / {
# serve static files from defined root folder;.
# @gitlab is a named location for the upstream fallback, see below
try_files $uri $uri/index.html $uri.html @gitlab;
}
# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://gitlab;
}
}
24. (You may need to) Disable the nginx default.conf
config file, and restart nginx.
# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/defualt.conf.off
# service nginx restart
25. From the gitlab dir execute the below to enable support with MySQL/Percona.
[git@gitlab gitlab]$ bundle install --deployment --without development test postgres
[git@gitlab gitlab]$ bundle exec rake gitlab:setup RAILS_ENV=production
# Type 'yes' to create the database tables.
26. If everything installed without any errors you'll see:
Administrator account created:
[email protected]
password......5iveL!fe
27. As root get the init script.
# cp /home/git/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab
# chmod +x /etc/init.d/gitlab
28. If you want you can now configure the mail server. Open /etc/mail/sendmail.mc
and add or modify the following lines.
Add:
define(`SMART_HOST', `smtp.example.com')dnl
Comment
dnl EXPOSED_USER(`root')dnl
29. Restart sendmail # service sendmail restart
30. Forward all email to a central mail address.
# echo [email protected] > /root/.forward
# chown root /root/.forward
# chmod 600 /root/.forward
# echo [email protected] > /home/git/.forward
# chown git /home/git/.forward
# chmod 600 /home/git/.forward
31. Your done. Start up your server
# service gitlab start
# service nginx restart
32. You can now browse to your GitLab URL http://yourgitlabserver.com
and login using the username and password presented during the installation.
Sources:
GitLab 6.0 (6.x) installation instructions with SCL for RHEL 6.4 and CentOS 6.4
GitLab.org - installation.md
If you spot any errors above, please do drop me a comment below.