Panduan Deploy Ruby on Rails ke VPS untuk Pemula

Meja kerja developer dengan laptop menampilkan terminal dan catatan langkah deploy

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 -f untuk log Puma.
  • /var/log/nginx/error.log untuk error dari Nginx.
  • log/production.log di 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.

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *