Table of Contents

Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly

Hướng dẫn triển khai ứng dụng React trên máy chủ Ubuntu sử dụng Nginx

Posted on: July 17, 2025

Ubuntu

description image

Giới thiệu

Bạn có thể nhanh chóng triển khai các ứng dụng React lên máy chủ bằng công cụ xây dựng mặc định Create React App. Script build biên dịch ứng dụng thành một thư mục duy nhất chứa toàn bộ mã JavaScript, hình ảnh, styles, và file HTML. Với toàn bộ tài nguyên nằm một chỗ, bạn có thể triển khai lên web server với cấu hình tối thiểu.

Trong bài hướng dẫn này, bạn sẽ triển khai một ứng dụng React trên máy cục bộ lên một server Ubuntu chạy Nginx. Bạn sẽ xây dựng ứng dụng bằng Create React App, sử dụng file cấu hình Nginx để xác định vị trí triển khai file, và sao chép an toàn thư mục build cùng nội dung của nó lên server. Cuối cùng, bạn sẽ có thể xây dựng và triển khai ứng dụng React.

Yêu cầu cần chuẩn bị

Nếu bạn đang sử dụng Ubuntu phiên bản 16.04 hoặc thấp hơn, khuyến khích nâng cấp lên phiên bản mới hơn vì Ubuntu không còn hỗ trợ các phiên bản này. Bộ hướng dẫn nâng cấp Ubuntu sẽ hỗ trợ bạn.

Để theo dõi bài này, bạn cần:

Cách triển khai ứng dụng React với Nginx

  1. Tạo dự án React
  2. Xác định vị trí file triển khai trên server Ubuntu
  3. Tải file build lên server với scp

Bước 1 — Tạo Dự Án React

Trong bước này, bạn sẽ tạo một ứng dụng sử dụng Create React App và xây dựng phiên bản có thể triển khai của ứng dụng mẫu.

Đầu tiên, tạo ứng dụng mới bằng Create React App trong môi trường local. Trong terminal, chạy lệnh để khởi tạo dự án, trong hướng dẫn này gọi là react-deploy:

$ npx create-react-app react-deploy

Lệnh npx sẽ chạy gói Node mà không cần tải xuống máy bạn. Script create-react-app sẽ cài đặt các phụ thuộc cần thiết cho app React và xây dựng dự án cơ bản trong thư mục react-deploy. Để hiểu thêm, xem hướng dẫn Cách thiết lập dự án React với Create React App.

Lệnh sẽ chạy trong vài phút trong khi tải và cài đặt các phụ thuộc. Khi hoàn thành, bạn sẽ nhận được thông báo thành công. Phiên bản output có thể khác nếu dùng yarn thay vì npm:

Output
Success! Created react-deploy at your_file_path/react-deploy
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd react-deploy
  npm start

Happy hacking!

Theo gợi ý, di chuyển vào thư mục dự án trước:

$ cd react-deploy

Giờ bạn đã có dự án cơ bản, hãy chạy thử cục bộ để kiểm tra giao diện trên server. Dùng lệnh:

$ npm start

Khi lệnh chạy, bạn sẽ nhận thông tin server local:

Output
Compiled successfully!

You can now view react-deploy in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://192.168.1.110:3000

Note that the development build is not optimized.
To create a production build, use npm build.

Mở trình duyệt truy cập http://localhost:3000, bạn sẽ thấy ứng dụng React mẫu:

React project template running locally

Dừng dự án bằng cách nhấn CTRL+C hoặc ⌘+C trong terminal.

Giờ cần tạo bản dựng production. Chạy script build:

$ npm run build

Lệnh sẽ biên dịch JavaScript và tài nguyên vào thư mục build. Sau khi hoàn tất, nhận output có dạng gần giống:

Output
Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  41.21 KB  build/static/js/2.82f639e7.chunk.js
  1.4 KB    build/static/js/3.9fbaa076.chunk.js
  1.17 KB   build/static/js/runtime-main.1caef30b.js
  593 B     build/static/js/main.e8c17c7d.chunk.js
  546 B     build/static/css/main.ab7136cd.chunk.css

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  serve -s build

Find out more about deployment here:

  https://cra.link/deployment

Bây giờ thư mục build chứa phiên bản đã biên dịch và thu gọn của toàn bộ file cần thiết cho dự án. Bạn chỉ cần triển khai thư mục này lên server.

Trong bước này, bạn đã tạo ứng dụng mới, chạy thử trên local và tạo bản dựng production dùng script build của Create React App. Bước tiếp theo là đăng nhập vào server để biết vị trí sao chép thư mục build.


Bước 2 — Xác định Vị Trí File Triển Khai trên Server Ubuntu

Bước này giúp bạn xác định vị trí đúng trên server để tải file lên. Bài dùng Nginx như web server, phương pháp tương tự với Apache (Ubuntu 22.04 / 20.04 / 18.04), chỉ khác thư mục file cấu hình.

Đăng nhập vào server bằng ssh:

$ ssh username@server_ip

Trên server, tìm file cấu hình web server trong /etc/nginx/sites-enabled. Thư mục sites-allowed chứa các cấu hình chưa kích hoạt. Khi tìm được file cấu hình, hiển thị nội dung bằng lệnh:

$ cat /etc/nginx/sites-enabled/your_domain

Nếu trang bạn chưa có chứng chỉ HTTPS, output tương tự:

Output
server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

Nếu bạn bật Let’s Encrypt, output sẽ như sau:

Output
server {

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}
server {
    if ($host = www.your_domain) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = your_domain) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        listen [::]:80;

        server_name your_domain www.your_domain;
    return 404; # managed by Certbot
}

Trường quan trọng nhất để triển khai ứng dụng React là root, nó chỉ tới thư mục /var/www/your_domain/html. Bạn sẽ sao chép các file vào thư mục này. Dòng kế tiếp cho thấy Nginx sẽ tìm file index.html. Trong thư mục build của bạn có sẵn file index.html làm điểm vào chính.

Đăng xuất server Ubuntu trở lại môi trường phát triển local.

Giờ bạn đã biết vị trí file Nginx sẽ phục vụ, có thể tải bản build lên server.


Bước 3 — Tải file build lên server bằng scp

Khi các file trong thư mục build đã sẵn sàng, bạn chỉ việc sao chép lên server. Cách nhanh nhất dùng lệnh scp để copy file từ terminal lên server. scp dùng khóa ssh nếu đã thiết lập, nếu chưa bạn sẽ được hỏi username và password.

Cú pháp lệnh là scp files_to_copy username@server_ip:path_on_server. Đối số đầu là các file bạn muốn copy (trong trường hợp này là toàn bộ file trong thư mục build). Đối số thứ hai gồm thông tin đăng nhập và đường dẫn đích trên server, bằng với trường root trong cấu hình Nginx: /var/www/your_domain/html.

Dùng lệnh sao chép toàn bộ file trong build vào /var/www/your_domain/html:

$ scp -r ./build/* username@server_ip:/var/www/your_domain/html

Khi chạy, bạn sẽ thấy output xác nhận quá trình upload file:

Output
asset-manifest.json                                                                                          100% 1092    22.0KB/s   00:00
favicon.ico                                                                                                  100% 3870    80.5KB/s   00:00
index.html                                                                                                   100% 3032    61.1KB/s   00:00
logo192.png                                                                                                  100% 5347    59.9KB/s   00:00
logo512.png                                                                                                  100% 9664    69.5KB/s   00:00
manifest.json                                                                                                100%  492    10.4KB/s   00:00
robots.txt                                                                                                   100%   67     1.0KB/s   00:00
main.ab7136cd.chunk.css                                                                                      100%  943    20.8KB/s   00:00
main.ab7136cd.chunk.css.map                                                                                  100% 1490    31.2KB/s   00:00
runtime-main.1caef30b.js.map                                                                                 100%   12KB  90.3KB/s   00:00
3.9fbaa076.chunk.js                                                                                          100% 3561    67.2KB/s   00:00
2.82f639e7.chunk.js.map                                                                                      100%  313KB 156.1KB/s   00:02
runtime-main.1caef30b.js                                                                                     100% 2372    45.8KB/s   00:00
main.e8c17c7d.chunk.js.map                                                                                   100% 2436    50.9KB/s   00:00
3.9fbaa076.chunk.js.map                                                                                      100% 7690   146.7KB/s   00:00
2.82f639e7.chunk.js                                                                                          100%  128KB 226.5KB/s   00:00
2.82f639e7.chunk.js.LICENSE.txt                                                                              100% 1043    21.6KB/s   00:00
main.e8c17c7d.chunk.js                                                                                       100% 1045    21.7KB/s   00:00
logo.103b5fa1.svg                                                                                            100% 2671    56.8KB/s   00:00

Khi hoàn tất, bạn đã xong. Vì dự án React là các file tĩnh dùng trình duyệt nên không cần cấu hình server thêm. Mở trình duyệt truy cập domain của bạn, bạn sẽ thấy ứng dụng React:

Browser with React Project on Server

Trong bước này, bạn đã triển khai ứng dụng React lên server, biết cách xác định thư mục web root và sao chép file với scp. Khi file upload xong, dự án sẽ hiển thị trên trình duyệt.

Kết luận

Việc triển khai ứng dụng React rất nhanh nếu dùng Create React App. Bạn chạy lệnh build để tạo thư mục chứa toàn bộ file cần thiết. Sau đó, sao chép các file vào vị trí đúng trên server, đưa ứng dụng chạy trực tuyến trên web.

Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly
Share

0 replies