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.