rwest_io
- source code: https://hg.rwest.io/rwest_io
This project contains the source code for my personal website, rwest.io.
My site consists of a few modules hosted by Nginx (*
denotes
authentication required):
- org
- static html pages
- generated with Org-mode
/
/blog
/notes
/projects
- auth
- auth server
- OAuth2 service
- supports discord, google, and github
/login
/auth
/logout
- el
- elsrv *
- HTTP<->UDP proxy to Emacs Lisp shell
/el
- status
- status server
/status
These are the frontend components. We also have a few backend components, most notably a Postgres DB service and a running Emacs session.
ORG = static html pages AUTH = auth server EL = elsrv proxy STATUS = status server +----------+ | | | | | | +----------------+ | | | | +----------------+ | | | ORG | | | | | | | | | | | +----------------+ | DB | | | | | | | | | | AUTH | | | | NGINX | | | +----------------+ | | +----------------+ | | | | +----------------+ | | | EL | | | | | | | | | | | +----------------+ | EMACS | | | | | | | | | | STATUS | | | | | | | +----------------+ | | +----------------+ | | | | | | +----------+
1. Modules
- there are two types of modules worth mentioning here: static
(org) and dynamic (auth el status).
- Static modules do not interact with the backend and are just 'compiled' files which can then be served by any web server.
- Dynamic modules are applications which send and receive
information on specified sockets. They interact with backend
components and need too be reverse proxied when used in a web
server like Nginx.
- binaries shipped with dynamic modules run as separate services.
- configured at runtime
- flexible routing - host each service across LAN/WAN
1.0.1. org
- static org files
- compiled to html and sent to web server via
rwest-io.el
1.0.2. auth
- authsrv
- OAuth2 web service
- Discord
- OAuth2 web service
1.0.3. el
- elprox
- proxy HTTP requests to elsrv.el UDP socket
- elsrv.el
- Emacs remote control
- evaluate elisp via raw UDP REPL
- Emacs remote control
1.0.4. status
- statsrv
- server health report
- current weather for client IP
2. tasks
2.1. TODO break out auth server
- State "TODO" from
- logic is contained in elprox, need to move this to authsrv
2.2. DONE sitemap generator
- Note taken on
see rwest-io-update-sitemap - State "DONE" from "TODO"
- State "TODO" from
- default generator isn't respecting our filedate macro
- always uses the UPDATED file property
- make separate autoload fn for generating sitemap, remove from org-publish-project-alist