diff --git a/app-server/README.md b/app-server/README.md new file mode 100644 index 0000000..cd53f54 --- /dev/null +++ b/app-server/README.md @@ -0,0 +1 @@ +Alternative configuration file for the `puma` application server. Copy it under `/home/git/gitlab/config/` and rename it to `puma.rb`. diff --git a/app-server/puma.rb b/app-server/puma.rb new file mode 100644 index 0000000..8d7133f --- /dev/null +++ b/app-server/puma.rb @@ -0,0 +1,96 @@ +#!/usr/bin/env puma + +# Start Puma with next command: +# RAILS_ENV=production bundle exec puma -C ./config/puma.rb + +# uncomment and customize to run in non-root path +# note that config/gitlab.yml web path should also be changed +# ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab" + +application_path = '/home/git/gitlab' +directory application_path +environment 'production' +daemonize true +pidfile "#{application_path}/tmp/pids/puma.pid" +state_path "#{application_path}/tmp/pids/puma.state" +stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log" + +# Configure “min” to be the minimum number of threads to use to answer +# requests and “max” the maximum. +# +# The default is “0, 16”. +# +# threads 0, 16 + +# Bind the server to “url”. “tcp://”, “unix://” and “ssl://” are the only +# accepted protocols. +# +# +# The default is “tcp://0.0.0.0:9292”. +# +# bind 'tcp://0.0.0.0:9292' +# bind 'unix:///var/run/puma.sock' +# bind 'unix:///var/run/puma.sock?umask=0777' +# bind 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert' +# +## Comment the next line if you use apache. +bind "unix://#{application_path}/tmp/sockets/gitlab.socket" + +# Instead of “bind 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'” you +# can also use the “ssl_bind” option. +# +# ssl_bind '127.0.0.1', '9292', { key: path_to_key, cert: path_to_cert } + +# Code to run before doing a restart. This code should +# close log files, database connections, etc. +# +# This can be called multiple times to add code each time. +# +# on_restart do +# puts 'On restart...' +# end + +# Command to use to restart puma. This should be just how to +# load puma itself (ie. 'ruby -Ilib bin/puma'), not the arguments +# to puma, as those are the same as the original process. +# +# restart_command '/u/app/lolcat/bin/restart_puma' + +# === Cluster mode === + +# How many worker processes to run. +# +# The default is “0”. +# +# workers 2 + +# GitLab cluster mode recommendations +# If you have more than 1 GB RAM, uncomment one of the following lines: +# +# workers 2 # if you have at least 1.5 GB RAM +# workers 3 # if you have at least 2 GB RAM +# workers 4 # if you have at least 2.5 GB RAM + +# Code to run when a worker boots to setup the process before booting +# the app. +# +# This can be called multiple times to add hooks. +# +# on_worker_boot do +# puts 'On worker boot...' +# end + +# === Puma control rack application === + +# Start the puma control rack application on “url”. This application can +# be communicated with to control the main server. Additionally, you can +# provide an authentication token, so all requests to the control server +# will need to include that token as a query parameter. This allows for +# simple authentication. +# +# Check out https://github.com/puma/puma/blob/master/lib/puma/app/status.rb +# to see what the app has available. +# +# activate_control_app 'unix:///var/run/pumactl.sock' +# activate_control_app 'unix:///var/run/pumactl.sock', { auth_token: '12345' } +# activate_control_app 'unix:///var/run/pumactl.sock', { no_token: true } diff --git a/init/sysvinit/debian/README.md b/init/sysvinit/debian/README.md new file mode 100644 index 0000000..9413a60 --- /dev/null +++ b/init/sysvinit/debian/README.md @@ -0,0 +1,9 @@ +Alternative sysvinit file for puma. Tested on Debian/Ubuntu but this should work for all Debian based distros. Make sure you have the `puma` gem installed and `puma.rb` in `/home/git/gitlab/config/`. + +Get `gitlab-puma` in your `/etc/init.d/` directory: + + wget -O /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init/sysvinit/debian/gitlab-puma + +Then start the service with: + + service gitlab start diff --git a/init/sysvinit/debian/gitlab-puma b/init/sysvinit/debian/gitlab-puma new file mode 100644 index 0000000..2db37ed --- /dev/null +++ b/init/sysvinit/debian/gitlab-puma @@ -0,0 +1,140 @@ +#! /bin/bash + +# GITLAB +# Maintainer: @randx +# App Version: 5.2 + +### BEGIN INIT INFO +# Provides: gitlab +# Required-Start: $local_fs $remote_fs $network $syslog redis-server +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: GitLab git repository management +# Description: GitLab git repository management +### END INIT INFO + + +APP_ROOT="/home/git/gitlab" +APP_USER="git" +DAEMON_OPTS="-C $APP_ROOT/config/puma.rb" +PID_PATH="$APP_ROOT/tmp/pids" +SOCKET_PATH="$APP_ROOT/tmp/sockets" +SOCKET_FILE="$SOCKET_PATH/gitlab.socket" +WEB_SERVER_PID="$PID_PATH/puma.pid" +SIDEKIQ_PID="$PID_PATH/sidekiq.pid" +STOP_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:stop" +START_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:start" +NAME="gitlab" +DESC="GitLab service" + +check_pid(){ + if [ -f $WEB_SERVER_PID ]; then + PID=`cat $WEB_SERVER_PID` + SPID=`cat $SIDEKIQ_PID` + STATUS=`ps aux | grep $PID | grep -v grep | wc -l` + else + STATUS=0 + PID=0 + fi +} + +execute() { + sudo -u $APP_USER -H bash -l -c "$1" +} + +start() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + # Program is running, exit with error code 1. + echo "Error! $DESC $NAME is currently running!" + exit 1 + else + if [ `whoami` = root ]; then + ! [ -e $SOCKET_FILE ] || execute "rm $SOCKET_FILE" + execute "RAILS_ENV=production bundle exec puma $DAEMON_OPTS" + execute "mkdir -p $PID_PATH && $START_SIDEKIQ > /dev/null 2>&1 &" + echo "$DESC started" + fi + fi +} + +stop() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + ## Program is running, stop it. + kill -QUIT `cat $WEB_SERVER_PID` + ! [ -e $SOCKET_FILE ] || execute "rm $SOCKET_FILE" + execute "mkdir -p $PID_PATH && $STOP_SIDEKIQ > /dev/null 2>&1 &" + rm "$WEB_SERVER_PID" >> /dev/null + echo "$DESC stopped" + else + ## Program is not running, exit with error. + echo "Error! $DESC is not started!" + exit 1 + fi +} + +restart() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + echo "Restarting $DESC..." + kill -USR2 `cat $WEB_SERVER_PID` + execute "mkdir -p $PID_PATH && $STOP_SIDEKIQ > /dev/null 2>&1" + if [ `whoami` = root ]; then + execute "mkdir -p $PID_PATH && $START_SIDEKIQ > /dev/null 2>&1 &" + fi + echo "$DESC restarted." + else + echo "Error, $NAME not running!" + exit 1 + fi +} + +status() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + echo "$DESC / Puma with PID $PID is running." + echo "$DESC / Sidekiq with PID $SPID is running." + else + echo "$DESC is not running." + exit 1 + fi +} + +## Check to see if we are running as root first. +## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html +if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" + exit 1 +fi + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + reload|force-reload) + echo -n "Reloading $NAME configuration: " + kill -HUP `cat $PID` + echo "done." + ;; + status) + status + ;; + *) + echo "Usage: sudo service gitlab {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac + +exit 0