Deployment and Operations
Deployment-and-Operations.mdDeployment and Operations
Deployment Flow
deployment is GitHub Actions driven.
current chain:
- push to
main code lintworkflow runs- if lint passes,
deploy to fridg3.orgruns from the successful workflow event - repo is rsynced to
/var/www/fridg3.org
Deploy Workflow
/.github/workflows/deploy.yml
main details:
- triggered by successful
code lintworkflow completion - only deploys pushes to
main - installs
rsyncandopenssh-client - uses
DEPLOY_KEY - deploy target is
deploy@45.76.134.105:/var/www/fridg3.org
What Does Not Deploy
deployment uses .rsyncignore, so these are excluded:
/data/**sitemap.xml- repo docs and local config files
.github/**/scripts/**- local editor/codex folders
/others/toast-discord-bot/bot/venv/**
that means production runtime data is expected to already exist on the server.
Server Permissions
from README.md:
- project files should belong to
deploy:http - directories should be
755 - files should be
644 /dataandsitemap.xmlneedhttp:httpownership for webserver writes
Backup Workflow
/.github/workflows/backup-data.yml
what it does:
- ssh to the server
- zip
/var/www/fridg3.org/data - download the archive to the runner
- upload it to Google Drive using
rclone - keep only the 10 newest backups
- delete temp archives from runner and server
triggers:
- manual
workflow_dispatch - scheduled daily cron at
0 0 *
required secrets:
DEPLOY_KEYGDRIVE_BACKUP_FOLDER_IDRCLONE_CONFIG
setup notes live in /.github/workflows/backup-data-setup.md.
Sitemap Generation
sitemap.xml is not deployed from git. it is generated by /api/sitemap, which means:
- the file must be writable by the server
- the server copy is the one that matters
Operational Truths
- this repo is source code, not a full backup
/datais operational state- if prod data disappears, git will not magically save you
- if file permissions are wrong, deploys and runtime writes will get weird fast