Avís
Aquest article és antic i és possible que part de la informació estigui desactualitzada o ja no sigui vàlida actualment.
Si tens cap dubte o necessites confirmar algun detall, et recomanem contactar amb el nostre equip de suport per rebre informació actualitzada i assistència personalitzada.
Instal·lació de RVM a Ubuntu 16.04
Has d'utilitzar el paquet següent:
# apt-add-repository -y ppa:rael-gc/rvm
# apt update
# apt install rvm nodejsCrea l'usuari ror i afegeix-lo al grup rvm:
# adduser ror --ingroup rvmAfegeix l'usuari ror al grup sudo:
# usermod -G sudo rorEdita el fitxer /etc/ssh/sshd_config i a l'última línia afegeix l'usuari ror a AllowUsers:
AllowUsers root rorFinalment, reinicia el servei de ssh:
# service ssh restartInstal·lació de Ruby on Rails a Ubuntu 16.04
Inicia la sessió amb l'usuari ror i instal·la ruby 2.1.3:
$ rvm install 2.1.3
$ rvm use 2.1.3Verifica que realment s'ha activat aquesta versió de la manera següent:
ruby 2.1.3p242 (2014-09-19 revisión 47630) [x86_64-linux]Finalment, instal·la Rails 3.2.19 encara com a usuari ror:
$ gem install rails -v 3.2.19Instal·lació d'Unicorn a Ubuntu 16.04
En primer lloc, com a usuari ror has d'instal·lar unicorn:
$ gem install unicornEn segon lloc, com a usuari root, crea les diverses carpetes que utilitzaràs i, a continuació, fes que l'usuari ror en sigui el propietari:
# mkdir -p /var/ror/app/shared /var/ror/unicorn/config /var/log/unicorn /var/run/unicorn /etc/unicorn/
# chown -R ror:rvm /var/ror/.
# chown -R ror:rvm /var/ror/*
# chown -R ror:rvm /var/log/unicorn/.
# chown -R ror:rvm /var/run/unicorn/.Com a usuari ror de nou, crea el fitxer /var/ror/unicorn/config/unicorn.rb amb la configuració següent, que estableix el camí de l’aplicació:
# set path to the application
app_dir = File.expand_path("/var/ror/app/current", __FILE__)
shared_dir = "#{app_dir}/shared"
working_directory app_dir
# Estableix les opcions d'unicorn
worker_processes 2
preload_app true
timeout 30
# Camí del sòcol d'Unicorn
listen “/var/run/unicorn/unicorn.sock”, :backlog => 64
# Estableix el camí dels registres
stderr_path “/var/log/unicorn/stderr.log”
stdout_path “/var/log/unicorn/stdout.log”
# Estableix el camí de l'identificador del procés
pid “/var/run/unicorn/unicorn.pid”A continuació, com a usuari root, crea el fitxer /etc/init.d/unicorn amb el contingut següent; les indicacions del bloc remeten a l’embolcall rvm mostrat més amunt i a l’inici de tots els unicorns:
### BEGIN INIT INFO
# Required-Start
# Required-Stop
# Default-Start
# Default-Stop
# Short-Description
# Description: Activa en arrencar
### END INIT INFO
# Això és /etc/init.d/unicorn_init (sense .sh)
# Script init.d per a una o diverses instal·lacions d'unicorn. Espera almenys un fitxer .conf
# a /etc/unicorn
#
# Derivat de https://gist.github.com/zewelor/2623205
# basat en una versió modificada per http://github.com/killercup
# que es basa en una versió modificada per jay@gooby.org http://github.com/jaygooby
# que es basa en http://gist.github.com/308216 de http://github.com/mguterl
#
## Un exemple de /etc/unicorn/my_app.conf
##
## RAILS_ENV=production
## RAILS_ROOT=/var/apps/www/my_app/current
## UNICORN=”/usr/local/rvm/bin/<WRAPPED_NAME>” #see rvm wrapper above
## APP_USER=”some_user”
## UNICORN_CONFIG=”/var/apps/www/my_app/shared/config/unicorn.rb”
#
# Això configura un procés mestre d'unicorn per a la teva aplicació a /var/apps/www/my_app/current que s'executa en
# mode de producció. Llegirà config/unicorn.rb per completar la configuració.
#
# T'has d'assegurar que es defineixin ports o sòcols diferents a cada config/unicorn.rb si
# executes més d'un procés mestre simultàniament.
#
# Si crides aquest script sense paràmetres de configuració, intentarà executar l'ordre
# init per a totes les configuracions d'unicorn indicades a /etc/unicorn/*.conf
#
# /etc/init.d/unicorn start # starts all unicorns
#
# Si especifiques una configuració concreta, només actuarà sobre aquesta
#
# /etc/init.d/unicorn start my_app
export rvmsudo_secure_path=1
RVM_FILE_TO_SOURCE=”/usr/share/rvm/scripts/rvm”
sig () {
test -s “$PID” && kill -$1 `cat “$PID”`
}
oldsig () {
test -s “$OLD_PID” && kill -$1 `cat “$OLD_PID”`
}
cmd () {
case $1 in
start)
sig 0 && echo >&2 “Already running” && return 0
eval $CMD
echo “Starting”
;;
stop)
sig QUIT && echo “Stopping” && return 0
echo >&2 “Not running”
;;
force-stop)
sig TERM && echo “Forcing a stop” && return 0
echo >&2 “Not running”
;;
restart|reload)
sig USR2 && sleep 5 && oldsig QUIT && echo “Killing old master” `cat $OLD_PID` && return 0
echo >&2 “Couldn’t reload, starting ‘$CMD’ instead”
eval $CMD
;;
upgrade)
sig USR2 && echo Upgraded && return 0
echo >&2 “Couldn’t upgrade, starting ‘$CMD’ instead”
eval $CMD
;;
rotate)
sig USR1 && echo rotated logs OK && return 0
echo >&2 “Couldn’t rotate logs” && return 1
;;
*)
echo >&2 “Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>”
exit 1
;;
esac
}
setup () {
CONFIG=$1
export APP_NAME=`basename $1|cut -f 1 -d ‘.’`
echo “Launching ${APP_NAME}”
if [ -z $APP_USER ]; then
if [ `/bin/egrep -i “^${APP_NAME}” /etc/passwd|wc -l` -eq 1 ]; then
export APP_USER=$APP_NAME
else
echo “The is no user defined in ${CONFIG}, and the is no user in the system called ${APP_NAME}”
return 1
fi
fi
if [ -z $RAILS_ROOT ]; then
if [ -d “/home/${APP_USER}/www/current” ]; then
export RAILS_ROOT=”/home/${APP_USER}/www/current”
else
echo “Rails root is not defined in ${CONFIG}”
return 1
fi
fi
if [ -z $RAILS_ENV ]; then
export RAILS_ENV=”production”
fi
# Si el binari d'unicorn no s'ha definit a la configuració
if [ -z “$UNICORN” ]; then
UNICORN=”unicorn_rails”
fi
# Si la configuració d'unicorn no s'ha definit a la configuració
if [ -z $UNICORN_CONFIG ]; then
UNICORN_CONFIG=${RAILS_ROOT}/config/unicorn/${RAILS_ENV}.rb
fi
cd $RAILS_ROOT || return 1
export PID=$RAILS_ROOT/tmp/pids/unicorn.pid
export OLD_PID=”$PID.oldbin”
CMD=”rvmsudo -u ${APP_USER} ${UNICORN} -E ${RAILS_ENV} -c ${UNICORN_CONFIG} -D”
return 0
}
# executa l'ordre start/stop/reload/etc per a cada configuració de /etc/unicorn
# o fes-ho només per a una de concreta
# $1 conté l'ordre start/stop/etc
# $2, si existeix, ha de ser la configuració concreta sobre la qual volem actuar
source $RVM_FILE_TO_SOURCE
if [ $2 ]; then
. /etc/unicorn/$2.conf
setup “/etc/unicorn/$2.conf”
if [ $? -eq 1 ]; then
exit
fi
cmd $1
else
for CONFIG in /etc/unicorn/*.conf; do
# neteja les variables de les configuracions anteriors
unset APP_USER
unset RAILS_ROOT
unset RAILS_ENV
unset UNICORN
unset UNICORN_CONFIG
# importa les variables
. $CONFIG
setup $CONFIG
if [ $? -eq 1 ]; then
continue
fi
# executa l'ordre start/stop/etc
cmd $1
done
fiI fes-lo executable de la manera següent:
# chmod a+rx /etc/init.d/unicornAra crea el fitxer /etc/unicorn/unicorn.conf amb el contingut següent; la indicació sobre rvm remet a l’embolcall mostrat més amunt:
RAILS_ENV=production
RAILS_ROOT=/var/ror/app/current
UNICORN="/usr/share/rvm/gems/ruby-2.1.3/bin/unicorn" #see rvm wrapper above
APP_USER="ror"
UNICORN_CONFIG="/var/ror/unicorn/config/unicorn.rb"Finalment, activa unicorn a cada inici:
# update-rc.d unicorn defaults
# update-rc.d unicorn enableInstal·lació i configuració de NGINX a Ubuntu 16.04
En primer lloc, instal·la Nginx:
# apt install nginxEdita el fitxer /etc/nginx/nginx.conf i afegeix el següent a la secció HTTP:
upstream rails {
# Camí del fitxer de sòcol d'Unicorn
server unix:/var/run/unicorn/unicorn.sock fail_timeout=0;
}Després, elimina el fitxer de configuració de vhost per defecte:
# rm /etc/nginx/sites-enabled/defaultI crea'n un de nou anomenat midominio.com amb el contingut següent:
server {
listen 80 default;
server_name midominio.com;
root /var/ror/app/current;
try_files $uri/index.html $uri @rails;
location @rails {
proxy_pass http://rails;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}A continuació, activa el lloc i reinicia Nginx:
# ln -s /etc/nginx/sites-available/midominio.com /etc/nginx/sites-enabled
# service nginx restartConfiguració de logrotate
Crea el fitxer /etc/logrotate.d/unicorn amb el contingut següent:
/var/log/unicorn/*.log {
daily
missingok
rotate 14
compress
dateext
delaycompress
notifempty
copytruncate
create 0666 ror rvm
maxage 14
}Opcionalment, pots instal·lar una aplicació de demostració per comprovar que tot funciona correctament. T'expliquem com fer-ho.
Instal·lació d'una aplicació de demostració
Accedeix-hi amb l'usuari ror i executa les ordres següents:
$ cd /var/ror/app
$ rails new current
$ cd current
$ rails generate scaffold Task title:string note:text
$ RAILS_ENV=production rake db:migrateDesprés, inicia unicorn com a usuari root:
# /etc/init.d/unicorn startFinalment, comprova que tot funciona correctament accedint a l'URL:
http://ip.de.vm/public
I ja està, ara ja pots desplegar la teva aplicació a la carpeta /var/ror/app/current