Static Sites Without Big Tech Hosting

www.souveraen-durch-architektur.de · 2026-08-02 · by Long Nguyen ·generic
Daniel Westheide – Static Sites Without Big Tech Hosting

Static Sites Without Big Tech Hosting

Static Sites Without Big Tech Hosting

If you run a static website, you rarely think twice about hosting. GitHub Pages works, costs nothing, and the code is already there anyway. But "works" and "sovereign" are two different things. This recipe shows how to build a stack with statichost.eu plus Codefloe or Codeberg that is just as convenient, but stays in European hands, treats visitor data transparently, and does not depend on a transatlantic legal basis that is currently starting to wobble.

Daniel Westheide

Senior Consultant

Static websites can be run sovereignly without giving up any convenience: European providers for Git hosting and deployment keep the entire stack independent.

What you’ll learn in this article

The problem: GitHub Pages and GitLab Pages tie code hosting and deployment inseparably together, both sit with US providers under US law, and on top of that come opaque server logs and a shaky legal basis.

The idea: Because static websites are portable, you can separate Git hosting from deployment and replace each with a European alternative.

The ingredients: A static site generator like Zola, a European Git host (Codeberg or Codefloe), and statichost.eu for deployment.

The result: A stack as convenient as GitHub Pages, entirely in European hands, sparing with visitor data, and built from components you can swap out independently.

Content

If you run a static website or a blog, you often reach reflexively for GitHub Pages or GitLab Pages. All it takes is a Git repository hosted there, and a `git push` immediately triggers the site to be rebuilt and deployed. But behind this convenience lies a problem that is easy to overlook: code hosting and website deployment are inseparably coupled, and both sit with US companies under US law.

‍

Microsoft (GitHub) and GitLab Inc. are subject to the US Cloud Act. That means US authorities can, under certain circumstances, access data even if the servers are physically located in Europe. The content of a public static website is the least of the concerns here, since it is freely accessible anyway. But here is what actually sits at GitHub or GitLab and is not public: the source code (for private repositories), unpublished drafts, deployment logs, account and access credentials, and access statistics. For a company blog, that could be, for example, unpublished content, internal structures, or hints about client projects.

‍

GitHub, GitLab, and Cloudflare all have Data Processing Agreements and formally address GDPR compliance. As a website operator, however, you do not know which visitor data, IP addresses, user agents, timestamps, is actually collected. statichost.eu transparently documents what ends up in server logs: no IP addresses, no user agents, only aggregated response sizes for billing, backed up by a real log entry in their documentation. What GitHub, GitLab, or Cloudflare actually log remains unclear. On top of that comes the legal basis: the EU-US Data Privacy Framework, which US providers invoke for data transfers, rests substantially on the independence of the FTC, which the US Supreme Court declared unconstitutional at the end of June 2026. European law on European servers is no small matter right now.

‍

There is also a subtler form of dependency: GitHub Pages is so seamlessly integrated into the GitHub workflow that you barely notice the coupling between code hosting and deployment. This is not a hard lock-in. As this recipe shows, switching is technically straightforward. But if you have never consciously separated the two, you also never think to optimize or replace the components independently of one another.

‍

The good news: static websites are portable by nature. The idea behind this recipe is simple: separate Git hosting and website hosting and replace each with a European alternative. The result is a stack that is just as convenient as GitHub Pages, is entirely in European hands, and where both components can be swapped independently of one another.

‍

Concretely, we show how to port an existing website to Codeberg or Codefloe as the Git host and statichost.eu for deployment.

‍

Ingredients

‍

A static site generator

‍

For this recipe we use Zola, a generator written in Rust that stands out for short build times and needs no external dependencies. But the principle works just as well with any other generator, for example Hugo, Eleventy, or Jekyll. statichost.eu builds the site with a Docker image of your choice. That gives maximum freedom, even for unusual build setups.

‍

A European Git host

‍

Instead of GitHub or GitLab, we recommend two alternatives here, both based on Forgejo, a community fork of Gitea:

‍

Codeberg is a non-profit association based in Berlin. Codeberg is free, fully open source, and its infrastructure is located in Germany. For open-source projects it is an obvious choice. If you host your website's source code publicly, you are clearly within the terms of use. According to the terms of use, private repositories are limited to FLOSS projects and genuinely small personal content such as notes or config files. A website's source code falls into a gray area there. If you want to be on the safe side, host the repository publicly. Codeberg is deliberately not a commercial general-purpose platform.

‍

Codefloe is explicitly aimed at everyone, from solo developers through open-source projects to enterprise teams, and places no restrictions on content. The platform is likewise based on Forgejo, runs a cloud-native infrastructure, and is developed in the open. Private repositories can be used without restrictions, which makes Codefloe the better choice when the source code should not be public or a commercial context applies.

‍

Both are fully compatible with the standard Git protocol. Switching from GitHub essentially just means changing the remote URL, and both offer an import function that takes over the repository history. statichost.eu is also not limited to these two: the service supports in principle any Git host that offers webhooks, including self-hosted Forgejo or other platforms.

‍

statichost.eu

‍

statichost.eu is a European hosting service made specifically for static websites. All you have to do is create a site with a repository behind it and specify how the static site is built. Optionally, as with GitHub Pages and GitLab Pages, you can of course also use a custom domain.

‍

On every push, the site is automatically rebuilt and served. Provider and infrastructure are European.

‍

What ends up in server logs is reduced to the absolute minimum: timestamp, HTTP method, host, response size, and status code, no IP addresses, no user agents. The logs are deleted after seven days at the latest, in practice usually earlier. For organizations, statichost.eu of course provides a Data Processing Agreement.

‍

Preparation

‍

We assume that a static website already exists and is hosted via GitHub Pages. The source code therefore sits in a GitHub repository, and GitHub builds and deploys the site on every push. This is exactly the coupling we now dissolve. All steps work with Codeberg analogously to Codefloe.

‍

Step 1: Migrate the repository to Codefloe

‍

There are two ways to migrate the repository to Codefloe. The first is automatic migration. For this, a Personal Access Token (PAT) first has to be created in GitHub.

‍

Creating a new Personal Access Token in GitHub

‍

This has to be assigned the necessary permissions to read the content of the existing GitHub repository, as shown in the following screenshot.

‍

Setting the permissions of the GitHub Personal Access Token

‍

In Codefloe, we then choose the "New migration" option instead of the usual "New Repository".

‍

Now we can enter the URL of the GitHub repository, our access token, and the items we want to migrate. In the example, we decide to import not only the source code and its Git history but also the issues.

‍

‍

‍

Instead of such a migration, you can also simply create a new repository on Codefloe. In our local copy, we then set the origin to the remote URL of the new Codefloe repository and push to it.

‍

‍`git remote set-url origin https://codefloe.com/your-username/my-website.git git push -u origin main`

‍

Step 2: Create a project on statichost.eu

‍

Register at statichost.eu and create a new project. You will be asked for the repository URL. Enter the URL of your Codeberg or Codefloe repository here.

‍

Adding a new site in statichost.eu

‍

Step 3: Build configuration

‍

When creating the project, you can select Zola or other common static site generators such as Hugo, Jekyll, or Gatsby. In the case of Zola, you can then set a version, an output directory, and optional build flags. For generators that statichost.eu does not know, you can also select Docker. Then it is possible to set a Docker image, a build command, and the output directory.

‍

‍

As an alternative to the build configuration in the web UI, you can also place a `statichost.yml` file in the Git repository. For Zola, it looks roughly like this:

` image: ghcr.io/getzola/zola:v0.21.0 command: build public: public image_entrypoint: true `

‍

Step 4: Set up a webhook

‍

To trigger an automatic build on every push, statichost.eu needs a webhook configured in the repository. After the project is created, statichost.eu shows the matching webhook URL.

In Codefloe, the configuration is found under Repository → Settings → Webhooks → Add webhook. There you enter the webhook URL from statichost.eu and choose "Push Events" as the trigger. In Codeberg, the path is analogous.

‍

‍

After the next `git push`, statichost.eu automatically builds the site and makes it available under a `*.statichost.page` subdomain.

‍

Step 5: Set up a custom domain (optional)

‍

statichost.eu supports custom domains including automatic TLS certificates via Let's Encrypt. For this, you set a CNAME record at your DNS provider pointing to the address provided by statichost.eu. The exact values are shown in the project dashboard.

‍

Topping

‍

If you want to host the entire stack yourself, you can use Forgejo Actions or Crow CI (Codefloe's integrated CI system) to trigger a build on every push and transfer the result to your own VPS via `rsync`, served by nginx, Apache, or Caddy.

‍ To be honest, though, this is not an equivalent replacement: statichost.eu comes with a distributed CDN via Bunny and built-in resilience. On top of that comes consistent data economy, common web servers log IP addresses, user agents, and referrers by default. Reducing that to a privacy-friendly minimum is manual configuration work that is easily forgotten. With statichost.eu, it is implemented that way out of the box.

Conclusion

GitHub Pages and GitLab Pages are convenient, but they couple two things that should really be independent: where code lives and where a website is served. Add to that opaque server logs, Cloudflare as a silent third party, and US law as the legal framework. With statichost.eu and Codeberg or Codefloe, this stack can be replaced entirely with European alternatives, without giving up automatic deployment or convenience, and with a provider that does not phrase data minimization as a promise but implements it technically. The decisive advantage of decoupling: Git hosting and deployment can be chosen and switched independently of one another.

Daniel Westheide

Senior Consultant

More Articles

Beyond Claude & GPTSure, we enjoy trying out the latest frontier model as much as anyone. But in day-to-day project work, what matters most is control over cost, data, and availability. That's why we increasingly rely on open-weights models paired with open source tooling. Here's what our setup looks like.Nicolas IndenSenior Consultant

OpenProject: A Real Alternative to Jira?In his article "Using Jira Data Center with AI Features," my colleague Nicolas Inden showed how to connect a self-hosted Jira instance with an AI model. One point stands out: Atlassian will support Jira Data Center only until early 2029. After that, support ends. Sales of Data Center licenses to new customers were even discontinued back in late March 2026. So what do we do if we don't want to move back to Jira Cloud after 2029 – or if we want to break away from Jira right now?Holger KrausSenior Consultant

Nebu: Self-made sovereigntyThere are plenty of open-source alternatives to Slack. None of them deliver real sovereignty. Community editions are deliberately pared down so no company can run them in production, while enterprise features sit behind commercial licenses. This article shows why “building it yourself” is no longer a utopian idea today, but a realistic option for anyone with a product vision and a bit of DIY courage.Philipp BeyerleinSenior Consultant

AI Features for Jira Data Center – No Atlassian Cloud RequiredImagine this: after every customer meeting, structured Jira issues are created automatically. You just paste your notes into an AI, and it does the rest. Atlassian already offers that kind of magic in Jira Cloud: natural-language search, automatic summaries, and issue creation from unstructured text. But not everyone wants to move to the cloud, and many teams plan to keep using Jira Data Center through 2029. In this article, we show how to get many of the same benefits on-premises with Jira Server and your own AI stack: GDPR-compliant, resilient to Cloud Act exposure, and without data leaving your environment.Nicolas IndenSenior Consultant

Get in touch

We support you on your path to digital sovereignty, wherever you are today.

Get in touch

I agree that I may be contacted using the information I have provided. Our Privacy Policy applies.

Thank you! Your request has been submitted successfully. We'll get back to you as soon as possible.

Oops! Something went wrong while submitting the form.

www.souveraen-durch-architektur.de · 16 images · 47 links

Comments (0)

No comments yet