流存档/代理
项目描述
FPX
将来自多个来源的内容收集到单个文件中的独立服务。典型用例是使用单个链接下载多个文件作为存档。FPX内部从指定的URL集合中获取内容,并将zip压缩流传输给最终用户。
安装
- 安装
fpx
软件包pip install fpx
- 初始化数据库
fpx db up
- 启动FPX服务器
fpx server run
用法
身份验证
大多数FPX端点仅通过 客户端密钥 可用。它可以通过CLI命令生成(用任意字母、数字和下划线的组合替换 <CLIENT_NAME>
)
fpx client add <CLIENT_NAME>
并且密钥将显示在命令的输出中
Client created: <CLIENT_NAME> - <SECRET>
通过 Authorization
标头传递密钥,以便在每次请求中识别自己作为客户端。
下载
通过FPX下载文件通常包括两个步骤
- 提供要下载的URL的信息,并接收 下载票据 的ID
- 使用票据的ID下载打包成单个ZIP存档的所有URL
第一步可以通过cURL完成
curl -X POST http://localhost:8080/ticket/generate \
-H "Authorization: <CLIENT_SECRET>" \
-d '{"items":["https://google.com", "https://google.com/search"]}'
在这里,我们向FPX服务的 /ticket/generate
端点发送POST请求。它需要客户端密钥,由 Authorization
标头指定。此端点仅适用于JSON请求,因此我们需要 Content-type
。最后,请求正文必须包含一个包含 items
字段的JSON:我们将要下载的所有URL的列表。
响应将是以下内容
{"created":"2023-10-15T00:00:51.054523","type":"zip","id":"ca03e214-910d-419f-ad60-4b6fb8bdd10c"}
您只需要其中的 id
字段。使用它来创建下载URL: /ticket/<ID>/download
。对于上面的示例,我们收到此URL: http://localhost:8080/ticket/ca03e214-910d-419f-ad60-4b6fb8bdd10c/download
。
在网页浏览器中打开它或使用 wget
/curl
通过CLI下载文件
curl http://localhost:8080/ticket/ca03e214-910d-419f-ad60-4b6fb8bdd10c/download -o collection.zip
配置
FPX无需显式配置即可运行,但默认值不适用于生产环境。可以通过配置文件和环境变量来更改配置选项。
配置文件
FPX配置文件是一个Python脚本。FPX会读取它,并将其中所有全局变量用作配置选项。例如,以下文件将为FPX应用程序添加A
和B
选项
A = 1
B = ["hello", "world"]
必须通过FPX_CONFIG
环境变量指定此文件的路径
export FPX_CONFIG=/etc/fpx/config/fpx.py
fpx server run
环境变量
除了配置文件外,FPX还会读取所有以FPX_*
命名的环境变量,删除FPX_
前缀,并将结果用作配置选项。例如
FPX_DB_URL
环境变量转换为DB_URL
配置选项FPX_FPX_TRANSPORT
环境变量转换为FPX_TRANSPORT
配置选项。
请注意以FPX_
开头的配置选项。因为从环境变量中删除了FPX_
前缀,所以您需要像上面一样重复两次,例如在FPX_FPX_TRANSPORT
中。
配置选项
FPX使用了以下配置选项
名称 | 描述 | 默认值 |
---|---|---|
DEBUG |
以调试模式运行应用程序。主要用于开发 | false |
HOST |
将应用程序绑定到指定的地址 | 0.0.0.0 |
PORT |
在指定的端口上运行应用程序 | 8000 |
DB_URL |
用于SQLAlchemy引擎的DB URL | sqlite:////tmp/fpx.db |
FPX_TRANSPORT |
HTTP请求的底层库。目前支持aiohttp 和htmx |
aiohttp |
完整的安装指南
-
安装FPX
pip install fpx
-
创建配置文件。可以在任何地方创建,只要FPX服务可以访问它即可
echo ' PORT = 12321 DB_URL = "sqlite:////home/user/.virtualenvs/fpx/fpx.db" ' > /etc/fpx/fpx.py
-
初始化数据库并为客户端创建访问令牌
export FPX_CONFIG=/etc/fpx/fpx.py fpx db up fpx client add my-first-fpx-client # use any name, that match `[\w_-]`
确保数据库可由FPX服务访问和写入。本手册建议在配置supervisor进程时使用
www-data
用户,因此需要以下命令chown www-data:www-data /home/user/.virtualenvs/fpx/fpx.db
-
测试服务
FPX_CONFIG=/etc/fpx/fpx.py fpx server run # or, if you want to explicitely use python interpreter FPX_CONFIG=/etc/fpx/fpx.py python -m fpx
-
为fpx配置system.d/supervisor/etc单位。确保
fpx server run
命令(它启动服务)使用python>=3.6(例如pyenv shell 3.8.2
)。如果使用SQLite,则fpx进程具有写入db文件的权限[program:fpx-worker] ; Use the full paths to the virtualenv and your configuration file here. command=/home/user/.virtualenv/fpx/bin/python -m fpx environment=FPX_CONFIG=/etc/fpx/fpx.py ; User the worker runs as. user=www-data ; Start just a single worker. Increase this number if you have many or ; particularly long running background jobs. numprocs=1 process_name=%(program_name)s-%(process_num)02d ; Log files. stdout_logfile=/var/log/fpx-worker.log stderr_logfile=/var/log/fpx-worker.log ; Make sure that the worker is started on system start and automatically ; restarted if it crashes unexpectedly. autostart=true autorestart=true ; Number of seconds the process has to run before it is considered to have ; started successfully. startsecs=10 ; Need to wait for currently executing tasks to finish at shutdown. ; Increase this if you have very long running tasks. stopwaitsecs = 600
-
FPX服务必须通过公共URL可用。如文档中所述,不需要额外的层。但如果您决定与Nginx一起使用,则以下链接可能有用。注意,如果将
FPX_NO_QUEUE
配置选项设置为False
,FPX将使用WebSockets(并可能影响配置)。FPX的Nginx配置示例
location /fpx/ { proxy_pass http://127.0.0.1:12321/; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_http_version 1.1; proxy_request_buffering off; proxy_buffering off; # When FPX_NO_QUEUE option set to `False` proxy_set_header connection "upgrade"; proxy_set_header upgrade $http_upgrade; # In emergency comment out line to force caching # proxy_ignore_headers X-Accel-Expires Expires Cache-Control; }
httpd配置示例
# mod_proxy # mod_proxy_http ProxyPass /fpx/ http://0.0.0.0:8000/ ProxyPassReverse /fpx/ http://0.0.0.0:8000/ # When FPX_NO_QUEUE option set to `False` # mod_proxy_wstunnel # mod_rewrite RewriteEngine on RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule /fpx/(.*) ws://0.0.0.0:8000/$1 [P]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
fpx-0.6.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ece93c071c859054b51862ed20e8300b520b98c1ea66288df590900b25601da1 |
|
MD5 | 0dcdda1509d0c98f5f67ba03395dcd81 |
|
BLAKE2b-256 | 96cb2e2ced4bfab8e28d5b2449c84c0800884de03541c64377cb7241348c7014 |
fpx-0.6.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 96d6145adf0ef1a467c1efa2785b21bc35b08894edc0010cfcac3cc0bb76d436 |
|
MD5 | 3d6ed8f2b552f4a24162c8ccc2729548 |
|
BLAKE2b-256 | 85576325d713b184b22ac5900399cc8001ad99977441bb20f9dc573d7b0fa0a5 |