Setup Rails App di Docker

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

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.