Ruby on Rails adalah kerangka web popular untuk Ruby yang dibangunkan untuk meningkatkan produktiviti pengaturcara. Walau bagaimanapun, mendapatkan pelbagai permata dan pergantungan untuk bekerjasama kadang-kadang sukar. Panduan ini akan membantu anda mengatur persekitaran Rel siap produksi sepenuhnya termasuk permata dan pergantungan yang biasa digunakan.
Keperluan
- Contoh Vultr dengan RAM sekurang-kurangnya 512 MB (lebih disukai 1024 MB).
- Contoh Vultr yang menjalankan Ubuntu 17.04.
Tumpukan Yang Digunakan dalam Panduan Ini
- Nginx : pelayan web yang pantas dan kuat. (ver 1.10.3)
- Passenger : pelayan aplikasi yang akan membantu Nginx melayani aplikasi Ruby anda. (ver 1.5.1.8)
- Rbenv : pengurus versi Ruby. (ver 1.1.1-2)
- Ruby : (ver 2.4.1)
- MariaDB : cawangan sumber terbuka pelayan MySQL (ver 10.2)
- Sijil SSL dari Let's Encrypt
Pemasangan
Tambah Pengguna Sudo
Catatan : Sebaiknya jangan memasang perkhidmatan ini sebagai root, kerana anda mungkin akan menyerang diri sendiri. Menetapkan deploy
atau app
pengguna adalah konvensyen biasa:
sudo adduser deploy
sudo adduser deploy sudo
su deploy
Kemas kini dan Naik Taraf Sistem
Pastikan anda menjalankan semua pakej terbaru di Ubuntu VM anda:
sudo apt-get update && sudo apt-get upgrade -y
Pasang Sistem Binaan
Untuk dapat menyusun Ruby menggunakan rbenv dan permata lain, pelbagai pakej perlu dipasang. Bergantung pada versi Ruby yang anda perlukan, beberapa pakej mungkin tidak diperlukan.
Menyusun
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
Pakej untuk sokongan SSL
Ini diperlukan untuk menyusun beberapa permata, seperti Penumpang:
sudo apt-get install -y zlib1g zlib1g-dev libssl-dev libyaml-dev libcurl4-openssl-dev libruby
Versi
Komuniti Ruby menggunakan Git sebagai pilihan SCM; tetapi yang tambahan, seperti Mercurial atau Subversion, juga boleh dipasang:
sudo apt-get install -y git git-core
Pemacu Pangkalan Data untuk MySQL / MariaDB
sudo apt-get install -y libmysqld-dev mysql-client libmysqlclient-dev
Nokogiri
Diperlukan untuk beberapa permata popular yang memerlukan lib XML asli:
sudo apt-get install -y libxml2-dev libxslt-dev
Node.js
Tambahkan repositori rasmi dari Node dengan versi terkini kerana repositori Ubuntu lalai cenderung ketinggalan beberapa versi utama:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Pakej Pilihan
Pakej ini tidak diperlukan agar sistem dapat dijalankan, tetapi bagus jika anda perlu menggunakan permata tertentu.
Grafik dan Imej
Perpustakaan ini tidak perlu dan boleh dilangkau kecuali anda merancang untuk menggunakan permata manipulasi gambar; seperti Rmagick:
sudo apt-get install -y imagemagick libmagickwand-dev libvips-dev
Pemacu Pangkalan Data untuk SQLite dan PostgreSQL
Pasang pemacu untuk SQLite atau PostgreSQL jika anda perlu menyambung ke pangkalan data lain atau lebih suka DB tempatan yang mudah:
sudo apt-get install -y libsqlite3-dev sqlite3 libpq-dev postgresql postgresql-contrib
Alat
Utiliti yang biasanya tidak diprapasang pada pemasangan Ubuntu baru. Jangan ragu untuk memasang editor teks pilihan anda:
sudo apt-get install -y iotop htop nano vim
Pasang Pelayan MariaDB
MariaDB adalah pelayan SQL hubungan yang kuat, yang serasi sepenuhnya dengan MySQL. Kaedah termudah untuk memasang versi terbaru MariaDB adalah menggunakan repositori rasmi:
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
Ikuti arahan dan sediakan kata laluan root. Selepas itu, sahkan bahawa anda boleh mengakses pemasangan baru anda:
mysql -V
Ia akan memaparkan garis yang serupa dengan ini:
mysql Ver 15.1 Distrib 10.2.8-MariaDB, for debian-linux-gnu (x86_64) using readline 5
Log masuk ke shell MySQL:
mysql -h localhost -u root -p
Catatan : gunakan \q
untuk keluar.
Pasang Rbenv dan Ruby
Rbenv
Pasang Rbenv menggunakan git. Ini adalah kaedah pemasangan yang paling mudah, dan ini membolehkan kemas kini dengan mudah kemudian. Pasang juga ruby-build
, ia bertanggungjawab untuk menyusun versi Ruby yang berbeza:
cd
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Catatan : Apabila anda perlu mengemas kini secara sederhana cd ~/.rbenv
dan git pull
.
Jadikan Rbenv dan Ruby-build tersedia di cangkerang. Untuk memastikan bahawa garis-garis eksport mendapatkan dimasukkan pada awal daripada .bashrc
fail, yang penting untuk arahan bash bukan interaktif, menggunakan ayat-ayat ini:
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
Periksa sama ada Rbenv dan Ruby-build dipasang dan tersedia dalam cengkerang:
rbenv install --list
Sekiranya rbenv
tidak dikenali, log keluar dan masuk semula ke dalam cangkang.
Buat ~/.bash_profile
fail dan arahkan ke sumber ~/.bashrc
fail anda . Sekiranya anda perlu menjalankan perintah shell yang tidak interaktif dari aplikasi Rails anda, seperti penyediaan tugas cron oleh whenever
permata, ia akan menggunakan versi Ruby yang sama dengan shell interaktif anda. Ini dapat membantu mengelakkan kesilapan pelik. Tambahkan baris ini ke ~/.bash_profile
fail:
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
Ruby
Pasang Ruby 2.4.1:
rbenv install 2.4.1
Catatan : Proses ini mungkin mengambil masa 5-15 minit bergantung pada sumber pada VM anda, dan tidak ada bar kemajuan.
Jadikan Rbenv tersedia di mana-mana sahaja.
rbenv global 2.4.1
Penumpang dan Nginx
Tambahkan kunci PGP dan sokongan HTTPS untuk 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
Tambahkan repositori Penumpang:
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
Pasang modul Passenger + Nginx:
sudo apt-get install -y nginx
sudo apt-get install -y libnginx-mod-http-passenger
Lawati contoh Vultr anda menggunakan nama domain atau IP untuk mengujinya pada ketika ini. Sekiranya mereka berfungsi, halaman anda akan menunjukkan halaman selamat datang Nginx lalai.
Siapkan Rel, Aplikasi, dan Konfigurasi Penumpang
Pasang Bundler dan Rel:
gem install bundler rails --no-ri --no-rdoc
Konvensyen Ubuntu / Debian adalah untuk menyiapkan aplikasi anda /var/www
. Secara lalai, ia hanya boleh ditulis oleh root. Agar penyediaan berfungsi, berikan hak milik kepada pengguna sudo deploy
:
sudo chown deploy:deploy /var/www -R
Hasilkan aplikasi rel di /var/www/
. Sekiranya anda sudah mempunyai aplikasi yang ingin anda gunakan, git clone
jalankan di sini dan kemudian jalankan bundle
:
cd /var/www
rails new example --database=mysql
Konfigurasikan Penumpang untuk menunjuk ke aplikasi.
-
Persediaan Nginx.
sudo nano /etc/nginx/nginx.conf
-
Tukar pengguna ke deploy
.
user deploy;
-
Di http
bahagian konfigurasi, harus ada garis yang memberitahu Nginx memuat modul termasuk penumpang. Sekiranya tiada, anda boleh menambahkannya tepat selepas Virtual Host Configs
tajuk, tetapi sebelumnya sites-enabled
.
include /etc/nginx/conf.d/*.conf;
-
Edit / buat passenger.conf
fail.
sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
-
Beritahu Penumpang untuk menggunakan persediaan Rbenv kami. Ini mungkin mengandungi garis yang menunjuk ke versi Ruby yang disertakan dengan Passenger, hapus atau beri komen.
passenger_ruby /home/deploy/.rbenv/shims/ruby;
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
-
Sediakan hos maya untuk menunjuk ke aplikasi /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
}
-
Mulakan semula Nginx.
sudo service nginx restart
Pada ketika ini aplikasi anda sudah siap digunakan dalam mod pembangunan. Untuk beralih ke mod pengeluaran anda perlu kembali ke konfigurasi Nginx anda dan ubah rails_env
tetapannya menjadi production
.
Sebelum anda beralih ke mod pengeluaran, anda masih perlu untuk persediaan pangkalan data pengeluaran anda example_production
, database.yml
dan kunci rahsia. Lihat alat seperti Capistrano atau Mina untuk mempercepat proses penyebaran aplikasi anda. Adalah praktik yang baik untuk menggunakan pemboleh ubah ENV dengan permata seperti dotenv
, dan jangan memasukkan kata laluan, kunci rahsia dan sebagainya ke git repositori anda.
Sediakan SSL
Terdapat banyak perkhidmatan di luar sana yang menawarkan sijil SSL untuk domain anda, banyak yang berbayar dan sepasang percuma. Sediakan SSL tidak kira perkhidmatan apa yang anda gunakan. Let's Encrypt sangat mudah, dan percuma, digunakan. Let's Encrypt adalah organisasi bukan keuntungan yang disokong oleh banyak syarikat gergasi teknologi.
Pemasangan
Jalankan arahan berikut, dan ikuti arahannya.
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
Sekiranya anda menggunakan instance Vultr anda sekarang HTTPS
, anda akan melihat laman web yang selamat.
Pembaharuan
Sijil yang baru dikeluarkan akan tamat dan perlu diperbaharui secara berkala. Cara termudah untuk melakukan ini adalah dengan menyiapkan pekerjaan cron.
sudo crontab -e
30 2 * * 1 /usr/bin/certbot renew
Sebagai langkah terakhir, tetapi pilihan, but semula VM anda dan pastikan semua perkhidmatan dimulakan semula seperti yang diharapkan.