Skip to main content

Stream archiver/proxy

Project description

FPX

Standalone service for collecting content from multiple source into single file. Typical usecase is downloading multiple files as archive using single link. Internally FPX fetches content from the specified set of URLs and streams zip-compressed stream to the end users.

AWS EC2 Deploy

  1. Install Python 3.8 or newer:

    # install build dependencies
    sudo yum install -y openssl-devel readline-devel zlib-devel bzip2-devel libffi-devel
    
     # install `pyenv`
     git clone https://github.com/pyenv/pyenv.git ~/.pyenv
     # this require `chmod +x $HOME` if you are going to use different user for running services with installed python executable
     echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
     echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
     echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
    
     # install python
     pyenv install 3.8.2
    
  2. Create venv for FPX and install it:

    pyenv shell 3.8.2
    cd /usr/lib/ckan
    python -m venv fpx
    cd fpx
    source bin/activate
    pip install 'fpx~=0.4.0'
    
  3. Create config file. It can be created anywhere, as long as it accessible by FPX service:

     echo '
     PORT = 12321
     # DB is not used much, so SQLite can be used as long as you are going to use single instance of FPX service. If you planning to use multiple instances + load balancer, consider using PostgreSQL
     DB_URL = "sqlite:////var/lib/ckan/default/fpx.db"
     # Any other options passed directly to the SQLAlchemy engine constructor(https://docs.sqlalchemy.org/en/13/core/engines.html#sqlalchemy.create_engine)
     DB_EXTRAS = {
     # "pool_size": 10,
     # "max_overflow": 20,
     }
     # Maximum number of simultaneous downloads. In production, value between 10 and 100 should be used, depending on server's bandwidth. Higher value won't affect server perfomance, but will make downloads slower due to bandwidth limitations.
     SIMULTANEOURS_DOWNLOADS_LIMIT = 20
     ' > /etc/ckan/default/fpx.py
    
  4. Initialize database and create access token for client. It can be stored later inside CKAN ini file as fpx.client.secret:

     export FPX_CONFIG=/etc/ckan/default/fpx.py
     fpx db up
     fpx client add my-first-fpx-client  # use any name, that match `[\w_-]`
    

    Make sure, db is accessible and writable by FPX service. This manual suggests using apache user when configuring supervisor's process, so following command required:

    chown apache:apache /var/lib/ckan/default/fpx.db
    
  5. Test service:

     FPX_CONFIG=/etc/ckan/default/fpx.py fpx server run
     # or, if you want to explicitely use python interpreter
     FPX_CONFIG=/etc/ckan/default/fpx.py python -m fpx
    
  6. Configure system.d/supervisor/etc. unit for fpx. Make sure, that fpx server run command, that spins up the service is executed using python>=3.6 (pyenv shell 3.8.2). And, if SQLite is used, fpx process has write access to db file:

     [program:fpx-worker]
    
     ; Use the full paths to the virtualenv and your configuration file here.
     command=/usr/lib/ckan/fpx/bin/python -m fpx
    
     environment=FPX_CONFIG=/etc/ckan/default/fpx.py
    
     ; User the worker runs as.
     user=apache
    
     ; 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
    
  7. FPX service must be available via public url(and CKAN ini file requires this URL under fpx.service.url config option). As written in []documentation](https://sanic.readthedocs.io/en/latest/sanic/deploying.html#deploying), no additional layers required. But if you decide to use it with Nginx, the following link may be useful. Note, FPX is using websockets(if it can somehow affect configuration).

    Example of Nginx section for FPX:

    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;
       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;
    }
    

    Example of apache configuration:

    # mod_proxy
    # mod_proxy_http
    # mod_proxy_wstunnel
    # mod_rewrite
    # ...
    ProxyPass /fpx/ http://0.0.0.0:8000/
    ProxyPassReverse /fpx/ http://0.0.0.0:8000/
    
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule /fpx/(.*) ws://0.0.0.0:8000/$1 [P]
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fpx-0.4.1.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

fpx-0.4.1-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file fpx-0.4.1.tar.gz.

File metadata

  • Download URL: fpx-0.4.1.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.9

File hashes

Hashes for fpx-0.4.1.tar.gz
Algorithm Hash digest
SHA256 1fd1c11f02f6047ca6248fa0099538aa823e98ec90ee42f1aa30dc482f8eeae5
MD5 12ee47f17b99df81ecdc61ce8dccca69
BLAKE2b-256 83694277b252d758c31887c534987430d0b451fc04985b71e8688877543ac5ea

See more details on using hashes here.

Provenance

File details

Details for the file fpx-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: fpx-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.9

File hashes

Hashes for fpx-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea7e94f4d5c50b5f5adcbd1d1b067e7359fd757ba448d44e3369dbdada04ef20
MD5 3432529bbf664f370ed631cb57655b93
BLAKE2b-256 b0914d626c12934aa2ebc2e14ae57cd0202ec8ec7ae79d29430fd96373cbb486

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page