Bạn muốn xây dựng một trang web xịn xò, chính xác là một dự án production nho nhỏ?
Bạn mua tên miền nhưng sử dụng cùng vercel thì trông không chuyên nghiệp lắm?
Bạn muốn control hết các tính năng, can thiệp sâu hơn vào server mà không cần vercel nữa?
Bạn vừa xem hướng dẫn deploy Express.js lên Vercel, nhưng nhận ra nó rất chậm, bạn cần một thứ tốt hơn, nhanh hơn, trông pro hơn?
VPS! Một giải pháp khá là… Tốt. Nó cung cấp cho chúng ta một một máy chủ ảo, có thể deploy bất cứ thứ gì, tạo bất cứ database hay bao nhiêu database tùy thích, nói chung bạn muốn làm gì thì làm.
VPS (Virtual Private Server) là một máy chủ ảo được tạo ra bằng cách phân chia một máy chủ vật lý thành nhiều máy chủ ảo khác nhau. Mỗi VPS là một hệ thống hoàn toàn riêng biệt, có một phần CPU riêng, dung lượng RAM riêng, dung lượng ổ SSD hoặc HDD riêng, địa chỉ IP riêng và hệ điều hành riêng. Người dùng có toàn quyền quản lý root và có thể restart lại hệ thống bất cứ lúc nào.
VPS thường được lựa chọn bởi các chủ sở hữu website có lưu lượng truy cập từ thấp, trung bình đến khá cao.
Nhà cung cấp dịch vụ VPS sử dụng công nghệ ảo hóa để chia sẻ tài nguyên của một máy chủ vật lý thành nhiều máy ảo. Công nghệ ảo hóa này tạo ra một lớp ảo hóa giữa phần cứng máy chủ vật lý và hệ điều hành của VPS. Lớp ảo hóa này chia sẻ tài nguyên của máy chủ vật lý thành các phần nhỏ hơn, mỗi phần được gọi là một “máy ảo”.
Người dùng mua VPS từ nhà cung cấp dịch vụ VPS. Khi mua VPS, người dùng sẽ chọn cấu hình VPS phù hợp với nhu cầu của mình. Cấu hình VPS bao gồm các thông số như số lượng CPU, RAM, dung lượng ổ cứng,…
Sau khi mua VPS, nhà cung cấp dịch vụ VPS sẽ cung cấp cho người dùng quyền truy cập vào máy ảo của họ. Người dùng có thể truy cập máy ảo của mình thông qua giao diện quản lý VPS.
Sau khi truy cập vào máy ảo, người dùng cần cài đặt hệ điều hành và các ứng dụng cần thiết. Hệ điều hành phổ biến nhất được sử dụng cho VPS là Linux và Windows server.
Sau khi cài đặt hệ điều hành và các ứng dụng, người dùng có thể sử dụng máy ảo để lưu trữ dữ liệu, chạy ứng dụng, hoặc hosting website.
Thông thường, VPS sẽ sử dụng Linux, bạn cần biết thêm một số câu lệnh của Linux.
Linux là một nền tảng mã nguồn mở đi kèm với một loạt các tùy chọn mà bạn có thể chọn. Là mã nguồn mở, các Hệ điều hành này thực tế miễn phí, với các phiên bản doanh nghiệp vẫn rẻ hơn hệ điều hành Windows.
Ubuntu và CentOS là hai hệ điều hành dựa trên Linux dành cho VPS, dễ sử dụng hơn và lý tưởng cho người dùng lần đầu.
Ubuntu là một bản phân phối khác của hệ điều hành mã nguồn mở Linux dựa trên kiến trúc của Debian. Ubuntu được tích hợp nhiều tính năng và package để xây dựng nền tảng chủ chốt đối với tất cả các dự án. Bên cạnh đó người dùng cũng đánh giá cao đây là một hệ điều hành ổn định, luôn cập nhật phiên bản mới cho người dùng thường xuyên và rất dễ dàng điều chỉnh với các tính năng bảo mật hàng đầu.
Nếu như bạn là người mới bắt đầu thì Ubuntu chính là lựa chọn phù hợp vì cộng đồng khá lớn, tài liệu miễn phí được cập nhật thường xuyên và giao diện trực quan, dễ sử dụng hơn so với CentOS.
Vì vậy, chốt lại chúng ta sẽ sử dụng hệ điều hành Ubuntu cho hướng dẫn này.
Tùy theo nhu cầu và ví tiền, chúng ta có thể lựa chọn sao cho tối ưu nhất.
Ở đây, chúng ta sử dụng cho môi trường Node.js, nó khá nhẹ nhàng, hầu hết UI sẽ xử lý phía client, server bằng Node.js cũng không quá nặng nề.
Tùy theo nhu cầu, có thể chúng ta sẽ cài đặt thêm cơ sở dữ liệu, nhưng với một trang web nhỏ hoặc lượng user không lớn, chúng cũng không ngốn quá nhiều.
Vậy chốt lại:
Nếu một trang web nhỏ hoặc user không quá nhiều, 1-2 CPU là hoàn toàn cân được. Sau này lớn hơn thì scale cũng không khó khăn gì.
Nếu lượng data không lớn lắm, cỡ 20-30 GB là quá đủ, sau này lớn hơn thì mua thêm cũng dễ dàng.
RAM là cái ăn khá nhiều cho một dự án, ngoài React hoặc tương tự ra nó chạy hầu hết phía client, nhưng Node.js, Next.js hay Nuxt,… ngốn cũng hơi căng. 2-3 GB là đủ, sau này nếu scale dự án lớn hơn, tách các service ra hay chạy nhiều dự án một lúc thì vẫn nên xem xét tăng lên một xíu.
Trường hợp trong bài viết này, bạn đã thực hiện các bước sau:
Mua hoặc thuê được:
Tên miền: Với domain, mình recommend ông này: squarespace, khá dễ dùng và khá ngon.
VPS: Như ở bài viết đầu, mình có chia sẻ rằng mình từng sử dụng VPS 2 tháng free tại digitalocean, tuy nhiên muốn được 2 tháng free, bạn nên bấm vào đây:
Cài đặt một số thứ sau:
Terminus hoặc bất cứ nền tảng kết nối SSH nào, nó là một nền tảng SSH cho Mobile và Desktop. Bạn có thể kết nối với các thiết bị từ xa chỉ với một cú nhấp chuột. Termius giúp tổ chức công việc của nhiều nhóm DevOps và kỹ sư. Nó giảm công việc quản lý người dùng. Vì vậy trong này mình sẽ dùng nó để kết nối tới VPS để gõ cho sướng. Nó có bản trả phí và có bản free, tùy bạn thôi.
Tất nhiên là trong các nhà cung cấp dịch vụ, trang quản lý VPS của bạn cũng sẽ có phần kết nối SSH tới VPS nhưng nó không ngon tí nào, lại còn xấu nữa… Nên thôi, cài Terminus đi.
PgAdmin hoặc bất cứ ứng dụng quản lý cơ sở dữ liệu nào, trong trường hợp bạn cần phải sử dụng tới database, việc dùng command line để thao tác thì khoai lắm. Và tại sao lại là PgAdmin thì vì nếu lúc trước bạn dùng qua Vercel thì chắc hẳn bạn đã dùng Postgresql rồi, nên dùng luôn nó cho tiện.
Được rồi, bắt đầu bằng bước đầu tiên:
Tất nhiên, bạn phải vào Cloudflare đăng ký và làm theo hướng dẫn cơ bản. Tất nhiên cũng có bản trả phí và bản miễn phí, cái này tùy bạn thôi. Nhưng bản free của nó cũng khá ngon rồi. Sau đó bạn vào trang dashboard của phần quản lý domain, thêm 2 cái nameserver của cloudflare vào phần quản lý nameserver của bạn.
Bạn nên xóa các nameserver mặc định đi trước khi nameserver mới của cloudflare vào!!!
Lưu ý: Có thể phần quản lý nameserver trong domain của bạn nó sẽ tên là NS chứ không phải nameserver.
Sau khi liên kết nameserver, bạn sẽ cần đợi 5-10p có thể ngắn hoặc dài hơn, sau khi reload lại nó báo domain được active thì bạn sẽ làm bước sau:
Vào trang https://dash.cloudflare.com/[id]/[domain]/dns/records
, thêm các bản ghi vào đó.
Đầu tiên bạn sẽ thêm root:
Type: A |
Name: @ |
IPV4: [IP SERVER của bạn] |
---|
Sau đó thêm vài cái subdomain nếu bạn thích, và mình vẫn khuyên là nên có www
Các subdomain bạn có thể thêm bằng CNAME cho lẹ:
Type: CNAME |
Name: www |
Target: [Domain của bạn] |
---|
Sau khi bạn thêm và config các domain trong cloudflare hoàn tất, quay lại trang dashboard server và bật Terminus lên. Sau khi đăng ký và hoàn tất bước đầu, bạn bấm vào NEW HOST
, connect một cái mới.
Lời khuyên: Để đảm bảo bảo mật, bạn nên đổi port mặc định connect SSH đi nhé. Mặc định là 22.
Đầu tiên, ở input Address, bạn nhập ip của server vào.
Phần tiếp theo là: Username, bạn xem trong dashboard của server sẽ có. Nhiều server, mặc định sẽ là root
.
Phần tiếp theo là Password, bạn ngó trong email của bạn, sau khi đăng ký VPS hoàn tất nó sẽ gửi đầy đủ thông tin gồm username, password,… cho bạn ở trong email.
Rồi, nếu như không có gì sai sót thì bạn có thể vào trong server rồi.
Sau khi vào tới giao diện chính thao tác với server thông qua Terminus, có vài thứ bạn cần phải install và setup như sau:
Thứ nhất: Caddy, một phần mềm web server, load balancer, và reverse proxy. Caddy có những tính năng nổi bật như:
Lưu ý: Caddy không phải chỉ là một service quản lý reverse proxy, mà là một nền tảng HTTP mạnh mẽ và linh hoạt. Caddy có thể được sử dụng cho nhiều mục đích khác nhau, như phục vụ các trang web tĩnh, cung cấp các trang web SaaS, xây dựng các API gateway, v.v.
Tại sao không phải NGINX?
Để sử dụng nó, chúng ta có thể đọc thêm document tại đây
Để cài đặt nó, chúng ta sẽ chạy tất cả các lệnh sau một cách lần lượt(Ubuntu):
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Thứ 2: Bun, Node.js(NVM)
Bun được thiết kế như một thay thế trực tiếp cho Node.js. Nó triển khai nguyên bản hàng trăm API Node.js và Web, bao gồm fs, path, Buffer và nhiều hơn nữa.
Mục tiêu của Bun là chạy hầu hết JavaScript phía máy chủ trên thế giới và cung cấp các công cụ để cải thiện hiệu năng, giảm độ phức tạp và nhân lên năng suất của nhà phát triển.
Bun nhằm mục đích là một thay thế trực tiếp cho Node.js. Nó triển khai thuật toán giải quyết mô-đun của Node, các biến toàn cục như Buffer và process, và các mô-đun được tích hợp như fs và path. Nhấp để theo dõi tiến trình của Bun đạt được sự tương thích đầy đủ.
Vì vậy, mình vẫn ưu tiên dùng bun hơn, tuy nhiên biết đâu có một số thứ cần phải cài đặt hoặc chạy bằng Node.js thì OK! Chúng ta cài cả 2 đi.
sudo apt install unzip
curl -fsSL https://bun.sh/install | bash
Quá đơn giản, chúng ta cũng có 3 dòng sau:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nvm install 20
bun
node
Thứ 3: Add SSH key cho github account của bạn.
Ví dụ bạn có một dự án private, mỗi lần clone hay pull code bạn phải đăng nhập lại sao, vậy có phải khó khăn không? Nó thật sự rất bất tiện, vì vậy chúng ta sẽ chọn clone code bằng SSH và phải add SSH key vào github.
Rất đơn giản, chúng ta có duy nhất 2 bước sau:
ssh-keygen -t ed25519 -C "[email protected]"
Đầu tiên, mở key public ra, nhớ nó có đuôi là .pub
:
vi ~/.ssh/id_ed25519.pub
Sau đó copy nó và đưa vào phần Add new SSH Key ở github.
Lưu ý: Đặt tên title dễ hiểu một xíu kẻo về sau khó hiểu lắm :v
Sau khi add được SSH key, bạn có thể clone code bằng tab SSH, đừng dùng Https nữa nhé!
Thứ 4: PM2 là một trình quản lý tiến trình sản xuất cho các ứng dụng Node.js với trình cân bằng tải tích hợp. Mục đích của PM2 là giữ cho các ứng dụng hoạt động mãi mãi, tải lại chúng mà không có thời gian ngừng hoạt động và tạo điều kiện thuận lợi cho các tác vụ quản trị hệ thống thông thường.
Hiểu nôm na, bạn sử dụng nó để quản lý tiến trình, quản lý logs và nó sẽ chạy lại nếu như lỗi. Vì vậy nó hoàn toàn hữu ích với việc khởi chạy một ứng dụng Node.js trên server.
OK, cài nó thôi, nó là một package có trên npmjs vì thế nên mình cứ chạy npm i ...
là được thôi
npm install pm2 -g
OK vậy là cài được kha khá thứ rồi, giờ phần chạy như nào, start như nào, config caddy cho server như nào… Sẽ có ở phần tiếp theo nhé! Chắc chúng mình sẽ deploy thử một dự án React đơn giản xem sao nhé!
Vậy chúng ta đã kết thúc hết mấy thứ config loằng ngoằng ngoằn ngoèo rồi! Chúc các bạn thành công(nhân)!
Vậy nha! Cảm ơn các bạn đã đọc :v