From 5941a255e8679eb2ea8f3924669c0277a39cad4d Mon Sep 17 00:00:00 2001 From: Kaitlyn Parkhurst Date: Sat, 19 Nov 2022 00:10:27 -0800 Subject: [PATCH] Docs --- README.md | 42 +++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 186e2da..669de37 100644 --- a/README.md +++ b/README.md @@ -12,48 +12,36 @@ MyJekyllBlog is a project to provide a SaaS web interface to Jekyll backed with | Certbot | Handles getting/updating SSL certs | mjb.certbot | store, webservers | | WebServer | Hosts customer blogs on the internet | nginx | certbot, build | +### Panel +The Panel server hosts the web application that customers can use to provision blogs, publish articles, upload media and otherwise manage their blogs. Administrators can use it to check users/blogs on the system, run maintenance tasks, and configure some aspects of the system. -## What are the systems? +### Build -### Web Panel +The build server processes Jekyll git repositories into static websites and deploys the fully built website to the webservers for hosting. -The web panel allows users of the service to create and manage their Jeykll blogs. +### Store -The following functionality should exist: +The store server hosts two database with postgresql. One database supports `MyJekyllBlog::DB` and another supports Minion. The Panel, Build, and Certbot servers all need access to these databases. -* Wizard to create a new blog -* Editor panel that lists articles -* Editor panel that lists pages -* Editor panel that allows creating a new article -* Editor panel that allows creating a new page -* Editor panel that allows editing an existing article -* Editor panel that allows editing an existing page -* Manager panel that shows last deployment -* Manager panel that allows deploying the blog -* Manager panel that allows adding a custom domain name to the blog -* Manager panel that shows list of commits and which one is deployed -* Manager panel that allows selecting an alternative commit and deploying it +The store server also hosts an installation of Gitea so that each Jekyll blog may have its own central git repository. The panel server will checkout and commit/push to this server. The build server will checkout the repository from this server for building. -### Database Server +### Certbot -The database server holds the database for the `Web Panel` and for the `Build Server`. +The CertBot server handles obtaining SSL certificates from Let's Encrypt and pushing them to the webservers. -### Gitea Server +When HTTP challenges are used, `/.well-known/` is proxied from ALL webserver nodes to the certbot node and `--standalone` is used from the certbot node to obtain an SSL certificate. -The gitea server will have user mapping between the `Web Panel` and Gitea. Users websites will be held as repos here. +When DNS challenges are used, wildcard certificates may be obtained (and is recommended for hosts expecting many sub-domains to be made). -### Build Server +The `/etc/letsencrypt` directory is synced with webserver nodes through rsync whenever new certificates are obtained. An administrator can update and sync SSL certificates from the admin panel. -The build server will check out the repo, build the static site and deploy it to whichever `Web Server` it should be deployed to. +### WebServer -### SSL Server +WebServers run nginx and host static content for Jekyll blogs. When a blog is provisioned, an SSL certificate will be requested for the site and an nginx configuration file will be created. -The SSL server will run certbot. The `/.well-known` directory should be proxied to this server so that HTTP challenges can be used. +The build servers will sync the blog content with webservers each time the blog is updated through the Panel. -### Web Servers - -Web servers will host static content for Jeykll blogs. ## How does it work?