Cấu hình và deploy tự động rails app lên Ubuntu server với nginx, unicorn, capistrano – P1

Là thân lập trình viên Ruby và Ruby on Rails framework, việc cấu hình server (VPS) để deploy rails app lên server 1 cách tự động là điều hầu như ai cũng phải làm trong đời.

Loạt bài viết này, mình sẽ đi từng bước HOÀN TOÀN THỦ CÔNG và giải thích cặn kẽ từng bước, để đảm bảo rằng bất cứ ai đọc xong cũng có thể hiểu, tự cấu hình và deploy rails app của mình lên server được.

Chuẩn bị

1 con Ubuntu VPS

Hiện nay có khá nhiều nhà cung cấp VPS giá rẻ, bạn chỉ cần có 1 thẻ tín dụng là có thể đăng ký và sử dụng được.

Những cái tên nổi tiếng có thể kể đến là:
Amazon Web Service: Amazon thì quá nổi tiếng rồi, nó có rất nhiều dịch vụ mà lần đầu vào ai cũng choáng ngợp hết, thậm chí là bối rối, không biết tương tác thế nào luôn. Với khoản VPS thì AWS có dịch vụ Elastic Compute Generation 2 – EC2 với những ưu đãi hấp dẫn (xem thêm ở đây)
vultr: chả biết tên thằng này đặt có ý nghĩa gì mà khó đọc vãi :3 Thằng này cũng cung cấp gói VPS giá rẻ, và VPS của nó thì sạch đúng nghĩa: nếu như EC2 được cấu hình sẵn 1 số thông số về bảo mật, thì với vultr, bạn sẽ phải tự làm thủ công 😛 mình sẽ nói rõ vấn đề này sau.
Google Cloud Platform: Uy tín của Google thì khỏi nói rồi, tuy nhiên mình chưa có điều kiện dùng thử :3

Còn thằng Azure của M$ nữa nhưng M$ hơi kín cổng cao tường nên mình không thích cho lắm.

Sự lựa chọn là ở bạn, còn trong bài viết này, mình sẽ sử dụng EC2 của Amazon 🙂

1 máy tính nền linux

Cái này tất nhiên rồi 😛 và máy tính cần cài đặt đầy đủ môi trường, công cụ lập trình để develop rails app.

Windows được không?

Được, nhưng sẽ hơi phiền phức, và mình khuyến nghị nên dùng Linux. Nếu bạn muốn dùng Wins thì vui lòng tự tìm các phương án tương đương cho các tác vụ trong loạt bài viết này 🙂

Lòng kiên nhẫn

Mình nói từ đầu là loạt bài viết này mình sẽ viết thật chi tiết, cặn kẽ và giải thích tận gốc, căn nguyên để bạn có thể nắm vững lý thuyết, đặng sau này gặp vấn đề thì có cơ sở để tự giải quyết nhanh gọn hơn.

Lời khuyên là bạn nên đọc chay 1 lượt để hình dung những gì mình cần, sẽ làm và đạt được, sau đó đọc lại lần 2 thì vừa đọc vừa thực hành 🙂

Khởi động

Đăng ký 1 con VPS EC2

Đăng nhập vào EC2 console page.
01
Với AWS EC2, Instance nghĩa là 1 con server VPS của mình. Click nút Launch Instance để tạo 1 con.
02
Màn hình tiếp theo, ta sẽ chọn hệ điều hành (AWS gọi là Amazon Machine Image (AMI)), trong bài viết này, chúng ta sẽ sử dụng Ubuntu Server 14.04 LTS.
03
Ở bước này, ta chọn loại cấu hình phần cứng cho con VPS của mình, với cá nhân mình thấy con t2.micro là đủ dùng rồi, ngoài ra nó còn được miễn phí 1 năm (kèm điều kiện) cho tài khoản mới.
Tiếp tục, click vào Next:Configure Instance Details.
04
Ở bước này thì cứ để mặc định thôi là đủ rồi. Click Next: Add Storage để thêm ổ cứng cho VPS.
05
Ổ cứng 8Gb mình nghĩ là đủ rồi, ai cần thêm thì cứ điểu chỉnh theo yêu cầu, nhớ là ổ cứng nhiều thì nhiều tiền nhé 😛
Tiếp, click Next: Tag Instance để đặt tên cho VPS.
06
Đặt tên xong, click Next: Configure Security Group để cấu hình 1 số thông tin bảo mật cơ bản.
07
Click Add Rule. Chọn HTTP ở mục Type. Tuỳ chọn này cho phép server bạn có thể truy cập từ bên ngoài thông qua HTTP.
Tiếp, click Review and Launch để xem qua VPS mình.
08
Review lại 1 lượt xem mọi thứ đã ok thì click Launch để khởi động VPS.
09
Trước khi khởi động VPS, mình cần cấu hình ssh key để có thể login vào VPS bằng ssh được.

Ở bước này, bạn sẽ chọn/tạo 1 ssh (*.pem) sau này sẽ dùng để ssh vào VPS. Tick chọn I acknowledge that… và cuối cùng click Launch Instance, chờ 1 lúc để VPS khởi động.
10
Nếu chạy thành công, mục Instance State sẽ là running. Chọn Instance và click Connect.
11
Ở màn hình này, AWS sẽ hướng dẫn cho mình cách ssh vào VPS, bạn để ý bước 4: Public IP sẽ là Ip dùng để kết nối vào VPS của mình.
Lưu ý: mỗi lần bạn restart Instance thì địa chỉ Public IP sẽ bị thay đổi, lưu ý kẻo sau này lại loay hoay 😛
Đến đây là mình có 1 con VPS rồi, tiếp đến là bảo mật cho nó.

Bảo mật cho server

Việc bảo mật là vấn đề đầu tiên chúng ta cần quan tâm khi làm việc với server. May mắn sao, đêm qua, bạn của mình – 1 author của appconus blog đã viết 1 bài về vấn đề này, mình đỡ phải viết 😛 Bạn sang đây để đọc, tuy nhiên, trước khi bạn sang đó, mình sẽ điểm qua và giải thích những việc cần làm:

  • Chỉ cho phép đăng nhập bằng giao thức ssh: ssh tất nhiên là bảo mật hơn mật khẩu rồi, mật khẩu thì có thể bị mất cắp chứ ssh thì khả năng bị mất cắp cặp key của bạn gần như là không thể xảy ra, trừ khi bạn bị mất máy tính, mà mất phát thì lên đó chặn cái key trong máy mình là xong 🙂
  • Đổi cổng 22 mặc định của ssh: điều này sẽ gây khó khăn đáng kể cho hacker khi nó muốn tấn công vào server mình. Kiểu như sát thủ muốn đến ám sát mình nhưng đến trường lại không biết mình ngồi ở phòng nào vậy 😛

  • Bật tường lửa: việc này sẽ giúp kiểm soát tốt hơn các gói tin vào/ra server mình, kiểu như thuê bảo vệ gác cổng cho nhà mình ấy mà 😛 1 lưu ý là khi bạn đổi cổng ssh mặc định thì nhớ mở cổng này ra cho ssh nghe 🙂

  • KHÔNG sử dụng tài khoản root, mà sử dụng 1 tài khoản khác với quyền sudo: việc này có rất nhiều lợi thế trong việc bảo mật và phòng ngừa hậu hoạ. Vd: tài khoản này sẽ bị giới hạn phạm vi hoạt động, khiến các đoạn mã độc muốn huỷ hoại server mình thì chỉ gói gọn trong phạm vi tài khoản đó thôi, nếu muốn lấn quyền thì phải nhập mật khấu cho sudo, mà cái này thì…:P Bên bài viết kia bạn mình cũng có giải thích thêm nữa, mời bạn đọc thêm bên đó.

  • KHÔNG cho phép đăng nhập bằng tài khoản root: mình đã có tài khoản có quyền sudo là đủ để thao tác tất cả rồi. Nếu vẫn login được bằng root, 1 ngày đẹp trời nào đó tài khoản root rơi vào tay hacker thì nguy hiểm khôn lường 😛 Với EC2, AWS đã tạo sẵn cho bạn 1 user tên là ubuntu có quyền sudo, đồng thời EC2 sẽ chặn không cho đăng nhập bằng root luôn 🙂

  • KHÔNG cho phép đăng nhập bằng mật khẩu: cái này mình có nói trên mục ssh rồi.

  • KHÔNG dùng chung 1 ssh key để login vào server: đây là phương thức của EC2 mà mình không thích cho lắm. Khi bạn tạo 1 VPS, EC2 sẽ sinh cho bạn 1*.pem file, bạn sẽ dùng file này để login vào server bằng giao thức ssh, sau đó thường thì sẽ chia sẻ file này cho các thành viên khác trong team. Việc làm này có 2 bất lợi:

    • Chẳng may file này bị lộ ra (trong quá trình vận chuyển, lưu trữ) thì người khác cũng sẽ truy cập vào server được.
    • Khi file bị lộ, hoặc 1 thành viên rời khỏi dự án, bạn remove key này trên server thì TẤT CẢ các thành viên khác cũng bị truất quyền thi đấu luôn.

Vậy nên, best practice cho tình huống này mà mình thấy nhiều người hay dùng là mỗi người sẽ dùng 1 public key riêng của mình, và người cũ sẽ add key của người mới vào để người mới có thể đăng nhập được.

OK, sang bài kia đọc đi 😛

BONUS Đơn giản hoá việc login vào server

Để làm việc với VPS, việc phải mở nhiều cửa sổ terminal và login nhiều session là điều đương nhiên. Chắc chắn câu lệnh ssh -i ~/.ssh/foo_key.pub -p 2323 user@xx.yy.zz.tt sẽ tốn kha khá thời gian và rất phiền hà trong việc nhớ, gõ.

Để chấm dứt ác mộng này, ta chỉ việc cấu hình alias cho ssh (tương tự với git hay bash, zsh vậy):

Điền vào với nội dung:

vd:

Vậy là lần sau, muốn kết nối vào server bạn chỉ việc gõ:

Tada!

Đến đây, bạn đã có 1 con VPS với khả năng bảo mật kha khá, bạn có thể an tâm phần nào về 1 ngày đẹp trời mọi dữ liệu của bạn không cánh mà bay rồi 😛
Bài viết tiếp theo, sẽ là các cấu hình trên VPS để sẵn sàng đón nhận phiên bản rails app đầu tiên 😛 Mời các bạn đón đọc.

Lập trình và hơn thế nữa

Spread the love
  • 2
  •  
  •  
  •  
  •  
    2
    Shares

Leave a Reply

Be the First to Comment!

avatar
  Subscribe  
Notify of