简介
Strapi 是一个使用 JavaScript 构建的开源、无头内容管理系统 (CMS)。与其他无头 CMS 一样,Strapi 开箱即用不带前端。它使用 API 作为其前端,允许你使用流行的框架(如 React 和 Next.js)构建网站。Strapi 基于插件系统,是一个灵活的 CMS,其管理面板和 API 都是可扩展的 - 并且每个部分都可以自定义以匹配任何用例。Strapi 还具有内置的用户系统,可以详细管理管理员和最终用户可以访问的内容。
在本篇文章中,你将学习如何在 Ubuntu 22.04 服务器上安装 Strapi CMS 的社区版本,以及将 Nginx 作为反向代理服务器。
接下来,我将一步一步教大家如何进行安装和部署!!
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
开始部署
安装必要软件包
-
确保一切都已更新。
$ sudo apt update $ sudo apt upgrade
-
你的系统需要的一些软件包。
其中一些软件包可能已经安装在你的系统上。$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
步骤 1 - 配置防火墙
第一步是配置防火墙。Ubuntu 默认带有 ufw(Uncomplicated Firewall)。
检查防火墙是否正在运行。
$ sudo ufw status
你应该得到以下输出。
Status: inactive
允许 SSH 端口,以便在启用防火墙时不会中断当前连接。
$ sudo ufw allow OpenSSH
同时允许 HTTP 和 HTTPS 端口。
$ sudo ufw allow http
$ sudo ufw allow https
启用防火墙
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
再次检查防火墙的状态。
$ sudo ufw status
你应该看到类似的输出。
Status: activeTo 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)
步骤 2 - 安装和配置 PostgreSQL
Strapi 与 PostgreSQL 11 及以上版本兼容。Ubuntu 22.04 默认带有 PostgreSQL 14。我们将在本教程中使用 PostgreSQL 15。
运行以下命令添加 PostgreSQL GPG 密钥。
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
将 APT 存储库添加到你的源列表中。
$ 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'
更新系统存储库。
$ sudo apt update
现在,你可以使用以下命令安装 PostgreSQL。
$ sudo apt install postgresql postgresql-contrib
postgresql-contrib
包包含一些额外的实用程序。
检查 PostgreSQL 服务状态。
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMSLoaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s agoMain PID: 4119 (code=exited, status=0/SUCCESS)CPU: 2msDec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS...
Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.
你可以看到该服务默认已启用并正在运行。
启动 PostgreSQL shell。
$ sudo -i -u postgres psql
创建 Strapi 数据库。
postgres=# CREATE DATABASE strapidb;
创建 Strapi 用户并选择一个强密码。
postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';
将数据库所有者更改为 Strapi 用户。
postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;
退出 shell。
postgres-# \\q
验证你的凭据是否有效。
$ 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
退出 shell。
步骤 3 - 安装 Node.js
Ubuntu 22.04 默认带有过时的 Node v12。我们将安装最新的 Node LTS 版本,在编写本教程时为 v18。
从 Nodesource 获取 Node v18 安装程序。
$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
运行安装程序脚本。
$ sudo bash nodesource_setup.sh
安装 Node.js。
$ sudo apt install nodejs
验证 Node.js 版本。
$ node -v
v18.12.1
删除安装程序文件。
$ rm nodesource_setup.sh
步骤 4 - 安装 Strapi
运行以下命令安装 Strapi。
$ npx create-strapi-app@latest strapi-project
Need to install the following packages:create-strapi-app@4.5.5
Ok to proceed? (y) y
输入 y
以继续安装。接下来,你将被要求选择安装类型。选择“自定义”以继续,并按以下方式回答问题。
? 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
根据你的要求,你可以选择 Typescript 或 JavaScript 作为 Strapi 的语言。
安装完成后,你就可以构建 Strapi 项目了。
切换到项目目录。
$ cd strapi-project
运行以下命令来构建项目,包括 Strapi 管理 UI。
$ NODE_ENV=production npm run build
使用以下命令启动 Strapi 服务器。
$ node ~/strapi-project/node_modules/.bin/strapi start
你的应用程序应在 URL http://<你的服务器IP>:1337
上可见。但首先,在防火墙中打开该端口。
$ sudo ufw allow 1337
打开 URL 后,你应该看到以下屏幕。
在终端中按 Ctrl + C 停止服务器。你应该删除防火墙规则,因为我们不需要它。
$ sudo ufw delete allow 1337
步骤 5 - 安装和配置 PM2
我们可以使用 PM2 (Process Manager 2) 来管理进程并为其创建 systemd 服务,而不是手动启动服务器。
切换到主目录。
$ cd ~
安装 PM2。
$ sudo npm install pm2@latest -g
创建并打开 PM2 配置文件进行编辑。
$ sudo nano ecosystem.config.js
将以下内容粘贴到文件中。确保输入正确的目录名称以及 Postgres 凭据。
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',},},],
};
完成后,按 Ctrl + X 保存文件,并在出现提示时输入 Y。
使用 PM2 在后台运行 Strapi 实例。
$ pm2 start ecosystem.config.js
你将获得以下输出。
-------------__/\\\\\\\\\\\\\\\\\\\\\\\\\\____/\\\\\\\\____________/\\\\\\\\____/\\\\\\\\\\\\\\\\\\______\\/\\\\\\/\\\\\\_\\/\\\\\\\\\\\\________/\\\\\\\\\\\\__/\\\\\\///\\\\\\____\\/\\\\\\_______\\/\\\\\\_\\/\\\\\\//\\\\\\____/\\\\\\//\\\\\\_\\///______\\//\\\\\\___\\/\\\\\\\\\\\\\\\\\\\\\\\\\\/__\\/\\\\\\\\///\\\\\\/\\\\\\/_\\/\\\\\\___________/\\\\\\/____\\/\\\\\\/____\\/\\\\\\__\\///\\\\\\/___\\/\\\\\\________/\\\\\\//______\\/\\\\\\_____________\\/\\\\\\____\\///_____\\/\\\\\\_____/\\\\\\//_________\\/\\\\\\_____________\\/\\\\\\_____________\\/\\\\\\___/\\\\\\/____________\\/\\\\\\_____________\\/\\\\\\_____________\\/\\\\\\__/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\__\\///______________\\///______________\\///__\\///__Runtime EditionPM2 is a Production Process Manager for Node.js applicationswith a built-in Load Balancer.Start and Daemonize any application:$ pm2 start app.jsLoad Balance 4 instances of api.js:$ pm2 start api.js -i 4Monitor in production:$ pm2 monitorMake pm2 auto-boot at server restart:$ pm2 startupTo 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 ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
在 PM2 下运行的应用程序如果崩溃或被终止,会自动重启。
使用以下命令创建启动 systemd 脚本。
$ pm2 startup
你将获得以下输出。
[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
从上面的输出中复制命令并运行它。
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot
保存 PM2 进程列表。
$ pm2 save
你的 Strapi 服务现在以后台生产模式运行。
步骤 6 - 安装 Nginx
Ubuntu 22.04 默认带有旧版本的 Nginx。要安装最新版本,你需要下载官方 Nginx 存储库。
导入 Nginx 的签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \\| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
为 Nginx 的稳定版本添加存储库。
$ 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
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v
nginx version: nginx/1.22.1
启动 Nginx 服务器。
$ sudo systemctl start nginx
步骤 7 - 安装 SSL
我们需要安装 Certbot 以生成 SSL 证书。你可以使用 Ubuntu 的存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Ubuntu 22.04 默认安装了 Snapd。运行以下命令以确保你的 Snapd 版本是最新的。确保你的 Snapd 版本是最新的。
$ sudo snap install core
$ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令确保 Certbot 命令通过创建指向 /usr/bin
目录的符号链接来运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
运行以下命令生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d strapi.example.com
上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/strapi.example.com
目录。
生成 Diffie-Hellman 组 证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
对该过程进行试运行,以检查 SSL 更新是否正常工作。
$ sudo certbot renew --dry-run
如果你没有看到任何错误,那么一切都已设置好。你的证书将自动更新。
步骤 8 - 配置 Nginx
打开文件 /etc/nginx/nginx.conf
进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在行 include /etc/nginx/conf.d/*.conf;
之前添加以下行。
server_names_hash_bucket_size 64;
完成后,按 Ctrl + X 保存文件,并在出现提示时输入 Y。
创建并打开文件 /etc/nginx/conf.d/strapi.conf
进行编辑。
$ sudo nano /etc/nginx/conf.d/strapi.conf
将以下代码粘贴到其中。
server {# Redirect any http requests to httpslisten 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 configurationssl_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 themssl_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;}
}
完成后,按 Ctrl + X 保存文件,并在出现提示时输入 Y。
验证 Nginx 配置文件的语法。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务。
$ sudo systemctl restart nginx
你现在可以通过 URL https://strapi.example.com
访问 Strapi CMS。你将看到以下页面,表明 Strapi 正在生产模式下运行。
访问 https://strapi.example.com/admin
URL 以创建管理员用户。
填写你的管理员详细信息,然后单击“Let’s start”按钮以进入管理员仪表板屏幕。
从这里开始,你可以开始在 Strapi 上创建内容。
步骤 9 - 升级 Strapi
升级 Strapi 的第一步是停止服务器。
$ cd ~
$ pm2 stop ecosystem.config.js
切换到项目目录并打开 package.json
文件进行编辑。
$ cd strapi-project
$ nano package.json
将所有 Strapi 包版本号升级到最新的稳定 Strapi 版本。你可以从 Strapi 的 GitHub 发布页面 获取最新的可用版本。
"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
更改为最新的稳定版本。完成后,按 Ctrl + X 保存文件,并在出现提示时输入 Y。
安装升级后的版本。
$ npm install
重建管理面板。
$ NODE_ENV=production npm run build
再次启动服务器。
$ cd ~
$ pm2 start ecosystem.config.js
你的 Strapi 安装现已升级并正在运行。
相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site
https://github.com/strapi/strapi/releases) 获取最新的可用版本。
"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
更改为最新的稳定版本。完成后,按 Ctrl + X 保存文件,并在出现提示时输入 Y。
安装升级后的版本。
$ npm install
重建管理面板。
$ NODE_ENV=production npm run build
再次启动服务器。
$ cd ~
$ pm2 start ecosystem.config.js
你的 Strapi 安装现已升级并正在运行。
相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site