如何在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连接。
先决条件
要跟随这个教程的话,你将需要:
- An Ubuntu 22.04 server set up by following our Initial Server Setup GuideStrapi recommends a server with at least 2 CPU cores and 4GB of RAM. This tutorial will assume your server meets the recommended hardware specifications.
- Node.js version 16.xx installed on your server. Follow Option 2 in our How To Install Node.js on Ubuntu 22.04 tutorial.Make sure to replace version 18.xx with 16.xx via the PPA option. Strapi may not work properly with Node versions beyond 16 at the time of this writing. Specifically, Node v16.18.1 is used in this tutorial.
- PostgreSQL installed by following Step 1 of our How To Install and Use PostgreSQL on Ubuntu 22.04 tutorial.
- Nginx installed and configured as a reverse proxy. Follow Steps 1 and 2 of our How To Configure Nginx as a Reverse Proxy tutorial.When configuring the address of the application server to proxy, use http://localhost:1337 as the app_server_address.
- A domain name pointed at your server’s public IP. This will be configured with Nginx to proxy your application server.
只需要在服务器上安装Node.js版本16、Nginx和Postgres,就可以继续进行教程了。
第一步-设置您的Postgres数据库
任何Strapi项目都需要一个数据库。目前,它支持MySQL,MariaDB,SQlite和PostgreSQL。您可以在官方文档中查看最低版本要求。此外,Strapi需要一个全新的数据库。这意味着您不能使用现有的数据库来链接到您的Strapi实例。
首先,创建一个数据库。 , .)
- sudo -i -u postgres createdb strapi-db
然后在你的数据库中创建一个用户。
- sudo -i -u postgres createuser –interactive
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y
在PostgreSQL中,默认情况下,你使用识别协议或ident身份验证方法进行数据库用户认证。这涉及到PostgreSQL使用客户端的Ubuntu用户名作为数据库用户名。这在许多情况下可以提供更高的安全性,但当你希望外部程序(如Strapi)连接到一个数据库时,也可能会导致问题。为了解决这个问题,请为这个PostgreSQL角色设置一个密码,以允许Strapi连接到你的数据库。
从您的终端中打开PostgreSQL提示符:
- sudo -u postgres psql
在PostgreSQL提示符下,将用户配置文件更新为您选择的强密码。
- ALTER USER sammy PASSWORD ‘postgres_password‘;
在终端中输入\q以退出你的PostgreSQL用户。
- \q
通过创建数据库和用户凭据,您已准备好安装Strapi。
第二步- 在您的服务器上安装Strapi。
在服务器上安装Strapi,请输入以下命令:
- npx create-strapi-app@latest my-project
请确认使用确认键并继续安装。
确认后,您将进入一个交互式安装程序。在确保您的数据库名称、用户名和密码已适当更改的同时,选择以下选项:
? 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
因为将在本教程的后面配置和获取Let’s Encrypt证书,所以SSL连接尚未启用。在您进行选择后,Strapi将开始安装。
一旦安装完成,你就可以开始构建你的Strapi项目了。
首先,请确保你在my-project目录中。
- cd my-project
接下来,请运行以下命令:
- NODE_ENV=production npm run build
> 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 管理界面。
现在可以测试您的Strapi服务器了。直接运行以下命令即可启动您的Strapi服务器:
- node /home/sammy/my-project/node_modules/.bin/strapi start
[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将您的服务器作为服务在后台运行。
步骤三 — 安装并配置PM2
与其手动启动服务器,您可以依靠PM2来管理该过程。有关PM2和配置生产就绪的Node.js应用程序的更多详细信息,请参阅我们的指南。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,最后按回车键。
用以下命令将你的Strapi实例在后台运行。
- pm2 start ecosystem.config.js
[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
[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实例的安全保护。
第四步 — 使用Let’s Encrypt保护Strapi
当您导航到您的域名以查看Strapi的着陆页时,您可能已经注意到URL使用的是http://而不是https://,这是一个不安全的连接。
通过输入以下命令,使用Let’s Encrypt来保护您的Strapi实例:确保您的Strapi实例安全。
- sudo snap install –classic certbot
将Certbot命令从Snap安装目录链接到您的路径中,这样您就可以通过输入certbot来运行它。
- sudo ln -s /snap/bin/certbot /usr/bin/certbot
接下来,允许HTTPS流量以及Nginx完整配置文件。
- sudo ufw allow ‘Nginx Full’
删除多余的Nginx HTTP配置允许项。
- sudo ufw delete allow ‘Nginx HTTP’
然后使用Nginx插件通过插入您的域名地址来获取证书。
- sudo certbot –nginx -d your_domain -d www.your_domain
运行命令时,会提示您输入电子邮件地址并同意服务条款。您还可以选择加入或退出电子邮件列表。完成后,会显示一条消息,告知您操作成功,并告知存储证书的位置。
. . . 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 应用的信息。