Skip to main content

install flask websites into nginx

Project description

footprint 👣

I use this to generate config files for my flask apps. Currently systemd and nginx. It only depends on Flask (which should alread be in the virtualenv).

export FLASK_APP=your_package.wsgi
footprint config nginx www.example.com > example.conf
footprint config nginx-install example.conf
# install in ~/.config/systemd/user
export FLASK_APP=your_package.wsgi
footprint config systemd --user  > example.service
footprint config systemd-install --user example.service

will install nginx and systemd files that will statically serve you 'static' assets and run the Flask app with gunicorn.

Mostly I've found that confectioning these files by hand are highly error prone. These commands will at least get the absolute pathnames correct :)

Install with:

python -m pip install flask-nginx
python -m pip install -U git+https://github.com/arabidopsis/footprint.git
# or
# git clone https://github.com/arabidopsis/footprint.git
# cd footprint
# python -m pip install [--editable] .

or add to your pyproject.toml file

footprint = { git = "https://github.com/arabidopsis/footprint.git", branch="main" }

Once installed you can upgrade with:

footprint update
# or
uv pip install -U $(footprint repo)

If footprint finds a pyproject.toml file in the current directory if will try to load [tool.footprint] values into its global configuration object.

footprint mysql --host=mysql://{user}:{pw}@{src}/{db} dump /var/www/websites/{repo}/instance/sql
# rsync the entire repo
footprint rsync {src}:/var/www/websites/{repo} {tgt}
footprint mysql  --host=mysql://{user}:{pw}@{src}/{db} load /var/www/websites/{repo}/instance/sql/{db}.sql.gz

nginx, systemd and all that

Note that these configuration generating functions are not infallible. Please examine the generated configure files carefully! They are mainly useful for getting the directory names correct etc. So if you move your repo then you will have to regenerate and reinstall the files.

Test an nginx config with e.g.:

website=~/Sites/websites/ppr
export FLASK_APP=ppr.wsgi
footprint config nginx --app-dir=$website example.org | footprint config nginx-run --app-dir=$website -

This will run nginx at the terminal listening on port 2048 and run the backend website.

To install a website:

footprint config nginx --app-dir=$website example.org -o website.conf
footprint config systemd [--user] --app-dir=$website -o website.service
# nginx requires sudo (default) or su
footprint config nginx-install website.conf
# if you can install into ~/.config/systemd/user
footprint config systemd-install [--user] website.service

You can test this locally by editing /etc/hosts and adding a line:

127.0.0.1 example.org

to the file.

REMEMBER: Unix file permissions mean that you should edit /etc/nginx/nginx.conf and change user www-data; to user {you}; Or (recursively) change the owner on all the repo directories to www-data.

If you install as "user" (i.e. footprint config systemd --user ...) then to ensure that the user systemd starts at boot time use: sudo loginctl enable-linger <user>

See here:

But what’s the real reason for having user services? To answer that, we have to realize when the enabled service starts and stops. If we enable a user service, it starts on user login, and runs as long as there is a session open for that user. Once the last session dies, the service stops.


See digitalocean.com here for a tutorial about serving flask from nginx.

Uninstall with footprint config nginx-uninstall website.conf and footprint config systemd-uninstall [--user] website.service

.flaskenv

If a .flaskenv is found in the repo directory then nginx and systemd will read paramters from that file. The keywords should be uppercase version of the known parameters. Unknown parameters will be ignored.

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

flask_nginx-0.8.0.tar.gz (32.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_nginx-0.8.0-py3-none-any.whl (46.3 kB view details)

Uploaded Python 3

File details

Details for the file flask_nginx-0.8.0.tar.gz.

File metadata

  • Download URL: flask_nginx-0.8.0.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for flask_nginx-0.8.0.tar.gz
Algorithm Hash digest
SHA256 7677b8e3a300358aaf3099310091d9a26999f2013f2f6afe4d69537608db48d6
MD5 32ab56ff9e7789404d8896e80e0d317e
BLAKE2b-256 34fcdad4f4bff76fb6447e1c2f9af09e4db019d28aff4131969fcab9b29cee49

See more details on using hashes here.

File details

Details for the file flask_nginx-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_nginx-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1ec4475ba79b9d28f4066e85f128d0275e595bf5abfe4a10945ffcbd0961dece
MD5 c0dcec9a17b3d88a47e5e16ae8e1916e
BLAKE2b-256 4940175efbd10217e92c4d3b37a76fbe4f57fa7e9c2adcc891b3868921b1df47

See more details on using hashes here.

Supported by

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