Triển khai là công việc siêu quan trọng để mang ứng dụng từ môi trường phát triển qua môi trường thực tế. Trong bài viết này chúng ta sẽ cùng thực hiện công việc đó từng bước 1 giống như 1 check list nhé.

Bài viết giả định rằng các bạn đã sở hữu VPS mới toanh và bắt đầu cài đặt, vì vậy bài viết này áp dụng được cho những bạn chưa từng/chưa có kiến thức về VPS luôn nha. Tuy nhiên sẽ hiệu quả hơn nếu các bạn đã sử dụng vps trước đó và biết các lệnh cơ bản rồi 😘😘

Theo tiêu chí của bài, mình sẽ hạn chế giải thích mà trình bày như một check list để các bạn dễ dàng thực hiện theo.

VPS là cái giề?

Trước khi bắt tay làm, chúng ta cần hiểu về VPS và môi trường/công nghệ mình sử dụng để hạn chế lỗi 🤣🤣

Trích từ Wikipedia nè:

Máy chủ ảo (tiếng Anh là Virtual Private Server – VPS) là dạng máy chủ được tạo ra bằng phương pháp phân chia một máy chủ vật lý thành nhiều máy chủ khác nhau có tính năng tương tự như máy chủ riêng (dedicated server), chạy dưới dạng chia sẻ tài nguyên từ máy chủ vật lý ban đầu.

Với định nghĩa trên, các bạn có thể hiểu VPS giống như là máy tính của chúng ta, tuy nhiên điều khác biệt là nó không có giao diện (GUI) để chúng ta có thể thao tác như những máy tính thông thường mà mọi thứ đều được thao tác bằng lệnh từ CLI (Command Line Interface).

Vì vậy giống như máy tính của chúng ta, để ứng dụng có thể chạy được thì chúng ta sẽ cần hoàn thành 2 bước:

  • Cài đặt môi trường VPS: Trong bài viết này mình sử dụng CentOS 7 và quản lý package bằng Yum.
  • Cài đặt môi trường cho ứng dụng: Như tiêu đề, chúng ta sử dụng NodeJS làm ví dụ, đối với các bạn sử dụng công nghệ khác thì cài đặt môi trường phù hợp cho công nghệ đó nha.

Và công việc cuối cùng để mọi anh em user có thể sử dụng ứng dụng của chúng ta:

  • Cài đặt web server: Mình dùng web server là Nginx vì nó phổ biến, dễ sử dụng và cũng rất mạnh mẽ 🤗🤗
  • Kết nối dự án Node.js với Nginx để cho phép anh em user truy cập 😎😎

Okay, chúng ta cùng bắt đầu nào!

Bước 1: Cài đặt môi trường VPS

1. Cập nhật phần mềm

Thông thường các VPS đã cài đặt sẵn các phần mềm quan trọng rồi nên việc đầu tiên chúng ta là cập nhật chúng để đảm bảo những phần mềm đó có đầy đủ những chức năng và bảo mật tốt nhất.

👉 Cập nhật tất cả phầm mềm:

$ yum update

2. Cài đặt timezone:

Nếu các bạn sử dụng VPS ở nước ngoài thì chúng ta cần cập nhật lại time zone phù hợp mới dự án để đảm bảo không có vấn đề phát sinh nha, đặc biệt là những công việc liên quan đến cron job.

Ví dụ bên dưới mình sẽ cập nhật thời gian về múi giờ của Việt Nam.

👉 Kiểm tra giờ hiện tại:

$ date

👉 Cập nhật timezone thành Asian/Ho_Chi_Minh, các bạn có thể xem thêm timezone ở Database Timezones.

$ rm -f /etc/localtime
$ ln -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime

Đồng bộ Network Time Protocol NTP về server Việt Nam:

👉 Cài đặt NTP:

$ yum install -y ntpdate

👉 Đồng bộ NTP server Việt Nam:

$ ntpdate vn.pool.ntp.org

Hoặc server Asian:

$ ntpdate asia.pool.ntp.org

Hoặc các server có trong NTP Pool Servers

Ngoài ra các bạn có thể thay đổi hostname và ssh port của vps nữa đó, nếu các bạn quan tâm có thể làm theo hướng dẫn ở link bên dưới:

Bước 2: Cài đặt môi trường ứng dụng

Tùy thuộc vào công nghệ các bạn sử dụng, hãy cài đặt những ứng dụng phù hợp để khởi chạy dự án trên VPS nhé. Trong ví dụ này mình sẽ demo dự án Node.js kết nối MongoDB để lưu dữ liệu. Ngoài ra mình cũng sử dụng PM2 để quản lý ứng dụng nodejs.

3. Cài đặt git

Phương pháp dễ nhất là chúng ta sẽ cài đặt git thông qua yum của CentOS.

👉 Cài đặt git:

$ sudo yum install git

👉 Kiểm tra phiên bản của git:

$ git --version

4. Cài đặt Node.js & npm

Chúng ta cũng sử dụng yum để cài đặt Node.js và npm nhé. Các bạn cũng có thể cài đặt thông qua NVM đó 😎

👉 Thêm NodeSource vào yum repository:

$ curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -

Các bạn có thể thay đổi version của node bằng cách thay đổi số ở chỗ setup_12.x nhé, trong trường hợp này mình đang cài đặt phiên bản 12 của node.js.

👉 Cài đặt Nodejs và npm:

$ sudo yum install nodejs

👉 Kiểm tra phiên bản của node:

$ node --version

👉 Kiểm tra phiên bản của npm:

$ npm --version

5. Cài đặt yarn

Mình quản lý các package của node thông qua yarn nên cài đặt thêm ứng dụng này. Nếu các bạn chỉ sử dụng npm thì khoogn cần thực hiện bước này nha.

👉 Thêm YarnRepo vào yum repository:

$ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo

👉 Cài đặt thông qua yum:

$ sudo yum install yarn

6. Cài đặt pm2

PM2 được tích hợp bộ cân bằng tải (load balancer). Bạn có thể giữ cho các process của server còn sống và reload/restart với zero downtime. Ngoài ra còn rất nhiều tính năng hữu ích khác, bạn có thể tìm hiểu thêm tại pm2.keymetrics.io.

👉  Cài đặt bằng npm:

$ npm install pm2 -g

hoặc cài đặt bằng yarn:

$ yarn global add pm2

👉 Cho phép máy chủ chạy pm2 mỗi khi restart:

$ sudo pm2 startup systemd

7. Cài đặt mongodb

Việc đầu tiên chúng ta cần làm là tạo file /etc/yum.repos.d/mongodb-org-.repo, version mình đang sử dụng là 4.2.

👉 Tạo mongodb repo:

$ sudo vi /etc/yum.repos.d/mongodb-org.repo

Sau khi tạo file mongodb-org.repo bằng lệnh vi, các bạn sẽ mở file theo mặc định. Lúc này hãy bấm phím i để bắt đầu chỉnh sửa 😋

👉 Cấu hình cho mongodb ở file mongodb-org.repo bằng cách copy dòng lệnh bên dưới vào

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

Copy hoàn tất các bạn lưu lại bằng cách nhấn Esc và nhập :x, cuối cùng ấn Enter để xác nhận lệnh.

Như đã nói ở trên, version mình sử dụng hiện tại là 4.2, các bạn có thể thay version khác bằng cách sửa trực tiếp vào file mongodb-org.repo.

👉 Cài đặt mongodb từ yum:

$ sudo yum install -y mongodb-org

hoặc các bạn có thể cài đặt 1 phiên bản cụ thể bằng lệnh (mình cài bản 4.2.3 nè):

$ sudo yum install -y mongodb-org-4.2.3 mongodb-org-server-4.2.3 mongodb-org-shell-4.2.3 mongodb-org-mongos-4.2.3 mongodb-org-tools-4.2.3

👉 Chạy mongodb service bằng systemctl:

$ sudo systemctl start mongod

Ngoài ra các bạn có thể khởi chạy lại mongo service hoặc tắt nó bằng lệnh reloadstop nha 🤩

Để mongo service tự động chạy mỗi khi restart server, chúng ta chạy lệnh:

$ sudo systemctl enable mongod

Lưu ý: Trong một số trường hợp mongodb sẽ báo lỗi không tìm thấy thư mục mongo và  mongodb, các bạn xem cách sửa lỗi ở đây hoặc đặt câu hỏi ở phần comment nha.

8. Clone repository của dự án về VPS

Đến đây thì chúng ta đã gần như cài đặt đầy đủ môi trường cho dự án rồi đó 😍😍 Nếu các bạn còn thiếu ứng dụng nào thì cài bổ sung cho đủ nha, ví dụ như là Redis, Nuxt, Next,...

Việc tiếp theo cần làm là clone repository của dự án về VPS, các bạn sử dụng lệnh git như bình thường ha. Thông thường thì mình sẽ clone vô thư mục /home để dễ quản lý.

👉 Di chuyển vào thư mục home:

$ cd /home

Vậy là các bạn đã vào /home rồ đó, sử dụng git để clone dự án về nào 😎😎

Di chuyển vào thư mục dự án từ thư mục home:

$ cd tên-thư-mục

Rồi, giờ thì chạy 1 đống các lệnh quen thuộc để install node_modules, setup cho dự án nodejs nào :))

Bước 3: Cài đặt Web Server Nginx

Nginx là một phần mềm máy chủ web hiệu suất cao. Đây là một chương trình linh hoạt và nhẹ hơn nhiều so với HTTP Apache. Chúng ta hãy bắt tay cài đặt nào!

👉 Cài đặt EPEL: 

$ sudo yum install epel-release

👉 Cài đặt Nginx:

$ sudo yum install nginx

 👉 Chạy service Nginx:

$ sudo systemctl start nginx

Nếu bạn đang bật tường lửa, hãy chạy các lệnh bên dưới để cho phép truy cập bằng HTTPHTTPS

$ sudo firewall-cmd --permanent --zone=public --add-service=http 
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

👉 Tự động khởi chạy service nginx mỗi khi restart server:

$ sudo systemctl enable nginx

Bây giờ các bạn gõ IP của vps vào thanh address của trình duyệt để thấy điều bất ngờ nào 😎😎

Bước 4: Kết nối ứng dụng nodejs vào Nginx:

Hoàn thành bước 3 chúng ta đã setup được môi trường chạy node, đồng thời cài đặt nginx cho vps. Trong bước này, chúng ta sẽ kết nối ứng dụng Node.js vào Nginx để có thể truy cập ứng dụng/website thông qua ip của vps nha 😘

👉 Truy cập vào /etc/nginx/nginx.conf và xóa bỏ server mặc định bằng cách xóa toàn bộ nội dung default server bên dưới dòng include /etc/nginx/conf.d/*.conf;

$ vi /etc/nginx/nginx.conf

Bước thực hiện giống như config cho mongodb ở trên, sau khi chạy lệnh vi, các bạn nhấn i để bắt đầu chính sửa và lưu lại + thoát ra bằng cách nhấn Esc => gõ :x => Enter.

👉 Tạo file config cho dự án node.js:

$ vi /etc/nginx/conf.d/domain-dự-án.conf

Chỗ domain-dự-án các bạn có thể thay bằng bất kỳ tên gì, nhưng mình đề xuất là sử dụng domain để quản lý dễ dàng hơn. 😂

👉 Trong file domain-dự-án.conf chúng ta bắt đầu cài đặt nginx cho dự án domain-dự-án nào 🤣

upstream tên_dự_án {
   server 127.0.0.1:port_dự_án fail_timeout=0;
}

server {
    server_name _;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_buffering off;
        proxy_pass http://tên_dự_án;
    }
}

Lưu ý tên_dự_án là duy nhất nha, mỗi dự án node.js các bạn cần tạo file .conf khác với tên_dự_án khác nhau. Chỗ _ trên dòng server_name sẽ lấy ip vps làm mặc định để truy cập, nếu có domain các bạn có thể thay _ thành domain của mình.

Các bạn có thể xem tất cả thông tin cấu hình file .conf của nginx tại trang hướng dẫn nha.

Sau đó lưu lại và thoát ra là chúng ta đã hoàn thành bước kết nối. Hãy khởi động lại Nginx để web server này nhận cài đặt mới.

👉 Khởi động lại Nginx:

$ sudo systemctl restart nginx

Bây giờ truy cập vào website dự án thông qua IP của VPS để thấy điều siêu siêu kỳ diệu nào 🤩🤩

Nguồn tham khảo