Triển khai một Ứng dụng Rails lên máy chủ Dokku
Giới thiệu
Triển khai một ứng dụng Rails có rất nhiều cách khác nhau, có nhiều nền tảng và công cụ hổ trợ cho việc này. Một trong những cách đó là deploy ứng dụng ứng dụng rails lên một máy chủ được cài đặt Dokku. Bài viết này sẽ cung cấp một tổng quan ngắn gọn về Dokku và cách triển khai một ứng dụng Rails lên máy chủ được cài đặt Dokku một cách dễ dàng.
Dokku là gì?
Nếu bắt buộc phải thích một cách ngắn gọn về Dokku thì có thể mô tả Dokku là một dự án mã nguồn mở Platform as a Service thay thế cho Heroku. Dokku tận dụng sức mạnh của Docker để có thể triển khai trên nhiều loại phần cứng và trên các máy chủ giá rẻ. Bạn hoàn toàn có thể tự kiểm soát máy chủ của bạn và tận hưởng các tính năng nổi bật tương tự như Heroku. Ngoài ra, Dokku hổ trợ khá nhiều plugin giúp bạn triển khai đa dạng ứng dụng hơn.
Triển khai một Ứng dụng Rails
Quy trình triển khai một ứng dụng Rails lên máy chủ Dokku rất đơn giản. Đầu tiên, bạn sẽ cần phải cài đặt CLI Dokku, đó là một giao diện dòng lệnh để quản lý và triển khai các ứng dụng. Sau khi cài đặt, bạn có thể sử dụng CLI để triển khai ứng dụng của bạn bằng cách tạo một ứng dụng Dokku và sau đó đẩy mã của bạn lên ứng dụng. Chúng ta hãy đi từng bước nhé.
1. Yêu cầu cấu hình tối thiểu
Một hệ điều hành được cài mới theo danh sách bên dưới:
Máy chủ có một trong các kiến trúc sau:
- AMD64 (được biết đến cũng như
x86_64
), Được sử dụng phổ biến cho máy chủ đám mây của Intel. - ARMV7 (được biết đến cũng như
armhf
), Được sử dụng thông dụng cho Raspberry PI. - ARMV8 (được biết đến cũng như
arm64
), Được sử dụng phổ biến cho Raspberry PI và AWS Graviton.
Để tránh máy chủ quá tải và xảy ra các lỗi không mong muốn trong quá trình sử dụng:
- Máy chủ cần ít nhất 1GB Ram
- Nếu máy chủ ít hơn 1GB Ram thì hãy tạo swap cho máy chủ của bạn:
cd /var touch swap.img chmod 600 swap.img dd if=/dev/zero of=/var/swap.img bs=1024k count=1000 mkswap /var/swap.img swapon /var/swap.img free echo "/var/swap.img none swap sw 0 0" >> /etc/fstab
Cuối cùng là một tên miền, điều này là không bắt buộc. Tuy nhiên, sử dụng tên miền sẽ giúp ứng dụng của bạn có thể truy cập một cách dễ dàng hơn là một địa chỉ IP.
2. Cài đặt Dokku lên máy chủ
Cài đặt Dokku bằng file bootstrap
wget https://dokku.com/install/v0.29.4/bootstrap.sh #0.29.4 là phiên bản cài đặt sudo DOKKU_TAG=v0.29.4 bash bootstrap.sh
Thiết lập SSH key và Virtualhost
# usually your key is already available under the current user's `~/.ssh/authorized_keys` file cat ~/.ssh/authorized_keys | dokku ssh-keys:add admin # you can use any domain you already have access to # this domain should have an A record or CNAME pointing at your server's IP dokku domains:set-global dokku.me # you can also use the ip of your server dokku domains:set-global 10.0.0.2
3. Cài đặt Dokku lên máy chủ
Sau khi hoàn thành cài đặt Dokku lên server, chúng ta sẽ bắt đầu triển khai một ứng dụng rails cơ bản theo các bước sau:
Trong ví dụ này, chúng ta sẽ dùng repo the Heroku Ruby on Rails “Getting Started” app để triển khai.
Clone source code từ git repository về máy chủ.
# from your local machine # SSH access to github must be enabled on this host git clone https://github.com/heroku/ruby-getting-started
Tạo một ứng dụng trên Dokku.
# on the Dokku host dokku apps:create ruby-getting-started
Mặc định, Dokku sẽ không cung cấp các database được cài đặt sẵn mà chúng ta phải cài đặt thông qua các Plugin. Bạn có thể truy cập danh sách các Plugins hiện có từ trang chủ của Dokku, ở đây mình sẽ dùng Postgres nên sẽ cài đặt plugin Postgres được cung cấp từ Dokku.
# on the Dokku host # install the postgres plugin # plugin installation requires root, hence the user change sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git
Tạo một database mới
# create a postgres service with the name railsdatabase dokku postgres:create railsdatabase
Liên kết ứng dụng đã tạo trước đó với database vừa tạo.
Bằng cách liên kết ứng dụng và database, Dokku sẽ tạo ra một biến môi trường là DATABASE_URL
trên ứng dụng Dokku.
# on the Dokku host # each official datastore offers a `link` method to link a service to any application dokku postgres:link railsdatabase ruby-getting-started
Thực hiện deploy app ruby-getting-started lên Dokku server. Tất cả những gì bạn cần làm là thêm remote vào git và push source code vào git repository của Dokku.
# from your local machine # the remote username *must* be dokku or pushes will fail cd ruby-getting-started git remote add dokku dokku@dokku.me:ruby-getting-started git push dokku main:master
Sau khi chạy lệnh git push dokku main:master, bạn sẽ nhận được ouput gần giống như bên dưới đây.
Counting objects: 231, done. Delta compression using up to 8 threads. Compressing objects: 100% (162/162), done. Writing objects: 100% (231/231), 36.96 KiB | 0 bytes/s, done. Total 231 (delta 93), reused 147 (delta 53) -----> Cleaning up... -----> Building ruby-getting-started from herokuish... -----> Adding BUILD_ENV to build environment... -----> Ruby app detected -----> Compiling Ruby/Rails -----> Using Ruby version: ruby-2.2.1 -----> Installing dependencies using 1.9.7 Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment Fetching gem metadata from https://rubygems.org/........... Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Using rake 10.4.2 ... =====> Application deployed: http://ruby-getting-started.dokku.me
Tổng kết
Installing a Rails application on a Dokku server is a great way to quickly and easily deploy an application. With a few simple commands, you will have your own application running in no time. In addition to the simple commands mentioned above, Dokku can also do many more things with advanced configurations, plugins provided by Dokku, and the community also makes Dokku more flexible and expandable.
Dokku has its advantages but also has its disadvantages, hopefully you will like it and look forward to the upcoming articles related to Dokku.