使用 IBM 云虚拟服务器和 Podman,直到启动 Flowise
关于这篇文章
以下是在Ubuntu22.04 Server x Podman环境中运行基于生成AI的无代码/低代码开发工具”Flowise”的备忘录,这在Podman的案例中并不常见。通过熟悉Ubuntu22.04 Server x Podman环境,可以将其应用于边缘服务器/边缘设备,如Raspberry Pi等。
另外,我正在整理并写出试验结果,但需要注意的是,未来每个软件版本的升级都可能导致这里所写的内容无法使用,请注意。
我选择Podman的原因
Podman是由RedHat公司主导开发的容器管理工具。近年来,IBM Cloud的动向逐渐集中于与RedHat公司的联系增加,并且在容器相关领域,如Kubernetes和OpenShift,不断增加更新和新功能。因此,如果基于使用IBM Cloud的前提,我们选择Podman作为容器管理工具,这是因为它在文档丰富度和与OpenShift的关联方面有优势。
由于可以使用Podman来生成Kubernetes的YAML文件,因此Podman适用于不仅是公共云,还适用于新的本地环境(将容器等云计算技术应用于本地环境并使其云原生化)的容器利用。在创建Kubernetes的YAML文件时,我们希望尽量节省麻烦。
如果要列举三个理由的话,一个理由是Docker的安装非常简便。通过查阅Docker的安装手册,你会发现安装过程非常清晰,使用更少的步骤即可完成安装,这将降低学习者心理上的障碍,并减少潜在的问题。
这次的使用环境
在IBM云中,我们可以选择使用IBM云虚拟专用云服务器或经典云服务器来部署服务器。
-
- 開発や検証環境として使う場合:IBM Cloud Virtual Server for Classic の「一時サーバー」を選択
- 本番環境として使う場合:IBM Cloud Virtual Server for VPCを利用。
在本文中,我们选择了一个位于东京的虚拟服务器,运行的操作系统是Ubuntu 22.04 Server,配置了两个虚拟CPU和8GB的内存。


建立Podman环境
我们将创建一个工作用户,然后使用该用户来配置Podman运行环境。我们将按照以下顺序进行操作。
创建工作用户
在这种情况下,只有root用户,我们将创建一个名为”workuser1″的用户并授予管理员权限。
如果已经存在具有管理员权限的非root用户,则可以使用该用户。
通过SSH连接访问服务器,并执行以下命令。
# adduser workuser1
# usermod -aG sudo workuser1
断开SSH连接并使用创建的工作用户重新连接。之后,将使用创建的工作用户进行操作。
在安装 Podman 之前的准备工作。
在服务器上设置正确的时区和日语语言包,并确保能够使用Python中的pip命令。
sudo apt-get update
sudo apt-get upgrade
sudo timedatectl set-timezone Asia/Tokyo
sudo apt-get install curl gcc git make language-pack-ja
sudo apt-get install python3-pip
安装podman和podman-docker
安装Podman。另外,为了能够使用Docker命令代替Podman命令,也会同时安装podman-docker。
sudo apt-get install podman
sudo apt-get install podman-docker
如果在Ubuntu22.04上使用apt安装的Podman不通过从源代码构建的方式进行安装,则会安装版本3.4.4。
截至2023年9月,使用apt安装的Podman,在使用下面提到的podman-compose时会出现”exit code: 125″的错误,为了降低Podman运行所依赖的Go语言版本,需要执行以下命令。
sudo apt install podman=3.4.4+ds1-1ubuntu1 --allow-downgrades
执行降级之前的Go语言版本。
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.18.1
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
Go语言在执行降级后的版本。
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.17.3
Built: Thu Jan 1 09:00:00 1970
OS/Arch: linux/amd64
Podman的版本没有变化,但Go语言的版本已经更改。由于发生在Ubuntu 22.04且Podman版本为3.4.4,所以应该会在未来得到改善。或者可以考虑从源代码构建和安装Podman。
在Podman的环境下,使得可以使用Docker-Compose。
处理容器时,许多软件都提供与Docker Compose兼容的定义文件”docker-compose.yml”,以便在Podman环境中也可以使用”docker-compose.yml”。
安装podman-compose和独立版本的docker-compose。
执行下面的命令。
pip3 install podman-compose
sudo curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
请查看https://docs.docker.com/compose/install/standalone/,以确认可用的版本。目前,我们正在使用的是截至2023年9月的最新版Docker Compose独立版,即2.20.3版本。
启动Podman API套接字服务
为了使用Docker-Compose,我们将创建Unix套接字。
systemctl --user daemon-reload
systemctl --user enable --now podman.socket
实际执行结果(当操作用户是workuser1时)
Created symlink /home/workuser1/.config/systemd/user/sockets.target.wants/podman.socket → /usr/lib/systemd/user/podman.socket.
由于docker-compose是通过DOCKER_HOST进行操作的,因此需要在工作用户的“.profile”文件中添加“DOCKER_HOST=unix://”。
请确认 podman.sock 的路径
podman info --format '{{.Host.RemoteSocket.Path}}'
请务必在您自己的环境中运行上述命令,因为实际执行结果可能因环境不同而产生差异。复制粘贴是没有意义的。
/run/user/1001/podman/podman.sock
在作業用戶的「.profile」文件中,追加「DOCKER_HOST=unix://」。您可以使用nano編輯器,也可以使用vim編輯器。
nano .profile
最后,在下面添加以下内容。添加后,进行覆盖保存。
export DOCKER_HOST=unix:///run/user/1001/podman/podman.sock
将以下内容用中文进行原生改写,只需要一个版本:
将 `DOCKER_HOST` 导出为 `unix://` 后面的内容应为 `podman info –format ‘{{.Host.RemoteSocket.Path}}’` 的执行结果。
保存后,使用source命令来进行更新。
source .profile
在Ubuntu 22.04上避免Podman 3.4.4的CNI相关警告的方法。
当在Ubuntu22.04上运行Podman3.4.4时,可能会出现以下警告:
相关信息:Ubuntu 22.04.1 LTS libpod(软件包podman 3.4.4+ds1-1ubuntu1.22.04.1):CNI插件的网络功能存在问题。
WARN[0000] Error validating CNI config file /home/あなたのユーザー名/.config/cni/net.d/docker_default.conflist: [plugin bridge does not support config version "1.0.0" plugin portmap does not support config version "1.0.0" plugin firewall does not support config version "1.0.0" plugin tuning does not support config version "1.0.0"]
通过安装”containernetworking-plugins”来解决,作为对策方法。
curl -O http://archive.ubuntu.com/ubuntu/pool/universe/g/golang-github-containernetworking-plugins/containernetworking-plugins_1.1.1+ds1-1_amd64.deb
sudo dpkg -i containernetworking-plugins_1.1.1+ds1-1_amd64.deb
畅应
Flowise是一个使用大规模语言模型(LLM)开发应用程序的工具,它是一个无代码/低代码工具,可在Web浏览器上使用。
网站链接:https://flowiseai.com/
在本章中,我将解释如何在已经建立好的Podman环境中运行Flowise。
从Git上下载
从Flowise的Git仓库中获取源代码。
git clone https://github.com/FlowiseAI/Flowise.git
cd Flowise/docker
ls -l
如果您的操作用户为“workuser1”,Flowise的docker目录中将包含以下文件。
-rw-rw-r-- 1 workuser1 workuser1 721 Sep 12 13:08 .env.example
-rw-rw-r-- 1 workuser1 workuser1 441 Sep 12 13:08 Dockerfile
-rw-rw-r-- 1 workuser1 workuser1 1309 Sep 12 13:08 README.md
-rw-rw-r-- 1 workuser1 workuser1 686 Sep 12 13:27 docker-compose.yml
编辑docker-compose.yml。
为了在Podman环境中使用docker-compose.yml,你需要编辑docker-compose.yml文件。你可以使用nano编辑器进行编辑,不过也可以使用vim编辑器。编辑完成后,请保存更改。
nano docker-compose.yml
编辑之前
image: flowiseai/flowise
编辑完成
image: docker.io/flowiseai/flowise
通过这样做,您将能够获取在Docker Hub上公开的Flowise容器映像。
复制和编辑.env文件
将 .env.example 文件复制为 .env 文件。
cp .env.example .env
我使用nano编辑器进行编辑,但也可以使用vim。编辑完成后,我会进行覆盖保存。
nano .env
修改前
PORT=3000
PASSPHRASE=MYPASSPHRASE # Passphrase used to create encryption key
DATABASE_PATH=/root/.flowise
APIKEY_PATH=/root/.flowise
SECRETKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs
编辑后
PORT=3000
PASSPHRASE=MYPASSPHRASE # Passphrase used to create encryption key
DATABASE_PATH=/root/.flowise
APIKEY_PATH=/root/.flowise
SECRETKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs
FLOWISE_USERNAME=adminuser
FLOWISE_PASSWORD=admin1234admin
我们添加了”FLOWISE_USERNAME”和”FLOWISE_PASSWORD”,并在Flowise的工作界面中添加了认证功能。由于还有其他环境变量,建议查看以下链接详细了解:
https://github.com/FlowiseAI/Flowise/blob/main/CONTRIBUTING.md#-env-variables
在Podman环境中,如果要从全新状态重新启动Flowise,则:
「DATABASE_PATH」、「APIKEY_PATH」、「SECRETKEY_PATH」都在根目錄下自動創建的「.flowise」資料夾中,日誌則存放在「.flowise」資料夾下的「logs」資料夾中。
如果在Podman環境中需要從頭開始運行Flowise,請先刪除在根目錄下自動創建的「.flowise」資料夾,然後再啟動Flowise。
Flowise的开启
使用Podman环境,在docker-compose.yml文件中启动Flowise。
podman-compose -f docker-compose.yml up -d
执行结果
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 3.4.4
** excluding: set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=docker', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
['podman', 'network', 'exists', 'docker_default']
['podman', 'network', 'create', '--label', 'io.podman.compose.project=docker', '--label', 'com.docker.compose.project=docker', 'docker_default']
['podman', 'network', 'exists', 'docker_default']
podman run --name=docker_flowise_1 -d --label io.podman.compose.config-hash=617a2761390ef7fb87c75b4f759ba82e3f0bc7ad247aeca8815929dd450404e0 --label io.podman.compose.project=docker --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@docker.service --label com.docker.compose.project=docker --label com.docker.compose.project.working_dir=/home/workuser1/Flowise/docker --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=flowise -e PORT=3000 -e PASSPHRASE=MYPASSPHRASE -e FLOWISE_USERNAME=adminuser -e FLOWISE_PASSWORD=admin1234admin -e DEBUG= -e DATABASE_PATH=/root/.flowise -e APIKEY_PATH=/root/.flowise -e SECRETKEY_PATH=/root/.flowise -e LOG_LEVEL= -e LOG_PATH=/root/.flowise/logs -v /home/workuser1/.flowise:/root/.flowise --net docker_default --network-alias flowise -p 3000:3000 --restart always docker.io/flowiseai/flowise /bin/sh -c sleep 3; flowise start
Trying to pull docker.io/flowiseai/flowise:latest...
Getting image source signatures
Copying blob 751194035c36 done
Copying blob 7264a8db6415 done
Copying blob eff5dce73b38 done
Copying blob c8ce5be43019 [======================================] 447.0b / 447.0b
Copying blob 253e3c6f8f4f done
Copying blob e9a82e626ce4 done
Copying blob 3a80f4d63265 [======================================] 21.8MiB / 21.8MiB
Copying blob dcea9fb00269 done
Copying blob fee78030adc2 done
Copying blob 89aa40859ec2 [======================================] 94.0b / 94.0b
Copying config 4a72673c7a done
Writing manifest to image destination
Storing signatures
1e49e09c3b14b4c9bee4071879642ecdd3008c1e9778704cbed180d45e9511a9
exit code: 0
检查Podman容器的启动状态。
podman ps -a
执行结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e49e09c3b14 docker.io/flowiseai/flowise:latest /bin/sh -c sleep ... About a minute ago Up About a minute ago 0.0.0.0:3000->3000/tcp docker_flowise_1
如果容器停止了,只需执行“podman start 容器ID”,容器就会重新运行。这方面和docker命令几乎完全相同。
在Web浏览器中查看


总结
截至2023年9月,Flowise的官方文档中没有关于在IBM Cloud上运行的步骤。
https://docs.flowiseai.com/deployment
因此,本次我们决定使用IBM Cloud,并使用Podman而不是Docker来运行Flowise。由于我们使用的是Ubuntu,所以这些步骤也适用于基于树莓派等单板计算机的边缘服务器/边缘设备。
参考資料
Flowise的文档链接:https://docs.flowiseai.com/
讲解如何使用Flowise创建LLM应用程序的YouTube视频:https://www.youtube.com/hashtag/flowise