← Back
Mischa Vandenburg March 3, 2026 17m

Smart Engineers Are Moving Away From Github, Here's Why...

Read full transcript 14 segments
  1. When you visit my blog on the internet, When you visit my blog on the internet, you're actually connecting to a you're actually connecting to a you're actually connecting to a container that's running on the container that's running on the container that's running on the Kubernetes cluster that I run at home in Kubernetes cluster that I run at home in Kubernetes cluster that I run at home in my home lab. Now, what if I told you my home lab. Now, what if I told you my home lab. Now, what if I told you that it's not just the container that's that it's not just the container that's that it's not just the container that's running there, it's also all of the running there, it's also all of the running there, it's also all of the source code, all of the CI/CD pipelines, source code, all of the CI/CD pipelines, source code, all of the CI/CD pipelines, and everything that's needed to run this and everything that's needed to run this and everything that's needed to run this blog is also being run on that same blog is also being run on that same blog is also being run on that same Kubernetes cluster. And in this video, Kubernetes cluster. And in this video, Kubernetes cluster. And in this video, I'm going to show you why I don't need I'm going to show you why I don't need I'm going to show you why I don't need GitHub anymore in order to build and GitHub anymore in order to build and GitHub anymore in order to build and host my blog all on my own home lab. So, host my blog all on my own home lab. So, host my blog all on my own home lab. So, let's jump in. So, the tool I'm using let's jump in. So, the tool I'm using let's jump in. So, the tool I'm using for this is called Forgejo, which is a for this is called Forgejo, which is a for this is called Forgejo, which is a self-hosted Git server. Now, if you're self-hosted Git server. Now, if you're self-hosted Git server. Now, if you're watching this video, it's likely that watching this video, it's likely that watching this video, it's likely that you're aware of Git and GitHub, but I you're aware of Git and GitHub, but I you're aware of Git and GitHub, but I just want to make sure that everyone is just want to make sure that everyone is just want to make sure that everyone is on the same page, so I'll just briefly on the same page, so I'll just briefly on the same page, so I'll just briefly explain what this is all about. Now, explain what this is all about. Now, explain what this is all about. Now, many people don't know this, but GitHub many people don't know this, but GitHub many people don't know this, but GitHub is not the same as Git. is not the same as Git. is not the same as Git. Git is the actual version control Git is the actual version control Git is the actual version control system, which is created by Linus system, which is created by Linus system, which is created by Linus Torvalds, the creator of Linux, and Git Torvalds, the creator of Linux, and Git Torvalds, the creator of Linux, and Git is used to manage the versioning of is used to manage the versioning of is used to manage the versioning of files. So, if you have people working on files. So, if you have people working on files. So, if you have people working on the same files, you need a way of the same files, you need a way of the same files, you need a way of tracking what things have changed in tracking what things have changed in tracking what things have changed in those files. And especially if you're those files. And especially if you're those files. And especially if you're working on the same file with whole working on the same file with whole working on the same file with whole teams of people, it becomes very teams of people, it becomes very teams of people, it becomes very important that you have a good system in important that you have a good system in important that you have a good system in place for this to make sure that all of place for this to make sure that all of place for this to make sure that all of these changes can actually be these changes can actually be these changes can actually be implemented, right? So, one of the best implemented, right? So, one of the best implemented, right? So, one of the best examples for this is actually the Linux examples for this is actually the Linux examples for this is actually the Linux source code, which is on GitHub. Now, a source code, which is on GitHub. Now, a source code, which is on GitHub. Now, a project where you use Git is usually

  2. project where you use Git is usually project where you use Git is usually contained in one directory, and this is contained in one directory, and this is contained in one directory, and this is called a repository. So, a Git called a repository. So, a Git called a repository. So, a Git repository is a collection of files that repository is a collection of files that repository is a collection of files that uses Git for version control. uses Git for version control. uses Git for version control. Now, you need to place this repository Now, you need to place this repository Now, you need to place this repository somewhere, right? And in this case, or somewhere, right? And in this case, or somewhere, right? And in this case, or many cases, it is GitHub. GitHub is many cases, it is GitHub. GitHub is many cases, it is GitHub. GitHub is basically a place to put your Git basically a place to put your Git basically a place to put your Git repositories and that is basically all repositories and that is basically all repositories and that is basically all that is what it does. Now for example, that is what it does. Now for example, that is what it does. Now for example, the Linux source code is hosted on the Linux source code is hosted on the Linux source code is hosted on GitHub. You can go in and read the code GitHub. You can go in and read the code GitHub. You can go in and read the code here. And you can also look at the here. And you can also look at the here. And you can also look at the commits. So a commit to a Git repo is commits. So a commit to a Git repo is commits. So a commit to a Git repo is when someone makes a change and then when someone makes a change and then when someone makes a change and then um for example, here are the changes in um for example, here are the changes in um for example, here are the changes in the code which are being managed by Git the code which are being managed by Git the code which are being managed by Git in the version control. So here you have in the version control. So here you have in the version control. So here you have a record of everything that has been a record of everything that has been a record of everything that has been changed by whom and you can always go changed by whom and you can always go changed by whom and you can always go back to a previous commit for example back to a previous commit for example back to a previous commit for example so that you can you can you can you so that you can you can you can you so that you can you can you can you know, revert your changes or you can know, revert your changes or you can know, revert your changes or you can actually know exactly what was changed actually know exactly what was changed actually know exactly what was changed and when. So you can see the in real and when. So you can see the in real and when. So you can see the in real time what is being changed in the Linux time what is being changed in the Linux time what is being changed in the Linux kernel now for example. GitHub is then a kernel now for example. GitHub is then a kernel now for example. GitHub is then a Microsoft owned company that provides a Microsoft owned company that provides a Microsoft owned company that provides a service where you can put these Git service where you can put these Git service where you can put these Git repositories. Now what for JO does is it repositories. Now what for JO does is it repositories. Now what for JO does is it provides you with your own GitHub, okay?

  3. provides you with your own GitHub, okay? provides you with your own GitHub, okay? It provides you with a place where you It provides you with a place where you It provides you with a place where you can host your own self-hosted Git can host your own self-hosted Git can host your own self-hosted Git repositories. repositories. repositories. And that is what I did. So for example, And that is what I did. So for example, And that is what I did. So for example, my blog, all of this source code lives my blog, all of this source code lives my blog, all of this source code lives in a repository on my own self-hosted in a repository on my own self-hosted in a repository on my own self-hosted Git instance. So whenever I publish a Git instance. So whenever I publish a Git instance. So whenever I publish a blog now blog now blog now the code is actually being committed to the code is actually being committed to the code is actually being committed to my own repository and not to GitHub my own repository and not to GitHub my own repository and not to GitHub anymore. So why would you even bother anymore. So why would you even bother anymore. So why would you even bother with this? Why does anyone need to have with this? Why does anyone need to have with this? Why does anyone need to have their own self-hosted Git instance? But their own self-hosted Git instance? But their own self-hosted Git instance? But before we continue, about 73% of my before we continue, about 73% of my before we continue, about 73% of my viewers aren't subscribed, so please viewers aren't subscribed, so please viewers aren't subscribed, so please subscribe. It helps me put out more subscribe. It helps me put out more subscribe. It helps me put out more honest content like this every single honest content like this every single honest content like this every single week and it's a completely free way to week and it's a completely free way to week and it's a completely free way to support my channel. So everybody knows support my channel. So everybody knows support my channel. So everybody knows that AI models are really good at that AI models are really good at that AI models are really good at writing code, right? That's one of the writing code, right? That's one of the writing code, right? That's one of the things that they're best at. Now where things that they're best at. Now where things that they're best at. Now where Where you think all of this code came Where you think all of this code came Where you think all of this code came from? from? from? All of this code was gathered from All of this code was gathered from All of this code was gathered from places like Stack Overflow, but also places like Stack Overflow, but also places like Stack Overflow, but also GitHub. So, Microsoft, who owns GitHub, GitHub. So, Microsoft, who owns GitHub, GitHub. So, Microsoft, who owns GitHub, scans all of the code that is being scans all of the code that is being scans all of the code that is being published on GitHub, published on GitHub, published on GitHub, and then they're taking that to train and then they're taking that to train and then they're taking that to train the models, etc. And I don't think the models, etc. And I don't think the models, etc. And I don't think there's necessarily anything wrong with there's necessarily anything wrong with there's necessarily anything wrong with that. However, if there are things that that. However, if there are things that that. However, if there are things that I am I am I am developing myself that I don't developing myself that I don't developing myself that I don't necessarily want to share with others, necessarily want to share with others, necessarily want to share with others, I want to keep that in my own Git I want to keep that in my own Git I want to keep that in my own Git repositories. Right? So, if you're using repositories. Right? So, if you're using repositories. Right? So, if you're using this service, you're basically agreeing this service, you're basically agreeing this service, you're basically agreeing that they can use that data.

  4. that they can use that data. that they can use that data. And I I have certain projects, private And I I have certain projects, private And I I have certain projects, private projects, for example, my own projects, for example, my own projects, for example, my own note-taking system, that I don't want note-taking system, that I don't want note-taking system, that I don't want Microsoft to have. And I don't want them Microsoft to have. And I don't want them Microsoft to have. And I don't want them to scan that. So, this is the reason why to scan that. So, this is the reason why to scan that. So, this is the reason why I deployed my own self-hosted Git I deployed my own self-hosted Git I deployed my own self-hosted Git instance. Now, let's take a look at my instance. Now, let's take a look at my instance. Now, let's take a look at my Git instance. So, this for example is my Git instance. So, this for example is my Git instance. So, this for example is my blog repo. So, you can see it has a very blog repo. So, you can see it has a very blog repo. So, you can see it has a very nice UI where I can just check out all nice UI where I can just check out all nice UI where I can just check out all of the changes I made. It has these of the changes I made. It has these of the changes I made. It has these commit changes, for example. commit changes, for example. commit changes, for example. So, if I check the overview over here, So, if I check the overview over here, So, if I check the overview over here, you will see all of the changes I've you will see all of the changes I've you will see all of the changes I've made. Here, for example, I changed a an made. Here, for example, I changed a an made. Here, for example, I changed a an image that I image that I image that I that went wrong, so I had to to that went wrong, so I had to to that went wrong, so I had to to change the code for this image. It has a change the code for this image. It has a change the code for this image. It has a very nice UI for this. very nice UI for this. very nice UI for this. So, and it also supports pull requests. So, and it also supports pull requests. So, and it also supports pull requests. So, there's the full So, there's the full So, there's the full normal pull request workflow that you normal pull request workflow that you normal pull request workflow that you might be used to when using GitHub. It might be used to when using GitHub. It might be used to when using GitHub. It It really feels almost the same as It really feels almost the same as It really feels almost the same as running GitHub. The second thing is that running GitHub. The second thing is that running GitHub. The second thing is that Forjao also provides you with your own Forjao also provides you with your own Forjao also provides you with your own self-hosted actions runner. In other self-hosted actions runner. In other self-hosted actions runner. In other words, your self-hosted CI/CD pipeline.

  5. words, your self-hosted CI/CD pipeline. words, your self-hosted CI/CD pipeline. So, when I commit some code to my blog So, when I commit some code to my blog So, when I commit some code to my blog here, here, here, then a set of automations are going to then a set of automations are going to then a set of automations are going to take place, and I'm going to demonstrate take place, and I'm going to demonstrate take place, and I'm going to demonstrate this in a second. this in a second. this in a second. But, these are then going to take my But, these are then going to take my But, these are then going to take my code, build it into a container image, code, build it into a container image, code, build it into a container image, and deploy it to my Kubernetes cluster. and deploy it to my Kubernetes cluster. and deploy it to my Kubernetes cluster. And all of this is running on my own And all of this is running on my own And all of this is running on my own infrastructure. So, if you have an open infrastructure. So, if you have an open infrastructure. So, if you have an open source project or GitHub, it is for source project or GitHub, it is for source project or GitHub, it is for free. You can You can store it for free, free. You can You can store it for free, free. You can You can store it for free, and you can use GitHub Actions for free. and you can use GitHub Actions for free. and you can use GitHub Actions for free. However, if you have your private repos, However, if you have your private repos, However, if you have your private repos, first of all, your code is going to be first of all, your code is going to be first of all, your code is going to be scanned, but also it's a a bit limited scanned, but also it's a a bit limited scanned, but also it's a a bit limited what you can do with the free GitHub what you can do with the free GitHub what you can do with the free GitHub Actions, okay? So, I am I have Actions, okay? So, I am I have Actions, okay? So, I am I have completely unlimited um CI/CD pipelines completely unlimited um CI/CD pipelines completely unlimited um CI/CD pipelines now, because I'm running them on my own now, because I'm running them on my own now, because I'm running them on my own infrastructure. Now, one interesting infrastructure. Now, one interesting infrastructure. Now, one interesting thing is that you are actually able to thing is that you are actually able to thing is that you are actually able to self-host your GitHub Actions on your self-host your GitHub Actions on your self-host your GitHub Actions on your own infrastructure, so you can use own infrastructure, so you can use own infrastructure, so you can use GitHub and use those runners on your own GitHub and use those runners on your own GitHub and use those runners on your own infrastructure.

  6. infrastructure. infrastructure. But, recently But, recently But, recently Microsoft made a big mistake, where they Microsoft made a big mistake, where they Microsoft made a big mistake, where they announced that they were going to charge announced that they were going to charge announced that they were going to charge you for the self-hosted GitHub runners, you for the self-hosted GitHub runners, you for the self-hosted GitHub runners, as well. They published this on the 15th as well. They published this on the 15th as well. They published this on the 15th of December. They announced the pricing of December. They announced the pricing of December. They announced the pricing changes for GitHub Actions. changes for GitHub Actions. changes for GitHub Actions. And uh And uh And uh that what this led to a huge backlash on that what this led to a huge backlash on that what this led to a huge backlash on social media, and X was completely on social media, and X was completely on social media, and X was completely on fire about this. So, they wanted to fire about this. So, they wanted to fire about this. So, they wanted to charge you for running stuff on your own charge you for running stuff on your own charge you for running stuff on your own infrastructure, and that did not sit infrastructure, and that did not sit infrastructure, and that did not sit well with the community. And as you see well with the community. And as you see well with the community. And as you see in the in the announcement now, here in the in the announcement now, here in the in the announcement now, here they're saying, "TLDR, we're pro- they're saying, "TLDR, we're pro- they're saying, "TLDR, we're pro- postponing the announced billing change postponing the announced billing change postponing the announced billing change uh to take time to re-evaluate the uh to take time to re-evaluate the uh to take time to re-evaluate the approach." approach." approach." They actually came back and reversed They actually came back and reversed They actually came back and reversed that price change. So, they they lost that price change. So, they they lost that price change. So, they they lost some face there. some face there. some face there. Um so, even though um you can still do Um so, even though um you can still do Um so, even though um you can still do it for free, there are changes coming. it for free, there are changes coming. it for free, there are changes coming. So, this is also another catalyst. I So, this is also another catalyst. I So, this is also another catalyst. I actually had already deployed for JO at actually had already deployed for JO at actually had already deployed for JO at that point. But, um this was actually a that point. But, um this was actually a that point. But, um this was actually a catalyst for me knowing that, okay, I I catalyst for me knowing that, okay, I I catalyst for me knowing that, okay, I I did the right thing here by going the did the right thing here by going the did the right thing here by going the self-hosted way and hosting my own Git self-hosted way and hosting my own Git self-hosted way and hosting my own Git server. Now, another really cool feature server. Now, another really cool feature server. Now, another really cool feature of Forjo is that you can mirror Git of Forjo is that you can mirror Git of Forjo is that you can mirror Git repos to your own infrastructure. So, repos to your own infrastructure. So, repos to your own infrastructure. So, for example, there is this YubiKey guide for example, there is this YubiKey guide for example, there is this YubiKey guide that is a public Git repo on GitHub, that is a public Git repo on GitHub, that is a public Git repo on GitHub, but you can set this up as a mirror. So, but you can set this up as a mirror. So, but you can set this up as a mirror. So, every day every day every day my Forjo instance is going to check a

  7. my Forjo instance is going to check a my Forjo instance is going to check a cer- cer- cer- certain amount of repos that I certain amount of repos that I certain amount of repos that I configured and it's going to mirror configured and it's going to mirror configured and it's going to mirror those repos to my own infrastructure. those repos to my own infrastructure. those repos to my own infrastructure. So, if the owner of this repository, in So, if the owner of this repository, in So, if the owner of this repository, in in this case the the YubiKey guide, if in this case the the YubiKey guide, if in this case the the YubiKey guide, if the owner for some reason decides to the owner for some reason decides to the owner for some reason decides to take that repository down, I will always take that repository down, I will always take that repository down, I will always have my own copy of that repo on my own have my own copy of that repo on my own have my own copy of that repo on my own infrastructure. infrastructure. infrastructure. So, So, So, I don't know if you have experienced I don't know if you have experienced I don't know if you have experienced this, but there have been several this, but there have been several this, but there have been several projects that I really liked that were projects that I really liked that were projects that I really liked that were taken offline. So, sometimes companies taken offline. So, sometimes companies taken offline. So, sometimes companies sue open-source projects and force them sue open-source projects and force them sue open-source projects and force them to take the code down. Well, in the case to take the code down. Well, in the case to take the code down. Well, in the case that happens, I will always have my own that happens, I will always have my own that happens, I will always have my own copy including all of the commit copy including all of the commit copy including all of the commit history. And no, this includes the full history. And no, this includes the full history. And no, this includes the full commit history, okay? So, I have the commit history, okay? So, I have the commit history, okay? So, I have the full history of the repository available full history of the repository available full history of the repository available to me on my own self-hosted to me on my own self-hosted to me on my own self-hosted infrastructure, so I always have a copy infrastructure, so I always have a copy infrastructure, so I always have a copy of the source code on my own of the source code on my own of the source code on my own infrastructure and I can keep developing infrastructure and I can keep developing infrastructure and I can keep developing on it if I want to. Now, when I decided on it if I want to. Now, when I decided on it if I want to. Now, when I decided to self-host my own Git server, there to self-host my own Git server, there to self-host my own Git server, there were a few alternatives that I were a few alternatives that I were a few alternatives that I considered. One of them is GitLab. That considered. One of them is GitLab. That considered. One of them is GitLab. That is actually the most obvious one. This is actually the most obvious one. This is actually the most obvious one. This is a alternative to GitHub, which is is a alternative to GitHub, which is is a alternative to GitHub, which is used a lot in enterprise as well. And I used a lot in enterprise as well. And I used a lot in enterprise as well. And I I kind of lean towards this one because I kind of lean towards this one because I kind of lean towards this one because it would also give me um experience with it would also give me um experience with it would also give me um experience with GitLab and in fact, I worked with GitLab GitLab and in fact, I worked with GitLab GitLab and in fact, I worked with GitLab in my first DevOps job. We were running in my first DevOps job. We were running in my first DevOps job. We were running our own self-hosted GitLab instances.

  8. our own self-hosted GitLab instances. our own self-hosted GitLab instances. So, in that sense, it made sense for me So, in that sense, it made sense for me So, in that sense, it made sense for me to continue with that. to continue with that. to continue with that. But, GitLab is quite advanced to host. But, GitLab is quite advanced to host. But, GitLab is quite advanced to host. It It involves a lot of things, It It involves a lot of things, It It involves a lot of things, especially if you're hosting it on especially if you're hosting it on especially if you're hosting it on Kubernetes. Kubernetes. Kubernetes. And frankly, for my own use case, I was And frankly, for my own use case, I was And frankly, for my own use case, I was a little bit too much. It was a very a little bit too much. It was a very a little bit too much. It was a very much overkill. And then the second one much overkill. And then the second one much overkill. And then the second one that that I considered was Gitea. that that I considered was Gitea. that that I considered was Gitea. Now, Gitea, there's I don't think Now, Gitea, there's I don't think Now, Gitea, there's I don't think there's anything wrong with it. Uh but, there's anything wrong with it. Uh but, there's anything wrong with it. Uh but, Gitea used to be an open-source uh free Gitea used to be an open-source uh free Gitea used to be an open-source uh free project, which was then acquired by a project, which was then acquired by a project, which was then acquired by a company, which now has offered a SaaS company, which now has offered a SaaS company, which now has offered a SaaS version of this as well. So, you can version of this as well. So, you can version of this as well. So, you can still run it for free. It's still still run it for free. It's still still run it for free. It's still open-source. So, there's nothing wrong open-source. So, there's nothing wrong open-source. So, there's nothing wrong with that in that sense. But, there was with that in that sense. But, there was with that in that sense. But, there was a huge row about this when the the the a huge row about this when the the the a huge row about this when the the the project was acquired. And actually, it project was acquired. And actually, it project was acquired. And actually, it was forked by a group of people who then was forked by a group of people who then was forked by a group of people who then started Forgejo. And the reason why I started Forgejo. And the reason why I started Forgejo. And the reason why I then chose Forgejo is because they then chose Forgejo is because they then chose Forgejo is because they actually say it's a guaranteed 100% free actually say it's a guaranteed 100% free actually say it's a guaranteed 100% free software forever. So, when Gitea was software forever. So, when Gitea was software forever. So, when Gitea was acquired, it was forked, and a group of acquired, it was forked, and a group of acquired, it was forked, and a group of people went with it and basically people went with it and basically people went with it and basically created an open-source project, which is created an open-source project, which is created an open-source project, which is completely guaranteed 100% free and completely guaranteed 100% free and completely guaranteed 100% free and open-source forever. And this resonated open-source forever. And this resonated open-source forever. And this resonated with me, and I decided I wanted to with me, and I decided I wanted to with me, and I decided I wanted to support this project as well. And what's support this project as well. And what's support this project as well. And what's really cool about this is if you're if really cool about this is if you're if really cool about this is if you're if you're aware of Codeberg, which is

  9. you're aware of Codeberg, which is you're aware of Codeberg, which is basically a free and open-source basically a free and open-source basically a free and open-source alternative to GitHub, well, Codeberg is alternative to GitHub, well, Codeberg is alternative to GitHub, well, Codeberg is actually being run on Forgejo. So, actually being run on Forgejo. So, actually being run on Forgejo. So, they're using Forgejo to provide this they're using Forgejo to provide this they're using Forgejo to provide this Git instance. And I thought this was Git instance. And I thought this was Git instance. And I thought this was really cool. So, Codeberg is basically a really cool. So, Codeberg is basically a really cool. So, Codeberg is basically a big middle finger to GitHub and the big big middle finger to GitHub and the big big middle finger to GitHub and the big corporations, because they provide a corporations, because they provide a corporations, because they provide a non-profit community-led open-source non-profit community-led open-source non-profit community-led open-source alternative to them. alternative to them. alternative to them. And they are using Forjao to run this. And they are using Forjao to run this. And they are using Forjao to run this. So, I think this is very admirable and I So, I think this is very admirable and I So, I think this is very admirable and I I think they deserve all the support I think they deserve all the support I think they deserve all the support they they can get. So, I actually donate they they can get. So, I actually donate they they can get. So, I actually donate money to Forjao every single month money to Forjao every single month money to Forjao every single month because I think it's such a good because I think it's such a good because I think it's such a good project. It works really well and also project. It works really well and also project. It works really well and also because of their commitment to being because of their commitment to being because of their commitment to being guaranteed 100% free and open-source, I guaranteed 100% free and open-source, I guaranteed 100% free and open-source, I think they deserve all of the support think they deserve all of the support think they deserve all of the support they can get. they can get. they can get. And just to be clear, I am not And just to be clear, I am not And just to be clear, I am not affiliated with them, but I just want to affiliated with them, but I just want to affiliated with them, but I just want to use my audience and my reach to expose use my audience and my reach to expose use my audience and my reach to expose as many people as possible to this as many people as possible to this as many people as possible to this wonderful project because they deserve wonderful project because they deserve wonderful project because they deserve all of the support that they can get.

  10. all of the support that they can get. all of the support that they can get. And another interesting thing about And another interesting thing about And another interesting thing about Forjao and which also influenced my Forjao and which also influenced my Forjao and which also influenced my choice is because the enterprise and choice is because the enterprise and choice is because the enterprise and government world is also showing government world is also showing government world is also showing interest in this now. So, there is a interest in this now. So, there is a interest in this now. So, there is a discussion here on the official Forjao discussion here on the official Forjao discussion here on the official Forjao repo where someone working in the Dutch repo where someone working in the Dutch repo where someone working in the Dutch government actually expressed interest government actually expressed interest government actually expressed interest that the Dutch government is interested that the Dutch government is interested that the Dutch government is interested in using Forjao. So, I think if you are in using Forjao. So, I think if you are in using Forjao. So, I think if you are someone who is someone who is someone who is oriented towards open-source software oriented towards open-source software oriented towards open-source software also in your career, which I think is a also in your career, which I think is a also in your career, which I think is a very good thing to do, very good thing to do, very good thing to do, I think Forjao will be a good choice to I think Forjao will be a good choice to I think Forjao will be a good choice to learn. So, to get started with Forjao is learn. So, to get started with Forjao is learn. So, to get started with Forjao is actually super easy. If you just want to actually super easy. If you just want to actually super easy. If you just want to quickly try it out, you just go to the quickly try it out, you just go to the quickly try it out, you just go to the installation guide in the documentation installation guide in the documentation installation guide in the documentation and here they have some installation and here they have some installation and here they have some installation instructions to instructions to instructions to install it with Docker. install it with Docker. install it with Docker. And this is what I recommend you do just And this is what I recommend you do just And this is what I recommend you do just to get started with it and to try it to get started with it and to try it to get started with it and to try it out. And then when you have when you out. And then when you have when you out. And then when you have when you like the thing, then you can actually like the thing, then you can actually like the thing, then you can actually start start start moving it towards your server. So, on my moving it towards your server. So, on my moving it towards your server. So, on my machine here, I'm I'm running Podman.

  11. machine here, I'm I'm running Podman. machine here, I'm I'm running Podman. So, the command I'm going to run here is So, the command I'm going to run here is So, the command I'm going to run here is Podman run in detached mode, name Podman run in detached mode, name Podman run in detached mode, name Forjao, and then we're going to expose Forjao, and then we're going to expose Forjao, and then we're going to expose port 3000 and 2222 for the SSH port 3000 and 2222 for the SSH port 3000 and 2222 for the SSH connection. connection. connection. And we're going to give it a volume as And we're going to give it a volume as And we're going to give it a volume as well. So, if I run this, it's going to well. So, if I run this, it's going to well. So, if I run this, it's going to start the Forjio container. And if I start the Forjio container. And if I start the Forjio container. And if I then go to localhost then go to localhost then go to localhost 3000, 3000, 3000, I'm now connected to my fresh Forjio I'm now connected to my fresh Forjio I'm now connected to my fresh Forjio instance. instance. instance. So, uh you can just accept the default So, uh you can just accept the default So, uh you can just accept the default settings here settings here settings here and install Forjio. And you have to and install Forjio. And you have to and install Forjio. And you have to uncheck this box. uncheck this box. uncheck this box. And when you then install Forjio like And when you then install Forjio like And when you then install Forjio like this, it is now going to load up. And this, it is now going to load up. And this, it is now going to load up. And there we go. We can now log in. That's there we go. We can now log in. That's there we go. We can now log in. That's how easy it is to get started with how easy it is to get started with how easy it is to get started with Forjio. Now, when you've done this, you Forjio. Now, when you've done this, you Forjio. Now, when you've done this, you already have your self-hosted Git already have your self-hosted Git already have your self-hosted Git instance. Like you you literally don't instance. Like you you literally don't instance. Like you you literally don't need more to get started. But let's also need more to get started. But let's also need more to get started. But let's also look at the self-hosted actions look at the self-hosted actions look at the self-hosted actions component of this. So, I am now on the component of this. So, I am now on the component of this. So, I am now on the on the CLI. I have prepared a test blog on the CLI. I have prepared a test blog on the CLI. I have prepared a test blog post. So, if I now run my publish post. So, if I now run my publish post. So, if I now run my publish command, it is actually going to commit command, it is actually going to commit command, it is actually going to commit the changes to the repo. And then it's the changes to the repo. And then it's the changes to the repo. And then it's going to trigger the build and watch it going to trigger the build and watch it going to trigger the build and watch it run.

  12. run. run. So, if I go to my blog repo now, So, if I go to my blog repo now, So, if I go to my blog repo now, we'll see that there a Git commit has we'll see that there a Git commit has we'll see that there a Git commit has been has appeared now. been has appeared now. been has appeared now. And this also triggered an action, which And this also triggered an action, which And this also triggered an action, which is now running. So, as we speak, this is is now running. So, as we speak, this is is now running. So, as we speak, this is now running on my own Kubernetes cluster now running on my own Kubernetes cluster now running on my own Kubernetes cluster at home. It is going to check out the at home. It is going to check out the at home. It is going to check out the repo. repo. repo. And it's going to uh take check out the And it's going to uh take check out the And it's going to uh take check out the code, build that code into a container code, build that code into a container code, build that code into a container image, and then GitOps is going to pull image, and then GitOps is going to pull image, and then GitOps is going to pull in that change into my Kubernetes in that change into my Kubernetes in that change into my Kubernetes cluster. So, now we see it is now going cluster. So, now we see it is now going cluster. So, now we see it is now going to build the image. And after it is to build the image. And after it is to build the image. And after it is finished building this image, it's also finished building this image, it's also finished building this image, it's also going to push it to my own container going to push it to my own container going to push it to my own container registry, also provided by Forjio. So, registry, also provided by Forjio. So, registry, also provided by Forjio. So, the whole software pipeline from hosting the whole software pipeline from hosting the whole software pipeline from hosting the code to building the code, and I'm the code to building the code, and I'm the code to building the code, and I'm I'm not currently testing this code, but I'm not currently testing this code, but I'm not currently testing this code, but I could test it. I can do everything I could test it. I can do everything I could test it. I can do everything that I normally do in a CI/CD pipeline that I normally do in a CI/CD pipeline that I normally do in a CI/CD pipeline in these actions. And this action runner in these actions. And this action runner in these actions. And this action runner is running on my own Kubernetes cluster.

  13. is running on my own Kubernetes cluster. is running on my own Kubernetes cluster. So, if I go to my home lab now, So, if I go to my home lab now, So, if I go to my home lab now, and if I and if I and if I open up K9s, open up K9s, open up K9s, then if I search for for JO, then we'll then if I search for for JO, then we'll then if I search for for JO, then we'll see there is a for JO runner, which is see there is a for JO runner, which is see there is a for JO runner, which is now actually running this process as we now actually running this process as we now actually running this process as we speak, okay? This is now running on my speak, okay? This is now running on my speak, okay? This is now running on my uh on my home lab cluster. uh on my home lab cluster. uh on my home lab cluster. It is building the image, It is building the image, It is building the image, and now it has pushed the image. So, the and now it has pushed the image. So, the and now it has pushed the image. So, the changes are pulled to my cluster, and if changes are pulled to my cluster, and if changes are pulled to my cluster, and if I then refresh my blog here, we see that I then refresh my blog here, we see that I then refresh my blog here, we see that there is a test post here for my demo there is a test post here for my demo there is a test post here for my demo purposes. So, this was purposes. So, this was purposes. So, this was just added as a demo. I'm going to be just added as a demo. I'm going to be just added as a demo. I'm going to be deleting this after the after I finish deleting this after the after I finish deleting this after the after I finish recording this video. But here you see recording this video. But here you see recording this video. But here you see that I have committed code to a that I have committed code to a that I have committed code to a repository running on my own repository running on my own repository running on my own infrastructure, and then I'm building infrastructure, and then I'm building infrastructure, and then I'm building this code, and then I'm serving that this code, and then I'm serving that this code, and then I'm serving that container image all from my own container image all from my own container image all from my own Kubernetes home lab. And I'm doing this Kubernetes home lab. And I'm doing this Kubernetes home lab. And I'm doing this on my own complete sovereign on my own complete sovereign on my own complete sovereign infrastructure. So, for JO is a great infrastructure. So, for JO is a great infrastructure. So, for JO is a great project. I really recommend you look project. I really recommend you look project. I really recommend you look into it. It's really easy to get started into it. It's really easy to get started into it. It's really easy to get started with Docker, but if you are running a with Docker, but if you are running a with Docker, but if you are running a Kubernetes home lab, and you also want Kubernetes home lab, and you also want Kubernetes home lab, and you also want to run for JO on Kubernetes, then I have to run for JO on Kubernetes, then I have to run for JO on Kubernetes, then I have all of the source code available here. I all of the source code available here. I all of the source code available here. I have the manifest already written out, have the manifest already written out, have the manifest already written out, and I spent a lot of time on this and I spent a lot of time on this and I spent a lot of time on this because it's actually really tricky to because it's actually really tricky to because it's actually really tricky to get it running with a self-hosted runner get it running with a self-hosted runner get it running with a self-hosted runner on Kubernetes. And if you want to get on Kubernetes. And if you want to get on Kubernetes. And if you want to get all of these manifests so you can start all of these manifests so you can start all of these manifests so you can start running for JO on your Kubernetes running for JO on your Kubernetes running for JO on your Kubernetes cluster, you can check out the link cluster, you can check out the link cluster, you can check out the link below and get it all for free. Now, let below and get it all for free. Now, let below and get it all for free. Now, let me know in the comments if you're going

  14. me know in the comments if you're going me know in the comments if you're going to try out for JO. Let me know what you to try out for JO. Let me know what you to try out for JO. Let me know what you think. Make sure to subscribe, and I'll think. Make sure to subscribe, and I'll think. Make sure to subscribe, and I'll see you in the next video.

Summary

The main topic is self-hosting a blog and its associated code and CI/CD pipelines using a Kubernetes cluster and Forgejo, a self-hosted Git server. The discussion highlights Git as the underlying version control system, exemplified by the Linux source code hosted on GitHub. The practical takeaway is achieving self-sufficiency by running all necessary components, eliminating reliance on platforms like GitHub for blog hosting and development.

View original episode ↗