为开发者安装和运行¶
StoryBoard 主要有两个组件:API 服务器和基于 Javascript 的 Web 客户端。API 服务器是必需的,但如果存在替代方案,Web 客户端也可以被替换。这意味着可以使用不同的用户界面与 StoryBoard API 交互;这些替代方案的安装说明在其各自的仓库中有详细介绍(例如,boartty,一个命令行界面,可以在这里找到:https://git.openstack.org/cgit/openstack/boartty/)。
本安装指南将涵盖 API 和最广泛使用的 StoryBoard Web 客户端,并假定在 Ubuntu 16.04 或更新版本上运行。这些说明对于其他发行版也基本适用。
设置您的机器以开发 StoryBoard 的推荐方法是使用提供的 docker-compose.yml 文件。但是,如果您愿意,我们也提供了手动设置的说明。
使用 Docker¶
此方法使用 Docker 运行 StoryBoard 所需的服务,例如 MySQL 和 RabbitMQ。StoryBoard API 和 Web 客户端直接在主机上运行,以缩短开发周期。它们使用 tox 在虚拟环境中运行,以最大程度地减少所需的手动安装量。
完成这些步骤后,您应该可以在 https://:8080/ 上运行可用的 StoryBoard API,并在 https://:9000/ 上访问可用的 StoryBoard Web 客户端。
1. 安装 Docker¶
请遵循您平台的 Docker 安装说明。
注意
在 Linux 上,请务必将您的用户添加到 docker 组,以避免需要 sudo。
sudo usermod -aG docker your-user
您需要注销并重新登录才能使此设置生效。
3. 获取代码¶
代码使用 git 存储,因此您需要安装 git。
sudo apt install git
然后可以克隆 API 和 Web 客户端的代码。
git clone https://git.openstack.org/openstack-infra/storyboard
git clone https://git.openstack.org/openstack-infra/storyboard-webclient
cd storyboard
4. 运行容器¶
目前,docker-compose.yml 文件设置了 3 个容器来提供以下服务:
- MySQL
- Swift
- RabbitMQ
您可以通过在 storyboard 仓库的根目录下执行以下命令来启动容器。
cd docker
docker-compose up
注意
您可以通过执行以下操作使 docker-compose 进程在后台运行:
cd docker
docker-compose up -d
5. 安装依赖项¶
运行 API 和构建 Web 客户端需要一些依赖项。在 Ubuntu 上,您可以使用以下命令安装它们:
sudo apt install build-essential python3-dev
pip3 install --user tox
6. 迁移数据库¶
此时您可以运行 StoryBoard,但由于数据库为空,它毫无用处。迁移使用 storyboard-db-manage 脚本运行,您可以在 storyboard 仓库的根目录下使用 tox 运行它。
tox -e venv -- storyboard-db-manage --config-file ./docker/storyboard.conf upgrade head
此命令按顺序运行所有数据库迁移。它底层使用 alembic,并具有类似的 CLI。
7. 运行 API¶
API 使用 storyboard-api 命令运行。同样,您可以在 storyboard 仓库的根目录下使用 tox 运行它。
tox -e venv -- storyboard-api --config-file ./docker/storyboard.conf
docker/storyboard.conf 配置文件包含已设置为使用先前创建的容器的配置,因此无需手动配置。
此命令的输出应以类似以下内容结束:
2019-03-20 11:25:44.862 22047 INFO storyboard.api.app [-] Starting server in PID 22047
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] Configuration:
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] serving on 0.0.0.0:8080, view at http://127.0.0.1:8080
此时,API 正在成功运行。您可以使用 Ctrl+C 或关闭终端来停止它。
8. 运行 Web 客户端¶
storyboard-webclient 仓库提供了一个 tox 目标,该目标构建 Web 客户端并使用开发服务器对其进行服务。您可以在 storyboard-webclient 仓库的根目录下使用 tox 运行它。
tox -e grunt_no_api -- serve
这需要一些时间才能运行,因为它使用 npm 获取所需的依赖项,并构建 node-sass。
此命令的输出应以类似以下内容结束:
Running "connect:livereload" (connect) task
Started connect web server on http://localhost:9000
Running "watch" task
Waiting...
此时 Web 客户端正在成功运行。您可以使用 Ctrl+C 或关闭终端来停止它。对代码库中现有文件的任何更改都会导致它自动重新构建 Web 客户端并刷新浏览器中的页面,以帮助简化开发工作流程。
您可以在浏览器中访问 https://:9000/ 查看它。您应该也可以在此处登录。提供的配置文件使用 Ubuntu One 作为 OpenID 提供商,因此您需要一个 Ubuntu One 帐户才能这样做。
9. 启用通知¶
StoryBoard 中的通知由订阅消息队列事件的工作人员处理。目前仅支持 RabbitMQ。docker-compose.yml 文件运行一个 RabbitMQ 服务器,并且提供的配置文件已设置为启用通知。
要运行工作人员以便实际创建通知,请在 storyboard 仓库的根目录下使用 tox。
tox -e venv -- storyboard-worker-daemon --config-file ./docker/storyboard.conf
这将启动 5 个工作人员来监听事件并创建任何相关通知。
手动安装¶
1. 安装依赖项¶
要启动 API 服务器,请确保您在本地安装了以下软件包:
build-essential
python3-dev
python3-pip
MySQL
sudo apt update sudo apt install build-essential python3-dev python3-pip sudo apt install mysql-server-5.7 # Here you should be asked to set a password mysql --version
注意
MySQL 必须 >= 5.6,以支持 InnoDB 表上的全文索引。
警告
在 Ubuntu 17.10 或更新版本上,mysql 不会要求设置 root 密码。您需要手动设置一个,可以在 这里 阅读如何操作。
2. 获取代码¶
代码使用 git 存储,因此您需要安装 git。
sudo apt install git
然后可以克隆 API 和 Web 客户端的代码。
git clone https://git.openstack.org/openstack-infra/storyboard
git clone https://git.openstack.org/openstack-infra/storyboard-webclient
cd storyboard
3. 创建数据库¶
StoryBoard 需要一个数据库。这些命令创建一个名为 storyboard 的数据库,并删除任何同名的现有数据库。
mysql -u root -p -e 'DROP DATABASE IF EXISTS storyboard;'
mysql -u root -p -e 'CREATE DATABASE storyboard;'
注意
如果您想使用非 root 用户,请将 root 更改为您所需的用户名。
4. 创建配置文件¶
StoryBoard 需要一个配置文件才能运行。除示例内容外,最小可用配置还需要包含一个未注释的 connection 行,以便允许数据库连接。
cp ./etc/storyboard.conf.sample ./etc/storyboard.conf
要将其转换为可用的配置文件,需要进行一些更改。编辑 ./etc/storyboard.conf 并进行以下更改:
- 在
database部分中,更新connection行,将root:pass替换为您连接数据库时使用的用户名和密码。这很可能是root以及您在安装 MySQL 时选择的密码。
通过删除 # 来取消注释此行,确保行开头没有空格。
警告
如果您在 VM 中运行 API,并计划远程访问它(即通过其 IP 地址或主机名),您还需要将该 IP 地址或主机名添加到 oauth 部分中的 valid_oauth_clients 行。也取消注释此行。如果以 ^ 字符开头,它也可以是正则表达式。
5. 安装 tox¶
StoryBoard 使用 tox 来运行测试和管理用于运行开发服务器的虚拟环境。
pip3 install --user tox
注意
如果这是您第一次将 --user 传递给 pip,您可能需要将 ~/.local/bin 添加到您的 PATH。
6. 迁移数据库¶
此时您可以运行 StoryBoard,但由于数据库为空,它毫无用处。迁移使用 storyboard-db-manage 脚本运行,您可以在 storyboard 仓库的根目录下使用 tox 运行它。
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf upgrade head
此命令按顺序运行所有数据库迁移。它底层使用 alembic,并具有类似的 CLI。
7. 运行 API¶
API 使用 storyboard-api 命令运行。同样,您可以在 storyboard 仓库的根目录下使用 tox 运行它。
tox -e venv -- storyboard-api --config-file ./etc/storyboard.conf
此命令的输出应以类似以下内容结束:
2019-03-20 11:25:44.862 22047 INFO storyboard.api.app [-] Starting server in PID 22047
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] Configuration:
2019-03-20 11:25:44.863 22047 INFO storyboard.api.app [-] serving on 0.0.0.0:8080, view at http://127.0.0.1:8080
此时,API 正在成功运行。您可以使用 Ctrl+C 或关闭终端来停止它。
8. 运行 Web 客户端¶
storyboard-webclient 仓库提供了一个 tox 目标,该目标构建 Web 客户端并使用开发服务器对其进行服务。您可以在 storyboard-webclient 仓库的根目录下使用 tox 运行它。
tox -e grunt_no_api -- serve
这需要一些时间才能运行,因为它使用 npm 获取所需的依赖项,并构建 node-sass。
此命令的输出应以类似以下内容结束:
Running "connect:livereload" (connect) task
Started connect web server on http://localhost:9000
Running "watch" task
Waiting...
此时 Web 客户端正在成功运行。您可以使用 Ctrl+C 或关闭终端来停止它。对代码库中现有文件的任何更改都会导致它自动重新构建 Web 客户端并刷新浏览器中的页面,以帮助简化开发工作流程。
您可以在浏览器中访问 https://:9000/ 查看它。您应该也可以在此处登录。提供的配置文件使用 Ubuntu One 作为 OpenID 提供商,因此您需要一个 Ubuntu One 帐户才能这样做。
可选:启用通知¶
StoryBoard 中的通知由订阅消息队列事件的工作人员处理。目前仅支持 RabbitMQ。
2. 设置 RabbitMQ¶
为 StoryBoard 创建一个 rabbitmq 用户/密码(有关更多信息,请参阅 rabbitmq manpages)。
# (username) (password)
sudo rabbitmqctl add_user storyboard storyboard
sudo rabbitmqctl set_permissions -p / storyboard ".*" ".*" ".*"
3. 配置通知¶
StoryBoard 需要在其配置文件中设置各种键,以了解如何使用 RabbitMQ,并且需要显式启用通知功能。
在您的 storyboard.conf 文件中设置以下配置,如果上一步中使用了不同的用户 ID 和密码,请相应地替换它们。
[DEFAULT]
enable_notifications = True
[notifications]
rabbit_host=127.0.0.1
rabbit_login_method = AMQPLAIN
rabbit_userid = storyboard
rabbit_password = storyboard
rabbit_port = 5672
rabbit_virtual_host = /
4. 重启 API¶
如果 API 正在运行,请立即重新启动以应用配置更改。使用 Ctrl+C 停止现有进程,并再次在 storyboard 仓库的根目录下使用 tox。
tox -e venv -- storyboard-api --config-file ./etc/storyboard.conf
5. 运行工作程序¶
要运行工作人员以便实际创建通知,请在 storyboard 仓库的根目录下使用 tox。
tox -e venv -- storyboard-worker-daemon --config-file ./etc/storyboard.conf
这将启动 5 个工作人员来监听事件并创建任何相关通知。
使用您的开发 StoryBoard¶
一旦 API 和 Web 客户端开发服务器运行,您可以通过几种方式使用您的开发实例 StoryBoard。
默认情况下,Web 客户端开发服务器使用端口 9000,因此可以通过在同一台机器上运行的 Web 浏览器中导航到 https://:9000/ 来访问它。
如果您的浏览器在不同的机器上,则运行 API 的机器的主机名或 IP 地址必须在 API 的 ./etc/storyboard.conf 文件中的 valid_oauth_clients 键中,以便进行登录。如果以 ^ 字符开头,它也可以是正则表达式。
默认情况下,API 服务器使用端口 8080,因此可以在 https://:8080/ 访问 API。这将产生 404,因为 API 在 / 端点上实际上不提供任何内容,但这反直觉地意味着它可能正在工作。可用的 API 端点在 V1 Web API 页面上有文档记录。
Web 客户端服务器还将 /api 转发到 API 服务器,因此也可以通过将请求发送到 https://:9000/api/ 来使用 API。
登录 StoryBoard 实例的第一个用户将被设为超级用户,并拥有完整的管理员权限,以便轻松配置开发实例。
可选步骤:使用基本数据填充数据库¶
如果您想在数据库中定义超级用户,请将
./etc/superusers.yaml.sample复制到./etc/superusers.yaml并定义一些超级用户 ID。在数据库中启用超级用户。
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf load_superusers ./etc/superusers.yaml
如果您想快速在数据库中设置一组项目和项目组,请将
./etc/projects.yaml.sample复制到./etc/projects.yaml并定义一些项目和项目组。在数据库中创建项目和项目组。
tox -e venv -- storyboard-db-manage --config-file ./etc/storyboard.conf load_projects ./etc/projects.yaml