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 mà mình hay sử dụng đối với khách hàng vừa và nhỏ ở TakeIT Vietnam. 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é.
- 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 (alternatively known as
x86_64
), commonly used for Intel cloud servers - ARMV7 (alternatively known as
armhf
), commonly used for Raspberry PI - ARMV8 (alternatively known as
arm64
), commonly used for Raspberry PI and 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:1234567891011<span class="token builtin class-name">cd</span> /var<span class="token function">touch</span> swap.img<span class="token function">chmod</span> <span class="token number">600</span> swap.img<span class="token function">dd</span> <span class="token assign-left variable">if</span><span class="token operator">=</span>/dev/zero <span class="token assign-left variable">of</span><span class="token operator">=</span>/var/swap.img <span class="token assign-left variable">bs</span><span class="token operator">=</span>1024k <span class="token assign-left variable">count</span><span class="token operator">=</span><span class="token number">1000</span><span class="token function">mkswap</span> /var/swap.img<span class="token function">swapon</span> /var/swap.img<span class="token function">free</span><span class="token builtin class-name">echo</span> <span class="token string">"/var/swap.img none swap sw 0 0"</span> <span class="token operator">>></span> /etc/fstab
- Nếu máy chủ ít hơn 1GB Ram thì hãy tạo swap cho máy chủ của bạn:
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.
- AMD64 (alternatively known as
- Cài đặt Dokku lên máy chủ
Cài đặt Dokku bằng file bootstrap
123<span class="token function">wget</span> https://dokku.com/install/v0.29.4/bootstrap.sh <span class="token comment">#0.29.4 là phiên bản cài đặt</span><span class="token function">sudo</span> <span class="token assign-left variable">DOKKU_TAG</span><span class="token operator">=</span>v0.29.4 <span class="token function">bash</span> bootstrap.shThiết lập SSH key và Virtualhost
12345678910<span class="token comment"># usually your key is already available under the current user's `~/.ssh/authorized_keys` file</span><span class="token function">cat</span> ~/.ssh/authorized_keys <span class="token operator">|</span> dokku ssh-keys:add admin<span class="token comment"># you can use any domain you already have access to</span><span class="token comment"># this domain should have an A record or CNAME pointing at your server's IP</span>dokku domains:set-global dokku.me<span class="token comment"># you can also use the ip of your server</span>dokku domains:set-global <span class="token number">10.0</span>.0.2 - Triển khai một ứng dụng Rails
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ủ.
1234<span class="token comment"># from your local machine</span><span class="token comment"># SSH access to github must be enabled on this host</span><span class="token function">git</span> clone https://github.com/heroku/ruby-getting-startedTạo một ứng dụng trên Dokku
123<span class="token comment"># on the Dokku host</span>dokku apps:create ruby-getting-startedMặ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
12345<span class="token comment"># on the Dokku host</span><span class="token comment"># install the postgres plugin</span><span class="token comment"># plugin installation requires root, hence the user change</span><span class="token function">sudo</span> dokku plugin:install https://github.com/dokku/dokku-postgres.gitTạo một database mới
123<span class="token comment"># create a postgres service with the name railsdatabase</span>dokku postgres:create railsdatabaseLiê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.1234<span class="token comment"># on the Dokku host</span><span class="token comment"># each official datastore offers a `link` method to link a service to any application</span>dokku postgres:link railsdatabase ruby-getting-startedThự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.123456<span class="token comment"># from your local machine</span><span class="token comment"># the remote username *must* be dokku or pushes will fail</span><span class="token builtin class-name">cd</span> ruby-getting-started<span class="token function">git</span> remote <span class="token function">add</span> dokku dokku@dokku.me:ruby-getting-started<span class="token function">git</span> push dokku main:masterSau 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.
1234567891011121314151617181920212223Counting objects: <span class="token number">231</span>, done.Delta compression using up to <span class="token number">8</span> threads.Compressing objects: <span class="token number">100</span>% <span class="token punctuation">(</span><span class="token number">162</span>/162<span class="token punctuation">)</span>, done.Writing objects: <span class="token number">100</span>% <span class="token punctuation">(</span><span class="token number">231</span>/231<span class="token punctuation">)</span>, <span class="token number">36.96</span> KiB <span class="token operator">|</span> <span class="token number">0</span> bytes/s, done.Total <span class="token number">231</span> <span class="token punctuation">(</span>delta <span class="token number">93</span><span class="token punctuation">)</span>, reused <span class="token number">147</span> <span class="token punctuation">(</span>delta <span class="token number">53</span><span class="token punctuation">)</span>-----<span class="token operator">></span> Cleaning up<span class="token punctuation">..</span>.-----<span class="token operator">></span> Building ruby-getting-started from herokuish<span class="token punctuation">..</span>.-----<span class="token operator">></span> Adding BUILD_ENV to build environment<span class="token punctuation">..</span>.-----<span class="token operator">></span> Ruby app detected-----<span class="token operator">></span> Compiling Ruby/Rails-----<span class="token operator">></span> Using Ruby version: ruby-2.2.1-----<span class="token operator">></span> Installing dependencies using <span class="token number">1.9</span>.7Running: bundle <span class="token function">install</span> --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deploymentFetching gem metadata from https://rubygems.org/<span class="token punctuation">..</span><span class="token punctuation">..</span><span class="token punctuation">..</span><span class="token punctuation">..</span><span class="token punctuation">..</span>.Fetching version metadata from https://rubygems.org/<span class="token punctuation">..</span>.Fetching dependency metadata from https://rubygems.org/<span class="token punctuation">..</span>Using rake <span class="token number">10.4</span>.2<span class="token punctuation">..</span>.<span class="token operator">==</span><span class="token operator">==</span><span class="token operator">=</span><span class="token operator">></span> Application deployed:http://ruby-getting-started.dokku.me
Tổng kết
Cài đặt một ứng dụng Rails lên máy chủ Dokku là một cách tuyệt vời để nhanh chóng và dễ dàng triển khai một ứng dụng. Với một vài câu lệnh là bạn đã có một ứng dụng của mình hoạt động trong thời gian ngắn. Ngoài ra những câu lệnh đơn giản bên trên, Dokku còn có thể làm được nhiều việc hơn với các cấu hình nâng cao, các plugin được cung cấp bởi Dokku và cộng đồng cũng làm cho Dokku ngày càng linh hoạt và ngày càng mở rộng.
Dokku có những ưu điểm nhưng đồng thời cũng có những nhược điểm, hi vọng bạn sẽ thích và chờ các bài viết liên quan đến Dokku sắp tới.