Cài đặt Ruby On Rails với Docker

Làm việc Ruby On Rails với Docker là một trải nhiệm thú vị mà mình đã được thực hành qua. Bài viết này mình viết lại các bước Cài đặt một dự án Rails từ docker-compose để có thể tiết kiệm cho bạn nào đang tìm kiếm nhé.

Bài viết khá lạ với những bạn chưa biết gì về Docker 🙂 Cho nên bạn nào chưa biết và dùng về Docker thì không nên đọc làm gì cho mất thời gian. Bạn nên dành thời gian cài đặt, sử dụng Docker trước đã rồi quay lại đọc sau nhen. hihi

 

Tạo dự án

Đầu tiên bạn tạo giúp mình 1 folder tên dự án của mình nhé. Tiếp đến tạo file Dockerfile với nội dung bên dưới. File này chứa tất cả các cài đặt phụ thuộc cho container của chúng ta.

 

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# 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

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

Tiếp đến hãy tạo 1 file Gemfile với nội dung bên dưới nhé. File này sẽ được ghi đè những package của Rails khi chúng ta chạy rails new

 

source 'https://rubygems.org'
gem 'rails', '~>5'

Tạo file rỗng Gemfile.lock để ghi lại các phiên bản cho Gemfile

Tạo file entrypoint.sh chứ các command sẽ chạy khi chúng ta start docker. Code bên dưới sẽ xoá file server.pid  trong thư mục tmp của thèn rails. Mình từng dính lỗi này, khởi động docker mãi không được, tìm tòi 1 lúc thì có người bảo nên xoá file này đi. Vì mình tay ngang vào code Rails nên không chuyên lắm (hehe)

 

#!/bin/bash
set -e

rm -f /myapp/tmp/pids/server.pid

exec "$@"

Cuối cùng là file docker-compose.yml nhân vật chính của ngày hôm nay. Người sẽ cài đặt môi trường, điều khiển các phụ thuộc, vân vân và mây mây… Chúng ta sẽ cài đặt 1 image mới là PostgreSQL để quản lý thao tác dữ liệu. Lâu nay dùng MySQL quen rồi nhìn thèn này lạ vãi ra 😀

 

version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  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

Các bạn có thể chọn port khác cũng được nhé. Ở đây mình cài theo mặc định thường dùng là port 3000

 

Build dự án nào

Trước tiên, chúng ta cần cài đặt dự án Rails. Các bước tiếp theo này chúng ta dùng trình command line nhé

docker-compose run web rails new . --force --no-deps --database=postgresql

Sau khi tiến trình cài đặt chạy xong, bạn sẽ thấy folder dự án của mình sẽ có đầy đủ bộ code của Ruby On Rails (hay thật chứ)

Tiếp theo build cho thèn Docker

docker-compose build

 Tạo và kết nối Database

Dự án đã có thể chạy được rồi, nhưng cần database để connect và sử dụng.

Bạn mở file config/database.yml sau đó kiểm tra lại các thông số bên dưới để chỉnh lại nhé

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

 

Bây giờ chúng ta khởi động docker lên thôi

 

docker-compose up

Cuối cùng, tạo database cho dự án

docker-compose run web rake db:create

 Xem thành quả nào

Bạn truy cập vào dự án xem thành quả mày mò nãy giờ nào: http://localhost:3000

 

Trên đây là bài ghi lại các bước cài đặt một dự án Ruby On Rails với Docker. Hi vọng sẽ giúp ích cho các bạn! Nếu có khó khăn gì trong quá trình cài đặt, bạn có thể để lại góp ý phần Bình luận hoặc liên hệ trực tiếp mình nha.

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận

More Post

MySQL Procedure là gì?

Procedure trong MySQL là một tập các khai báo sql được lưu trữ trong cơ sở dữ liệu(database) thực...

Dependency Injection và Service Container trong Laravel

Service Container trong Laravel như là trung tâm của một ứng dụng, có mặt mọi nơi trong dự án,...

Laravel Swagger là gì? Hướng dẫn tạo Swagger trong Laravel

Swagger là một framework giúp bạn định nghĩa, mô tả các API trong dự án một cách trực quan, rõ...

2
0
Rất thích suy nghĩ của bạn, hãy bình luận.x