如何在Ubuntu14.04上安装和使用BaasBox

来自菜鸟教程
跳转至:导航、​搜索

介绍

BaasBox 是一个结合了数据库服务器和应用程序服务器的应用程序。 BaasBox 开箱即用,提供用户注册、用户管理、角色管理、内容管理、文件管理和带有备份的数据库管理。 由于所有这些功能都是通过标准 HTTP REST API 公开的,因此 Web 和移动应用程序的开发人员可以使用 BaasBox 作为后端来存储数据。 开发人员还可以基于 BaasBox 创建微服务,供其应用程序的其他部分使用。

本文将引导您完成安装 BaasBox、创建用户、使用管理控制台以及在创建简单应用程序后端时探索 REST API。

先决条件

  • 你有一个运行 Ubuntu 14.04 的 Droplet
  • 您以具有管理权限的非 root 用户身份登录到您的服务器。 请参阅教程 Initial server setup guide for Ubuntu 14.04 进行设置。
  • 您已经从 Oracle 安装了官方的 Java 8 JRE。 本教程解释了如何做到这一点。

第 1 步 — 安装和运行 BaasBox

要安装 BaasBox,我们从官网下载最新的稳定版 BaasBox。 您可以使用 wget 命令执行此操作,如下所示:

wget http://www.baasbox.com/download/baasbox-stable.zip

我们将使用 unzip 命令从下载的 zip 文件中提取 BaasBox。 如果您没有 unzip,请使用以下命令安装它:

sudo apt-get install unzip

现在解压缩 zip 文件的内容:

unzip baasbox-stable.zip

此命令将 zip 文件的内容提取到名为 baasbox-X.Y.Z 的目录中,其中 X.Y.Z 将是最新版本,例如 0.9.5。 输入新创建的目录。

cd baasbox-X.Y.Z

此目录包含一个名为 start 的文件,需要执行该文件才能启动 BaasBox。 为此,我们首先需要使用以下命令使其成为可执行文件:

chmod +x ./start

然后要启动 BaasBox,请执行以下命令:

./start

您将看到一些输出,其结尾应类似于:

Output2016-06-28 14:32:14,554 - [info] - BaasBox is Ready.
2016-06-28 14:32:14,558 - [info] - Application started (Prod)
2016-06-28 14:32:14,733 - [info] - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
2016-06-28 14:32:15,261 - [info] - Session Cleaner: started
2016-06-28 14:32:15,263 - [info] - Session cleaner: tokens: 0 - removed: 0
2016-06-28 14:32:15,263 - [info] - Session cleaner: finished

上面输出中突出显示的部分表示 BaasBox 现在正在运行,并且可以在机器上的端口 9000 上访问。 默认的 BaasBox 配置在所有网络接口上侦听此端口。 这意味着 BaasBox 现在可以在以下位置访问:

如果需要,您可以让 BaasBox 在特定的网络接口和不同的端口上进行侦听。 为此,请使用以下命令:

./start -Dhttp.port=target_port -Dhttp.address=target_interface

在浏览器中访问 http://your_ip_address:9000/console 访问 BaasBox 管理控制台,您会看到如下图所示的界面:

随着 BaasBox 的运行,让我们设置一个应用程序和一些用户。

第 2 步 — 使用 BaasBox 创建应用程序

在本文中,我们将创建一个简单的 Todo List Manager,它应该:

  • 允许用户注册
  • 允许用户登录
  • 允许用户创建多个待办事项列表
  • 允许用户检索他们自己的待办事项列表
  • 允许用户修改他们的待办事项列表
  • 允许用户删除他们的待办事项列表
  • 允许用户与其他用户共享他们的待办事项列表

在跟随时,请注意以下几点:

  • 我们将创建两个用户名为 user1user2
  • 这些用户的密码将被称为 user1_passworduser2_password
  • 这些用户的会话 ID 将被称为 user1_session_iduser2_session_id

虽然您可以通过 REST API 管理 BaasBox,但有时使用管理控制台更方便,正如您在步骤 2 中看到的那样,该控制台位于 http://your_ip_address:9000/console。 在浏览器中访问该链接。 由于这是您第一次使用它,请使用默认凭据登录:

  • 默认用户名:admin
  • 默认密码:admin
  • 默认应用代码:1234567890

登录后,您将看到 BaasBox 仪表板:

让我们使用管理控制台为我们的应用程序创建用户。

第三步——创建用户

用户管理是 BaasBox 最有用的功能之一。 BaasBox 有一些内置的用户是私有的,不能被编辑。 这包括您在登录管理控制台时使用的 admin 用户。

BaasBox 还允许您定义角色并将其分配给用户以实现细粒度的访问控制。 默认情况下,BaasBox 具有以下 3 个角色:

  • administrator - 此角色具有完整的、不受限制的访问权限
  • backoffice - 此角色授予对注册用户创建的内容的访问权限
  • registered - 这是新注册用户的默认角色

除了这些预配置的角色之外,您还可以添加自己的角色。 创建新角色时,其权限与上述 registered 角色相同。

您可以通过管理控制台或 REST API 在 BaasBox 中创建用户。 通常,您将使用 REST API 以编程方式创建用户,例如通过应用程序的用户注册过程。

通过管理控制台添加用户时,您可以为他们设置自定义角色。 但是,当使用内置的 REST API 注册时,新创建的用户被分配了 registered 角色。

要从 BaasBox 的管理控制台创建新用户,请在管理控制台中打开 USERS > Users 菜单,然后单击 New User 按钮。

这将打开一个表单,您可以在其中填写您正在创建的用户的详细信息:

UsernamePasswordRetype PasswordRole 字段是必需的,而其他所有字段都是可选的。 请注意,如果需要,您可以在此表格中向下滚动以填写其他详细信息。

将此用户的用户名设置为 user1。 您可以选择任何角色,但最常用的是registered。 输入所有详细信息后,单击保存更改按钮完成用户创建过程。

我们将在后续部分中使用 REST API 创建用户。 现在让我们为应用程序的内容配置一个位置。

第 4 步 - 创建一个集合

BaasBox 将您的内容组织成 collections,类似于 MongoDB 等 NoSQL 数据库提供的集合。 集合包含相同类型的 documents。 熟悉 SQL 数据库的用户可以认为 collectiontable 大致相似。 类似地,document 有点像 record

集合只能由管理员创建。 虽然创建集合的最常用方法是通过管理控制台,但也可以使用 REST API 来实现。 在本节中,我们将了解如何从管理控制台创建集合。

所有内容管理功能都可以在管理控制台的 CollectionsDATA 部分的 Documents 菜单中使用。

打开 数据 > 集合 菜单。 您将看到一个页面,其中列出了应用程序中的所有当前集合。

要创建新集合,请单击 New Collection 按钮。 这将显示一个表单,提示您输入集合名称。

输入todos作为集合名称,点击保存更改,完成集合创建过程。 应用程序的用户现在可以使用 REST API 访问此集合及其在此集合中的文档。 让我们看看它是如何工作的。

第 5 步 — 使用 REST API

现在我们知道如何使用管理控制台执行各种任务,让我们看看如何使用 BaasBox 的 REST API 执行相同的任务。

REST API 可以被各种类型的应用程序使用,从 Web 和移动应用程序到控制台应用程序,我们将在下面的示例中使用 curl 来模拟请求。 您可以根据您的前端平台调整这些示例以满足您的需求。

使用 REST API 创建用户

用于创建用户的curl命令的一般格式如下:

curl http://your_ip_address:9000/user \
    -d '{"username" : "username", "password" : "password"}' \
    -H Content-type:application/json \
    -H X-BAASBOX-APPCODE:baasbox_appcode

在我们的例子中,我们将创建一个用户名为 user2 的用户。 选择您喜欢的任何密码。 我们将使用 X-BAASBOX-APPCODE 标头的默认值,即 1234567890。 使用这些值,我们的命令变为:

curl http://your_ip_address:9000/user \
    -d '{"username" : "user2", "password" : "user2_password"}' \
    -H Content-type:application/json \
    -H X-BAASBOX-APPCODE:1234567890

执行此命令的输出应类似于:

Output{"result":"ok","data":{"user":{"name":"user2","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"a4353548-501a-4c55-8acd-989590b2393c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:12:17.452-0400","generated_username":false,"X-BB-SESSION":"992330a3-4e2c-450c-8d83-8eaf2903188b"},"http_code":201}

这是上述输出的格式化版本:

Output{
  "result": "ok",
  "data": {
    "user": {
      "name": "user2",
      "status": "ACTIVE",
      "roles": [
        {
          "name": "registered",
          "isrole": true
        }
      ]
    },
    "id": "a4353548-501a-4c55-8acd-989590b2393c",
    "visibleByAnonymousUsers": {},
    "visibleByTheUser": {},
    "visibleByFriends": {},
    "visibleByRegisteredUsers": {
      "_social": {}
    },
    "signUpDate": "2016-04-05T13:12:17.452-0400",
    "generated_username": false,
    "X-BB-SESSION": "992330a3-4e2c-450c-8d83-8eaf2903188b"
  },
  "http_code": 201
}

请注意上述输出中突出显示的值。 BaasBox 为每个用户生成一个唯一的 id。 当您想通过 REST API 获取、修改或删除此特定用户的文档时,您将使用此 ID。

第二个突出显示的值是 X-BB-SESSION,它是需要在 user2 将进行的所有未来查询中出现的会话 ID。 我们将在后续部分中将此值称为 user2_session_id

使用 REST API 登录用户

现在我们有了 user2 的会话 ID,让我们为 user1(我们之前在管理控制台中创建的用户)获取一个会话 ID。 我们将通过使用 REST API 以 user1 身份登录来完成此操作。 用于登录的curl命令的一般格式为:

curl http://your_ip_address:9000/login \
    -d "username=username" \
    -d "password=password" \
    -d "appcode=baasbox_appcode"

在我们的例子中,用户名是 user1,密码是创建 user1 时使用的密码,BaasBox 应用程序代码是 1234567890。 使用这些值,我们的命令变为:

curl http://your_ip_address:9000/login \
    -d "username=user1" \
    -d "password=user1_password" \
    -d "appcode=1234567890"

执行此命令的输出应类似于:

Output{"result":"ok","data":{"user":{"name":"user1","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"84191e4c-2471-48a7-98bb-ecdaf118285c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:06:35.750-0400","generated_username":false,"X-BB-SESSION":"74400b4b-d16c-45a2-ada3-1cd51cc202bb"},"http_code":200}

这是上述输出的格式化版本:

Output{
  "result": "ok",
  "data": {
    "user": {
      "name": "user1",
      "status": "ACTIVE",
      "roles": [
        {
          "name": "registered",
          "isrole": true
        }
      ]
    },
    "id": "84191e4c-2471-48a7-98bb-ecdaf118285c",
    "visibleByAnonymousUsers": {},
    "visibleByTheUser": {},
    "visibleByFriends": {},
    "visibleByRegisteredUsers": {}
    },
    "signUpDate": "2016-04-05T13:06:35.750-0400",
    "generated_username": false,
    "X-BB-SESSION": "74400b4b-d16c-45a2-ada3-1cd51cc202bb"
  },
  "http_code": 200
}

上面响应中突出显示的部分显示了 user1 的会话 ID,我们需要在 user1 将进行的所有未来查询中使用它。 从现在开始,我们将此值称为 user1_session_id

使用 REST API 创建文档

让我们在我们的应用程序中创建两个文档。 我们将一个文档分配给我们使用管理控制台创建的用户 user1,并将另一个文档分配给我们通过 REST API 创建的用户 user2。 我们将创建的文档的结构将类似于以下示例:

Sample Document Contents{
  "list_name": "Task List Name",
  "tasks": [
    {
      "task": "Task Details",
      "done": false
    },
    {
      "task": "Task Details",
      "done": false
    }
  ]
}

查看结构,我们可以看到一个文档将有两个属性。 一个是任务列表的名称,另一个是该列表中的任务列表。

用于创建新文档的 curl 命令的一般格式为:

curl -X POST http://your_ip_address:9000/document/collection_name \
     -d 'json_formatted_document' \
     -H Content-type:application/json \
     -H X-BB-SESSION:session_id

让我们从为 user1 创建一个文档开始。 在我们的例子中,集合的名称是 todos,我们要插入的文档如下所示:

Document Contents{
  "list_name": "User 1 - List 1",
  "tasks": [
    {
      "task": "User1 List1 task 1",
      "done": false
    },
    {
      "task": "User1 List1 task 2",
      "done": false
    }
  ]
}

为确保文档与 user1 相关联,我们使用当我们将该用户登录到我们的系统时获得的 user1 的会话 ID。

输入以下命令为 user1 创建文档:

curl -X POST http://your_ip_address:9000/document/todos \
     -d '{"list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}]}' \
     -H Content-type:application/json \
     -H X-BB-SESSION:user1_session_id

执行此命令会产生类似于以下内容的输出:

Output{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

这是上述输出的格式化版本:

Output{
  "result": "ok",
  "data": {
    "@rid": "#24:1",
    "@version": 2,
    "@class": "todos",
    "list_name": "User 1 - List 1",
    "tasks": [
      {
        "task": "User1 List1 task 1",
        "done": false
      },
      {
        "task": "User1 List1 task 2",
        "done": false
      }
    ],
    "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",
    "_creation_date": "2016-04-05T20:34:30.132-0400",
    "_author": "user1"
  },
  "http_code": 200
}

就像它为新用户所做的那样,BaasBox 为所有新文档创建一个 id,在前面的示例中突出显示。 记下这个 id,因为我们稍后会使用它,同时让 user2 访问这个列表。 在后面的章节中,我们将把这个文档的 id 称为 user1_list1_id

现在,您自己使用相同的方法执行以下操作:

  • user1 创建另一个列表
  • user2 创建两个列表

完成这些步骤后,您将在 todos 集合中共有 4 个文档。 在随后的部分中,我们将这些文档的 ID 称为:

  • user1_list1_id
  • user1_list2_id
  • user2_list1_id
  • user2_list2_id

现在我们有了一些可以使用的数据,因此我们可以研究如何使用 REST API 查询数据。

使用 REST API 检索单个文档

通过 id 获取文档的 curl 命令的一般格式为:

curl http://your_ip_address:9000/document/collection_name/document_id \
     -H X-BB-SESSION:session_id

如果我们想要获取由 user1 创建的第一个文档(使用 user1 的凭据),命令应该是:

curl http://your_ip_address:9000/document/todos/user1_list1_id \
     -H X-BB-SESSION:user1_session_id

执行此命令会为我们提供类似于以下内容的输出:

Output{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

这是响应的格式化版本:

Output{
  "result": "ok",
  "data": {
    "@rid": "#24:1",
    "@version": 2,
    "@class": "todos",
    "list_name": "User 1 - List 1",
    "tasks": [
      {
        "task": "User1 List1 task 1",
        "done": false
      },
      {
        "task": "User1 List1 task 2",
        "done": false
      }
    ],
    "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",
    "_creation_date": "2016-04-05T20:34:30.132-0400",
    "_author": "user1"
  },
  "http_code": 200
}

既然您知道如何检索单个文档,请尝试再次执行相同的操作,但这次使用 user2 的会话 ID 获取文档:

curl -X POST http://your_ip_address:9000/document/todos/user1_list1_id \
     -H X-BB-SESSION:user2_session_id

执行此命令会显示类似于以下内容的输出:

Output{"result":"error","message":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found","resource":"/document/todos/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","method":"GET","request_header":{"Accept":["*/*"],"Host":["localhost:9000"],"User-Agent":["curl/7.35.0"],"X-BB-SESSION":["8f5a2e48-0f42-4478-bd1b-d28699158c4b"]},"API_version":"0.9.5","http_code":404}

这是相同的输出,为便于阅读而格式化:

Output{
  "result": "error",
  "message": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found",
  "resource": "\/document\/todos\/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",
  "method": "GET",
  "request_header": {
    "Accept": [
      "*\/*"
    ],
    "Host": [
      "localhost:9000"
    ],
    "User-Agent": [
      "curl\/7.35.0"
    ],
    "X-BB-SESSION": [
      "8f5a2e48-0f42-4478-bd1b-d28699158c4b"
    ]
  },
  "API_version": "0.9.5",
  "http_code": 404
}

如您所见,因为 user2 没有创建此文档,也无权访问此文档,因此获取操作失败。 如果您尝试以 user2 的形式执行命令,但使用由 user2 创建的文档的 id,您将能够很好地获取该文档。

使用 REST API 检索所有文档

用于从集合中获取所有可访问文档的 curl 命令的一般格式是:

curl http://your_ip_address:9000/document/collection_name \
     -H X-BB-SESSION:session_id

请记住,此命令将仅返回用户有权访问的文档。 例如,让我们尝试以 user1 的形式执行此命令:

curl http://your_ip_address:9000/document/todos \
     -H X-BB-SESSION:user1_session_id

执行此命令会为我们提供类似于以下内容的输出:

Output{"result":"ok","data":[{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},{"@rid":"#24:2","@version":1,"@class":"todos","list_name":"User 1 - List 2","tasks":[{"task":"User1 List2 task 1","done":false},{"task":"User1 List2 task 2","done":false}],"id":"7c99c877-d269-4281-8a22-ef72175085f4","_creation_date":"2016-04-05T20:46:14.338-0400","_author":"user1"}],"http_code":200}

这是该输出的格式化版本:

Output{
  "result": "ok",
  "data": [
    {
      "@rid": "#24:1",
      "@version": 2,
      "@class": "todos",
      "list_name": "User 1 - List 1",
      "tasks": [
        {
          "task": "User1 List1 task 1",
          "done": false
        },
        {
          "task": "User1 List1 task 2",
          "done": false
        }
      ],
      "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",
      "_creation_date": "2016-04-05T20:34:30.132-0400",
      "_author": "user1"
    },
    {
      "@rid": "#24:2",
      "@version": 1,
      "@class": "todos",
      "list_name": "User 1 - List 2",
      "tasks": [
        {
          "task": "User1 List2 task 1",
          "done": false
        },
        {
          "task": "User1 List2 task 2",
          "done": false
        }
      ],
      "id": "7c99c877-d269-4281-8a22-ef72175085f4",
      "_creation_date": "2016-04-05T20:46:14.338-0400",
      "_author": "user1"
    }
  ],
  "http_code": 200
}

从输出中可以看出,只有 user1 有权访问的文档被返回。 如果您要使用属于 user2 的会话 ID 执行相同的查询,您将看到一组不同的文档。

使用 REST API 更新文档

用于更新文档的 curl 命令的一般格式为:

curl -X PUT http://your_ip_address:9000/document/collection_name/document_id \
     -d 'new_json_formatted_document' \
     -H Content-type:application/json \
     -H X-BB-SESSION:session_id

尝试更新文档时要记住两件事:

  • 只有文档所有者可以修改文档
  • 更新 不会合并旧文档和新文档 。 它 用新文档替换 旧文档。 这意味着如果更新命令包含原始版本中缺少某些字段的文档,则这些字段将丢失。

让我们使用这个命令来更新 id 为 user1_list1_id 的文档,内容如下:

New Document Contents{
  "list_name": "User 1 - List 1 Updated",
  "tasks": [
    {
      "task": "New User1 List1 task 1",
      "done": false
    }
  ]
}

进行此更新的命令是:

curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id \
     -d '{"list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}]}' \
     -H Content-type:application/json \
     -H X-BB-SESSION:user1_session_id

执行此命令会为我们提供类似于以下内容的输出:

Output{"result":"ok","data":{"@rid":"#24:1","@version":4,"@class":"todos","list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

这是相同的输出,格式化:

Output{
  "result": "ok",
  "data": {
    "@rid": "#24:1",
    "@version": 4,
    "@class": "todos",
    "list_name": "User 1 - List 1 Updated",
    "tasks": [
      {
        "task": "New User1 List1 task 1",
        "done": false
      }
    ],
    "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",
    "_creation_date": "2016-04-05T20:34:30.132-0400",
    "_author": "user1"
  },
  "http_code": 200
}

如您所见,文档已使用新信息进行了更新。

使用 REST API 删除文档

用于删除文档的 curl 命令的一般格式为:

curl -X DELETE http://your_ip_address:9000/document/collection_name/document_id \
     -H X-BB-SESSION:session_id

只有文档所有者和对文档具有 delete 权限的用户才能删除该文档。

让我们使用这个命令来删除 id 为 user1_list1_id 的文档,如下所示:

curl -X DELETE http://your_ip_address:9000/document/todos/user1_list1_id \
     -H X-BB-SESSION:user1_session_id

执行此命令会给出以下输出:

Output{"result":"ok","data":"","http_code":200}

这表明文档已成功删除。 id 将来访问此文档的任何尝试现在都将失败。

使用 REST API 向其他用户授予访问权限

我们已经看到,默认情况下,BaasBox 如何阻止用户访问不是由他们创建的文档。 但是,有时需要授予多个用户访问文档的权限。 让我们授予 user2 访问 ID 为 user1_list1_id 的文档的权限。

用于授予文档访问权限的 curl 命令的一般格式为:

curl -X PUT http://your_ip_address:9000/document/collection_name/document_id/access_type/user/username \
     -H X-BB-SESSION:session_id

此命令仅在由对该文档具有完全访问权限的用户执行时才有效。 access_type 占位符可以具有以下 4 个值之一:

  • 更新
  • 删除
  • 全部

要授予 user2 对 ID 为 user1_list1_id 的文档的读取权限,请使用 user1 的会话 ID 执行以下命令:

curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id/read/user/user2 \
     -H X-BB-SESSION:user1_session_id

执行此命令会给出以下输出:

Output{"result":"ok","data":"","http_code":200}

这表明 user2 现在可以访问文档 user1_list1_id。 如果您尝试以 user2 身份访问此文档,您现在将看到文档详细信息而不是错误响应

第 6 步 — 使用 Supervisor 保持应用程序运行

每当您有一个长时间运行的应用程序时,它总是存在停止运行的风险。 这可能由于多种原因而发生,例如应用程序错误、系统重新启动等。 最好将应用程序配置为在意外关闭时重新启动。 这最大限度地减少了维护应用程序的管理开销。

对于这个应用程序,我们将使用 Supervisor,它可以轻松管理长时间运行的应用程序。 如果您对 Supervisor 不熟悉,可以在此处 阅读更多关于 如何在 Ubuntu 上安装和管理 Supervisor 的内容。

首先,安装主管:

sudo apt-get install supervisor

为了让 Supervisor 管理我们的应用程序,我们需要创建一个配置文件。 我们将此文件命名为 baasbox.conf 并将其放在 /etc/supervisor/conf.d 目录中。

sudo nano /etc/supervisor/conf.d/baasbox.conf

在文件中输入以下内容,根据需要替换突出显示的部分。

/etc/supervisor/conf.d/baasbox.conf

[program:Baasbox]
directory = /home/sammy/baasbox-0.9.5
command = /home/sammy/baasbox-0.9.5/start
autostart = true
autorestart = true
startsecs = 5
user = sammy
stdout_logfile = /var/log/supervisor/baasbox.log

我们现在需要将这些更改通知 Supervisor 并让它使用这些更改。 执行以下命令:

supervisorctl reread

然后运行这个命令:

supervisorctl update

现在,每当您的应用程序因任何原因关闭时,Supervisor 将确保它重新启动而无需任何手动干预。

结论

在本文中,我们了解了如何使用 BaasBox 通过管理控制台和 REST API 来管理内容、用户和权限。 除了本文涵盖的主题之外,BaasBox 还提供了更多内容。 您可以进一步探索 BaasBox 管理控制台,以熟悉允许您管理文件、获取和恢复数据库备份以及配置 API 端点可用性的部分。 更重要的是,您现在可以在下一个应用程序中开始使用 BaasBox。