Deploy Ruby on Rails ke VPS sering dianggap momok, padahal alurnya cukup jelas: siapkan server, pasang dependensi, konfigurasi aplikasi, lalu jalankan. Panduan ini memandu kamu dari nol sampai aplikasi bisa diakses lewat domain.
Persiapan awal sebelum deploy Ruby on Rails ke VPS
Sebelum menyentuh server, pastikan tiga hal: aplikasi Rails sudah berjalan di lokal, kamu punya akses SSH ke VPS, dan domain sudah diarahkan ke IP VPS. Pilih VPS dengan minimal 1 GB RAM untuk aplikasi Rails sederhana. Kalau trafik masih sepi, spesifikasi itu cukup.
Pilih penyedia VPS dan sistem operasi
Gunakan Ubuntu LTS terbaru karena dokumentasinya banyak dan stabil. Setelah VPS aktif, login lewat SSH:
ssh root@IP_VPS_KAMU
Buat user baru agar tidak bekerja sebagai root terus-menerus:
adduser deploy
usermod -aG sudo deploy
su - deploy
Amankan server
Pasang firewall dasar dan nonaktifkan login root via SSH. Di Ubuntu, cukup jalankan:
sudo ufw allow OpenSSH
sudo ufw enable
Edit /etc/ssh/sshd_config, set PermitRootLogin no, lalu restart layanan SSH. Langkah ini mencegah percobaan login otomatis yang umum terjadi di VPS publik.
Pasang dependensi: Ruby, Node.js, dan database
Aplikasi Rails butuh Ruby, Node.js (untuk aset), dan database. Pasang semuanya lewat package manager atau versi manager agar mudah upgrade.
Ruby dengan rbenv
rbenv memungkinkan kamu memilih versi Ruby sesuai kebutuhan aplikasi. Pasang dependensi build dulu:
sudo apt update
sudo apt install -y git curl libssl-dev libreadline-dev zlib1g-dev build-essential
Lalu instal rbenv dan ruby-build:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
Pasang Ruby versi yang dipakai aplikasi (misalnya 3.2.2):
rbenv install 3.2.2
rbenv global 3.2.2
gem install bundler
Node.js dan Yarn
Rails menggunakan Node.js untuk mengompilasi aset JavaScript. Pasang Node.js dari NodeSource atau gunakan nvm. Yarn dibutuhkan jika aplikasi memakai Webpacker atau jsbundling.
sudo apt install -y nodejs npm
sudo npm install -g yarn
Database PostgreSQL
PostgreSQL adalah pilihan umum untuk aplikasi Rails produksi. Pasang dan buat user database:
sudo apt install -y postgresql postgresql-contrib libpq-dev
sudo -u postgres createuser -s deploy
sudo -u postgres createdb -O deploy nama_aplikasi_production
Ganti nama_aplikasi_production dengan nama database yang kamu inginkan.
Konfigurasi aplikasi Rails untuk produksi
Salin kode aplikasi ke server. Cara paling sederhana: clone dari repositori Git.
git clone https://github.com/username/nama-aplikasi.git
cd nama-aplikasi
Set environment variable
Rails produksi membutuhkan SECRET_KEY_BASE, kredensial database, dan variabel lain. Simpan di file .env atau gunakan config/credentials.yml.enc. Contoh isi .env:
RAILS_ENV=production
DATABASE_URL=postgresql://deploy@localhost/nama_aplikasi_production
SECRET_KEY_BASE=hasil_dari_rails_secret
RAILS_SERVE_STATIC_FILES=true
Buat secret baru dengan rails secret di lokal, lalu tempel ke server. Jangan commit file .env ke repositori.
Instal gem dan siapkan database
Jalankan bundler untuk produksi:
bundle config set --local without 'development test'
bundle install
Kemudian buat skema database dan precompile aset:
RAILS_ENV=production bundle exec rails db:prepare
RAILS_ENV=production bundle exec rails assets:precompile
Jika aplikasi memakai rails db:prepare versi lama, gunakan db:create db:migrate.
Jalankan aplikasi dengan Puma dan systemd
Puma adalah web server default Rails. Agar aplikasi tetap hidup setelah logout, gunakan systemd. Buat file /etc/systemd/system/nama-aplikasi.service:
[Unit]
Description=Aplikasi Rails
After=network.target
[Service]
Type=simple
User=deploy
WorkingDirectory=/home/deploy/nama-aplikasi
EnvironmentFile=/home/deploy/nama-aplikasi/.env
ExecStart=/home/deploy/.rbenv/shims/bundle exec puma -C config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
Aktifkan dan jalankan:
sudo systemctl daemon-reload
sudo systemctl enable nama-aplikasi
sudo systemctl start nama-aplikasi
sudo systemctl status nama-aplikasi
Pastikan statusnya active (running). Jika gagal, cek log dengan journalctl -u nama-aplikasi -e.
Pasang Nginx sebagai reverse proxy
Nginx menerima permintaan HTTP di port 80 dan meneruskannya ke Puma. Pasang Nginx:
sudo apt install -y nginx
Buat konfigurasi situs di /etc/nginx/sites-available/nama-aplikasi:
server {
listen 80;
server_name domainkamu.com www.domainkamu.com;
root /home/deploy/nama-aplikasi/public;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~* .(css|js|jpg|jpeg|png|gif|ico|svg)$ {
expires max;
add_header Cache-Control public;
}
}
Aktifkan situs dan restart Nginx:
sudo ln -s /etc/nginx/sites-available/nama-aplikasi /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Buka domain di browser. Jika muncul halaman aplikasi, deploy berhasil.
Amankan dengan HTTPS dan pantau log
Pasang sertifikat SSL gratis dari Let’s Encrypt menggunakan Certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d domainkamu.com -d www.domainkamu.com
Certbot akan mengubah konfigurasi Nginx dan memasang perpanjangan otomatis. Setelah itu, cek log aplikasi secara berkala:
journalctl -u nama-aplikasi -funtuk log Puma./var/log/nginx/error.loguntuk error dari Nginx.log/production.logdi direktori aplikasi untuk log Rails.
Atur rotasi log agar disk tidak penuh. Gunakan logrotate atau fitur bawaan Rails.
Ringkasan
Deploy Ruby on Rails ke VPS melibatkan penyiapan server, dependensi, konfigurasi environment, dan proses service. Ikuti langkah di atas secara berurutan, dan periksa log saat ada masalah. Dengan latihan, proses ini bisa selesai dalam waktu singkat.
Pertanyaan yang Sering Diajukan
Apakah harus pakai VPS untuk deploy Rails?
Tidak harus. Platform seperti Heroku atau Render lebih mudah untuk pemula, tetapi VPS memberi kontrol penuh atas server dan biaya yang lebih terukur untuk jangka panjang.
Berapa RAM minimal untuk VPS menjalankan Rails?
1 GB cukup untuk aplikasi kecil dengan trafik rendah. Jika memakai Sidekiq atau database di server yang sama, pertimbangkan 2 GB agar tidak kehabisan memori.
Bagaimana cara update aplikasi setelah deploy pertama?
Masuk ke server, tarik perubahan terbaru dengan git pull, jalankan bundle install jika ada gem baru, migrasi database, precompile aset, lalu restart service dengan sudo systemctl restart nama-aplikasi.
