【OpenStack】创建并部署自己的Web服务器和应用

2019-09-10T13:11:33+08:00 | 7分钟阅读 | 更新于 2019-09-10T13:11:33+08:00

Macro Zhao

【OpenStack】创建并部署自己的Web服务器和应用

@TOC

推荐超级课程:

这是整个系列中我们一直在等待的:创建一个可以部署在OpenStack上并利用OpenStack服务的应用程序。作为这些练习的一部分,我希望我们能够体验到以下内容:

  1. 部署一个“支持(support)”服务器(我们已经在我们的PostgreSQL数据库中完成了这一步)。
  2. 编写一个连接到另一个服务器(数据库)的应用程序。
  3. 集成OpenStack SDK与OpenStack服务一起工作(我们将使用Swift对象存储服务 )。
  4. 将这个应用程序部署到我们的OpenStack云(下一篇文章的目标)。

在本文中,我们将专注于开发任务。尽管我已经加快了一些进度并且已经编写了代码。我们将在这里回顾相关任务。您可以在这里找到项目:对象存储目录(github.com/wsidl/openstack_swift_api)

对象存储目录

注意:请原谅我缺乏任何重要文档、测试框架、构建结构等。这仅用于练习目的。

在开始编码之前,让我们快速查看项目。这是一个包含2个工作模块(用于数据库工作的metadata和用于Swift操作的object_store)的Python Flask项目。还有一个ui目录,其中包含一个Nuxt.js 项目用于用户界面。此UI通过REST API连接到Flask服务器。

您可以查看任何想要的代码,但这个项目的重点是使用OpenStack Swift来了解它是如何工作的,以及了解OpenStack服务的运行方式。

云服务的工作原理

正如我刚才暗示的,OpenStack(或大多数其他云提供商)服务的工作方式和传统服务器有些不同。

与我们自己配置和管理的服务器不同,云服务完全由云本身在幕后处理。如果您的DBaaS(数据库即服务)上出现问题,存储已损坏,没有问题。服务已经设置了复制的存储并使用备份重新启动您的实例。这隐藏了很多我们开发人员不愿意处理的任务,比如系统故障转移、硬件异常、软件更新等。这是更大程度上的“一切皆服务”或“XaaS”的前提之一:任何人都可以使用该服务

这也意味着访问这些服务的产品需要有一些额外的工作。例如,OpenStack DBaaS,Trove 提供数据库作为服务。与我们项目中的数据库在其中登录主机不同,Trove服务将允许您编程方式创建数据库并定义类型和其他配置。一旦服务为您提供了数据库,您可以请求其公共可访问的IP地址进行连接。主要区别在于,如果您在服务中定义了它并提供了开放权限,同一个数据库可以被多个项目和多个网络访问。此外,不能保证您一次收到的IP地址将是下次收到的相同地址。

这也导致了这些云服务的另一个问题,网络变得更加复杂。OpenStack在保持事物简单方面做得很好,但其他提供商试图将所有东西隐藏到其他服务中,使连接任何内容变得非常头疼(Azure,我在看你)。

查看Swift Python SDK

使用Python SDK工作的服务需要一个依赖项:openstacksdk 。这个库将为您提供跨服务的最一致的体验,同时也得到了OpenStack开发团队的广泛支持。

object_store.py#L1

import openstack

接下来,我将查看此项目中的object_store 模块以概述已完成的工作。

连接

在连接到云的Swift服务时,您可以根据需求以多种方式定义连接凭据:

  1. 直接将连接详细信息指定到连接方法中,使用带有usernamepasswordproject_idproject_domain_idauth_url命名关键字参数。
  2. 使用多云环境,可以使用列出各种云、项目、域、凭据的cloud.yaml文件。然后可以为每个可用凭据创建不同的连接。更多信息请参阅此处
  3. 使用OpenStack提供的环境变量,使用为项目下载的RC文件。

注意:这里解释的环境变量准备如同单个文件一样,您可以从项目的控制面板下载它(在OpenStack控制面板中的顶部菜单下的用户名下),点击“下载RC文件”

下载RC文件

然后连接客户端将根据重要性顺序(从上到下按顺序使用它找到的第一组凭据)完成必要的工作以确定使用的最佳协议:

  • 将参数添加到连接客户端
  • 环境变量
  • clouds.yaml文件(如果在项目中具有多个身份标识,则连接将出现错误,因为您需要指定要使用的身份标识)

object_store.py#L29

_OS_CONNECTION = openstack.connect()

这将创建一个连接客户端,我们可以在模块中重复使用。一旦建立了活动连接,我们还可以创建缺失的Swift容器。

注意:容器(或其他云平台上的“存储桶”)是在数据块内创建分割的一种方式。Swift还通过在容器内创建“文件夹”来进一步进行分割。

__containers = [
    cont.name
    for cont in _OS_CONNECTION.object_store.containers(prefix=c.SWIFT_CONTAINER)
    if cont.name == c.SWIFT_CONTAINER
]
if not __containers:
    _OS_CONNECTION.object_store.create_container(name=c.SWIFT_CONTAINER)

注意:可以进行查询以限制检索到的数据数量,但在大多数情况下,您只需使用prefix参数即可。

发送请求

SDK提供了许多工作基础服务的方式。API将取决于您正在使用的服务(您可以在此处找到API结构:https://docs.openstack.org/openstacksdk/latest/user/index.html

在处理对象时,这些操作看起来像:

使用其他SDK和其他语言

有很多(并且越来越多)可以连接到的OpenStack服务,以整合到您的应用程序中,通过相同的接口,也可以自动化项目设置或作为系统管理员执行管理任务。您可以通过查看OpenStack的API文档页面 来了解这些SDK的工作原理。如果您在使用另一种语言,也没有问题。有多种语言受支持(由于所有服务都是基于REST API构建的)。您可以在这里查看:[OpenStack Wiki/SDKs(略有过时)。

运行项目

现在我们知道了Swift特定任务的工作原理,让我们试一试。Git存储库中已包含在README 中设置项目的步骤,但我会在这里简要概述:

克隆存储库

如果您是本论坛的成员,您可能已经非常了解如何做到这一点,但是快速提醒一下:

git clone https://github.com/wsidl/openstack_swift_api.git
cd openstack_swift_api

安装项目依赖项

# 我现在几乎每次都这样做…解决了很多问题
pip install --upgrade pip
# 如果您尚未安装,请安装Python Poetry
pip install poetry
# 设置虚拟环境、验证依赖版本、下载并安装这些依赖项
poetry install

定义环境配置

如果您参加了上一篇文章,那么您应该仍然有您的SSH隧道可用。简单复习一下,您将以SSH方式登录到您的DevStack VM,并运行以下命令:

ssh app@<floating_ip> -L 0.0.0.0:5432:localhost:5432

您还需要您的OpenStack凭据来验证对Swift服务的访问权限。最简单的方法是从您的环境中下载RC文件(如上所述),将其复制到该项目的根目录,并将其重命名为.env(该项目使用python-dotenv查找文件中分配的值) 并删除不分配值的任何值以及每行开头的“export”文字。

如果您想使用简单的解决方案(如果您使用的是POSIX系统):

grep -E "^export" openrc.sh | sed -E 's/^export (.*)="?([^"]*)"?$/1=2/g' > .env

这将生成一个看起来像这样的文件:

OS_AUTH_URL=http://not.a.real.ip/identity
OS_PROJECT_ID=0123456789abcdef0123456789abcdef
OS_PROJECT_NAME=my_app
OS_USER_DOMAIN_NAME=Default
OS_PROJECT_DOMAIN_ID=default
OS_USERNAME=admin
OS_PASSWORD=$OS_PASSWORD_INPUT
OS_REGION_NAME=RegionOne
OS_INTERFACE=public
OS_IDENTITY_API_VERSION=3

用您的admin密码替换$OS_PASSWORD_INPUT。您还需要添加一些其他值以连接到PostgreSQL:

PG_HOST=<DevStack IP>
PG_PORT=<SSH隧道端口默认5432>
PG_DBNAME=app
PG_USER=app
PG_PASSWORD=<DB密码>

启动服务器

poe dev

现在,您应该有一个启动并准备在http://127.0.0.1:5001 上使用的服务器界面。当您使用界面时,请保持打开一个窗口以查看OpenStack仪表板,查看对象存储部分。当您添加文件时,您将看到数据库中的元数据和标签被填充,同时web_api容器正在使用唯一哈希接收文件。

OpenStack对象存储仪表板

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee