| static | ||
| .build.yml | ||
| .gitignore | ||
| example_config.json | ||
| README.md | ||
| requirements.txt | ||
| web.py | ||
| wsgi.py | ||
Flask server for my personal site
Background
This is the default server running at https://ayo.ayco.io. Its main responsibility is serving static files generated with Astro SSG which I maintain in a separate project. The generated files from that project will populate a dist directory in here, which will then be served as-is.
Additional features are:
- attach /threads flask blueprint behind
/threadsroute - perf monitoring and error tracking with sentry.io
Important
The overall architecture is still experimental. The way I decoupled the dynamic tiny apps here (e.g., /threads, and ori) is good, but an improvement in this project still needs to be made with regards to managing a common app configuration that the blueprints consume, packaging the software components into modules for better distribution & adoption, and providing various deployment options.
Development
-
Set up your Debian (for other environments, search for counterpart instructions)
# update repositories $ sudo apt update # install python stuff $ sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools python3-venv -
Install dependencies
# clone the project $ git clone git@git.sr.ht:~ayoayco/ayco.io-flask # go into the project directory $ cd ayco.io-flask # create python environment: $ python3 -m venv .venv # activate python env: $ . .venv/bin/activate # install dependencies: (.venv)$ python -m pip install -r requirements.txt # create configuration from example config file (.venv)$ cp ./example_config.json ./config.json # rejoice! -
To start development, run the following:
(.venv)$ flask --app web.py --debug runNote: On a Mac, the default port 5000 is used by AirDrop & Handoff; you may have to turn those off
-
Populate a
distdirectory with static files (e.g.,*.htmlfor pages). Currently I generate static files in a separate Astro site project -- see instructions on how to set it up separately, run the build script and copy thedisthere. -
After development session, deactivate the python env
(.venv)$ deactivate
Deployment
For deployment, the recommended setup is with production server gunicorn and reverse proxy nginx. See the DigitalOcean tutorial (their website uses cookies).