No description
Find a file
2025-01-19 16:40:01 +01:00
static feat: update variables 2025-01-19 16:40:01 +01:00
.gitignore chore: add secret files to gitignore 2025-01-18 17:03:44 +01:00
example_config.json chore: update readme instructions and example config 2025-01-19 09:47:59 +01:00
README.md chore: update readme instructions and example config 2025-01-19 09:47:59 +01:00
requirements.txt feat: add threads dep mastodon-py 2025-01-18 16:53:40 +01:00
web.py feat: handle commonly scanned routes by bots 2024-05-29 16:41:34 +02:00
wsgi.py refactor: rename api to web 2024-04-08 16:33:54 +02:00

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:

  1. attach /threads flask blueprint behind /threads route
  2. 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

  1. 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
    
  2. 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!
    
  3. To start development, run the following:

    (.venv)$ flask --app web.py --debug run
    

    Note: On a Mac, the default port 5000 is used by AirDrop & Handoff; you may have to turn those off

  4. Populate a dist directory with static files (e.g., *.html for 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 the dist here.

  5. 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).