Krav
Stabel som brukes i denne veiledningen
Installasjon
Valgfrie pakker
Installer MariaDB-serveren
Installer Rbenv og Ruby
Ruby on Rails er et populært nettrammeverk for Ruby som ble utviklet for å øke en programmerers produktivitet. Imidlertid kan det noen ganger bli vanskelig å få ulike edelstener og avhengigheter til å fungere sammen. Denne guiden hjelper deg med å sette opp et komplett produksjonsklart Rails-miljø, inkludert ofte brukte edelstener og avhengigheter.
Krav
- Vultr-forekomst med minst 512 MB RAM (1024 MB foretrukket).
- Vultr-forekomst som kjører Ubuntu 17.04.
Stabel som brukes i denne veiledningen
- Nginx : en rask og kraftig nettserver. (ver 1.10.3)
- Passenger : en appserver som vil hjelpe Nginx med å betjene Ruby-appen din. (ver 1.5.1.8)
- Rbenv : en Ruby versjonsbehandler. (ver 1.1.1-2)
- Ruby : (ver 2.4.1)
- MariaDB : en åpen kildekode-gren av MySQL-serveren (ver 10.2)
- SSL- sertifikat fra Let's Encrypt
Installasjon
Legg til Sudo-bruker
Merk : Det anbefales sterkt å ikke installere noen av disse tjenestene som root, da du kan utsette deg selv for et angrep. Å sette opp en deployeller appbruker er en vanlig konvensjon:
sudo adduser deploy
sudo adduser deploy sudo
su deploy
Oppdater og oppgrader systemet
Sørg for at du kjører alle de nyeste pakkene på Ubuntu VM:
sudo apt-get update && sudo apt-get upgrade -y
Installer byggesystem
For å kunne kompilere Ruby ved hjelp av rbenv og andre edelstener, må forskjellige pakker installeres. Avhengig av hvilken versjon av Ruby du trenger, kan det hende at noen av pakkene ikke er nødvendige.
Kompilere
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
Pakker for SSL-støtte
Disse er nødvendige for å kompilere flere edelstener, for eksempel Passenger:
sudo apt-get install -y zlib1g zlib1g-dev libssl-dev libyaml-dev libcurl4-openssl-dev libruby
Versjonskontroll
Ruby-fellesskapet bruker Git som en valgfri SCM; men flere, som Mercurial eller Subversion, kan også installeres:
sudo apt-get install -y git git-core
Databasedrivere for MySQL / MariaDB
sudo apt-get install -y libmysqld-dev mysql-client libmysqlclient-dev
Nokogiri
Nødvendig for flere populære edelstener som trenger native XML-libs:
sudo apt-get install -y libxml2-dev libxslt-dev
Node.js
Legg til offisielle depoter fra Node med den nyeste versjonen som standard Ubuntu-depoter har en tendens til å ligge bak noen få hovedversjoner:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Valgfrie pakker
Disse pakkene er ikke nødvendige for at systemet skal kjøre, men er gode å ha hvis du skal bruke visse edelstener.
Grafer og bilder
Disse bibliotekene er ikke nødvendige og kan hoppes over med mindre du planlegger å bruke edelstener for bildemanipulering; slik som Rmagick:
sudo apt-get install -y imagemagick libmagickwand-dev libvips-dev
Databasedrivere for SQLite og PostgreSQL
Installer drivere for SQLite eller PostgreSQL hvis du trenger å koble til andre databaser eller foretrekker en enkel, lokal DB:
sudo apt-get install -y libsqlite3-dev sqlite3 libpq-dev postgresql postgresql-contrib
Verktøy
Verktøy som vanligvis ikke kommer forhåndsinstallert på en ny Ubuntu-installasjon. Installer gjerne tekstredigeringsprogrammet du ønsker:
sudo apt-get install -y iotop htop nano vim
Installer MariaDB-serveren
MariaDB er en kraftig relasjons SQL-server, som er fullt kompatibel med MySQL. Den enkleste måten å installere den nyeste versjonen av MariaDB på er å bruke offisielle depoter:
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
Følg instruksjonene og sett opp et root-passord. Etterpå, kontroller at du har tilgang til den ferske installasjonen:
mysql -V
Det vil vise en linje som ligner på denne:
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5
Logg inn på MySQL-skallet:
mysql -h localhost -u root -p
Merk : Bruk for \qå avslutte.
Installer Rbenv og Ruby
Rbenv
Installer Rbenv med git. Dette er den enkleste installasjonsmetoden, og den tillater enkle oppdateringer senere. Installer også ruby-build, det er ansvarlig for å faktisk kompilere forskjellige versjoner av Ruby:
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Merk : Når du trenger å oppdatere enkelt cd ~/.rbenvog git pull.
Gjør Rbenv og Ruby-build tilgjengelig i skallet. For å sikre at eksportlinjene blir satt inn i begynnelsen av .bashrcfilen, noe som er viktig for ikke-interaktive bash-kommandoer, bruk disse linjene:
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
Sjekk om Rbenv og Ruby-build er installert og er tilgjengelig i shell:
rbenv install --list
Hvis den rbenvikke gjenkjennes, logg ut og logg inn i skallet igjen.
Opprett en ~/.bash_profilefil og pek den til kildefilen din ~/.bashrc. Hvis du trenger å kjøre noen ikke-interaktive skallkommandoer fra Rails-appen din, for eksempel cron-jobber som er satt opp av wheneverperlen, vil den bruke samme versjon av Ruby som det interaktive skallet. Dette kan bidra til å forhindre merkelige feil. Legg til denne linjen i ~/.bash_profilefilen:
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
Rubin
Installer Ruby 2.4.1:
rbenv install 2.4.1
Merk : Denne prosessen kan ta 5-15 minutter avhengig av ressursene på VM-en din, og det er ingen fremdriftslinje.
Gjør Rbenv tilgjengelig overalt.
rbenv global 2.4.1
Passasjer og Nginx
Legg til PGP-nøkkelen og HTTPS-støtte for 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
Legg til passasjerlageret:
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
Installer Passenger + Nginx-modulene:
sudo apt-get install -y nginx
sudo apt-get install -y libnginx-mod-http-passenger
Besøk Vultr-forekomsten din ved å bruke domenenavnet eller IP-en for å teste disse på dette tidspunktet. Hvis de fungerer, vil siden din vise standard Nginx-velkomstside.
Sett opp skinner, appen og konfigurer passasjer
Installer Bundler og skinner:
gem install bundler rails --no-ri --no-rdoc
Ubuntu/Debian-konvensjonen er å sette opp appen din i /var/www. Som standard er det bare skrivbart med root. For at oppsettet skal fungere, gi eierskap til sudo-brukeren deploy:
sudo chown deploy:deploy /var/www -R
Generer rails-appen i /var/www/. Hvis du allerede har en app du vil distribuere, git clonekjører den her og deretter bundle:
cd /var/www
rails new example --database=mysql
Konfigurer Passenger til å peke på appen.
Forbered Nginx.
sudo nano /etc/nginx/nginx.conf
Endre bruker til deploy.
user deploy;
I httpdelen av konfigurasjonen skal det være en linje som forteller Nginx å laste inn moduler inkludert passasjer. Hvis den mangler, kan du legge den til rett etter Virtual Host Configstittelen, men før sites-enabled.
include /etc/nginx/conf.d/*.conf;
Rediger/opprett passenger.conffilen.
sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
Fortell Passenger å bruke Rbenv-oppsettet vårt. Den kan inneholde en linje som peker til Ruby-versjonen som følger med Passenger, bare slett eller kommenter den.
passenger_ruby /home/deploy/.rbenv/shims/ruby;
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
Konfigurer virtuell vert for å peke på appen i /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
}
Start Nginx på nytt.
sudo service nginx restart
På dette tidspunktet er applikasjonen klar til å brukes i utviklingsmodus. For å bytte til produksjonsmodus må du gå tilbake til Nginx-konfigurasjonen og endre rails_envinnstillingen til production.
Før du bytter til produksjonsmodus, du fortsatt trenger å sette opp produksjonen database example_production, database.ymlog hemmelig nøkkel. Sjekk ut et verktøy som Capistrano eller Mina for å øke hastigheten på applikasjonsdistribusjonsprosessen. Det er en god praksis å bruke ENV-variabler med en perle som dotenv, og ikke overgi passordene dine, hemmelige nøkler og slikt til git-lageret ditt.
Sett opp SSL
Det er flere tjenester der ute som tilbyr SSL-sertifikater for domenet ditt, mange er betalt og et par er gratis. Sett opp SSL uansett hvilken tjeneste du bruker. Let's Encrypt er veldig enkelt og gratis å bruke. Let's Encrypt er en ideell organisasjon støttet av mange teknologigiganter.
Installasjon
Kjør følgende kommandoer, og følg instruksjonene.
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
Hvis du går til Vultr-forekomsten din nå ved å bruke HTTPS, vil du se et sikkert nettsted.
Fornyelse
Ditt nylig utstedte sertifikat vil utløpe og må fornyes med jevne mellomrom. Den enkleste måten å gjøre dette på er å sette opp en cron-jobb.
sudo crontab -e
30 2 * * 1 /usr/bin/certbot renew
Som et siste, men valgfritt trinn, start VM-en på nytt og sørg for at alle tjenester starter på nytt som forventet.