一、产品介绍
1、官方 Github
https://github.com/PrefectHQ/prefect
2、官方文档
https://docs.prefect.io/3.0/get-started/index
3、Pgsql说明
正确的python链接pgsql如下:
import psycopg2
from sqlalchemy import create_engine
def connect_with_psycopg2():
try:
conn = psycopg2.connect(
dbname="prefect",
user="prefect_user",
password="123456-AbCd",
host="127.0.0.1",
port="5432"
)
print("Connection successful with psycopg2!")
except Exception as e:
print(f"Connection failed with psycopg2: {e}")
finally:
if conn:
conn.close()
def connect_with_sqlalchemy():
try:
engine = create_engine("postgresql://prefect_user:123456-AbCd@127.0.0.1:5432/prefect")
with engine.connect() as connection:
print("Connection successful with SQLAlchemy!")
except Exception as e:
print(f"Connection failed with SQLAlchemy: {e}")
if __name__ == "__main__":
connect_with_psycopg2()
connect_with_sqlalchemy()
如何我们将密码设置为
123456-Ab@
整体字符串如下:postgresql://prefect_user:123456-Ab@@127.0.0.1:5432/prefect
链接失败!所以不要将密码设置为含有@
的字符串
def connect_with_sqlalchemy():
try:
engine = create_engine("postgresql://prefect_user:123456-Ab@@127.0.0.1:5432/prefect")
with engine.connect() as connection:
print("Connection successful with SQLAlchemy!")
except Exception as e:
print(f"Connection failed with SQLAlchemy: {e}")
if __name__ == "__main__":
connect_with_sqlalchemy()
二、搭建私有Prefect Server
私有化搭建,通过pgsql作为整个数据库
1、Docker搭建 PGsql
这里如果服务器拉不到最新版本的pgsql,可以通过科学上网做一份自己的pgsql镜像
这里我使用自己创建的镜像 :registry.cn-beijing.aliyuncs.com/dkzx_test/postgres
version: '3'
services:
postgres:
image: registry.cn-beijing.aliyuncs.com/dkzx_test/postgres:latest
container_name: postgres
environment:
POSTGRES_DB: prefect
POSTGRES_USER: prefect_user
POSTGRES_PASSWORD: 123456-AbCd
volumes:
- /home/postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: always
注意:
1、这里要给 /home/postgres_data
足够的权限
2、Docker搭建 Prefect
启动成功如下:
2.1、打Prefect镜像
因为 prefect没有最新的Docker Image 所以这里我们自己通过Dockerfile创建一个Prefect镜像
同样这里如果服务器拉不到最新版本的 Prefect,可以通过科学上网做一份自己的Prefect镜像
这里我使用自己创建的镜像 :registry.cn-beijing.aliyuncs.com/dkzx_test/python:3.9-slim
# unc_name)
#n 作为基础镜像
FROM registry.cn-beijing.aliyuncs.com/dkzx_test/python:3.9-slim
# 设置工作目录
WORKDIR /app
# 更新 pip 并安装 Prefect
RUN pip install --upgrade pip && \
pip install -U prefect
# 运行 Prefect 以显示版本
CMD ["prefect", "--version"]
上面的 Dockerfile 通过打包程序打包成 Docker Image
docker build -t <docker-image-name> .
然后将image推送到私有镜像仓库,或者直接放本地直接启动
这里我们推送到私有镜像仓库registry.cn-beijing.aliyuncs.com/dkzx_test/prefect:customer-define-new
2.2、编写Prefect Docker-compose
下面注意几个点:
1、PREFECT_API_DATABASE_CONNECTION_URL :这个是连接pgsql的字符串信息,这里要使用前缀postgresql+asyncpg:
,并且这里我们踩坑密码一定不能含@
结尾数据
2、PREFECT_API_URL:这个对外开放API一定要用0.0.0.0
的IP,不要用127.0.0.1
3、command:如果我们的Dashboard
想被外网访问一定要指定host为0.0.0.0
version: "3"
services:
prefect-server:
image: registry.cn-beijing.aliyuncs.com/dkzx_test/prefect:customer-define-new
container_name: prefect_server
environment:
PREFECT_API_DATABASE_CONNECTION_URL: postgresql+asyncpg://prefect_user:123456-AbCd@127.0.0.1:5432/prefect
PREFECT_API_URL: http://0.0.0.0:4200/api
ports:
- "4200:4200"
command: ["prefect", "server", "start","--host", "0.0.0.0"]
restart: always
3、PGsql初始化
通过启动 prefect_server 会在指定的数据库自动创建如下所有的数据库表
4、公网可访问的裸奔服务
不得不吐槽一下,启动的私有部署Prefect是没有登录权限的
也没有token
5、Nginx 配置 Basic Auth
三、对比:Cloud & 私有部署
1、Cloud
cloud的功能更丰富,且可以创建Namespace
2、私有部署
私有部署的server相对比cloud要简单一些