On-premises Universal Blue https://universal-blue.org
Find a file
2024-05-10 16:03:05 +02:00
.devcontainer feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
.github chore(main): include bug and feature request github issue templates 2024-05-04 05:57:03 +00:00
.vscode feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
anvil feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
docs doc(main): configuration variables and overall usage 2024-05-03 14:23:27 +00:00
minica style: new line at end of file 2023-05-04 18:56:06 +00:00
registry feat: add container registry and mini ca (#3,#4) 2023-04-27 17:20:18 +00:00
traefik feat(main): replace caddy with traefik as reverse proxy 2024-04-29 10:58:10 +00:00
.gitignore feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
.gitmessage chore: update gitmessage template 2024-04-30 18:53:23 +00:00
.markdownlint.yml refactor(devcontainer): new devcontainer specification based on debian 2024-04-26 21:29:40 +00:00
.prettierignore chore(devcontainer): init 2023-04-27 06:10:08 +00:00
.prettierrc.yml refactor(devcontainer): new devcontainer specification based on debian 2024-04-26 21:29:40 +00:00
forge-pod.yml feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
forge.just feat(just): update recipes names and allow for input variable files (#13) 2024-05-03 14:22:38 +00:00
forge.sh feat: add graphical user interface (#34) 2024-05-10 16:03:05 +02:00
LICENSE Initial commit 2023-04-26 16:58:51 -04:00
README.md style(main): make example shorter 2024-05-04 05:58:20 +00:00

Universal Blue - Forge

On-premises Universal Blue. This repository is intended to provide the service units necessary to set up a self-hosted OS forge for custom images.

Warning

This project is "work in progress" and not ready for production

Vision

Imagine something like a home lab or a university lab:

  1. Deploy forge
  2. Go into the WebUI, clone in your favorite uBlue repo and make changes
  3. Forge automatically starts to build the images
  4. PXE boot the clients, select ublue in the menu
  5. Eat tacos
  6. Return to a fully deployed lab with centralized package management

What we have so far

We are still working on making the vision a reality. The following has been implemented so far:

Certificate Authority

We use a Minica as simple CA to generate a key pair and a root certificate for *.ublue.local. The wildcard certificate is then made available to all other components and are valid for 2 years and 30 days.

Reverse Proxy

As an entry point for all components we use Traefik as a reverse proxy. Based on URL routing it will redirect the traffic to the right container instance.

The reverse proxy dashboard is available at https://traefik.ublue.local

Container Registry

As container registry we make use of the Docker Registry 2.0 implementation for storing and distributing container images

The container registry API is available at https://registry.ublue.local/v2

Anvil

The blacksmith's work is done with Ansible.

The shiny GUI is missing but this should not shy us away. See usage for instructions.

Handling the forge

You can use the forge.sh to setup, heat-up and cool-down the forge.

Command Description
./forge.sh setup Setup the forge for the first time or update existing setup
./forge.sh heat-up Start the forge
./forge.sh cool-down Stop the forge

Usage

Once the forge has been setup the following recipes are available via just command runner.

Just recipe Input argument Default argument value Description
forge_project-clone forge_config_var_file $HOME/ublue-os_forge/forge_default_vars.env Clone git project repository
forge_project-build forge_config_var_file $HOME/ublue-os_forge/forge_default_vars.env Build container image and upload to registry

All available settings for the forge_config_var_file are documented in the variables.md file. To launch a recipe you simple run:

just -f forge.just {{ recipe_name }} {{ forge_config_var_file }}

Example:

just -f forge.just forge_project-clone ~/ublue-os_forge/my-forge-project.env

In case you don't have just command runner available. Have a look at the forge.just file. It easy enough to understand which commands are executed via the just recipes.