Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Version History

« Previous Version 7 Next »

Project Structure

Core Repos

Auxiliary repos

Auth management

Issue trackers

Sentry


UKRDC-FastAPI

Pydantic and Type Hints

  • Familiar with MyPy and Python type-hints?
  • Our data goes through 2 “conversions”:
    • SQLAlchemy ORM turns database rows into Python objects
    • Pydantic (via FastAPI response_model) turns Python objects into JSON

UKRDC-Nuxt

TypeScript

  • Have others used TS before?
  • Initially it often just looks like a source of frustration, but it does a tonne of good for catching errors early on
  • Interfaces are roughly equivalent to Pydantic models. They give the expected fields and types for objects (JS dictionaries)

Tailwind

  • One of the most divisive web dev libraries I’ve ever come across
  • I’ve found it excellent for rapidly developing new components
  • We abstract a lot of styling away at the component level
    • E.g. we have a “TextH1” component which acts a lot like html “h1” but with extra styling
    • This means we can easily bulk-change styles across the whole application without a web of CSS files


Docker-Compose

  • We use Docker images to deploy the applications
    • I’m assuming everyone is familiar with Docker but if not let me know and I’ll run through why we use it
  • Docker images can have tags, so we use these to separate environments (dev, staging, production etc)
  • Our Docker-Compose file pulls and configures all images required to run the whole stack
  • Runtime configuration is handled by .env files or environment variables


Devops Flow

Branches

  • Main
    • Current "snapshot" branch
    • Code here should be as stable as possible
    • Code should never be committed directly
    • Base for feature/fix branches
  • Feature branches
    • When working on a specific feature/fix, create a new branch for that work item 
    • Either submit a PR when ready, or create a draft PR whenever
    • PRs should pass all tests and code-quality checks before merging
    • PRs should be reviewed by someone else on the project before merging

GitHub Actions

How to deploy a new release

Build and publish Docker images

This guide is broadly applicable to both "ukrdc-fastapi" and "ukrdc-nuxt"

  • Navigate to Actions

  • From the Publish Docker Image workflow, click Run Workflow

  • Enter the deployment environment you wish to deploy to
    • This will become the docker image tag
    • "production" and "staging" are protected, and will wait until the deployment has been approved by a project admin

Update containers on the app server

  • Once the image has been published, connect to the app server via SSH
  • Run:
    • cd /srv/ukrdc-compose
    • docker-compose pull 
    • docker-compose down
    • docker-compose up -d
  • Ideally also run
    • docker system prune
  • You can view real-time logs from the entire stack with:
    • docker-compose log -f

Reverting/redeploying an old version

  • Eventually I want to add historical image tags so we can select an old version in the Compose file
  • For now though, if you need to roll back a deployment, either revert commits in the 'main' branch and re-deploy as above,
    or create a new temporary branch with the fixed/rolled-back code and use that branch in "Use workflow from" as above.

Active Instances

  • staging-app and live-app both include new UKRDC instances
  • /srv/ukrdc-compose/
  • In both cases, the host nginx config needs to be set up to forward to the Docker stack
    • E.g. /etc/nginx/conf.d/staging-app.ukrdc.nhs.uk.conf
    • This should not need to be changed unless we want to change the new stack base URL
  • No labels