跳转到主要内容

流存档/代理

项目描述

FPX

将来自多个来源的内容收集到单个文件中的独立服务。典型用例是使用单个链接下载多个文件作为存档。FPX内部从指定的URL集合中获取内容,并将zip压缩流传输给最终用户。

安装

  1. 安装 fpx 软件包
    pip install fpx
    
  2. 初始化数据库
    fpx db up
    
  3. 启动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应用程序添加AB选项

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请求的底层库。目前支持aiohttphtmx aiohttp

完整的安装指南

  1. 安装FPX

    pip install fpx
    
  2. 创建配置文件。可以在任何地方创建,只要FPX服务可以访问它即可

    echo '
    PORT = 12321
    DB_URL = "sqlite:////home/user/.virtualenvs/fpx/fpx.db"
    ' > /etc/fpx/fpx.py
    
  3. 初始化数据库并为客户端创建访问令牌

    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
    
  4. 测试服务

     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
    
  5. 为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
    
  6. 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 (29.2 kB 查看哈希值)

上传时间

构建分发

fpx-0.6.2-py3-none-any.whl (34.2 kB 查看哈希值)

上传时间 Python 3