Trong bài viết này, mình sẽ hướng dẫn các bạn deploy lên production website Next.js lên Vultr VPS. Với Node.Js thì tương tự 99.99% nhé [chắc khác mỗi 1 câu lệnh build code]
Chúng ta sẽ tiến hành tạo một VPS mới [máy chủ riêng ảo] với hệ điều hành Ubuntu, cấu hình server để có thể chạy được ứng dụng Node.js, cấu hình tên miền, sử dụng Nginx web server và setup mã hóa HTTPS/SSL cho website của bạn để nó có đường link là
4.nano /c/Users/dutha/.ssh/config
Trước khi bắt đầu hướng dẫn này, bạn cần có một ứng dụng Node.Js hoặc Next.Js chạy không lỗi ở máy tính của các bạn.
Với Next.js bạn cần build code các bạn ở local để chắc chắn rằng nó không có lỗi nào, đôi khi bạn chạy
5 không xuất hiện lỗi nhưngnano /c/Users/dutha/.ssh/config
6 thì lại có đấy!nano /c/Users/dutha/.ssh/config
Một khi bạn đã chuẩn bị xong rồi thì mình sẽ bắt đầu nhé.
Dưới đây là video full hướng dẫn deploy NextJs / NodeJs lên VPS 👇🏻
🥇Tạo một Vultr Server Instance
Trước hết chúng ta cần tạo một instance VPS, ở đây mình dùng dịch vụ VPS của Vultr nhé. Đăng ký gói 5$/tháng rẻ bèo à 🤣.
Để tạo được một VPS trên Vultr thì bạn cần 2 thứ:
Một tài khoản Vultr
Một thẻ Visa hoặc Master Card dùng để đăng ký và thanh toán
Nếu bạn chưa có tài khoản Vultr thì có thể đăng ký qua link giới thiệu của mình, bạn sẽ nhận miễn phí 100$ dùng cho 60 ngày, thoải mái vọc vạch luôn: //www.vultr.com/?ref=9307237-8H
🥈Tạo một Instance mới trên Vultr
Sau khi đăng nhập thành công, Vào phần Product và click vào Deploy A New Server
Tiếp theo là những cái dịch vụ add thêm, anh em nào muốn rẻ thì cứ chọn như mình.
Tiếp theo anh em cần thêm SSH key của anh em vào Vultr Profile. Anh em click vào Add New để thêm một SSH Key vào nhé
Nếu anh em đã có một SSH key ở máy tính rồi thì chỉ cần thêm cái public key của anh em vào đây là được. Sau khi thêm rồi back trở lại màn hình vừa rồi enter cái tên vps là được.
Mục đích của cái SSH key này là giúp server verify rằng chỉ có máy tính cá nhân của ae mới có thể truy cập được vào VPS instance này.
Nếu anh em chưa có SSH key ở máy tính cần tạo một SSH Key ở máy tính cá nhân, tham khảo bước dưới nhé.
Xong rồi nhấn chọn cái SSH Key vừa thêm vào & kiểm tra giá cả nhấn Deploy Now là được
🥈Tạo SSH key ở máy tính cá nhân
Nếu anh em đã có một SSH Key ở máy tính rồi thì không cần tạo mới, anh em có thể bỏ qua bước này
🥉Tạo SSH key
Đầu tiên mở terminal lên
Paste text bên dưới, thay thế email là địa chỉ email
7 là địa chỉ email của bạn [hoặc email đăng ký github của bạn cũng được]nano /c/Users/dutha/.ssh/config
bash
Copyssh-keygen -t ed25519 -C "your_email@example.com"
Điều này sẽ tạo một SSH key mới, sử dụng email đã được cung cấp như một nhãn trong SSH key [bạn có thể mở public key của SSH key lên sẽ thấy email trong đó]
Nó sẽ yêu cầu bạn nhập tên file để lưu, nếu bạn enter thì nó sẽ lấy tên file mặc định như trong dấu
8.nano /c/Users/dutha/.ssh/config
bash
CopyEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Nếu bạn chưa quen với ssh key thì mình khuyên bạn nên enter, đừng thay đổi tên file làm gì
Lưu ý là khi nhập tên file phải nhập đầy đủ đường dẫn lưu file tương tự như trong dấu
8 nhé.nano /c/Users/dutha/.ssh/config
Tiếp theo nó sẽ yêu cầu bạn nhập passphrase [tương tự password thôi]. Cá nhân mình thì không nhập, cứ Enter thôi vì khi nhập sau này mỗi khi làm việc với Git phải nhập passphrase khá mệt
bash
CopyEnter passphrase [empty for no passphrase]:
bash
CopyEnter same passphrase again:
Sau khi tạo thành công thì nó sẽ sinh ra cho bạn 2 file là private key và public key theo đường dẫn mà bạn nhập tên file. File chứa public key sẽ có đuôi
0 phía sau.#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
bash
CopyYour identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Để đọc nội dung public SSH key thì bạn chỉ có khá nhiều cách, bạn dùng cách nào dưới đây cũng được. Ví dụ file public key của mình bên trên là
1#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Copy đường dẫn này
2 bỏ lên Chrome thì nó sẽ ra nội dung của public key#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Dùng git bash gõ
3 nó sẽ ra public key#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Hoặc tìm đến cái file đó trong thư mục và mở nó lên bằng Notepad, các bạn sẽ có được public key
Sau khi có public key rồi thì chỉ cần quay trở lại trang web đang làm dỡ lúc nãy, click vào Add New để thêm SSH Key vào.
🥉Tạo file #Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
4 [chỉ làm khi bạn đặt tên file ssh khác tên file mặc định]
#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Trong trường hợp bạn thay đổi tên file thì bạn phải tạo một file
4 trong thư mục#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
6 với nội dung như dưới đây thì github mới hiểu được.#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
cd vào thư mục
6#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Tạo 1 file
4 trong thư mục#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
6 của user#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
0. Anh em thay thế chữssh root@ip_address
0 thành username anh em nhé.ssh root@ip_address
bash
Copytouch /c/Users/dutha/.ssh/config
Edit file
4 vừa tạo#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
bash
Copynano /c/Users/dutha/.ssh/config
Copy đoạn code phía dưới vào, sửa
3 thành tên file chứa private key ssh của bạnssh root@ip_address
bash
Copy#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
Để lưu thì nhấn
4 ->ssh root@ip_address
5 ->ssh root@ip_address
6ssh root@ip_address
Thế là xong!
🥇Cấu hình vps server của bạn
Bây giờ bạn đã có một server mới toanh dựa trên những gì bạn đã lựa chọn.
Trong phần này, chúng ta sẽ truy cập server thông qua OpenSSH Client.
Tất nhiên anh em cũng có thể dùng Putty, tham khảo bài này để biết cách Kết nối đến một server sử dụng SSH key
🥈Truy cập đến server sử dụng root
Sau khi tạo xong một instance VPS thì anh em sẽ có các thông tin như Username [root] và địa chỉ IP cũng như Password
Bây giờ để truy cập đến server thì anh em cần chuẩn bị cho mình 3 thứ
Một terminal đã enable giao thức SSH. Gõ
7 nếu ra ra thông tin version thì có nghĩa là cài rồi. Nếu anh em Windows chưa cài thì cài Git SCM thì tự nó có.ssh root@ip_address
Password của server
IP server
OK, Bây giờ anh em mở terminal lên gõ câu lệnh bên dưới, thay thế
8 là địa chỉ IP server của anh em.ssh root@ip_address
bash
Copyssh root@ip_address
Nếu xuất hiện warning hay cảnh báo gì, cứ chấp thuận nó.
Nếu anh em dùng tên file mặc định lúc tạo ssh key ở máy cá nhân thì tự động nó sẽ vào luôn mà không cần nhập password. Nếu tạo một cái tên file khác thì dùng câu lệnh dưới đây, truyền cái đường dẫn đến file private key của anh em vào. Như thế này thì anh em sẽ không cần nhập password của
9 user nữa.ssh root@ip_address
bash
Copyssh -i /path/to/your/id_rsa root@ip_address
Sau khi login thành công thì bây giờ anh em đã ở trong server Vultr rồi.
Root user trong môi trường Linux có quyền hạn rất rộng, vì nên bạn không nên dùng nó thường xuyên. Nhỡ đâu anh em thay đổi gì đó vô tình làm hại hệ điều hành là toang.
Do đó, ở bước tiếp theo chúng ta sẽ tạo một tài khoản thay thế để giới hạn quyền hành cho các tác vụ hằng ngày.
Nếu anh em gặp lỗi WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! thì chỉ cần chạy câu lệnh
0 là được. Câu lệnh này sẽ xóa tất cả các key thuộc vềssh -i /path/to/your/id_rsa root@ip_address
8 trong filessh root@ip_address
2ssh -i /path/to/your/id_rsa root@ip_address
🥈Tạo một user mới trên linux
Sau khi đã login như một root user rồi, bây giờ các bạn gõ câu lệnh bên dưới [thay thế
0 là username của các bạn]ssh root@ip_address
bash
Copy0Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Nó sẽ yêu cầu tạo password cho username này, anh em nhập vào và ghi nhớ nhé.
Một số câu hỏi tùy chọn còn lại anh em chỉ cần nhấn
6 để skip qua.ssh root@ip_address
Bây giờ anh em đã có một tài khoản user mới với các quyền hạn thông thường. Nhưng đôi khi thì anh em sẽ bị yêu cầu quyền root khi thực hiện các tác vụ đặc biệt. Lúc này anh em chỉ cần thêm câu lệnh
5 trước mỗi dòng lệnh là được.ssh -i /path/to/your/id_rsa root@ip_address
Để làm được điều này, chúng ta cần thêm người dùng mới tạo vào nhóm
5 trên vpsssh -i /path/to/your/id_rsa root@ip_address
Tại root user, chạy câu lệnh bên dưới để add user của bạn vào
5 group [thay thếssh -i /path/to/your/id_rsa root@ip_address
0 với username của các bạn]ssh root@ip_address
bash
Copy1Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Bây giờ thì user của bạn có thể chạy các câu lệnh với quyền hạn root!
Các bạn có thể login VPS bằng username và password vừa tạo thay vì root user.
Hoặc cũng có thể chuyển qua lại giữa các user bằng câu lệnh dưới đây [thay thế
0 là username của các bạn], nếu nó yêu cầu nhập password thì các bạn enter password của user đích đến.ssh root@ip_address
bash
Copy2Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
🥈Thêm ssh key ở máy cá nhân vào user mới tạo trên VPS
Hiện tại thì chúng ta truy cập vào VPS với user
9 thì không cần nhập mật khẩu, nhưng với user mới tạo thì cần phải nhập. Điều này không cần thiết và cũng không an toàn. Chúng ta có thể truy cập không cần nhập mật khẩu tương tự vớissh root@ip_address
9.ssh root@ip_address
Vậy nên chúng ta cần thêm ssh key vào user mới tạo, còn user
9 thì nó đã tự động được thêm lúc deploy VPS rồi.ssh root@ip_address
🚀Cách 1 thì chúng ta công cụ
03 [cáiEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
03 này đã cài sẵn trên git bash, các máy linux, mac workstation thì có thể cài theo ]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Thay thế
05 thành đường dẫn public key anh em,Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
06 thành username và ip address tương ứng.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy3Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
🚀Cách 2 thì chúng ta làm thủ công
SSH đến server với username vừa tạo
Edit file
07 với cú phápEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
08Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Copy public key của anh em vào đây
Lưu và thoát
🥈Cài đặt Node.Js lên VPS Ubuntu
Login hoặc chuyển sang user mới tạo nhé
bash
Copy2Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Cập nhật các package mới
bash
Copy5Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Cập nhật các package đã cài trong máy
bash
Copy6Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Cài đặt NVM để quản lý Node.Js version cho dễ. Bên dưới là câu lệnh cài NVM theo version hiện tại mình viết bài này, nếu anh em muốn cài theo version mới nhất thì
bash
Copy7Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Sau khi cài NVM xong nhưng anh em vẫn chưa dùng được đâu, anh em tắt terminal đi và login vào lại user mới tạo nhé.
Bây giờ thì anh em mới có thể dùng NVM được.
Tiếp theo anh em sẽ cài Node.Js
Tùy theo version Node.Js anh em chạy ở local, anh em nên cài đúng version để tránh trường hợp local chạy được nhưng deploy thì lại hẻo.
Nếu muốn cài phiên bản 16 thì
bash
Copy8Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Còn nếu muốn cài phiên bản mới nhất thì
bash
Copy9Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Sau khi cài Node.js xong thì để kiểm tra Node.Js version mấy chỉ cần
bash
Copy0Enter passphrase [empty for no passphrase]:
🥈Cấu hình Git trên VPS
Để có thể kéo code về server thì anh em cần cấu hình git trên server, mỗi khi có cập nhật mới ở code thì chỉ cần truy cập vào server kéo code về, chạy lại các câu lệnh deploy là được.
Đây là bước cơ bản, sau này anh em sẽ có thể thiết kế các hệ thống CI CD tự động deploy. Chuyện đó để những bài khác nhé.
Bây giờ anh em thực hiện lại y hệt cái bước tạo SSH Keys ở máy tính cá nhân, chỉ khác là anh em tạo ở VPS.
Để ý cái vụ tên file nhé, anh em nào không rõ thì cứ để mặc định đi, vì sửa tên tầm bậy là phải tạo file
4 như bên trên đó.#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ten_file_private_key_ssh
bash
Copyssh-keygen -t ed25519 -C "your_email@example.com"
Tiếp theo cứ nhấn Enter Enter và cuối cùng là copy public key, [anh em thay cái
0 thành username vàssh root@ip_address
11 thành tên file public key ssh của anh em]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy2Enter passphrase [empty for no passphrase]:
Lấy được public key, anh em thêm public key vào phần Add SSH Key Github của anh em.
Sau khi add xong rồi thì anh em chỉ cần clone repo của anh em về VPS
bash
Copy3Enter passphrase [empty for no passphrase]:
🥈Deploy dự án Next.Js [hoặc Node.Js] trên Server VPS
Đầu tiên cần cd vào đúng đường dẫn vừa clone về
bash
Copy4Enter passphrase [empty for no passphrase]:
Cài yarn và pm2 global
Nếu dự án anh em không dùng yarn thì không cần cài cũng được
PM2 là một thư viện giúp quản lý tiến trình cho các ứng dụng Node.Js. Nó giúp ứng dụng Node.Js của anh em hoạt động mãi mãi, cho dù có reboot lại VPS thì nó sẽ mở lên lại ngay.
bash
Copy5Enter passphrase [empty for no passphrase]:
Tiến hành cài đặt các package dự án
bash
Copy6Enter passphrase [empty for no passphrase]:
Nếu ứng dụng Next.Js thì anh em cần build, còn Node.Js thì tùy code anh em có cần build hay không nhé
Với Next.Js thì ta cần build dự án
bash
Copy7Enter passphrase [empty for no passphrase]:
Tiếp theo chạy dự án Next.Js hoặc Node.Js lên coi thử có lỗi gì không
bash
Copy8Enter passphrase [empty for no passphrase]:
Lúc này nếu không lỗi thì anh em có thể truy cập đến website [hoặc API] của anh em qua địa chỉ IP và port rồi
Ví dụ IP của VPS mình là 45.12.123.123 và port Next.js mình là 3000 thì mình chỉ cần mở trình duyệt lên nhập URL
12 vào là thấyEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Chạy ổn rồi thì anh em tắt App đi nhé, nhấn
13 để tắt tiến trìnhEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Bây giờ chúng ta sẽ tiến hành chạy Next.js với PM2, anh em phải chắc chắn rằng đã ở trong đường dẫn của app rồi nhé
Chạy câu lệnh bên dưới
Thay thế
14 thành tên website của anh emEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Vì câu lệnh run app mình là
15 nên mình để làEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
16, ví dụ nếu anh em dùngEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
17 thì sửa lại làEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
18Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy9Enter passphrase [empty for no passphrase]:
Câu lệnh này sẽ khởi chạy ứng dụng Next.Js của anh em, sau đó hiển thị một cái bảng với name, process ID, status, CPU sử dụng,...
PM2 sẽ tự động restart nếu ứng dụng bị crash hoặc bị ngưng. Để làm được điều này thì anh em cần chạy câu lệnh dưới
bash
Copy0Enter same passphrase again:
Nó sẽ in ra kết quả tương tự như dưới đây
bash
Copy1Enter same passphrase again:
Anh em cần copy cái dòng cuối cùng và chạy với quyền hạn superuser, như vậy thì PM2 luôn luôn start mỗi khi server khởi động
Câu lệnh của bạn thì tương tự dưới đây
bash
Copy2Enter same passphrase again:
Cái này sẽ tạo một đơn vị
19 giúp PM2 chạy trên user của bạn mỗi khi khởi động. Để kiểm tra trạng thái của đơn vịEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
19 mới tạo, sử dụng câu lệnh dưới.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Thay thế
0 thành username của anh em.ssh root@ip_address
bash
Copy3Enter same passphrase again:
Bây giờ thì web app Next.Js của anh em đã chạy trên port
22 mãi mãi [nếu anh em để mặc định], cho đến khi nói PM2 ngừngEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Để xem các tiến trình đang chạy trên PM2 thì gõ
23Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Trong tương lai, nếu có update code. Tất cả những gì anh em cần làm là thực hiện theo các bước dưới đây
Push thay đổi code lên Github/Gitlab
SSH vào Vultr Server thông qua terminal với username đã tạo
cd vào folder dự án trên vps
pull code về bằng câu lệnh
24Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Cài đặt lại các package
25Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Build Next.Js với
6nano /c/Users/dutha/.ssh/config
Restart lại tiến trình PM2 với
27 [thayEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
14 thành tên website mà anh em đã tạo ở trên kia]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
🔥 Câu lệnh redeploy rút gọn của mình khi login vào vps đúng với username là
bash
Copy4Enter same passphrase again:
Chỉ cần chạy 1 câu lệnh đó thôi là nó tự làm hết mọi thứ luôn.
🥇Trỏ tên miền [domain] về VPS
Thường thì khi mua một tên miền thì nhà cung cấp tên miền đó sẽ cho anh em 2 thứ để setting
DNS
Record [bản ghi]
Và khi dùng 1 VPS thì cái instance đó cũng cho anh em 1 khu vực để setting DNS
Cái tên miền của anh em sẽ dựa vào cái DNS này để phân giải tên miền, anh em có thể chọn dùng của nhà cung cấp tên miền hoặc bên VPS
Cá nhân mình thì mình dùng bên nhà cung cấp tên miền nhé
🥈Trỏ tên miền chính về VPS
Bây giờ thì anh em chỉ cần vào phần chỉnh sửa bản ghi bên nhà cung cấp tên miền thêm 2 record sau
Tương ứng là Tên record [Host] - Type - Value - TTL
Nhớ sửa
29 thành địa chỉ IP VPS của anh em,Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
30 thành tên miền anh em.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
@ - A - ip_vps_address - 300
www - CNAME - example.com - 300
Vì có A record nên sau khi tạo, đợi 1 phút sau hãy truy cập để tránh bị dính cache DNS. Nếu mà dính cache DNS thì anh em sẽ mất 24-48h mới có thể truy cập vào được 🥲
🥈Trỏ tên miền con về VPS
Trong trường hợp anh em dùng tên miền con [sub domain] dạng
31 thì tạo 2 record typeEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
32 như sauEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
sub.example.com - A - ip_vps_address - 300
www.sub.example.com - A - ip_vps_address - 300
Những setting Nginx và Cerbot ở phía dưới anh em đổi lại thành tên miền con tương ứng nhé.
🥇Cài và cấu hình Nginx
🥈Cài đặt Nginx
bash
Copy5Enter same passphrase again:
🥈Cấu hình tường lửa [firewall]
Nginx đăng ký trong ubuntu như một dịch vụ
33 [tường lửa đơn giản]. Chúng ta cần cấu hình lại một tí để truy cập đến Nginx dễ dàng hơn.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Để liệt kê các cấu hình app mà
33 biết thì chỉ cần gõEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy6Enter same passphrase again:
Các bạn sẽ nhận được danh sách profile dưới đây
bash
Copy7Enter same passphrase again:
Có 3 loại profile có sẵn cho Nginx
Nginx Full: mở port
35 [phổ biến, traffic web không được mã hóa] và portEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
36 [mã hóa traffic TLS/SSL]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Nginx Chỉ mở port
35 [phổ biến, traffic web không được mã hóa]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Nginx Chỉ mở port
36 [mã hóa traffic TLS/SSL]Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Tất nhiên bây giờ ai mà dùng giao thức
39 nữa, chuyển sangEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
40 hết rồi. Vậy nên anh em mở full hết cho mình.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy8Enter same passphrase again:
Để kiểm tra thay đổi thì gõ
bash
Copy9Enter same passphrase again:
Anh em sẽ thấy
41 được list ra ở outputEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Trong trường hợp anh em lỡ chọn Nginx HTTP mà giờ muốn xóa thì chỉ cần chạy
bash
Copy0Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
🥈Test Nginx Web Server
Để chắc chắn rằng service Nginx đang được chạy, chỉ cần chạy câu lệnh
bash
Copy1Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Nó sẽ ra output kiểu như thế này, nếu anh em thấy chữ
42 nghĩa là thành công rồi đóEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy2Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Bây giờ anh em gõ địa chỉ IP server lên url trình duyệt [
43], nó sẽ ra cái trang chào mừng của Nginx dạng Welcome to nginx!Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
🥈Cấu hình Nginx làm Reverse Proxy
Bây giờ thì ứng dụng web của chúng ta đang chạy và lắng nghe trên
44, nhưng không thể để người dùng truy cập thông qua cái portEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
22 hay qua địa chỉ IP của VPS được.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Vậy nên chúng ta cần sử dụng Nginx để làm cho mọi người truy cập web app chúng ta thông qua một domain.
Để làm được điều này thì chúng ta cần sử dụng Nginx như một reverse proxy
Trên các hệ thống Debian [ví dụ như Ubuntu], các file cấu hình Nginx server được lưu trữ trong thư mục
46 và được kích hoạt thông qua thư mụcEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
47Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Vậy nên chúng ta cần tạo một file cấu hình trong thư mục
46Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Đầu tiên cần di chuyển vào thư mục
46Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy3Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Sau đó, tạo một file cấu hình trong này [cần dùng
5 để thực hiện những thay đổi trong đây]ssh -i /path/to/your/id_rsa root@ip_address
Với
30 là tên file, thường thì mình sẽ để tên file là domain của mình để dễ quản lý.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy4Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Mở file và edit bằng
52Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy5Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Thêm đoạn code phía dưới vào, anh em paste vào rồi sửa cho nhanh.
Sửa
30 thành domain của anh em nhéEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Sửa
54 thành đúng port của anh em nhéEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
nginx
Copy6Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Lưu và thoát bằng cách nhấn tổ hợp
4 ->ssh root@ip_address
5 ->ssh root@ip_address
6ssh root@ip_address
Bây giờ chúng ta cần kích hoạt cái file vừa tạo thông qua thư mục
58, chỉ cần chạy câu lệnh dưới đâyEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Hãy chắc chắn rằng đã thay
30 bằng tên file mà anh em vừa tạoEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy7Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
File cấu hình của anh em đã được liên kết đến thư mục
58Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Để tránh vấn đề hash bucket memory trong tương lai khi chúng ta thêm app, chúng ta cần tinh chỉnh một dòng trong file
61Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Mở nó lên bằng nano
bash
Copy8Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Trong file đó, tìm cái dòng comment là
62 và xóa cái ký tựEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
63 để mở comment cho nó.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Cuối cùng ta có như thế này
nginx
Copy9Your identification has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10
Your public key has been saved in /c/Users/dutha/.ssh/id_duthanhduoc10.pub
Lưu và đóng file.
Tiếp theo chúng ta sử dụng câu lệnh
64 để kiểm tra lỗi cú pháp trong những file cấu hình đã được tạo hoặc edit:Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy0touch /c/Users/dutha/.ssh/config
Nếu không có vấn đề gì, restart Nginx để enable những thay đổi vừa rồi.
bash
Copy1touch /c/Users/dutha/.ssh/config
🥇Cấu hình mã hóa HTTPS/SSL
Tiếp theo chúng ta sẽ sử dụng dịch vụ Let's Encrypt và phần mềm Certbot để lấy và cài đặt chứng chỉ SSL miễn phí cho tên miền chúng ta.
Let's Encrypt là một Certificate Authority [CA] - Cơ quan cấp chứng chỉ, chúng ta có thể dễ dàng lấy chứng chỉ SSL miễn phí để kích hoạt mã hóa HTTPS trên web server. Điều này thực hiện đơn giản thông qua phần mềm Cerbot.
Ok, bắt đầu thôi.
🥈Cài Certbot
Đầu tiên, chúng ta cần cài Certbot vào web server
Chạy câu lệnh bên dưới để thêm repository của Certbot vào server
bash
Copy2touch /c/Users/dutha/.ssh/config
Bạn cần nhấn
6 để chấp nhậnssh root@ip_address
Sau đó, cập nhật các package trên server để lấy thông tin từ repository của Certbot
bash
Copy5Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Và cuối cùng là cài đặt các package Certbot
bash
Copy4touch /c/Users/dutha/.ssh/config
Cerbot bây giờ đã sẵn sàng để sử dụng trên server
🥈Lấy chứng chỉ SSL
Để lấy được chứng chỉ SSL cho url
30 vàEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
67, sử dụng câu lệnh phía dướiEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy5touch /c/Users/dutha/.ssh/config
Hãy chắc chắn với mình rằng bạn đã trỏ tên miền về VPS thành công nhé, nếu chưa thì sẽ bị lỗi đấy!
Câu lệnh trên sẽ chạy
68 với pluginEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
69 và sử dụngEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
70 để chỉ ra tên url mà chúng ta muốn đăng ký chứng chỉEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Bởi vì đây là lần đầu bạn chạy Cerbot trên server này, nó sẽ yêu cầu bạn enter địa chỉ email và yêu cầu bạn đồng ý điều khoản.
Sau đó, Certbot sẽ giao tiếp với server của Let's Encrypt để verify domain của bạn.
Nếu thành công, Certbot sẽ hỏi bạn muốn cấu hình HTTPS như thế nào.
bash
Copy6touch /c/Users/dutha/.ssh/config
Mọi người chọn Option 2 nhé. Sau khi chọn thì nhấn
6. Cấu hình Nginx sẽ được cập nhật và reload theo setting mới.ssh root@ip_address
Chứng chỉ của anh em đã được tải về và cài đặt. Bây giờ thử vào website với url bắt đầu bằng
4 sẽ thấy thành quả.nano /c/Users/dutha/.ssh/config
Cuối cùng là chúng ta sẽ kiểm tra xem tiến trình tự động làm mới chứng chỉ.
Các chứng chỉ của Let's Encrypt's chỉ có hiệu lực 90 ngày. Vậy nên chúng ta cần tự động lấy lại khi nó hết hạn.
Package Cerbot mà chúng ta đã cài sẽ giải quyết vấn đề này bằng cách chạy câu lệnh
73 2 lần 1 ngày thông qua một bộ hẹn giờEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
19. Tính năng này sẽ được cung cấp bởi một script đặt trongEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
75. Task này sẽ chạy 2 lần / 1 ngày và sẽ làm mới bất cứ chứng chỉ nào mà sẽ hết hạn trong 30 ngày tới.Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Để test tiến trình làm mới tự động, anh em có thể chạy câu lệnh dưới
bash
Copy7touch /c/Users/dutha/.ssh/config
Nếu không thấy bất cứ lỗi gì tức là thành công.
Khi cần, Certbot sẽ làm mới chứng chỉ và reload Nginx để nhận các thay đổi. Nếu quá trình gia hạn tự động không thành công, Let's Encrypt sẽ gửi một thông báo đến email bạn đã chỉ định, cảnh báo bạn khi chứng chỉ của bạn sắp hết hạn.
Bây giờ thì website Next.js [hoặc Node.Js] đã được deploy thành công.
🥇Kích hoạt HTTP2 trong Nginx
HTTP/2 là phiên bản kế thừa của HTTP/1.x và cung cấp nhiều ưu điểm như xử lý song song, full multiplex, nén header và thậm chí là cả server push. Điều quan trọng là thiết lập HTTP2 trong NGINX để cải thiện tốc độ và hiệu suất trang web.
Trước khi kích hoạt thì cần đảm bảo rằng
Bạn đang sử dụng Nginx 1.9.5 hoặc hơn. Có thể kiểm tra version bằng câu lệnh
76Enter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
Bạn đã kích hoạt HTTPS/SSL.
Đầu tiên cần mở file cấu hình Nginx. Thay thế
30 thành tên file cấu hình của bạnEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy8touch /c/Users/dutha/.ssh/config
Nếu đã kích hoạt SSL trong Nginx rồi thì sẽ có cái dòng này
bash
Copy9touch /c/Users/dutha/.ssh/config
Thêm cái
78 ở phía cuối trước cái dấuEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
79 để thành như thế nàyEnter file in which to save the key [/c/Users/dutha/.ssh/id_ed25519]:
bash
Copy0nano /c/Users/dutha/.ssh/config
Cuối cùng thì nó sẽ có dạng như thế này
bash
Copy1nano /c/Users/dutha/.ssh/config
Kiểm tra lại file cấu hình có đúng không
bash
Copy0touch /c/Users/dutha/.ssh/config
Restart lại Nginx Server
bash
Copy1touch /c/Users/dutha/.ssh/config
Để test HTTP2 thì vào keycnd
🥇Tóm lại
Cuối cùng thành chúng ta đã hoàn thành việc triển khai ứng dụng Next.Js [hoặc Node.Js] lên môi trường Internet với một custom domain, mã hóa HTTPS/SSL, và Nginx reverse proxy trên một VPS của Vultr. AE cũng biết cách cập nhật lại website nếu có thay đổi gì trong tương lai.
Cảm ơn anh em đã đọc đến đây, chúc ae thành công 🚀
🥇Tham khảo
Cảm ơn tài liệu tham khảo từ 💓
How To Deploy A Next.js Website To A DigitalOcean Server
How To Enable HTTP2 in NGINX
Khóa học ReactJs giúp bạn chinh phục mức lương 25 - 30 triệu/tháng
Phew! Cuối cùng bạn cũng đã đọc xong. Bài viết này có hơi dài một tí vì mình muốn nó đầy đủ nhất có thể 😅
Chúng ta đều hiểu rằng Javascript và React không hề dễ, chúng có quá nhiều concept cần phải học. Mình cũng cảm thấy nó khó! Nay lại có thể Typescript nữa 🥲, thật sự khó nuốt.
Nhưng đừng lo: Bạn có thể nắm vững các kiến thức trên chỉ trong một khóa học ReactJs Super - Shopee Clone Typescript
Mình đã bắt đầu code React vào năm 2019, và nó đã trở thành thư viện ưa thích của mình để xây dựng UI và web app. Mình cũng đã làm việc với nhiều framework khác như Angular, Vue nhưng thực sự chỉ có React là đem lại cho mình cảm xúc và sự hiệu quả. 💓
Nếu bạn đang gặp khó khăn với React, mình ở đây để giúp bạn!
Mình đã dành hơn 6 tháng để phát triển khóa học ReactJs Super - Shopee Clone Typescript. Trong khóa này bạn sẽ được học mọi thứ về thư viện ReactJs, các kiến thức từ cơ bản cho đến nâng cao nhất, mục đích của mình là giúp bạn chinh phục mức lương 25 - 30 triêu/tháng
Nếu bạn cảm thấy bài viết này của mình hữu ích, mình nghĩ bạn sẽ thích hợp với phong cách dạy của mình. Không như bài viết này, khóa học là sự kết hợp giữa các bài viết, video, quizz, bài tập nhỏ và dự án lớn có thể xin việc được ngay. Học xong mình đảm bảo bạn sẽ lên tay ngay. 💪🏻
Khóa học ReactJs Super - Shopee Clone Typescript
- dev
- backend