Ubuntu 22.04安装配置Strapi生产环境完整教程

引言

Strapi 是一个使用 JavaScript 编程语言构建的开源、无界面的内容管理系统(CMS)。与其他无界面的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的服务器。本教程将假设您的服务器满足推荐的硬件规格。
  • 在您的服务器上安装Node.js版本16.xx。请按照我们的如何在Ubuntu 22.04上安装Node.js教程中的选项2进行操作。确保通过PPA选项将版本18.xx替换为16.xx。在撰写本文时,Strapi可能无法正常使用超过16版本的Node。具体来说,本教程使用的是Node v16.18.1。
  • 按照我们的如何在Ubuntu 22.04上安装和使用PostgreSQL教程中的步骤1安装PostgreSQL。
  • 安装并配置Nginx作为反向代理。请按照我们的如何配置Nginx作为反向代理教程中的步骤1和2进行操作。在配置要代理的应用服务器地址时,使用http://localhost:1337作为app_server_address。
  • 一个指向您服务器公网IP的域名。这将与Nginx配置用于代理您的应用服务器。

只需要在服务器上安装Node.js版本16、Nginx和Postgres,就可以继续进行教程了。

第一步 – 设置您的Postgres数据库

任何Strapi项目都需要一个数据库。目前,它支持MySQL,MariaDB,SQlite和PostgreSQL。您可以在官方文档中查看最低版本要求。此外,Strapi需要一个全新的数据库。这意味着您不能使用现有的数据库来链接到您的Strapi实例。

首先,创建一个数据库:

  1. sudo -i -u postgres createdb strapi-db

然后在你的数据库中创建一个用户:

  1. sudo -i -u postgres createuser --interactive
输出
输入要添加的角色名称: sammy
新角色是否为超级用户? (y/n) y

在PostgreSQL中,默认情况下,你使用识别协议或ident身份验证方法进行数据库用户认证。这涉及到PostgreSQL使用客户端的Ubuntu用户名作为数据库用户名。这在许多情况下可以提供更高的安全性,但当你希望外部程序(如Strapi)连接到一个数据库时,也可能会导致问题。为了解决这个问题,请为这个PostgreSQL角色设置一个密码,以允许Strapi连接到你的数据库。

从您的终端中打开PostgreSQL提示符:

  1. sudo -u postgres psql

在PostgreSQL提示符下,将用户配置文件更新为您选择的强密码:

  1. ALTER USER sammy PASSWORD 'postgres_password';

在终端中输入\q以退出你的PostgreSQL用户:

  1. \q

通过创建数据库和用户凭据,您已准备好安装Strapi。

第二步 – 在您的服务器上安装Strapi

在服务器上安装Strapi,请输入以下命令:

  1. npx create-strapi-app@latest my-project

请确认使用确认键并继续安装。

确认后,您将进入一个交互式安装程序。在确保您的数据库名称、用户名和密码已适当更改的同时,选择以下选项:

输出

这是文章《如何在Ubuntu 22.04上设置和安装Strapi以进行生产环境配置》的第2部分(共5部分)。

? 选择您的安装类型 自定义(手动设置)
? 选择您偏好的语言 JavaScript
? 选择您的默认数据库客户端 postgres
? 数据库名称: strapi-db
? 主机: 127.0.0.1
? 端口: 5432
? 用户名: sammy
? 密码: postgres_password
? 启用SSL连接:

由于我们将在本教程的后面部分配置和获取Let’s Encrypt证书,所以目前尚未启用SSL连接。在您做出选择后,Strapi将开始安装。

一旦安装完成,您就可以开始构建您的Strapi项目了。

首先,请确保您在my-project目录中。

  1. cd my-project

 

接下来,请运行以下命令:

  1. NODE_ENV=production npm run build

 

输出

> my-project@0.1.0 build > strapi build 使用生产配置构建您的管理UI… ✔ Webpack在35.44秒内成功编译 管理UI构建成功

这个命令将构建您的Strapi项目,包括Strapi管理界面。

现在您可以测试您的Strapi服务器了。直接运行以下命令即可启动您的Strapi服务器:

  1. node /home/sammy/my-project/node_modules/.bin/strapi start

 

输出

[2022-11-21 13:54:24.671] info: 用户和权限插件自动生成了一个jwt密钥,并将其以JWT_SECRET的名称存储在.env文件中。 项目信息 ┌────────────────────┬──────────────────────────────────────────────────┐ │ 时间 │ 2022年11月21日星期一 13:54:24 GMT+0000(协调世界时)│ │ 启动时间 │ 1603 毫秒 │ │ 环境 │ 开发 │ │ 进程PID │ 4743 │ │ 版本 │ 4.5.4 (node v16.18.1) │ │ 版本类型 │ 社区版 │ └────────────────────┴──────────────────────────────────────────────────┘ 可用操作 还有一件事… 通过访问管理面板创建您的第一个管理员: ┌─────────────────────────────┐ │ http://localhost:1337/admin │ └─────────────────────────────┘

如果您按照先决条件进行操作,您将会将Nginx设置为Strapi默认地址http://localhost:1337的反向代理。在浏览器中导航至http://your_domain以查看默认的Strapi欢迎页面。

初始'build'和'start'命令后的Strapi着陆页

这个命令在默认配置下目前正在使用Strapi的开发模式。它还依赖于与终端中的命令相关联的进程,不适合用于生产环境。接下来,您将向一个称为PM2的进程管理器添加生产配置。

按下CTRL+C退出服务器。

安装了Strapi之后,您可以设置PM2将您的服务器作为服务在后台运行。

步骤三 — 安装并配置PM2

与其手动启动服务器,您可以依靠PM2来管理该过程。有关PM2和配置生产就绪的Node.js应用程序的更多详细信息,请参阅我们的指南。PM2帮助您保持服务器的在线运行,无需手动启动,确保正常运行时间。

首先,确保您处于顶级目录。

  1. cd ~

 

接下来,使用以下命令安装PM2。

  1. sudo npm install pm2@latest -g

 

然后,使用您偏好的文本编辑器为PM2创建一个配置文件。在此示例中使用nano。

  1. sudo nano ecosystem.config.js

 

请将以下内容添加到此文件中,请确保更改项目目录名和路径,并修改数据库名、用户和密码。

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,最后按回车键。

用以下命令将你的Strapi实例在后台运行。

  1. 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 实例。

  1. pm2 startup

 

Output

[PM2] 检测到初始化系统:systemd [PM2] 要设置启动脚本,请复制/粘贴以下命令:sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy –hp /home/sammy

当服务器启动时,这将生成和配置一个启动脚本来启动PM2及其管理进程。

接下来,将输出中给出的命令复制并执行,将你的用户名替换为”Sammy”。

  1. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy –hp /home/sammy

 

然后,保存PM2进程列表。

  1. pm2 save

 

你现在的服务器上已经运行了PM2服务。如果你导航回http://your_domain,你会注意到Strapi现在以生产模式运行。

Strapi生产模式着陆页指示器

通过在后台运行PM2,您可以完成对Strapi实例的安全保护。

第四步 — 使用Let’s Encrypt保护Strapi

当您导航到您的域名以查看Strapi的着陆页时,您可能已经注意到URL使用的是http://而不是https://,这是一个不安全的连接。

通过输入以下命令,使用Let’s Encrypt来保护您的Strapi实例:

  1. sudo snap install –classic certbot

 

将Certbot命令从Snap安装目录链接到您的路径中,这样您就可以通过输入certbot来运行它。

  1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

接下来,允许HTTPS流量以及Nginx完整配置文件。

  1. sudo ufw allow ‘Nginx Full’

 

删除多余的Nginx HTTP配置允许项。

  1. sudo ufw delete allow ‘Nginx HTTP’

 

然后使用Nginx插件通过插入您的域名地址来获取证书。

  1. sudo certbot –nginx -d your_domain -d www.your_domain

 

运行命令时,会提示您输入电子邮件地址并同意服务条款。您还可以选择加入或退出电子邮件列表。完成后,会显示一条消息,告知您操作成功,并告知存储证书的位置。

输出
. . . 成功接收证书。证书保存在:/etc/letsencrypt/live/your_domain/fullchain.pem 密钥保存在:/etc/letsencrypt/live/your_domain/privkey.pem 此证书将于2023-02-05过期。证书续期时将更新这些文件。Certbot已设置计划任务,在后台自动续订此证书。 正在部署证书 已成功为 your_domain 部署证书到 /etc/nginx/sites-enabled/your_domain 已成功为 www.your_domain 部署证书到 /etc/nginx/sites-enabled/your_domain 恭喜!您已成功在 https://your_domain 和 https://www.your_domain 上启用HTTPS . . .

导航到http://your_domain。您将自动重定向到您网站的HTTPS版本。还请注意,Strapi正在运行生产模式。

Strapi生产模式着陆页指示器

现在,您可以导航到https://your_domain/admin,创建您的Strapi管理员账户。

Strapi注册着陆页

输入新的凭证后,您可以进入管理仪表板。

Strapi仪表板从仪表盘上,您可以开始在Strapi上创建内容。

结论

在本教程中,您将使用PostgreSQL数据库设置Strapi的生产环境。您还将通过Nginx反向代理为您的Strapi应用提供服务,并使用PM2进程管理器来保持服务器的正常运行。

在设置完您的Strapi服务器后,您可以在Strapi管理面板上开始创建内容。您可以从Strapi的官方文档中了解更多关于设置和配置您的Strapi应用的信息。

bannerAds