Ruby On Rails, sering disebut Rails aja, merupakan framework web pertama yang saya pelajari dulu sebelum mengenal CI, Laravel dan sejenisnya karena dulu koding PHP ga pake framework-frameworkan. Setelah sekian lama tidak menyentuh framework ini, saya penasaran kembali bagaimana perkembangan framework ini. Kali ini saya akan coba menuliskan caranya instalasi Rails pada Docker. Pastikan sudah menginstall docker pada komputer masing-masing
Setup Direktori dan Dockerfile
Pertama-tama buat terlebih dahulu direktori yang akan digunakan. Lokasinya bebas, misalkan saya menggunakan direktori dengan nama rails-app, kemudian masuk ke dalam direktori tersebut
mkdir rails-app
cd rails-app
Dalam direktori rails-app, buat file dengan nama Dockerfile, isinya adalah sebagai berikut
# syntax=docker/dockerfile:1
FROM ruby:3.2
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Configure the main process to run when running the image
CMD ["rails", "server", "-b", "0.0.0.0"]
skrip pada dockerfile adalah digunakan untuk membuat image docker dari aplikasi yang akan digunakan. Lebih lanjut tentang dockerfile, bisa dilihat pada tautan berikut Docker user guide dan Dockerfile reference.
Gemfile
buat sebuah file dengan nama gemfile yang isinya seperti ini untuk menentukan versi rails yang akan digunakan
source 'https://rubygems.org'
gem 'rails', "~> 7.0.2"
entrypoint.sh
Selanjutnya, kita akan membuat skrip entrypoint untuk memperbaiki masalah khusus Rails yang mencegah server memulai ulang saat file server.pid tertentu sudah ada sebelumnya. Skrip ini akan dijalankan setiap kali container dijalankan, isinya adalah sebaagai berikut:
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
docker-compose.yml
Yang terakhir adalah menggabungkan semua serta membuat mantra dengan docker-compose. Isi dari docker-compose.yml adalah sebagai berikut
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
Generate Rails Project
Perintah untuk menggenerate rails adalah dengan sebagai berikut
docker compose run --no-deps web rails new . --force --database=postgresql
dan dilanjutkan dengan mem-build image ulang dengan perintah
docker compose build
Database
Pengaturan koneksi ke database ada di direktori config/database.yml. Buka file tersebut dan ubah menjadi seperti berikut
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
Setelah itu, buat database yang digunakan yaitu myapp_development dan myapp_test dengan perintah
docker compose run web rake db:create
Welcome Rails
jalankan perintah untuk menjalankan aplikasi.
docker compose up
Violla….. semoga lancar,,, dan hasilnya ada di alamat http://localhost:3000
Menghentikan Aplikasi
docker compose down
Memulai Ulang Aplikasi
docker compose up
Rebuild Aplikasi
Jika kita mengubah file docker-compose, dockerfile kita harus membangun ulalng (rebuild) container yang sudah kita buat dengan perintah
docker compose up --build
Semoga bermanfaat