Last active
December 25, 2015 23:09
-
-
Save razielgn/7055468 to your computer and use it in GitHub Desktop.
Gitlab 6.8 files for Puma & Rubinius 2.2.x
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/sh | |
# GITLAB | |
# Maintainer: @randx | |
# Authors: [email protected], @randx | |
# Changes to support Rubinius: @razielgn | |
### 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 | |
### | |
# DO NOT EDIT THIS FILE! | |
# This file will be overwritten on update. | |
# Instead add/change your variables in /etc/default/gitlab | |
# An example defaults file can be found in lib/support/init.d/gitlab.default.example | |
### | |
### Environment variables | |
RAILS_ENV="production" | |
# Script variable names should be lower-case not to conflict with | |
# internal /bin/sh variables such as PATH, EDITOR or SHELL. | |
app_user="git" | |
app_root="/home/$app_user/gitlab" | |
pid_path="$app_root/tmp/pids" | |
socket_path="$app_root/tmp/sockets" | |
web_server_pid_path="$pid_path/puma.pid" | |
sidekiq_pid_path="$pid_path/sidekiq.pid" | |
# Read configuration variable file if it is present | |
test -f /etc/default/gitlab && . /etc/default/gitlab | |
# Switch to the app_user if it is not he/she who is running the script. | |
if [ "$USER" != "$app_user" ]; then | |
eval su -l - "$app_user" -c $(echo \")$0 "$@"$(echo \"); exit; | |
fi | |
# Switch to the gitlab path, exit on failure. | |
if ! cd "$app_root" ; then | |
echo "Failed to cd into $app_root, exiting!"; exit 1 | |
fi | |
### Init Script functions | |
## Gets the pids from the files | |
check_pids(){ | |
if ! mkdir -p "$pid_path"; then | |
echo "Could not create the path $pid_path needed to store the pids." | |
exit 1 | |
fi | |
# If there exists a file which should hold the value of the Puma pid: read it. | |
if [ -f "$web_server_pid_path" ]; then | |
wpid=$(cat "$web_server_pid_path") | |
else | |
wpid=0 | |
fi | |
if [ -f "$sidekiq_pid_path" ]; then | |
spid=$(cat "$sidekiq_pid_path") | |
else | |
spid=0 | |
fi | |
} | |
## Called when we have started the two processes and are waiting for their pid files. | |
wait_for_pids(){ | |
# We are sleeping a bit here mostly because sidekiq is slow at writing it's pid | |
i=0; | |
while [ ! -f $web_server_pid_path -o ! -f $sidekiq_pid_path ]; do | |
sleep 0.1; | |
i=$((i+1)) | |
if [ $((i%10)) = 0 ]; then | |
echo -n "." | |
elif [ $((i)) = 301 ]; then | |
echo "Waited 30s for the processes to write their pids, something probably went wrong." | |
exit 1; | |
fi | |
done | |
echo | |
} | |
# We use the pids in so many parts of the script it makes sense to always check them. | |
# Only after start() is run should the pids change. Sidekiq sets it's own pid. | |
check_pids | |
## Checks whether the different parts of the service are already running or not. | |
check_status(){ | |
check_pids | |
# If the web server is running kill -0 $wpid returns true, or rather 0. | |
# Checks of *_status should only check for == 0 or != 0, never anything else. | |
if [ $wpid -ne 0 ]; then | |
kill -0 "$wpid" 2>/dev/null | |
web_status="$?" | |
else | |
web_status="-1" | |
fi | |
if [ $spid -ne 0 ]; then | |
kill -0 "$spid" 2>/dev/null | |
sidekiq_status="$?" | |
else | |
sidekiq_status="-1" | |
fi | |
if [ $web_status = 0 -a $sidekiq_status = 0 ]; then | |
gitlab_status=0 | |
else | |
# http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html | |
# code 3 means 'program is not running' | |
gitlab_status=3 | |
fi | |
} | |
## Check for stale pids and remove them if necessary. | |
check_stale_pids(){ | |
check_status | |
# If there is a pid it is something else than 0, the service is running if | |
# *_status is == 0. | |
if [ "$wpid" != "0" -a "$web_status" != "0" ]; then | |
echo "Removing stale Puma web server pid. This is most likely caused by the web server crashing the last time it ran." | |
if ! rm "$web_server_pid_path"; then | |
echo "Unable to remove stale pid, exiting." | |
exit 1 | |
fi | |
fi | |
if [ "$spid" != "0" -a "$sidekiq_status" != "0" ]; then | |
echo "Removing stale Sidekiq job dispatcher pid. This is most likely caused by Sidekiq crashing the last time it ran." | |
if ! rm "$sidekiq_pid_path"; then | |
echo "Unable to remove stale pid, exiting" | |
exit 1 | |
fi | |
fi | |
} | |
## If no parts of the service is running, bail out. | |
exit_if_not_running(){ | |
check_stale_pids | |
if [ "$web_status" != "0" -a "$sidekiq_status" != "0" ]; then | |
echo "GitLab is not running." | |
exit | |
fi | |
} | |
## Starts Puma and Sidekiq if they're not running. | |
start_gitlab() { | |
check_stale_pids | |
if [ "$web_status" != "0" -a "$sidekiq_status" != "0" ]; then | |
echo -n "Starting both the GitLab Puma and Sidekiq" | |
elif [ "$web_status" != "0" ]; then | |
echo -n "Starting GitLab Puma" | |
elif [ "$sidekiq_status" != "0" ]; then | |
echo -n "Starting GitLab Sidekiq" | |
fi | |
# Then check if the service is running. If it is: don't start again. | |
if [ "$web_status" = "0" ]; then | |
echo "The Puma web server already running with pid $wpid, not restarting." | |
else | |
# Remove old socket if it exists | |
rm -f "$socket_path"/gitlab.socket 2>/dev/null | |
# Start the web server | |
RAILS_ENV=$RAILS_ENV script/web start | |
fi | |
# If sidekiq is already running, don't start it again. | |
if [ "$sidekiq_status" = "0" ]; then | |
echo "The Sidekiq job dispatcher is already running with pid $spid, not restarting" | |
else | |
RAILS_ENV=$RAILS_ENV script/background_jobs start & | |
fi | |
# Wait for the pids to be planted | |
wait_for_pids | |
# Finally check the status to tell wether or not GitLab is running | |
print_status | |
} | |
## Asks the Puma and the Sidekiq if they would be so kind as to stop, if not kills them. | |
stop_gitlab() { | |
exit_if_not_running | |
if [ "$web_status" = "0" -a "$sidekiq_status" = "0" ]; then | |
echo -n "Shutting down both Puma and Sidekiq" | |
elif [ "$web_status" = "0" ]; then | |
echo -n "Shutting down Puma" | |
elif [ "$sidekiq_status" = "0" ]; then | |
echo -n "Shutting down Sidekiq" | |
fi | |
# If the Puma web server is running, tell it to stop; | |
if [ "$web_status" = "0" ]; then | |
RAILS_ENV=$RAILS_ENV script/web stop | |
fi | |
# And do the same thing for the Sidekiq. | |
if [ "$sidekiq_status" = "0" ]; then | |
RAILS_ENV=$RAILS_ENV script/background_jobs stop | |
fi | |
# If something needs to be stopped, lets wait for it to stop. Never use SIGKILL in a script. | |
while [ "$web_status" = "0" -o "$sidekiq_status" = "0" ]; do | |
sleep 1 | |
check_status | |
printf "." | |
if [ "$web_status" != "0" -a "$sidekiq_status" != "0" ]; then | |
printf "\n" | |
break | |
fi | |
done | |
sleep 1 | |
# Cleaning up unused pids | |
rm "$web_server_pid_path" 2>/dev/null | |
# rm "$sidekiq_pid_path" # Sidekiq seems to be cleaning up it's own pid. | |
print_status | |
} | |
## Prints the status of GitLab and it's components. | |
print_status() { | |
check_status | |
if [ "$web_status" != "0" -a "$sidekiq_status" != "0" ]; then | |
echo "GitLab is not running." | |
return | |
fi | |
if [ "$web_status" = "0" ]; then | |
echo "The GitLab Puma web server with pid $wpid is running." | |
else | |
printf "The GitLab Puma web server is \033[31mnot running\033[0m.\n" | |
fi | |
if [ "$sidekiq_status" = "0" ]; then | |
echo "The GitLab Sidekiq job dispatcher with pid $spid is running." | |
else | |
printf "The GitLab Sidekiq job dispatcher is \033[31mnot running\033[0m.\n" | |
fi | |
if [ "$web_status" = "0" -a "$sidekiq_status" = "0" ]; then | |
printf "GitLab and all its components are \033[32mup and running\033[0m.\n" | |
fi | |
} | |
## Tells puma to reload it's config and Sidekiq to restart | |
reload_gitlab(){ | |
exit_if_not_running | |
if [ "$wpid" = "0" ];then | |
echo "The GitLab Puma Web server is not running thus its configuration can't be reloaded." | |
exit 1 | |
fi | |
printf "Reloading GitLab Puma configuration... " | |
RAILS_ENV=$RAILS_ENV script/web reload | |
echo "Done." | |
echo "Restarting GitLab Sidekiq since it isn't capable of reloading its config..." | |
RAILS_ENV=$RAILS_ENV script/background_jobs restart | |
wait_for_pids | |
print_status | |
} | |
## Restarts Sidekiq and Puma | |
restart_gitlab(){ | |
check_status | |
if [ "$web_status" = "0" -o "$sidekiq_status" = "0" ]; then | |
stop_gitlab | |
fi | |
start_gitlab | |
} | |
### Finally the input handling. | |
case "$1" in | |
start) | |
start_gitlab | |
;; | |
stop) | |
stop_gitlab | |
;; | |
restart) | |
restart_gitlab | |
;; | |
reload|force-reload) | |
reload_gitlab | |
;; | |
status) | |
print_status | |
exit $gitlab_status | |
;; | |
*) | |
echo "Usage: service gitlab {start|stop|restart|reload|status}" | |
exit 1 | |
;; | |
esac | |
exit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env puma | |
# The directory to operate out of. | |
# | |
# The default is the current directory. | |
# | |
directory '/home/git/gitlab' | |
# Use a object or block as the rack application. This allows the | |
# config file to be the application itself. | |
# | |
# app do |env| | |
# puts env | |
# | |
# body = 'Hello, World!' | |
# | |
# [200, { 'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }, [body]] | |
# end | |
# Load “path” as a rackup file. | |
# | |
# The default is “config.ru”. | |
# | |
# rackup '/u/apps/lolcat/config.ru' | |
# Set the environment in which the rack's app will run. The value must be a string. | |
# | |
# The default is “development”. | |
# | |
# environment 'production' | |
# Daemonize the server into the background. Highly suggest that | |
# this be combined with “pidfile” and “stdout_redirect”. | |
# | |
# The default is “false”. | |
# | |
daemonize true | |
# daemonize false | |
# Store the pid of the server in the file at “path”. | |
# | |
pidfile '/home/git/gitlab/tmp/pids/puma.pid' | |
# Use “path” as the file to store the server info state. This is | |
# used by “pumactl” to query and control the server. | |
# | |
# state_path '/u/apps/lolcat/tmp/pids/puma.state' | |
# Redirect STDOUT and STDERR to files specified. The 3rd parameter | |
# (“append”) specifies whether the output is appended, the default is | |
# “false”. | |
# | |
stdout_redirect '/home/git/gitlab/log/unicorn.stdout.log', '/home/git/gitlab/log/unicorn.stderr.log', true | |
# stdout_redirect '/u/apps/lolcat/log/stdout', '/u/apps/lolcat/log/stderr', true | |
# Disable request logging. | |
# | |
# The default is “false”. | |
# | |
# quiet | |
# Configure “min” to be the minimum number of threads to use to answer | |
# requests and “max” the maximum. | |
# | |
# The default is “0, 16”. | |
# | |
threads 16, 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://127.0.0.1:8080' | |
bind 'unix:///home/git/gitlab/tmp/sockets/gitlab.socket' | |
# bind 'unix:///var/run/puma.sock?umask=0777' | |
# bind 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert' | |
# 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 | |
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! | |
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 | |
# 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 } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
cd $(dirname $0)/.. | |
app_root=$(pwd) | |
puma_pidfile="$app_root/tmp/pids/puma.pid" | |
puma_config="$app_root/config/puma.rb" | |
function get_puma_pid | |
{ | |
local pid=$(cat $puma_pidfile) | |
if [ -z $pid ] ; then | |
echo "Could not find a PID in $puma_pidfile" | |
exit 1 | |
fi | |
puma_pid=$pid | |
} | |
function start | |
{ | |
bundle exec puma -C $puma_config -e $RAILS_ENV | |
} | |
function stop | |
{ | |
get_puma_pid | |
kill -QUIT $puma_pid | |
} | |
function reload | |
{ | |
get_puma_pid | |
kill -USR2 $puma_pid | |
} | |
case "$1" in | |
start) | |
start | |
;; | |
stop) | |
stop | |
;; | |
reload) | |
reload | |
;; | |
*) | |
echo "Usage: RAILS_ENV=your_env $0 {start|stop|reload}" | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment