I wanted to install gitlab on my shared hosting server at webfaction and here's how I did it. Be warned it's a memory hog. I couldn't get it below 450Mb. Also... this is for their newer 64 bit servers. I tried on a 32 bit server and didn't want to waste a day tracking down dependencies.
Create a new app (using python)
python
import xmlrpclib
MAIN_USER='ACCTNAME'
MAIN_PASS='ACCTPASS'
APP_NAME='gitlab'
server = xmlrpclib.ServerProxy('https://api.webfaction.com/')
session_id, account = server.login(MAIN_USER, MAIN_PASS)
server.create_app(session_id, APP_NAME, 'rails-4.1.1')
exit()
(required for gem install)
cd ~/webapps/gitlab
mkdir -p src
cd src
wget http://sqlite.org/2014/sqlite-autoconf-3080701.tar.gz
tar xvzf sqlite-autoconf-3080701.tar.gz
cd sqlite-autoconf-3080701
./configure --prefix=/home/ACCTNAME/webapps/gitlab
make
make install
python
import xmlrpclib
MAIN_USER='ACCTNAME'
MAIN_PASS='ACCTPASS'
DB_NAME='gitlab'
server = xmlrpclib.ServerProxy('https://api.webfaction.com/')
session_id, account = server.login(MAIN_USER, MAIN_PASS)
server.create_db(session_id, DB_NAME, 'postgresql', MAIN_PASS)
exit()
Create a custom app
python
import xmlrpclib
MAIN_USER='ACCTNAME'
MAIN_PASS='ACCTPASS'
APP_NAME='gitlab_redis'
server = xmlrpclib.ServerProxy('https://api.webfaction.com/')
session_id, account = server.login(MAIN_USER, MAIN_PASS)
server.create_app(session_id, APP_NAME, 'custom_app_with_port')
exit()
Make a note of the port number... you'll need it below. (eg. 99999)
cd ~/webapps/gitlab_redis/
mkdir src
cd src
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xvzf redis-2.8.17.tar.gz
cd redis-2.8.17
make PREFIX="/home/ACCTNAME/webapps/gitlab_redis"
make install
cd ~/webapps/gitlab_redis
cp src/redis-2.8.17/src/{redis-server,redis-cli,redis-sentinel,redis-benchmark} ./
cp src/redis-2.8.17/redis.conf ./
Edit the config and change the following...
daemonize yes
pidfile /home/ACCTNAME/webapps/gitlab_redis/redis.pid
port 99999
Start the server
./redis-server redis.conf
We need cmake installed to build some of the gitlab dependencies... we'll put this in our home directory
mkdir ~/src && cd ~/src
wget http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz
tar xvzf cmake-3.0.2.tar.gz
cd cmake-3.0.2
./bootstrap --prefix=/home/ACCTNAME/webapps/gitlab
gmake
gmake install
We also need libgit for the rugged ruby git bindings...
cd /home/ACCTNAME/src
wget https://github.com/libgit2/libgit2/archive/v0.21.2.tar.gz
mv v0.21.2.tar.gz libgit2-0.21.2.tar.gz
tar xvzf libgit_v0.21.2.tar.gz
cd libgit2-0.21.2
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/ACCTNAME
cmake --build . --target install
Now install rubygems for local gems- is this required???
cd /home/ACCTNAME/webapps/gitlab
export GEM_HOME=/home/ACCTNAME/webapps/gitlab/gems
export RUBYLIB=/home/ACCTNAME/webapps/gitlab/lib:$RUBYLIB
export PATH=/home/ACCTNAME/webapps/gitlab/bin:$PATH
cd /home/ACCTNAME/webapps/gitlab/src
wget http://production.cf.rubygems.org/rubygems/rubygems-2.4.2.tgz
tar xvzf rubygems-2.4.2.tgz
cd rubygems-2.4.2
ruby setup.rb install --prefix=/home/ACCTNAME/webapps/gitlab
We'll need libgit for some of the ruby bundles so set the ld path
export C_INCLUDE_PATH=/home/ACCTNAME/include:/home/ACCTNAME/webapps/gitlab/include:$C_INCLUDE_PATH
export LD_LIBRARY_PATH=/home/ACCTNAME/lib:/home/ACCTNAME/webapps/gitlab/lib:$LD_LIBRARY_PATH
gem2.0 install bundler
gem2.0 install sidekiq
gem2.0 install actionmailer
git clone https://github.com/gitlabhq/gitlabhq.git -b 7-4-stable gitlabhq
cd gitlabhq
Copy the example config files and edit them to suit our environment.
main config file...
cp config/gitlab.yml.example config/gitlab.yml
vi config/gitlab.yml
database config...
cp config/database.yml.postgresql config/database.yml
vi config/database.yml
redis config... (you want the url to start with redis://)
cp config/resque.yml.example config/resque.yml
vi config/resque.yml
Install all the dependencies... we're using postgresql so we want the without mysql option
bundle install --deployment --without development test mysql aws
Install gitlab-shell... remember the redis port!
bundle exec rake gitlab:shell:install[v2.0.1] REDIS_URL=redis://localhost:99999 RAILS_ENV=production
Run the setup... and set the initial password for admin login... you'll reset this when you login
bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=ACCTPASS
Check application status... ignore the errors about the init scripts... we'll fix that with our startup scripts
bundle exec rake gitlab:env:info RAILS_ENV=production
Compile Assets
bundle exec rake assets:precompile RAILS_ENV=production
Edit your nginx.conf to point it at gitlabhq - you need to change the root
and rails_env
values:
root /home/ACCTNAME/webapps/gitlab/gitlabhq/public;
rails_env production;
If you want to limit the number of passenger instance launched (equivalent to NUM_WEBS
option), you need to change these lines :
worker_processes 1;
passenger_max_pool_size 1;
In my case i change the default passenger_max_pool_size 2;
to passenger_max_pool_size 1;
to limit memory consumption.
Modify launching of nginx to add performance RUBY_GC_MALLOC_LIMIT
, see into bash file here /home/ACCTNAME/webapps/gitlab/bin/start
in my case...
Also adding the sidekiq startup because that normally gets done with the init scripts...
#!/bin/bash
cd /home/ACCTNAME/webapps/gitlab/gitlabhq
RUBY_GC_MALLOC_LIMIT=90000000 \
PATH=/home/ACCTNAME/webapps/gitlab/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ACCTNAME/bin \
RUBYLIB=/home/ACCTNAME/webapps/gitlab/lib:$RUBYLIB \
TMPDIR=/home/ACCTNAME/webapps/gitlab/tmp \
PASSENGER_TMPDIR=/home/ACCTNAME/webapps/gitlab/tmp \
GEM_HOME=/home/ACCTNAME/webapps/gitlab/gems \
bundle exec sidekiq -L /home/ACCTNAME/logs/user/sidekiq.log \
-d -P /home/ACCTNAME/webapps/gitlab/sidekiq.pid \
-e production -c 3 \
> /home/ACCTNAME/logs/user/sidekiq.log 2>&1
RUBY_GC_MALLOC_LIMIT=90000000 \
PATH=/home/ACCTNAME/webapps/gitlab/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ACCTNAME/bin \
RUBYLIB=/home/ACCTNAME/webapps/gitlab/lib:$RUBYLIB \
TMPDIR=/home/ACCTNAME/webapps/gitlab/tmp \
PASSENGER_TMPDIR=/home/ACCTNAME/webapps/gitlab/tmp \
GEM_HOME=/home/ACCTNAME/webapps/gitlab/gems \
/home/ACCTNAME/webapps/gitlab/nginx/sbin/nginx \
-p /home/ACCTNAME/webapps/gitlab/nginx/
and change the /home/ACCTNAME/webapps/gitlab/bin/stop
script to :
#!/bin/bash
pid_file=/home/ACCTNAME/webapps/gitlab/nginx/logs/nginx.pid
sidekiq_pid_file=/home/ACCTNAME/webapps/gitlab/sidekiq.pid
if [ -f $pid_file ]
then
kill $( cat $pid_file )
fi
if [ -f $sidekiq_pid_file ]
then
kill $( cat $sidekiq_pid_file )
fi
sleep 3
rm -rf /home/ACCTNAME/webapps/gitlab/tmp/*
Restart your app...
~/webapps/gitlab/bin/restart
This relies on sidekiq running. Gitlab will run without sidekiq but you won't have email sending and it's a pain to debug. So if your settings aren't working it's likely because sidekiq isn't running.
Out of the box on webfaction sendmail should work so unless you want to use smtp you can probably just configure the from email and be done.
Try this. It got me through the install process.