Deploy ứng dụng Rails lên server Ubuntu 18.04 với Puma, Nginx và Capistrano
Xin chào các bạn, có lẽ cũng gần nửa năm rồi mình chưa viết bài mới nhỉ. Hôm nay do thời hạn dùng thử của Amazon free tier đã hết mình mất cả buổi sáng đổi server của blog qua bên Vultr. Do tốn khá nhiều thời gian và công sức nên nhân dịp này mình muốn viết 1 bài để chia sẽ với các bạn cách deploy ứng dụng Rails lên server Ubuntu 18.04 với Puma, Nginx và Capistrano
Trước khi bắt tay vào cài đặt bạn cần có các điều kiện dưới đây:
- Server Ubuntu 18.04. Mình đang sử dụng server của Vultr. Theo mình tìm hiểu thì hiện tại đang là rẻ nhất trong số các nhà cung cấp VPS có uy tín ( 3.5$/tháng ).
- Ứng dụng Rails sẵn sàng để deploy.
Bước 1: Cài đặt Nginx
|
|
Bước 2: Cài đặt database (Postgres)
|
|
Khi deploy Capistrano chỉ chạy lệnh db:migrate, vì vậy các bạn cần tạo sẵn database để deploy được suôn sẻ.
Vào PostgresSQL prompt bằng các lệnh sau:
|
|
Sau đó ta tạo cơ sở dữ liệu db_name (tên database được định nghĩ trong file database.yml)
|
|
Để chạy được lệnh db:migrate ta cần có database role, vì vậy ta tạo role như sau (username và password được định nghĩa trong file database.yml) :
|
|
Cấp quyền cho user để có thể thao tác với database
|
|
Bước 3: Cài đặt RVM
Đầu tiên ta phải cài đặt GPG keys
|
|
Sau đó thực hiện các câu lệnh sau để cài đặt RVM
|
|
Cài đặt ruby 2.5.3
|
|
Bước 4: Thiết lập SSH keys
Khi deploy ứng dụng lên server ta cần clone code của ứng dụng từ Github (Bitbucket, Gitlab…). Để clone code mà không cần phải nhập mật khẩu (thông qua SSH protocol, không phải HTTP) ta cần tạo SSH key.
|
|
Nếu không cần cài đặt gì đặc biết các bạn chỉ việc enter. Sau đó sẽ có 2 file được tạo ra tại thư mục ~/.ssh/
là id_rsa.pub
và id_rsa
. Sau đó bạn thêm id_rsa.pub
vào deployment keys theo hướng dẫn sau (Cài đặt)
Đến đây đã thành công thì sẽ hiển thị như sau
|
|
Nếu trên máy local của bạn chưa có ssh keys, bạn cũng làm như trên để tạo key mới. Sau đó thêm khoá công khai vào Authorized Keys file trên server.
|
|
Bước 5: Config Capistrano và Nginx
Đầu tiên ta thêm các gem sau vào group :development trong Gemfile:
|
|
Sử dụng bundler để cài đặt các gem đó
|
|
Sau đó thực hiện lệnh sau để config Capistrano:
|
|
Các file sau tự động được tạo ra:
Capfile
: load các task đã được định nghĩa sẵn như: chọn Ruby version, precompile assest, clone git repo…config/deploy.rb
: cấu hình các task dùng để deploy lên server như truy cập server qua ssh, quản lý các file logs…config
: thư mục chứa file config cho loại môi trường như staging, production.
Thay thế nội dung file Capfile
như sau:
|
|
Thay thế các thông số sau tương ứng với ứng dụng của mình. Phần còn lại thì giữ nguyên không đổi.
|
|
Tiếp theo ta cần cấu hình nginx để lắng nghe các request từ port 80 và chuyển tới Puma socket. Tạo file nginx.conf tại thư mục config (thay thế server_username và appname tương ứng):
|
|
Bước 6: Deploy ứng dụng
Các bạn tạo commit và push lên nhánh master như sau:
|
|
Sau đó deploy lần đầu tiên với capistrano:
|
|
Lệnh này sẽ tự động deploy ứng dụng của bạn lên server, cài đặt các gem cần thiết và khởi động puma server. Quá trình sẽ mất khoảng 5-15 phút.
Nếu mọi thứ suôn sẻ tiếp đến bạn cần symlink file nginx.conf trong ứng dụng Rails tới thư mục sites-enabled
:
|
|
Khởi động lại Nginx:
|
|
Tới đây các bạn đã có thể truy cập website của mình thông qua IP của server rồi. Với các lần deploy tiếp theo các bạn chỉ cần chạy lệnh sau là đủ (lưu ý nếu bạn thay đổi file config/nginx.conf thì cần phải khởi động lại Nginx):
|
|
Tổng kết
Như vậy mình đã hướng dẫn các bạn deploy ứng dụng Rails lên server Ubuntu 18.04 với Puma, Nginx và Capistrano. Hi vọng các bạn thành công!!! Với các bạn có server dụng lượng bộ nhớ thấp khi deploy có khả năng bị lỗi thì có thể tham khảo bài viết sau:
- Thêm không gian Swap trên Server Ubuntu 18.04 (comming soon)