Ruby on Rails è un popolare framework Web per Ruby sviluppato per aumentare la produttività di un programmatore. Tuttavia, ottenere varie gemme e dipendenze per lavorare insieme può diventare complicato a volte. Questa guida ti aiuterà a creare un ambiente Rails completo pronto per la produzione, inclusi gemme e dipendenze comunemente utilizzate.
Requisiti
- Istanza Vultr con almeno 512 MB di RAM (preferibilmente 1024 MB).
- Istanza Vultr che esegue Ubuntu 17.04.
Stack utilizzato in questa guida
- Nginx : un web server veloce e potente. (ver 1.10.3)
- Passenger : un server di app che aiuterà Nginx a servire la tua app Ruby. (ver 1.5.1.8)
- Rbenv : un gestore di versioni di Ruby. (ver 1.1.1-2)
- Ruby : (versione 2.4.1)
- MariaDB : un ramo open source del server MySQL (versione 10.2)
- Certificato SSL da Let's Encrypt
Installazione
Aggiungi utente Sudo
Nota : si consiglia vivamente di non installare nessuno di questi servizi come root, poiché è possibile esporsi a un attacco. L'impostazione di un utente deploy
o app
è una convenzione comune:
sudo adduser deploy
sudo adduser deploy sudo
su deploy
Sistema di aggiornamento e aggiornamento
Assicurati di eseguire tutti gli ultimi pacchetti sulla tua macchina virtuale Ubuntu:
sudo apt-get update && sudo apt-get upgrade -y
Installa Build System
Per poter compilare Ruby usando rbenv e altre gemme, è necessario installare vari pacchetti. A seconda della versione di Ruby di cui avrai bisogno, alcuni pacchetti potrebbero non essere necessari.
compilazione
sudo apt-get install -y curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev
sudo apt-get install -y libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev
sudo apt-get install -y python-software-properties libffi-dev
sudo apt-get install -y build-essential openssl libreadline6 libreadline6-dev libreadline-dev
sudo apt-get install -y automake libtool bison pkg-config bison autoconf libc6-dev ncurses-dev
sudo apt-get install -y libapr1-dev libaprutil1-dev libx11-dev libffi-dev tcl-dev tk-dev
Pacchetti per il supporto SSL
Questi sono necessari per compilare diverse gemme, come Passeggero:
sudo apt-get install -y zlib1g zlib1g-dev libssl-dev libyaml-dev libcurl4-openssl-dev libruby
versioning
La community di Ruby utilizza Git come SCM preferito; ma possono essere installati anche altri, come Mercurial o Subversion:
sudo apt-get install -y git git-core
Driver di database per MySQL / MariaDB
sudo apt-get install -y libmysqld-dev mysql-client libmysqlclient-dev
nokogiri
Richiesto per diverse gemme popolari che richiedono librerie XML native:
sudo apt-get install -y libxml2-dev libxslt-dev
Node.js
Aggiungi repository ufficiali da Node con l'ultima versione poiché i repository Ubuntu predefiniti tendono a rimanere indietro rispetto ad alcune versioni principali:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Pacchetti opzionali
Questi pacchetti non sono necessari per il funzionamento del sistema, ma sono utili se è necessario utilizzare determinate gemme.
Grafici e immagini
Queste librerie non sono necessarie e possono essere ignorate se non si prevede di utilizzare gemme di manipolazione delle immagini; come Rmagick:
sudo apt-get install -y imagemagick libmagickwand-dev libvips-dev
Driver di database per SQLite e PostgreSQL
Installa i driver per SQLite o PostgreSQL se devi connetterti ad altri database o preferisci un DB locale semplice:
sudo apt-get install -y libsqlite3-dev sqlite3 libpq-dev postgresql postgresql-contrib
Utensili
Utilità che normalmente non vengono preinstallate su una nuova installazione di Ubuntu. Sentiti libero di installare il tuo editor di testo preferito:
sudo apt-get install -y iotop htop nano vim
Installa il server MariaDB
MariaDB è un potente server SQL relazionale, completamente compatibile con MySQL. Il modo più semplice per installare l'ultima versione di MariaDB è usare i repository ufficiali:
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386] http://ftp.utexas.edu/mariadb/repo/10.2/ubuntu zesty main'
sudo apt update
sudo apt install -y mariadb-server
Segui le istruzioni e imposta una password di root. Successivamente, verifica di poter accedere alla nuova installazione:
mysql -V
Verrà visualizzata una riga simile a questa:
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5
Accedi alla shell MySQL:
mysql -h localhost -u root -p
Nota : usare \q
per uscire.
Installa Rbenv e Ruby
Rbenv
Installa Rbenv usando git. Questo è il metodo di installazione più semplice e consente facili aggiornamenti in seguito. Installa anche ruby-build
, è responsabile per la compilazione di diverse versioni di Ruby:
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Nota : quando è necessario aggiornare semplicemente cd ~/.rbenv
e git pull
.
Rendi Rbenv e Ruby-build disponibili nella shell. Per assicurarsi che le righe di esportazione vengano inserite all'inizio del .bashrc
file, che è importante per i comandi bash non interattivi, utilizzare queste righe:
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.temp_bashrc
echo 'eval "$(rbenv init -)"' >> ~/.temp_bashrc
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.temp_bashrc
cat ~/.temp_bashrc ~/.bashrc > ~/.combined_bashrc && mv ~/.combined_bashrc ~/.bashrc && rm ~/.temp_bashrc
exec $SHELL
Controlla se Rbenv e Ruby-build sono installati e sono disponibili nella shell:
rbenv install --list
Se rbenv
non viene riconosciuto, disconnettersi e riconnettersi alla shell.
Crea un ~/.bash_profile
file e puntalo per provarlo ~/.bashrc
. Se devi eseguire comandi shell non interattivi dalla tua app Rails, come i lavori cron impostati dalla whenever
gemma, utilizzerà la stessa versione di Ruby della tua shell interattiva. Questo può aiutare a prevenire strani errori. Aggiungi questa riga al ~/.bash_profile
file:
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
Rubino
Installa Ruby 2.4.1:
rbenv install 2.4.1
Nota : questo processo può richiedere 5-15 minuti a seconda delle risorse sulla VM e non è presente alcuna barra di avanzamento.
Rendi Rbenv disponibile ovunque.
rbenv global 2.4.1
Passeggero e Nginx
Aggiungi la chiave PGP e il supporto HTTPS per apt:
sudo apt-get install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
Aggiungi il repository Passeggeri:
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger zesty main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
Installa i moduli Passenger + Nginx:
sudo apt-get install -y nginx
sudo apt-get install -y libnginx-mod-http-passenger
Visita la tua istanza Vultr usando il suo nome di dominio o IP per testarli a questo punto. Se funzionano, la tua pagina mostrerà la pagina di benvenuto predefinita di Nginx.
Installa Rails, l'app e configura Passenger
Installa Bundler e Rails:
gem install bundler rails --no-ri --no-rdoc
La convenzione Ubuntu / Debian prevede l'installazione dell'app /var/www
. Di default è scrivibile solo da root. Affinché l'installazione funzioni, assegna la proprietà all'utente sudo deploy
:
sudo chown deploy:deploy /var/www -R
Genera l'app rails in /var/www/
. Se hai già un'app che desideri distribuire, git clone
questa qui ed esegui bundle
:
cd /var/www
rails new example --database=mysql
Configura Passenger per puntare all'app.
-
Prep Nginx.
sudo nano /etc/nginx/nginx.conf
-
Cambia utente in deploy
.
user deploy;
-
Nella http
sezione della configurazione, dovrebbe esserci una linea che dice a Nginx di caricare i moduli incluso il passeggero. Se manca, puoi aggiungerlo subito dopo il Virtual Host Configs
titolo, ma prima sites-enabled
.
include /etc/nginx/conf.d/*.conf;
-
Modifica / crea il passenger.conf
file.
sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
-
Di 'al Passeggero di usare la nostra configurazione Rbenv. Può contenere una riga che punta alla versione di Ruby inclusa in Passenger, basta eliminarla o commentarla.
passenger_ruby /home/deploy/.rbenv/shims/ruby;
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
-
Configura l'host virtuale per puntare all'app /var/www/example/
.
sudo nano /etc/nginx/sites-enabled/example.conf
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example/public;
passenger_enabled on;
# When you are ready to switch to production mode - change this to `production`
passenger_app_env development; # <-- !important
}
-
Riavvia Nginx.
sudo service nginx restart
A questo punto l'applicazione è pronta per essere utilizzata in modalità di sviluppo. Per passare alla modalità di produzione è necessario tornare alla configurazione di Nginx e modificare l' rails_env
impostazione su production
.
Prima di passare alla modalità di produzione, è ancora necessario configurare il database di produzione example_production
, database.yml
e la chiave segreta. Scopri uno strumento come Capistrano o Mina per accelerare il processo di distribuzione delle applicazioni. È buona norma usare variabili ENV con una gemma simile dotenv
e non impegnare password, chiavi segrete e simili nel proprio repository git.
Configura SSL
Esistono diversi servizi che offrono certificati SSL per il tuo dominio, molti sono a pagamento e un paio sono gratuiti. Configura SSL indipendentemente dal servizio che usi. Let's Encrypt è molto facile e gratuito da usare. Let's Encrypt è un'organizzazione no profit supportata da molti giganti della tecnologia.
Installazione
Esegui i seguenti comandi e segui le istruzioni.
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --nginx
sudo certbot renew --dry-run
Se vai all'istanza di Vultr ora utilizzando HTTPS
, vedrai un sito Web sicuro.
Rinnovo
Il certificato appena rilasciato scadrà e dovrà essere rinnovato periodicamente. Il modo più semplice per farlo è impostare un cron job.
sudo crontab -e
30 2 * * 1 /usr/bin/certbot renew
Come passaggio finale, ma facoltativo, riavviare la VM e assicurarsi che tutti i servizi si riavviino come previsto.