Hugo static sites with webhook updates
Go to file
2024-08-06 18:30:02 +02:00
.env.sample update .env.sample and README.md 2024-06-13 12:06:32 +02:00
abra.sh fix empty HUGO_GIT_BRANCH 2024-08-06 18:30:02 +02:00
app-entrypoint.sh.tmpl feat: entrypoint basic auth generation 2024-03-23 12:56:39 +01:00
badger-entrypoint.sh.tmpl feat: private repos 2024-03-23 13:25:32 +01:00
compose.auth.yml feat: entrypoint basic auth generation 2024-03-23 12:56:39 +01:00
compose.private.yml feat: private repos 2024-03-23 13:25:32 +01:00
compose.yml add optional HUGO_GIT_BRANCH 2024-08-06 18:22:05 +02:00
default.conf.tmpl feat: entrypoint basic auth generation 2024-03-23 12:56:39 +01:00
deploy_key.tmpl wip: running pass on remaining features 2024-03-22 00:00:14 +01:00
deploy.sh.tmpl fix empty HUGO_GIT_BRANCH 2024-08-06 18:30:02 +02:00
README.md update README with Alternative Domains & Sub-Domains 2024-06-13 14:17:06 +02:00
ssh_config.tmpl wip: running pass on remaining features 2024-03-22 00:00:14 +01:00

Parasol Static Site ☂️ 🕸️

A recipe for generating static websites with Hugo and a listener service which triggers git pulls and builds via webhookd

  • Category: Development
  • Status: 0, dev
  • Image: site-badger
  • Healthcheck: {{ .Healthcheck }}
  • Backups: No
  • Email: No
  • Tests: No
  • SSO: No

Quick start

  • abra app new parasol-static-site --secrets
  • abra app config <app-site-name>
  • abra app deploy <app-site-name>

This will deploys a public website built from a Hugo site stored in a public git repository. If you need various private modes, there are four different deployment scenarios supported:

  • Public Site & Public Repo
  • HTTP Basic Auth & Public Repo
  • Public Site & Private Repo
  • HTTP Basic Auth & Private Repo

Public Site & Public Repo

The default deployment is a fully public site and public git repository.

  • /: the Hugo site is served
  • /deploy: triggers webhookd to re-build the site, includes publicly viewable build logs

HTTP Basic Auth

To enable a password protected site built from a public git repo, uncomment the following lines in your .env file:

COMPOSE_FILE="$COMPOSE_FILE:compose.auth.yml"
AUTH_ENABLED=1
AUTH_USERNAME=foobar
SECRET_AUTH_PASSWORD_VERSION=v1

Then run abra app secret generate -a <domain> command.

When you deploy:

  • /: the Hugo site is served
  • /deploy: the webhook is behind HTTP Basic Auth

Private Repository

If you enable the following lines in your .env file:

COMPOSE_FILE="$COMPOSE_FILE:compose.private.yml"
PRIVATE_ENABLED=1
SECRET_DEPLOY_KEY_VERSION=v1

Then you need to generate a SSH key:

$ ssh-keygen -a 100 -t ed25519

Then, you need to remove the final newline of the file:

$ truncate -s -1 <ssh-private-key-file>

Due to a limitation in abra (can't insert files yet), you'll have to manually ingest the SSH private key file manually. If you are deploying a site that is an alternative domain or sub-domain from the server name, please read this troubleshooting note.

$ DOCKER_CONTEXT=example.org docker secret create example_org_deploy_key_v1 /path/to/ssh-private-key

If that completes with no errors, run the following command:

$ abra app secret ls example.org

If successful, you should see true in the far right column.

+------------+---------+----------------------------+-------------------+
|    NAME    | VERSION |       GENERATED NAME       | CREATED ON SERVER |
+------------+---------+----------------------------+-------------------+
| deploy_key | v1      | example_org_deploy_key_v1  | true              |
+------------+---------+----------------------------+-------------------+

You now need to upload the public SSH key part to the Git repository settings as a Deploy Key, which in Gitea/Forgejo is located in the web UI at:

Repository -> Settings > Deploy keys

Or via URL:

You can then deploy and the deploy key will be loaded before cloning the private repository and all should nicely.

$ abra app deploy example.org

HTTP Basic Auth & Private Repository

You need to edit the COMPOSE_FILE= line to include the following .yml files:

COMPOSE_FILE="compose.yml:compose.auth.yml:compose.private.yml"

Troubleshooting

This is a WIP, there are likely dragons and foot cannons. Ye be warned 🐉 🏴‍☠️ 😬

Site not generating?

You can manually trigger the site build yourself:

abra app run <domain> badger sh
sh /root/scripts/deploy.sh

SSH keys not working?

You can get in and inspect the SSH keys via the following:

abra app run <domain> badger sh
ls /root/.ssh

HTTP Basic auth not working?

Best to check the generated password file:

abra app run <domain> badger sh
cat /etc/nginx/.htpasswd

Alternative Domains & Sub-Domains

If you are deploying a private repository where a alternative domain (alternative.com) or a sub-domain (sub.example.org) from that of the server example.org you need to craft a special DOCKER_CONTEXT value. If your apps are named:

  • alternative.com
  • sub.example.org

Then the respective commands would be:

$ DOCKER_CONTEXT=example.org docker secret create alternative_com_deploy_key_v1 /path/to/ssh-private-key
$ DOCKER_CONTEXT=example.org docker secret create sub_example_org_deploy_key_v1 /path/to/ssh-private-key

For more details documentation, see the Coop-Cloud Docs

License

The following starter was made by @adz for offline.place with the following license:

UNIVERSAL PUBLIC DOMAIN LICENSE

This software and everything else in the universe is in the public domain. Ideas are not property.