如何在 Ubuntu 22.04 上为生产环境设置和安装 Strapi
介绍
Strapi 是一个开源的无头内容管理系统 (CMS),使用 JavaScript 编程语言构建。与其他无头 CMS 一样,Strapi 没有开箱即用的前端。相反,它依赖于允许您构建内容结构的 API。此外,Strapi 提供了多种方式来构建您的网站,并与 React 和 Next.js 等流行框架集成。此外,您可以选择如何使用 REST API 或 GraphQL 使用 API。
在本教程中,您将安装 Strapi 并设置生产环境以开始创建内容。当 Strapi 在其开发模式下运行 SQLite 时,您将配置它以使用 PostgreSQL。您还将在 Nginx 反向代理后面为您的 Strapi 应用程序提供服务,并使用 PM2 进程管理器来确保稳定的正常运行时间。最后,您将使用 Let's Encrypt 保护您的 Nginx 连接。
先决条件
要学习本教程,您需要:
- 按照我们的初始服务器设置指南设置的 Ubuntu 22.04 服务器
- Strapi 推荐至少配备 2 个 CPU 内核和 4GB RAM 的服务器。本教程假设您的服务器符合推荐的硬件规格。
- 确保通过 PPA 选项将版本 18.xx 替换为 16.xx。在撰写本文时,Strapi 可能无法与超过 16 的 Node 版本一起正常工作。具体来说,本教程中使用的是 Node v16.18.1。
- 配置代理服务器地址时,使用
http://localhost:1337
作为app_server_address
。
在您的服务器上安装 Node.js 版本 16、Nginx 和 Postgres 后,您就可以继续学习本教程了。
第 1 步 — 设置你的 Postgres 数据库
任何 Strapi 项目都需要一个数据库。目前,它支持 MySQL、MariaDB、SQlite 和 PostgreSQL。您可以在其官方文档中查看最低版本要求。此外,Strapi 需要一个新的数据库。这意味着您不能使用现有数据库链接到您的 Strapi 实例。
首先,创建一个数据库:
- sudo -i -u postgres createdb strapi-db
然后为您的数据库创建一个用户:
- sudo -i -u postgres createuser --interactive
OutputEnter name of role to add: sammy Shall the new role be a superuser? (y/n) y默认情况下,在 PostgreSQL 中,您使用Identification Protocol 或ident 身份验证方法作为数据库用户进行身份验证。这涉及 PostgreSQL 获取客户端的 Ubuntu 用户名并将其用作数据库用户名。在许多情况下,这可以提供更高的安全性,但是当您希望外部程序(例如 Strapi)连接到您的数据库之一时,它也会导致问题。要解决此问题,请为此 PostgreSQL 角色设置密码以允许 Strapi 连接到您的数据库。
在您的终端中,打开 PostgreSQL 提示符:
- sudo -u postgres psql
在 PostgreSQL 提示符下,更新用户配置文件以使用您选择的强密码:
- ALTER USER sammy PASSWORD 'postgres_password';
通过在终端中输入
\q
退出您的 PostgreSQL 用户:- \q
创建数据库和用户凭据后,您就可以安装 Strapi 了。
第 2 步 — 在您的服务器上安装 Strapi
要在您的服务器上安装 Strapi,请输入以下命令:
- npx create-strapi-app@latest my-project
使用
y
确认以继续安装。确认是后,您将访问交互式安装。选择以下选项,同时确保您的
Database name
、Username
和Password
已适当更改:Output? Choose your installation type Custom (manual settings) ? Choose your preferred language JavaScript ? Choose your default database client postgres ? Database name: strapi-db ? Host: 127.0.0.1 ? Port: 5432 ? Username: sammy ? Password: postgres_password ? Enable SSL connection: No未启用 SSL 连接,因为它将在本教程后面的部分使用 Let's Encrypt 证书进行配置和获取。在您做出选择后,Strapi 将开始安装。
安装完成后,您就可以构建 Strapi 项目了。
首先,确保您位于
my-project
目录中:- cd my-project
接下来,运行以下命令:
- NODE_ENV=production npm run build
Output> my-project@0.1.0 build > strapi build Building your admin UI with production configuration... ✔ Webpack Compiled successfully in 35.44s Admin UI built successfully此命令将构建您的 Strapi 项目,包括 Strapi 管理 UI。
您现在可以测试您的 Strapi 服务器。运行以下命令直接启动 Strapi 服务器:
- node /home/sammy/my-project/node_modules/.bin/strapi start
Output[2022-11-21 13:54:24.671] info: The Users & Permissions plugin automatically generated a jwt secret and stored it in .env under the name JWT_SECRET. Project information ┌────────────────────┬──────────────────────────────────────────────────┐ │ Time │ Mon Nov 21 2022 13:54:24 GMT+0000 (Coordinated … │ │ Launched in │ 1603 ms │ │ Environment │ development │ │ Process PID │ 4743 │ │ Version │ 4.5.4 (node v16.18.1) │ │ Edition │ Community │ └────────────────────┴──────────────────────────────────────────────────┘ Actions available One more thing... Create your first administrator ? by going to the administration panel at: ┌─────────────────────────────┐ │ http://localhost:1337/admin │ └─────────────────────────────┘如果您遵循先决条件,则将 Nginx 设置为 Strapi 默认地址
http://localhost:1337
的反向代理。在浏览器中导航到 http://your_domain 以查看默认的 Strapi 登录页面:这个默认配置的命令目前使用的是 Strapi 的开发模式。它还依赖于与终端中的命令相关联的进程,不适合生产。在下一步中,您将向名为 PM2 的流程管理器添加生产设置。
按
CTRL+c
退出您的服务器。安装 Strapi 后,您就可以设置 PM2 以将您的服务器作为服务在后台运行。
第 3 步 — 安装和配置 PM2
您可以依赖我们的指南,而不是手动启动服务器。 PM2 有助于保持您的服务器正常运行,而无需手动启动它,确保正常运行时间。
首先,确保你在顶级目录中:
- cd ~
接下来,使用以下命令安装 PM2:
- sudo npm install pm2@latest -g
然后,使用您喜欢的文本编辑器为 PM2 创建一个配置文件。
nano
在这个例子中使用:- sudo nano ecosystem.config.js
将以下内容添加到此文件,同时确保更改项目目录名称和路径,以及您的数据库名称、用户和密码:
module.exports = { apps: [ { name: 'strapi', cwd: '/home/sammy/my-project', script: 'npm', args: 'start', env: { NODE_ENV: 'production', DATABASE_HOST: 'localhost', DATABASE_PORT: '5432', DATABASE_NAME: 'strapi-db', DATABASE_USERNAME: 'sammy', DATABASE_PASSWORD: 'postgres_password', }, }, ], };
编辑 PM2 配置后,退出文件。如果您使用的是
nano
,请按CTRL+x
,然后按y
,然后按ENTER
。使用以下命令在后台运行您的 Strapi 实例:
- pm2 start ecosystem.config.js
Output[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 │ 22608 │ 0s │ 0 │ online │ 0% │ 30.3mb │ sammy │ disabled │ └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘如果应用程序崩溃或被终止,则在 PM2 下运行的应用程序会自动重启。您可以通过运行以下子命令在启动时启动 Strapi 实例:
- pm2 startup
Output[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 sammy --hp /home/sammy这会生成并配置一个启动脚本,以在服务器启动时启动 PM2 及其托管进程。
接下来,复制并执行输出中提供给您的命令,使用您的用户名代替
sammy
:- sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
然后,保存PM2进程列表:
- pm2 save
您现在已经在您的服务器上运行了 PM2 服务。如果您导航回 http://your_domain,请注意 Strapi 现在正在生产模式下运行:
随着 PM2 在后台运行您的服务器,您可以完成保护您的 Strapi 实例。
第 4 步 — 使用 Let's Encrypt 保护 Strapi
当您导航到您的域以查看 Strapi 登录页面时,您可能已经注意到,用 http:// 而不是 https:// 表示的 URL 是不安全的连接。
输入以下命令,使用 Let's Encrypt 保护您的 Strapi 实例:
- sudo snap install --classic certbot
将
snap
安装目录中的certbot
命令链接到您的路径,这样您就可以通过编写certbot
来运行它:- sudo ln -s /snap/bin/certbot /usr/bin/certbot
接下来,允许 HTTPS 流量和
Nginx Full
配置文件:- sudo ufw allow 'Nginx Full'
删除多余的
Nginx HTTP
配置文件余量:- sudo ufw delete allow 'Nginx HTTP'
然后使用 Nginx 插件通过插入您的域地址来获取证书:
- sudo certbot --nginx -d your_domain -d www.your_domain
运行命令时,系统会提示您输入电子邮件地址并同意服务条款。您也可以选择加入或退出电子邮件列表。这样做之后,您会收到一条消息,告诉您该过程已成功以及您的证书存储在哪里:
Output. . . Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2023-02-05. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain . . .导航到 http://your_domain。您将自动重定向到您网站的 HTTPS 版本。还要注意,Strapi 正在生产模式下运行:
您现在可以导航到 https://your_domain/admin 以创建您的 Strapi 管理员帐户:
输入新凭据后,您可以进入管理仪表板:
从仪表板,您可以开始在 Strapi 上创建内容。
结论
在本教程中,您将使用 PostgreSQL 数据库为 Strapi 设置生产环境。您还在 Nginx 反向代理后面提供了您的 Strapi 应用程序,并使用 PM2 进程管理器来保持您的服务器正常运行。
设置 Strapi 服务器后,您可以使用 Strapi 管理仪表板开始创建内容。您可以从 Strapi 的官方文档中了解有关设置和配置 Strapi 应用程序的更多信息。