#!/bin/bash ### BEGIN INIT INFO # Provides: ruling.digital # Required-Start: $network # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start orbit daemon at boot time # Description: Start orbit daemon at boot time ### END INIT INFO ORBIT_USER=rulingcom if [ -f "/home/$ORBIT_USER/.rvm/scripts/rvm" ]; then source /home/$ORBIT_USER/.rvm/scripts/rvm rvm use default else if [ -f "/etc/profile.d/rvm.sh" ]; then source /etc/profile.d/rvm.sh elif [ "$1" != "setup" ]; then echo "" echo "-----------------------------------------------------" echo "Orbit server dependencies is missing. Please run setup first." echo "command: service orbit setup" echo "-----------------------------------------------------" echo "" exit 0; fi fi ORBIT_SITES=`pwd` ORBIT_GIT='http://ruling.digital/git' ORBIT_BUILT_IN_EXT='http://gitlab.tp.rulingcom.com/core/default-modules/-/raw/orbit/built_in_extensions.rb' ORBIT_DEFAULT_THEME='http://gitlab.tp.rulingcom.com/themes/default-theme.git' NGINX_ORBIT_SITES='/etc/nginx/orbit_sites' RAILS_ENV=production sig () { test -s "$ORBIT_ROOT/tmp/pids/unicorn.pid" && kill -$1 `cat $ORBIT_ROOT/tmp/pids/unicorn.pid` } get_orbit_root () { if [ ! -f $NGINX_ORBIT_SITES/$1 ]; then echo "Site $1 not found" && exit 0; fi tmp_roots=`cat $NGINX_ORBIT_SITES/$1 | grep -E '^\s*root' | awk '{print $2}' | sed -E 's/;.*//g'| sed -E 's/\/public$//g'`; ORBIT_ROOT=""; for d in $tmp_roots; do if [ -d "$d" ]; then ORBIT_ROOT="$d"; fi; done if [ ! -d "$ORBIT_ROOT" ]; then echo "Site folder $ORBIT_ROOT not found"; ORBIT_ROOT=""; fi } start_orbit () { sig 0 $ORBIT_ROOT && echo >&2 "$ORBIT_ROOT Already running"; echo "Starting $ORBIT_ROOT"; sudo su -l $ORBIT_USER -c "cd $ORBIT_ROOT && bundle exec unicorn_rails -D -E $RAILS_ENV -c config/unicorn.rb"; } bundle_orbit () { args="$1" if [[ -z $args ]]; then args="install" fi echo "Execing bundle install in $ORBIT_ROOT"; sudo su -l $ORBIT_USER -c "cd $ORBIT_ROOT && bundle $args"; } upgrade_orbit () { sig QUIT; sudo su -l $ORBIT_USER -c "cd $ORBIT_ROOT && bundle update && git fetch origin && rails runner 'a=Admin::SitesController.new;a.git_reset(%w(origin)[0],%w(update)[0]);while(1) do (Multithread.where(key: %w(update_manager)[0],status: %w(finish)[0]).count!=0 ? break : nil) end;sleep(5)' && bundle update"; start_orbit; } case $1 in install) if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then bundle_orbit; fi else if [ -e "/home/$ORBIT_USER/closed_sites.txt" ]; then closed_sites="$(cat /home/$ORBIT_USER/closed_sites.txt)"; else closed_sites=""; fi for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then if [[ ! "$closed_sites" =~ "$ORBIT_ROOT" ]]; then bundle_orbit; fi fi done fi exit 0; ;; update) if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then bundle_orbit; fi else if [ -e "/home/$ORBIT_USER/closed_sites.txt" ]; then closed_sites="$(cat /home/$ORBIT_USER/closed_sites.txt)"; else closed_sites=""; fi for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then if [[ ! "$closed_sites" =~ "$ORBIT_ROOT" ]]; then upgrade_orbit; fi fi done fi exit 0; ;; start) if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then start_orbit; fi else if [ -e "/home/$ORBIT_USER/closed_sites.txt" ]; then closed_sites="$(cat /home/$ORBIT_USER/closed_sites.txt)"; else closed_sites=""; fi for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then if [[ "$closed_sites" =~ "$ORBIT_ROOT" ]]; then echo "Stopping $ORBIT_ROOT"; sig QUIT && continue; else start_orbit; fi fi done fi exit 0; ;; stop) while [ `whoami` != "root" ]; do if [ ! -z "$2" ]; then read -p "Stop Orbit $2? (y/n) " CONFIRM else read -p "Stop All Orbits? (y/n) " CONFIRM fi case "$CONFIRM" in y|Y ) break;; n|N ) exit 0;; * ) echo "(y/n)";; esac done if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then echo "Stopping $ORBIT_ROOT"; sig QUIT; fi else for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then echo "Stopping $ORBIT_ROOT"; sig QUIT && continue; fi done fi exit 0; ;; force-stop) while true; do if [ ! -z "$2" ]; then read -p "Stop Orbit $2? (y/n) " CONFIRM else read -p "Stop All Orbits? (y/n) " CONFIRM fi case "$CONFIRM" in y|Y ) break;; n|N ) exit 0;; * ) echo "(y/n)";; esac done if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then echo "Stopping $ORBIT_ROOT"; sig TERM; fi else for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then echo "Stopping $ORBIT_ROOT"; sig TERM && continue; fi done fi exit 0; ;; restart|reload) if [ ! -z "$2" ]; then get_orbit_root $2; if [ ! -z "$ORBIT_ROOT" ]; then sig USR2 && echo "$ORBIT_ROOT reloaded OK" && exit 0; echo >&2 "Couldn't reload $ORBIT_ROOT, starting instead"; start_orbit; fi else if [ -e "/home/$ORBIT_USER/closed_sites.txt" ]; then closed_sites="$(cat /home/$ORBIT_USER/closed_sites.txt)"; else closed_sites=""; fi for APP in `ls -1 $NGINX_ORBIT_SITES`; do get_orbit_root $APP; if [ ! -z "$ORBIT_ROOT" ]; then if [[ "$closed_sites" =~ "$ORBIT_ROOT" ]]; then echo "Stopping $ORBIT_ROOT"; sig QUIT && continue; else sig USR2 && echo "$ORBIT_ROOT reloaded OK" && continue; echo >&2 "Couldn't reload $ORBIT_ROOT, starting instead"; start_orbit; fi fi done fi exit 0; ;; create) d="$(dirname $2)" site_name="$(basename $2)" if [[ $d != '.' ]]; then if [[ "${d:0:1}" == "/" ]]; then ORBIT_SITES="$d" else ORBIT_SITES="$ORBIT_SITES/$d" fi fi test -s "$NGINX_ORBIT_SITES/$site_name" && echo "Site $site_name already exist." && exit 0 test -s "$ORBIT_SITES/$site_name" && echo "File $ORBIT_SITES/$site_name already exist." && exit 0 while true; do read -p "nginx server name: " SERVER_NAME if [ ! -z "$SERVER_NAME" ]; then break; fi done read -p "port number: " PORT if [ -z "$PORT" ]; then PORT="80"; fi while true; do read -p "database name: " DATABASE if [ ! -z "$DATABASE" ]; then break; fi done echo "-----------------------------------------------------" echo "Path: $ORBIT_SITES/$site_name" echo "Database: $DATABASE" echo http://$SERVER_NAME:$PORT echo "-----------------------------------------------------" while true; do read -p "Create Orbit $site_name? (y/n) " CONFIRM case "$CONFIRM" in y|Y ) break;; n|N ) exit 0;; * ) echo "(y/n)";; esac done cd ~ sudo wget http://gitlab.tp.rulingcom.com/erictyl/install_r45_on_ubuntu_1804lts_doc/-/raw/master/nginx4-5.conf -O $NGINX_ORBIT_SITES/$site_name sudo perl -pi -e "s/\{\{ORBIT\}\}/$site_name/g" $NGINX_ORBIT_SITES/$site_name sudo perl -pi -e "s#\{\{ORBIT_SITES\}\}#${ORBIT_SITES}#g" $NGINX_ORBIT_SITES/$site_name sudo perl -pi -e "s/\{\{PORT\}\}/$PORT/g" $NGINX_ORBIT_SITES/$site_name sudo perl -pi -e "s/\{\{SERVER_NAME\}\}/$SERVER_NAME/g" $NGINX_ORBIT_SITES/$site_name sudo service nginx reload sudo su -l $ORBIT_USER -c "mkdir -p $ORBIT_SITES" sudo su -l $ORBIT_USER -c "cd $ORBIT_SITES && git clone $ORBIT_GIT $site_name" sudo su -l $ORBIT_USER -c "cd $ORBIT_SITES/$site_name && wget $ORBIT_BUILT_IN_EXT && git clone $ORBIT_DEFAULT_THEME app/templates/default-theme && bundle install" sudo su -l $ORBIT_USER -c "cd $ORBIT_SITES/$site_name && perl -pi -e \"s/orbit_4_5/$DATABASE/g\" config/mongoid.yml" # sudo su -l $ORBIT_USER -c "cd $ORBIT_SITES/$site_name && bundle exec rake assets:precompile RAILS_ENV=production" sudo su -l $ORBIT_USER -c "cd $ORBIT_SITES/$site_name && bundle exec unicorn_rails -c config/unicorn.rb -D -E $RAILS_ENV" echo "-----------------------------------------------------" echo "$site_name is ready" echo "Path: $ORBIT_SITES/$site_name" local_ip=`ip route get 8.8.8.8|xargs|awk '{print $7}'`; echo http://$local_ip:$PORT echo "-----------------------------------------------------" exit 0 ;; setup) wget http://gitlab.tp.rulingcom.com/erictyl/install_r45_on_ubuntu_1804lts_doc/-/raw/master/install_orbit_environment.sh -O install_orbit_environment.sh source install_orbit_environment.sh echo "" echo "-----------------------------------------------------" echo "System is ready. You can start creating Orbit servers." echo "command: orbit create Orbit_Folder_Name" echo "-----------------------------------------------------" echo "" exit 0 ;; *) echo >&2 "Usage $0 " exit 1 ;; esac