如何搭建一个Strapi服务器

发布于 2023-03-14 04:16

我的两版博客后台都是选择了 Strapi,因为它真的很适合想要开发高度定制博客的开发者。

Headless CMS

Strapi 是一个开源无界面 CMS。所谓无界面——即 Headless ——是指这种 CMS 只提供结构化的数据和接口,而不提供界面。在拿到数据后你需要用任何框架或方法将数据渲染成界面。

关于无界面 CMS,可参阅该篇译文:一分钟搞清楚什么是无界面 CMS

这种无界面 CMS 就很适合那些需要高度定制博客的开发者。拿本站来说,有三个主要数据类型:文章、摄影和视频。

每一个类型都有一些自己独有的字段。添加什么字段、互相之间是什么关系,完全取决于你的产品需求。

本文我将分享一下如何在服务器上搭建并运行起一个 Strapi 实例。

准备

开始之前你需要准备下面这些:

  1. 一台 VPS 或任何轻量应用服务器;
  2. 一个域名。

VPS 将以 Ubuntu 22 为例。

Strapi 运行需要 Node.js 和一个数据库。因此你需要先安装好 Node、NPM。

数据库准备

MySQL、MariaDB、PostgreSQL 和 SQLite 都可以,我选择的是 PostgreSQL。

首先安装 PostgreSQL:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

登录到数据库后台:

sudo -u postgres psql

创建一个数据库,名字我取的是 strapi:

CREATE DATABASE strapi;

创建一个用户。记得将usernamepassword替换为你自己的:

CREATE USER $username WITH PASSWORD '$password';

将数据库所有权转移给刚才创建的用户:

ALTER DATABASE strapi OWNER TO $username;

并为该用户授权:

GRANT ALL PRIVILEGES ON DATABASE strapi TO $username;

数据库准备好了,接下来准备 Strapi。

Strapi安装

如果你之前已经在本地创建过 Strapi 并上传到 Git,此时可以把那个项目clone下来。如果没有,使用 CLI 进行安装:

npx create-strapi-app@latest my-project

这时会有一些安装选项,根据你的需要选择即可。

完成后进入该目录,安装pg

npm install pg

修改./config/database.js文件:

module.exports = ({ env }) => ({
  connection: {
    client: "postgres",
    connection: {
      host: env("DATABASE_HOST", "127.0.0.1"),
      port: env.int("DATABASE_PORT", 5432),
      database: env("DATABASE_NAME", "strapi"),
      user: env("DATABASE_USERNAME", ""),
      password: env("DATABASE_PASSWORD", ""),
    },
    useNullAsDefault: true,
  },
});

之后回到安装目录,创建一个环境变量文件:

nano .env

将上面用到的DATABASE_NAMEDATABASE_USERNAME等变量加入该文件。具体格式可自行搜索。

全部妥当,这时候在安装目录执行npm run dev应该就能成功跑起 Strapi 了。

其他配置

为了今后更方便使用,可以配置好 Nginx 和 PM2。

Strapi 默认运行在1337端口,在 Nginx 里配置到该端口的转发,将来就可以通过域名直接访问了。如何配置 Nginx 以及 HTTPS 请自行搜索。

PM2 是一个 Node 程序管理器,可以在这里更方便管理 Node。

首先安装 PM2:

npm install pm2@latest -g

回到主目录,创建配置文件:

cd ~

pm2 init

sudo nano ecosystem.config.js

将环境变量添加到该配置文件:

module.exports = {
  apps: [
    {
      name: 'your-app-name',
      cwd: '/home/ubuntu/my-project',
      script: 'npm',
      args: 'start',
      env: {
        APP_KEYS: 'your app keys', // you can find it in your project .env file.
        API_TOKEN_SALT: 'your api token salt',
        ADMIN_JWT_SECRET: 'your admin jwt secret',
        JWT_SECRET: 'your jwt secret',
        NODE_ENV: 'production',
        DATABASE_HOST: 'your-unique-url.rds.amazonaws.com',
        DATABASE_PORT: '5432',
        DATABASE_NAME: 'strapi', // DB name under 'Configuration' tab
        DATABASE_USERNAME: 'postgres',
        DATABASE_PASSWORD: 'Password',
      },
    },
  ],
};

接下来就可以通过这个命令启动 Strapi 了:

pm2 start ecosystem.config.js

另外建议让 PM2 开机启动:

pm2 startup systemd

复制粘贴出现的命令,执行,接着:

pm2 save

就齐活了。

Strapi的使用

Strapi 的使用分为两种情况:开发环境和正式环境。

创建和编辑数据类型,只能在开发环境下进行。通过npm run develop启动开发环境后,登录 Strapi 即可设置数据类型。

设置完成后,执行构建和启动命令:

npm run build

npm run start

这时候 Strapi 就可以长期稳定运行作为数据源了。