Cách cài đặt Strapi CMS trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Strapi là một Hệ thống quản lý nội dung (CMS) mã nguồn mở, không có giao diện người dùng được xây dựng bằng JavaScript. Giống như các CMS không có giao diện người dùng khác, Strapi không có giao diện người dùng ngay khi cài đặt. Nó sử dụng API cho giao diện người dùng, cho phép bạn xây dựng trang web bằng các khuôn khổ phổ biến như React và Next.js. Dựa trên hệ thống plugin, Strapi là một CMS linh hoạt có bảng điều khiển quản trị và API có thể mở rộng - và mọi phần đều có thể tùy chỉnh để phù hợp với bất kỳ trường hợp sử dụng nào. Strapi cũng có một hệ thống người dùng tích hợp để quản lý chi tiết những gì người quản trị và người dùng cuối có quyền truy cập.

Trong hướng dẫn này, bạn sẽ học cách cài đặt phiên bản cộng đồng của Strapi CMS trên máy chủ Ubuntu 22.04, cùng với Nginx làm máy chủ proxy ngược.

Điều kiện tiên quyết​


  • Máy chủ chạy Ubuntu 22.04.

  • Người dùng không phải root có quyền sudo.

  • Tên miền đủ điều kiện (FQDN) như strapi.example.com.

  • Đảm bảo mọi thứ đều đã cập nhật.
Mã:
$ sudo apt update
$ sudo apt upgrade
[*]
Một số gói mà hệ thống của bạn cần.
Mã:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Một số gói này có thể đã được cài đặt trên hệ thống của bạn.

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Ubuntu đi kèm với ufw (Uncomplicated Firewall) theo mặc định.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Status: inactive
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cho phép cả cổng HTTP và HTTPS.
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Kích hoạt Tường lửa
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy thông báo tương tự đầu ra.
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt và cấu hình PostgreSQL​

Strapi hoạt động với PostgreSQL 11 trở lên. Ubuntu 22.04 mặc định đi kèm với PostgreSQL 14. Chúng tôi sẽ sử dụng PostgreSQL 15 cho hướng dẫn của mình.

Chạy lệnh sau để thêm khóa GPG của PostgreSQL.
Mã:
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Thêm kho lưu trữ APT vào danh sách nguồn của bạn.
Mã:
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Bây giờ, bạn có thể cài đặt PostgreSQL bằng lệnh bên dưới.
Mã:
$ sudo apt install postgresql postgresql-contrib
Gói postgresql-contrib chứa một số tiện ích bổ sung.

Kiểm tra trạng thái của dịch vụ PostgreSQL.
Mã:
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s ago Main PID: 4119 (code=exited, status=0/SUCCESS) CPU: 2ms
Dec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS...
Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.
Bạn có thể thấy rằng dịch vụ được bật và chạy theo mặc định.

Khởi chạy PostgreSQL shell.
Mã:
$ sudo -i -u postgres psql
Tạo cơ sở dữ liệu Strapi.
Mã:
postgres=# CREATE DATABASE strapidb;
Tạo người dùng Strapi và chọn một mật khẩu.
Mã:
postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';
Thay đổi chủ sở hữu cơ sở dữ liệu thành người dùng Strapi.
Mã:
postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;
Thoát khỏi shell.
Mã:
postgres-# \q
Xác minh thông tin đăng nhập của bạn hoạt động.
Mã:
$ psql --username strapiuser --password --host localhost strapidb
Password:
psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
strapidb=>
Thoát khỏi shell bằng cách nhập \q.

Bước 3 - Cài đặt Node.js​

Ubuntu 22.04 đi kèm với Node v12 đã lỗi thời. Chúng tôi sẽ cài đặt phiên bản LTS mới nhất của Node là v18 tại thời điểm viết hướng dẫn này.

Tải xuống trình cài đặt Node v18 từ Nodesource.
Mã:
$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
Chạy tập lệnh cài đặt.
Mã:
$ sudo bash nodesource_setup.sh
Cài đặt Node.js.
Mã:
$ sudo apt install nodejs
Xác minh phiên bản Node.js.
Mã:
$ node -v
v18.12.1
Xóa trình cài đặt file.
Mã:
$ rm nodesource_setup.sh

Bước 4 - Cài đặt Strapi​

Chạy lệnh sau để cài đặt Strapi.
Mã:
$ npx create-strapi-app@latest howtoforge-project
Need to install the following packages: [emailprotected]
Ok to proceed? (y) y
Nhập y để tiến hành cài đặt. Tiếp theo, bạn sẽ được yêu cầu chọn loại Cài đặt. Chọn Tùy chỉnh để tiếp tục và trả lời các câu hỏi như sau.
Mã:
? Choose your installation type Custom (manual settings)
? Choose your preferred language JavaScript
? Choose your default database client postgres
? Database name: strapidb
? Host: 127.0.0.1
? Port: 5432
? Username: strapiuser
? Password: Your_Password
? Enable SSL connection: No
Tùy thuộc vào yêu cầu của bạn, bạn có thể chọn Typescript hoặc JavaScript làm ngôn ngữ cho Strapi.

Sau khi cài đặt hoàn tất, bạn đã sẵn sàng để xây dựng dự án Strapi của mình.

Chuyển đến thư mục dự án.
Mã:
$ cd howtoforge-project
Chạy lệnh sau để xây dựng dự án, bao gồm Giao diện người dùng quản trị Strapi.
Mã:
$ NODE_ENV=production npm run build
Khởi động máy chủ Strapi bằng lệnh sau.
Mã:
$ node ~/howtoforge-project/node_modules/.bin/strapi start
Ứng dụng của bạn sẽ hiển thị trên URL . Nhưng trước tiên, hãy mở cổng trong tường lửa.
Mã:
$ sudo ufw allow 1337
Sau khi mở URL, bạn sẽ thấy màn hình sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22376%22%3E%3C/svg%3E


Nhấn Ctrl + C trong terminal để dừng máy chủ. Bạn nên xóa quy tắc tường lửa vì chúng ta không cần đến nó.
Mã:
$ sudo ufw delete allow 1337

Bước 5 - Cài đặt và cấu hình PM2​

Thay vì khởi động máy chủ theo cách thủ công, chúng ta có thể sử dụng PM2 (Trình quản lý quy trình 2) để quản lý quy trình và tạo dịch vụ systemd cho quy trình đó.

Chuyển sang trang chủ thư mục.
Mã:
$ cd ~
Cài đặt PM2.
Mã:
$ sudo npm install pm2@latest -g
Tạo và mở tệp cấu hình PM2 cho chỉnh sửa.
Mã:
$ sudo nano ecosystem.config.js
Dán nội dung sau vào tệp. Đảm bảo nhập đúng tên thư mục cùng với thông tin đăng nhập Postgres.
Mã:
module.exports = { apps: [ { name: 'strapi', cwd: '/home/navjot/my-project', script: 'npm', args: 'start', env: { NODE_ENV: 'production', DATABASE_HOST: 'localhost', DATABASE_PORT: '5432', DATABASE_NAME: 'strapidb', DATABASE_USERNAME: 'strapiuser', DATABASE_PASSWORD: 'Your_Password', }, }, ],
};
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.

Chạy phiên bản Strapi của bạn ở chế độ nền bằng PM2.
Mã:
$ pm2 start ecosystem.config.js
Bạn sẽ nhận được đầu ra sau đây.
Mã:
-------------
__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ Runtime Edition PM2 is a Production Process Manager for Node.js applications with a built-in Load Balancer. Start and Daemonize any application: $ pm2 start app.js Load Balance 4 instances of api.js: $ pm2 start api.js -i 4 Monitor in production: $ pm2 monitor Make pm2 auto-boot at server restart: $ pm2 startup To go further checkout: http://pm2.io/ -------------
[PM2] Spawning PM2 daemon with pm2_home=/home/navjot/.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications strapi not running, starting...
[PM2] App [strapi] launched (1 instances)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0 ? strapi ? default ? N/A ? fork ? 4824 ? 0s ? 0 ? online ? 0% ? 31.9mb ? navjot ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Các ứng dụng chạy trên PM2 sẽ tự động khởi động lại nếu chúng bị sập hoặc bị tắt.

Tạo một tập lệnh systemd khởi động bằng lệnh sau.
Mã:
$ pm2 startup
Bạn sẽ nhận được thông báo sau đầu ra.
Mã:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
Sao chép lệnh từ đầu ra ở trên và chạy nó.
Mã:
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
Lưu quy trình PM2 danh sách.
Mã:
$ pm2 save
Dịch vụ Strapi của bạn hiện đang chạy ở chế độ nền trong chế độ sản xuất.

Bước 6 - Cài đặt Nginx​

Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Khởi động máy chủ Nginx.
Mã:
$ sudo systemctl start nginx

Bước 7 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật. Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot chạy bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Chạy lệnh sau để tạo SSL Chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d strapi.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/strapi.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 8 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/strapi.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/strapi.conf
Dán mã sau vào nó.
Mã:
server { # Redirect any http requests to https listen 80; listen [::]:80; server_name strapi.example.com; return 301 https://$host$request_uri;
}
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name strapi.example.com; access_log /var/log/nginx/strapi.access.log; error_log /var/log/nginx/strapi.error.log; # TLS configuration ssl_certificate /etc/letsencrypt/live/strapi.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/strapi.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/strapi.example.com/chain.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:1337; }
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại Nginx dịch vụ.
Mã:
$ sudo systemctl restart nginx
Bây giờ bạn có thể truy cập Strapi CMS qua URL https://strapi.example.com. Bạn sẽ thấy trang sau cho thấy Strapi đang chạy ở chế độ sản xuất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22712%22%20height=%22370%22%3E%3C/svg%3E


Truy cập URL https://strapi.example.com/admin để tạo người dùng quản trị viên.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22559%22%20height=%22750%22%3E%3C/svg%3E


Điền thông tin quản trị của bạn và nhấp vào nút Bắt đầu để chuyển đến màn hình bảng điều khiển quản trị.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22417%22%3E%3C/svg%3E


Từ đây, bạn có thể bắt đầu tạo nội dung trên Strapi.

Bước 9 - Nâng cấp Strapi​

Bước đầu tiên trong quá trình nâng cấp Strapi là dừng máy chủ.
Mã:
$ cd ~
$ pm2 stop ecosystem.config.js
Chuyển sang thư mục dự án và mở tệp package.json cho chỉnh sửa.
Mã:
$ cd howtoforge-project
$ nano package.json
Nâng cấp tất cả các số phiên bản gói Strapi lên phiên bản Strapi ổn định mới nhất. Bạn có thể tải phiên bản mới nhất có sẵn từ Trang phát hành GitHub của Strapi.
Mã:
"devDependencies": {}, "dependencies": { "@strapi/strapi": "4.5.5", "@strapi/plugin-users-permissions": "4.5.5", "@strapi/plugin-i18n": "4.5.5", "pg": "8.6.0" },
Tại đây, bạn cần thay đổi 4.5.5 thành phiên bản ổn định mới nhất. Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.

Cài đặt phiên bản nâng cấp.
Mã:
$ npm install
Xây dựng lại bảng điều khiển Quản trị.
Mã:
$ NODE_ENV=production npm run build
Khởi động máy chủ một lần nữa.
Mã:
$ cd ~
$ pm2 start ecosystem.config.js
Cài đặt Strapi của bạn hiện đã được nâng cấp và đang chạy.

Kết luận​

Đây là kết thúc hướng dẫn của chúng tôi về cài đặt Strapi CMS trên máy chủ Ubuntu 22.04 và Nginx làm máy chủ proxy ngược. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên