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.
[*]
Một số gói mà hệ thống của bạn cần.
Một số gói này có thể đã được cài đặt trên hệ thống của bạn.
Kiểm tra xem tường lửa có đang chạy không.
Bạn sẽ nhận được kết quả sau.
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ó.
Cho phép cả cổng HTTP và HTTPS.
Kích hoạt Tường lửa
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy thông báo tương tự đầu ra.
Chạy lệnh sau để thêm khóa GPG của PostgreSQL.
Thêm kho lưu trữ APT vào danh sách nguồn của bạn.
Cập nhật hệ thống kho lưu trữ.
Bây giờ, bạn có thể cài đặt PostgreSQL bằng lệnh bên dưới.
Gói
Kiểm tra trạng thái của dịch vụ PostgreSQL.
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.
Tạo cơ sở dữ liệu Strapi.
Tạo người dùng Strapi và chọn một mật khẩu.
Thay đổi chủ sở hữu cơ sở dữ liệu thành người dùng Strapi.
Thoát khỏi shell.
Xác minh thông tin đăng nhập của bạn hoạt động.
Thoát khỏi shell bằng cách nhập
Tải xuống trình cài đặt Node v18 từ Nodesource.
Chạy tập lệnh cài đặt.
Cài đặt Node.js.
Xác minh phiên bản Node.js.
Xóa trình cài đặt file.
Nhập
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.
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.
Khởi động máy chủ Strapi bằng lệnh sau.
Ứ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.
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ó.
Chuyển sang trang chủ thư mục.
Cài đặt PM2.
Tạo và mở tệp cấu hình PM2 cho chỉnh sửa.
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.
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.
Bạn sẽ nhận được đầu ra sau đây.
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.
Bạn sẽ nhận được thông báo sau đầu ra.
Sao chép lệnh từ đầu ra ở trên và chạy nó.
Lưu quy trình PM2 danh sách.
Dịch vụ Strapi của bạn hiện đang chạy ở chế độ nền trong chế độ sản xuất.
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt.
Khởi động máy chủ Nginx.
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.
Cài đặt 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
Chạy lệnh sau để tạo SSL Chứng chỉ.
Lệnh trên sẽ tải chứng chỉ xuống thư mục
Tạo nhóm Diffie-Hellman chứng chỉ.
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.
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.
Thêm dòng sau vào trước dòng
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
Dán mã sau vào nó.
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.
Khởi động lại Nginx dịch vụ.
Bây giờ bạn có thể truy cập Strapi CMS qua URL
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
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.
Chuyển sang thư mục dự án và mở tệp
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.
Tại đây, bạn cần thay đổi
Cài đặt phiên bản nâng cấp.
Xây dựng lại bảng điều khiển Quản trị.
Khởi động máy chủ một lần nữa.
Cài đặt Strapi của bạn hiện đã được nâng cấp và đang chạy.
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
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
Mã:
Status: inactive
Mã:
$ sudo ufw allow OpenSSH
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Mã:
$ sudo ufw status
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
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'
Mã:
$ sudo apt update
Mã:
$ sudo apt install postgresql postgresql-contrib
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.
Khởi chạy PostgreSQL shell.
Mã:
$ sudo -i -u postgres psql
Mã:
postgres=# CREATE DATABASE strapidb;
Mã:
postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';
Mã:
postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;
Mã:
postgres-# \q
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=>
\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
Mã:
$ sudo bash nodesource_setup.sh
Mã:
$ sudo apt install nodejs
Mã:
$ node -v
v18.12.1
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
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
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
Mã:
$ NODE_ENV=production npm run build
Mã:
$ node ~/howtoforge-project/node_modules/.bin/strapi start
Mã:
$ sudo ufw allow 1337
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 ~
Mã:
$ sudo npm install pm2@latest -g
Mã:
$ sudo nano ecosystem.config.js
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', }, }, ],
};
Chạy phiên bản Strapi của bạn ở chế độ nền bằng PM2.
Mã:
$ pm2 start ecosystem.config.js
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 ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Tạo một tập lệnh systemd khởi động bằng lệnh sau.
Mã:
$ pm2 startup
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
Mã:
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
Mã:
$ pm2 save
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
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
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
Mã:
$ nginx -v
nginx version: nginx/1.22.1
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
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d strapi.example.com
/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
Mã:
$ sudo certbot renew --dry-run
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
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
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
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; }
}
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
Mã:
$ sudo systemctl restart nginx
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
package.json
cho chỉnh sửa.
Mã:
$ cd howtoforge-project
$ nano package.json
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" },
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
Mã:
$ NODE_ENV=production npm run build
Mã:
$ cd ~
$ pm2 start ecosystem.config.js