Moving to a self-hosted Forgejo server
Moving to a self-hosted Forgejo server
It's no secret that GitHub started going downhill when Microsoft bought them in 2018. Don't get me wrong - the platform was still doing pretty well in terms of serving the needs of various different types of developers at once, at least in my opinion.
Times have changed since 2018 though, and we now live in a world where "artifical intelligence" is shoved into our faces at every corner. Unsurprisingly, GitHub has started undergoing the enshittification process started by its parent company in this way too, with the agentic Copilot becoming more and more invasive as time goes on. I have other reasons for wanting to leave the platform too, but the last straw was seeing Copilot rewriting pull request comments just by a contributor using it for code review.
Enough is enough. I have plenty of servers at my disposal, and plenty of knowledge. So why don't I just spin up my own Git server?
That's exactly what I did

...and now we've got https://enclave.crystall1ne.dev[1]. A fully self-hosted solution (thanks to the Forgejo community) that provides me with all of the controls, privacy, and most importantly, lack of bullshit that I could ever need. It's even set up with a custom single sign-on provider that Stella created for our various internal (and some external) services. Sweet.
- As of current, it will only host my personal projects. I'm not going to force or suggest anyone I work with to move over, and I'll still have a GitHub account for those reasons.
There's a lot of new territory to uncover in my latest self-hosting adventure, a few kinks to work out, stuff to set up, and projects to move over, but I have a rough plan for how I'm going to get everything done.
Migration, built-in
Forgejo is very good software. I love how easy it was to get set up and running, ready to take my code over SSH. Migrating my repositories from GitHub is as simple as putting in the URL (and a GitHub token, for private repos) and continuing. That's it.
An entirely self-hosted workflow
I'm actually really proud that I got off my lazy ass and set this up. As of writing this post, mlchtCamera is developed, build, and uploaded entirely on our own hardware. My pre-existing Jenkins CI/CD setup that only handled building IPAs as a GitHub Actions replacement is now pulling all the work needed to upload and configure builds for the not-a-camera-app camera app.
Moving to a fully self-contained setup is quite nice, flexible, and gives me a lot of experience for migrating future works to similar workflows.
A transition period
I'm not one for pulling the plug on things immediately, without giving adequate notice to my users. As much as I'd like to do that here, having a trasition plan helps the people that follow and contribute to my work.
As of writing this post, any public repos that I have on my forge will be synced with their equivalents on GitHub. If the repo isn't public or doesn't exist on GitHub, it will not be synced.
- The only repo on the forge currently is the one holding mlchtCamera's code. I'll be moving more over in the coming weeks.
Next, various updates will be pushed to my forge's repositories and settings changed on GitHub:
- Issues and pull requests will be disabled on GitHub.
- Repository descriptions will be updated to point to the forge.
- The README of each repo with a GitHub equivalent will have a notice about the upcoming GitHub removal.
Which gets me to the last bit: the key I made to sync my forge to GitHub expires in a month. I don't plan to renew it, and will be removing my code from GitHub. My GitHub account will host stub repositories that contain nothing other than a message about where to find the code.
The kinks
There's a few things I still need to work out in order to make interacting with my code a lot easier - mainly issues and pull requests.
I currently have user sign-ups disabled as I work on proper CAPTCHA support to prevent significant amounts of spam and work on a privacy policy[2]. While I work on this, you can contact me in my Discord or my email about issues with my software or to submit patch files that I can apply to the tree.
Epilogue
There's not much else to say in this one. I had a lot of work to do to get my forge to this point, and a decent amount still, but it's definitely been a fun learning experience on getting another one of my daily uses hosted locally.
I have a few more blog posts on the way, I've been a bit backed up by laziness other things going on in my life, most of which will be shared here in good time.
git commit -m "moo"; git push,
- Eva Isabella Luna
It was originally https://git.crystall1ne.dev, but Stella kept making Destiny jokes. I decided to change it to
enclaveafter "The Enclave" on Mars in the game. I havegitset up to redirect, so people can continue to use it if they really want to. ↩︎Sadly saying "Your data stays private because I honestly couldn't give less of a crap about your data" doesn't hold up in court. ↩︎