Support #814
Updated by Daniel Curtis over 8 years ago
{{>toc}}
This is a guide on installing GitLab 8.5 with continuous integration on FreeBSD 10.
h2. Prepare the Environment
* Make sure the system is up to date:
<pre>
pkg update && pkg upgrade
</pre>
h2. Install PostgreSQL
* Initialize, start, and enable postgresql at boot:
<pre>
echo 'postgresql_enable="YES"' >> /etc/rc.conf
service postgresql initdb
service postgresql start
</pre>
* Log in to postgresql user account
<pre>
su - pgsql
</pre>
* Connect to postgresql database
<pre>
psql -d template1
</pre>
#* Create a user for GitLab:
<pre>
CREATE USER git WITH PASSWORD 'SuperSecretPassword' CREATEDB SUPERUSER;
</pre>
#* Create the GitLab production database & grant all privileges on database
<pre>
CREATE DATABASE gitlabhq_production OWNER git encoding='UTF8';
</pre>
#* Quit the database session
<pre>
\q
exit
</pre>
h2. Install Redis
* Install redis:
<pre>
pkg install redis
</pre>
* Back up the original Redis config file:
<pre>
cp /usr/local/etc/redis.conf /usr/local/etc/redis.conf.orig
</pre>
* Disable Redis listening on TCP by setting 'port' to 0
<pre>
sed -i '' -e 's/^port .*/port 0/' /usr/local/etc/redis.conf
</pre>
* Enable Redis socket
<pre>
echo 'unixsocket /var/run/redis/redis.sock' >> /usr/local/etc/redis.conf
</pre>
* Grant permission to the socket to all members of the redis group
<pre>
echo 'unixsocketperm 770' >> /usr/local/etc/redis.conf
</pre>
* Create the directory which contains the socket
<pre>
mkdir -p /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis
</pre>
* Start and enable redis at boot:
<pre>
echo 'redis_enable="YES"' >> /etc/rc.conf
service redis start
</pre>
h2. Install GitLab 8
* Install gitlab:
<pre>
pkg install gitlab
</pre>
* Add git user to redis group
<pre>
pw groupmod redis -m git
</pre>
* Go to GitLab installation folder
<pre>
cd /usr/local/www/gitlab
</pre>
* Update GitLab config file, follow the directions at the top of the file
<pre>
vi config/gitlab.yml
</pre>
* Find number of cores
<pre>
sysctl hw.ncpu
</pre>
* Enable cluster mode if you expect to have a high load instance, set the number of workers to at least the number of cores:
<pre>
vi config/unicorn.rb
</pre>
* Edit the gitlab-shell config file:
<pre>
vi /usr/local/share/gitlab-shell/config.yml
</pre>
#* And make sure the following configuration parameters are set:
<pre>
repos_path: "/usr/home/git/repositories"
redis:
bin: /usr/local/bin/redis-cli
</pre>
* Create the uploads directory and harden its permissions:
<pre>
sudo -u git mkdir /usr/local/www/gitlab/public/uploads
chmod 700 /usr/local/www/gitlab/public/uploads
</pre>
* Configure Git global settings for git user:
<pre>
git config --global core.autocrlf input
</pre>
* Disable 'git gc --auto' because GitLab already runs 'git gc' when needed:
<pre>
git config --global gc.auto 0
</pre>
* Configure GitLab DB settings
<pre>
vi config/database.yml
</pre>
* Initialize database and activate advanced features:
<pre>
rake gitlab:setup RAILS_ENV=production
</pre>
*# Type *yes* to create the database tables.
*# When done you see _Administrator account created:_
* Check if GitLab and its environment are configured correctly:
<pre>
rake gitlab:env:info RAILS_ENV=production
</pre>
* Compile Assets
<pre>
rake assets:precompile RAILS_ENV=production
</pre>
* Start and enable gitlab at boot:
<pre>
echo 'gitlab_enable="YES"' >> /etc/rc.conf
service gitlab start
</pre>
h3. Generate SSH keys
* Switch to the gitlab user:
<pre>
su - git
</pre>
* Generate an SSH key pair:
<pre>
shs-keygen -t ed25519
</pre>
* And link the .ssh folder into the git home directory:
<pre>
ln -s /usr/local/git/.ssh /home/git/
</pre>
h2. Install Nginx
* Install nginx:
<pre>
pkg install nginx
</pre>
* Start and enable nginx at boot:
<pre>
echo 'nginx_enable="YES"' >> /etc/rc.conf
service nginx start
</pre>
* Create a configuration directory to make managing individual server blocks easier
<pre>
mkdir /usr/local/etc/nginx/conf.d
</pre>
* Edit the main nginx config file:
<pre>
vi /usr/local/etc/nginx/nginx.conf
</pre>
#* And strip down the config file and add the include statement at the end to make it easier to handle various server blocks:
<pre>
worker_processes 1;
error_log /var/log/nginx-error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Load config files from the /etc/nginx/conf.d directory
include /usr/local/etc/nginx/conf.d/*.conf;
}
</pre>
* Create the gitlab nginx config:
<pre>
vi /usr/local/etc/nginx/conf.d/gitlab.example.com.conf
</pre>
#* And add the following:
<pre>
upstream gitlab-workhorse {
server unix:/usr/local/www/gitlab/tmp/sockets/gitlab-workhorse.socket fail_timeout=0;
}
server {
listen 80;
server_name gitlab.example.com;
server_tokens off;
root /usr/local/www/gitlab/public;
access_log /var/log/gitlab.example.com-access.log;
error_log /var/log/gitlab.example.com-error.log;
location / {
client_max_body_size 0;
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://gitlab-workhorse;
}
}
</pre>
h2. Resources
* https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md
* https://github.com/t-zuehlsdorff/gitlabhq/blob/master/doc/install/installation-freebsd.md