编译、安装和运行 (基于wheel)

本章节介绍非容器化部署方式,通过编译wheel包完成QCOS的安装和运行,为可选部署方案。

前提条件

需确保操作系统已安装Python 3及相关组件,具体步骤如下:

  • 安装系统级Python组件:

    # BCLinux/CentOS/OpenEuler环境下示例:
    # 需保证Python3>=3.11版本
    yum install -y python3 python3-pip python3-sphinx python3-requests python3-alembic
    pip3 install tomlkit
    
  • 安装Python依赖包:

    使用venv虚拟隔离环境 (可避免各驱动软件包的冲突问题)
    cd ./requirements
    ./install-venvs.py
    
    或者直接在当前环境下安装。注意:各驱动所依赖的软件包需另外安装,并自行解决潜在的软件包冲突问题
    pip3 install -r ./requirements/requirements.txt -r ./requirements/requirements-qcos.txt -r ./requirements/requirements-test.txt -r ./requirements/requirements-docs.txt
    

编辑.env配置文件

进入编译脚本目录,复制配置模板并编辑.env文件:

cd build-scripts
cp ./env.template .env
vim .env
# .env配置文件说明
# 1. DEV选项为False时表示编译出的镜像是生产环境镜像; True时表示编译出来的是开发环境镜像。开发环境会挂载(mount)宿主机源代码到容器中, 直接使用挂载的源代码运行, 方便开发者在宿主机上修改代码。而生产环境镜像中会集成源代码。
# 2. 需要填写PREFECT_SERVER_API_HOST地址(一般填写为本机IP地址或者127.0.0.1)
# 3. 如果本地可以访问外网, 无需填写YUM_MIRROR, PIP_MIRROR
# 4. 如果本地无法访问外网, 需要保证局域网内有OpenEuler操作系统的YUM镜像源(YUM_MIRROR), 以及Python软件包镜像源(PIP_MIRROR)。
# YUM_MIRROR地址格式示例: http://mirrors.cmecloud.cn
# PIP_MIRROR地址格式示例: http://mirrors.cmecloud.cn/pypi/simple
# NPM_MIRROR地址格式示例: http://mirrors.cmecloud.cn/npm/repository/qcos/
# PYTHON_SRC_MIRROR地址格式示例: https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tgz
# PYPY3_BIN_MIRROR地址格式示例: https://downloads.python.org/pypy/pypy3.11-v7.3.20-linux64.tar.bz2
# 5. DEBUG是内部开发使用的调试开关, 可以配成默认的False
# 6. LOCAL_CICD是本地CICD的标记开关, 可以配成默认的False
# 7. REGISTRY为Docker容器私有镜像仓库地址, 如果本机可以访问DockerHub, 则可以留空

编译安装QCOS软件包

基于poetry编译操作系统QCOS wheel包

在build-scripts目录下执行编译脚本或直接使用poetry构建:

# BCLinux/CentOS/OpenEuler环境下示例:
cd build-scripts
./build-wheel.sh
# 或直接使用poetry命令
poetry build

安装QCOS wheel包

执行pip3命令安装编译好的wheel包,并配置服务运行所需的目录和环境变量:

# 安装wheel包
cd build-scripts
pip3 install --prefix=/usr ./output/dist/wy_qcos-1.0.0-py3-none-any.whl

# 创建服务运行所需目录
mkdir -p /var/qcos/db/; mkdir -p /var/qcos/storage

# 设置系统环境变量(临时生效,如需永久生效请写入/etc/profile或~/.bashrc)
export PREFECT_SERVER_API_HOST="127.0.0.1"
export PREFECT_SERVER_DATABASE_CONNECTION_URL="postgresql+asyncpg://qcos:${password}@127.0.0.1:5432/qcos"
export PREFECT_API_URL="http://127.0.0.1:4200/api"
export PREFECT_LOCAL_STORAGE_PATH="/var/qcos/storage"
export PREFECT_API_DEFAULT_LIMIT=100000

编译安装QCOS Client命令行软件包

基于poetry编译操作系统QCOS Client wheel包

在build-scripts/cli目录下执行编译脚本或直接使用poetry构建:

# BCLinux/CentOS/OpenEuler环境下示例:
cd build-scripts/cli
./build-wheel.sh
# 或直接使用poetry命令
poetry build

安装QCOS Client wheel包

执行pip3命令安装编译好的wheel包,并配置服务运行所需的目录和环境变量:

# 安装wheel包
cd build-scripts/cli
pip3 install --prefix=/usr ./output/dist/wy_qcos_client-1.0.0-py3-none-any.whl

修改配置文件

创建和修改全局配置文件

参照代码库中etc/qcos/qcos.toml, 创建和修改全局配置文件/etc/qcos/qcos.toml 修改或添加DEVICE_LIST中的设备列表

注意: 如果不创建该文件, 容器模式下会自动创建

创建和修改设备配置文件

参照代码库中etc/qcos/conf.d/dummy.toml等, 创建和修改设备配置文件/etc/qcos/conf.d/dummy.toml等

注意: 设备配置文件必须位于/etc/qcos/conf.d下, 文件名需要和qcos.toml中 DEVICE_LIST列出的设备名一致。 文件中section必须对应相关设备名, 比如dummy设备的配置需要放在section: [dummy]下

运行QCOS服务

依次启动Prefect服务和QCOS服务:

# 创建Prefect Server数据库和账户(只对后端数据库为postgres数据库, 仅首次运行或需要重置数据库时执行)
psql -U postgres -c "CREATE USER prefect WITH PASSWORD '{PREFECT数据库账户密码}' INHERIT;"
psql -U postgres -c "CREATE DATABASE prefect WITH OWNER prefect;"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE prefect TO $prefect;"
psql -U postgres -d prefect -c "ALTER SCHEMA public OWNER TO prefect;"
psql -U postgres -d prefect -c "GRANT ALL PRIVILEGES ON SCHEMA public TO prefect;"
psql -U postgres -d prefect -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO prefect;"
psql -U postgres -d prefect -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO prefect;"
psql -U postgres -d prefect -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO prefect;"
psql -U postgres -d prefect -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO prefect;"

# 初始化QCOS数据库和账户(只对后端数据库为postgres数据库, 仅首次运行或需要重置数据库时执行)
psql -U postgres -c "CREATE USER qcos WITH PASSWORD '{QCOS数据库账户密码}' INHERIT;"
psql -U postgres -c "CREATE DATABASE qcos WITH OWNER qcos;"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE qcos TO qcos;"
psql -U postgres -d qcos -c "ALTER SCHEMA public OWNER TO qcos;"
psql -U postgres -d qcos -c "GRANT ALL PRIVILEGES ON SCHEMA public TO qcos;"
psql -U postgres -d qcos -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO qcos;"
psql -U postgres -d qcos -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO qcos;"
psql -U postgres -d qcos -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO qcos;"
psql -U postgres -d qcos -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO qcos;"

# 启动Prefect Server服务
prefect server start

# 启动redis服务
systemctl start redis 或者 redis-server

# 启动postgresql服务
systemctl start postgresql 或者 pg_ctl -D /var/lib/pgsql/data start

# 运行init-db.sh脚本初始化、迁移和升级数据库表结构
cd build-scripts
./init-db.sh

# 启动QCOS API服务(指定配置文件和配置目录)
qcos-api --config-file /etc/qcos/qcos.toml --config-dir /etc/qcos/conf.d/