TRANSCRIPTEnglish

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

17m 9s2,914 words399 segmentsEnglish

FULL TRANSCRIPT

0:00

When you visit my blog on the internet,

0:02

you're actually connecting to a

0:03

container that's running on the

0:05

Kubernetes cluster that I run at home in

0:07

my home lab. Now, what if I told you

0:09

that it's not just the container that's

0:11

running there, it's also all of the

0:13

source code, all of the CI/CD pipelines,

0:16

and everything that's needed to run this

0:18

blog is also being run on that same

0:21

Kubernetes cluster. And in this video,

0:23

I'm going to show you why I don't need

0:25

GitHub anymore in order to build and

0:28

host my blog all on my own home lab. So,

0:31

let's jump in. So, the tool I'm using

0:33

for this is called ForJo, which is a

0:35

self-hosted Git server. Now, if you're

0:38

watching this video, it's likely that

0:39

you're aware of Git and GitHub, but I

0:42

just want to make sure everyone is on

0:43

the same page. So, I'll just briefly

0:45

explain what this is all about. Now many

0:47

people don't know this but GitHub is not

0:50

the same as Git. Git is the actual

0:54

version control system which is created

0:57

by Linus Torvaltz the creator of Linux

0:59

and Git is used to manage the versioning

1:02

of files. So if you have people working

1:06

on the same files you need a way of

1:08

tracking what things have changed in

1:11

those files. Especially if you're

1:13

working on the same file with whole

1:17

teams of people, it becomes very

1:19

important that you have a good system in

1:21

place for this to make sure that all of

1:23

these changes can actually be

1:24

implemented. Right? So one of the best

1:27

examples for this is actually the Linux

1:29

source code which is on GitHub. Now a

1:32

project where you use git is usually

1:34

contained in one directory and this is

1:37

called a repository. So a git repository

1:40

is a collection of files that uses git

1:44

for version control. Now you need to

1:47

place this repository somewhere right

1:50

and in this case or many cases it is

1:53

GitHub. GitHub is basically a place to

1:57

put your Git repositories and that is

1:59

basically all that is what it does. Now

2:02

for example the Linux source code is

2:05

hosted on GitHub. You can go in and read

2:07

the code here and you can also look at

2:11

the commits. So a commit to a git repo

2:14

is when someone makes a change and then

2:18

um for example here are the changes in

2:20

the code which are being managed by git

2:23

in the version control. So here you have

2:26

a record of everything that has been

2:28

changed by whom and you can always go

2:31

back to a previous commit for example so

2:34

that you can you can you can you know

2:36

revert your changes or you can actually

2:39

know exactly what was changed and when.

2:42

So you can see in real time what is

2:44

being changed in the Linux kernel. Now

2:45

for example GitHub is then a Microsoft

2:48

owned company that provides a service

2:51

where you can put these git

2:52

repositories. Now what forjo does is it

2:56

provides you with your own GitHub. Okay,

2:59

it provides you with a place where you

3:01

can host your own self-hosted git

3:04

repositories. And that is what I did. So

3:08

for example, my blog, all of this source

3:10

code lives in a repository on my own

3:14

self-hosted git instance. So whenever I

3:17

publish a blog now, the code is actually

3:20

being committed to my own repository and

3:23

not to GitHub anymore. So why would you

3:25

even bother with this? Why does anyone

3:28

need to have their own self-hosted Git

3:30

instance? But before we continue, about

3:32

73% of my viewers aren't subscribed. So

3:35

please subscribe. It helps me put out

3:37

more honest content like this every

3:39

single week, and it's a completely free

3:41

way to support my channel. So, everybody

3:43

knows that AI models are really good at

3:46

writing code, right? That's one of the

3:48

things that they're best at. Now, where

3:50

do you think all of this code came from?

3:53

All of this code was gathered from

3:54

places like Stack Overflow, but also

3:58

GitHub. So, Microsoft, who owns GitHub,

4:01

scans all of the code that is being

4:03

published on GitHub, and then they're

4:06

taking that to train the models, etc.

4:09

And I don't think there's necessarily

4:10

anything wrong with that. However, if

4:13

there are things that I am developing

4:16

myself that I don't necessarily want to

4:19

share with others, I want to keep that

4:22

in my own git repositories. Right? So if

4:25

you're using this service, you're

4:27

basically agreeing that they can use

4:29

that data. and I I have certain

4:32

projects, private projects, for example,

4:35

my own note-taking system that I don't

4:38

want Microsoft to have and I don't want

4:40

them to scan that. So, this is the

4:42

reason why I deployed my own self-hosted

4:45

git instance. Now, let's take a look at

4:47

my git instance. So, this for example is

4:49

my blog repo. So, you can see it has a

4:51

very nice UI where I can just check out

4:54

all of the changes I made. It has these

4:56

um commit changes for example. So, if I

5:00

check the overview over here, you will

5:02

see all of the changes I've made here.

5:04

For example, I changed a an image that I

5:08

um that that went wrong. So, I had to to

5:12

change the code for this image. It has a

5:14

very nice UI for this. So, and it also

5:18

supports pull requests. So, there's the

5:20

full normal pull request workflow that

5:23

you might be used to when using GitHub.

5:26

it it really feels almost the same as

5:28

running GitHub. The second thing is that

5:30

for Jio also provides you with your own

5:33

self-hosted actions runner. In other

5:36

words, your self-hosted CI/CD pipeline.

5:39

So when I commit some code to my blog

5:43

here, then a set of automations are

5:46

going to take place and I'm going to

5:48

demonstrate this in a second. But these

5:50

are then going to take my code, build it

5:52

into a container image and deploy it to

5:55

my Kubernetes cluster. And all of this

5:57

is running on my own infrastructure. So

6:00

if you have an open-source project or

6:02

GitHub, it is for free. You can you can

6:05

store it for free and you can use GitHub

6:07

actions for free. However, if you have

6:10

your private repos, first of all, your

6:12

code is going to be scanned, but also

6:14

it's a bit limited what you can do with

6:17

the free GitHub actions. Okay. So I am I

6:20

have completely unlimited um CI/CD

6:24

pipelines now because I'm running them

6:26

on my own infrastructure. Now one

6:28

interesting thing is that you are

6:30

actually able to self-host your GitHub

6:33

actions on your own infrastructure. So

6:35

you can use GitHub and use those runners

6:38

on your own infrastructure. But

6:40

recently, Microsoft made a big mistake

6:43

where they announced that they were

6:45

going to charge you for the self-hosted

6:48

GitHub runners as well. They published

6:50

this on the 15th of December. They

6:52

announced the pricing changes for GitHub

6:54

actions. And uh that what this led to a

7:00

huge backlash on social media and X was

7:03

completely on fire about this. So they

7:06

wanted to charge you for running stuff

7:08

on your own infrastructure and that did

7:10

not sit well with the community and as

7:13

you see in the in the announcement now

7:15

here they're saying TLDDR we're

7:18

postponing the announced billing change

7:20

uh to take time to reevaluate the

7:22

approach. So they actually came back and

7:26

reverse that price change. So they they

7:30

lost some phase there. Um so even though

7:33

um you can still do it for free, there

7:36

are changes coming. So this is also

7:38

another catalyst. I actually had already

7:40

deployed for JO at that point but um

7:43

this was actually a catalyst for me

7:45

knowing that okay I I did the right

7:48

thing here by going the self-hosted way

7:50

and hosting my own git server. Now

7:53

another really cool feature of 4Jo is

7:55

that you can mirror git repos to your

7:57

own infrastructure. So for example there

7:59

is this UB key guide that is a public

8:02

git repo on GitHub but you can set this

8:06

up as a mirror. So every day my forjio

8:10

instance is going to check a se certain

8:13

amount of repos that I configured and

8:15

it's going to mirror those repos to my

8:17

own infrastructure. So if the owner of

8:20

this repository in in this case the the

8:23

UB key guide if the owner for some

8:26

reason decides to take that repository

8:28

down I will always have my own copy of

8:32

that repo on my own infrastructure. So I

8:36

don't know if you've experienced this

8:37

but there have been several projects

8:39

that I really liked that were taken

8:41

offline. So sometimes companies sue open

8:44

source projects and force them to take

8:46

the code down. Well, in the case that

8:48

happens, I will always have my own copy,

8:51

including all of the commit history. And

8:53

note, this includes the full commit

8:54

history. Okay? So, I have the full

8:56

history of the repository available to

8:59

me on my own self-hosted infrastructure.

9:02

So, I always have a copy of the source

9:04

code on my own infrastructure and I can

9:06

keep developing on it if I want to. Now,

9:08

when I decided to self-host my own git

9:11

server, there were a few alternatives

9:13

that I considered. One of them is

9:15

GitLab. that is actually the most

9:17

obvious one. This is a alternative to

9:20

GitHub which is used a lot in enterprise

9:23

as well and I I kind of lean towards

9:26

this one because it would also give me

9:29

um experience with GitLab and in fact I

9:32

worked with GitLab in my first DevOps

9:34

job. We were running our own self-hosted

9:37

GitLab instances. So in that sense it

9:39

made sense for me to continue with that.

9:42

But GitLab is quite advanced to host. It

9:46

involves a lot of things especially if

9:48

you're hosting it on Kubernetes and

9:50

frankly for my own use case I was a

9:55

little bit too much. It was a very much

9:56

overkill. And then the second one that

9:59

that I considered was Gy. Now, gy

10:02

there's I don't think there's anything

10:04

wrong with it. But Gy used to be an

10:06

open-source free project which was then

10:10

acquired by a company which now has

10:13

offered a SAS version of this as well.

10:16

So you can still run it for free. It's

10:18

still open source. So there's nothing

10:21

wrong with that in that sense. But there

10:23

was a huge row about this when the the

10:26

the project was acquired and actually it

10:30

was forked by a group of people who then

10:33

started forj and the reason why I then

10:37

chose for Jio is because they actually

10:40

say it's a guaranteed 100% free software

10:43

forever. So when Gy was acquired, it was

10:47

forked and a group of people went with

10:49

it and basically created an open-source

10:52

project which is completely guaranteed

10:55

100% free and open source forever and

10:59

this resonated with me and I decided I

11:02

wanted to support this project as well.

11:04

And what's really cool about this is if

11:06

you if you're aware of codeberg, which

11:09

is basically a free and open- source

11:11

alternative to GitHub, well, Codeberg is

11:14

actually being run on forj. So they're

11:18

using 4Jo to provide this Git instance.

11:21

And I thought this was really cool. So

11:23

Codeberg is basically a big middle

11:25

finger to GitHub and the big

11:27

corporations because they provide a

11:29

nonprofit community-led open-source

11:32

alternative to them and they are using

11:35

forjo to run this. So I think this is

11:38

very admirable and I I think they

11:41

deserve all the support they they can

11:43

get. So I actually donate money to 4JO

11:47

every single month because I think it's

11:48

such a good project. It works really

11:51

well. And also because of their

11:53

commitment to being guaranteed 100% free

11:56

and open source, I think they deserve

11:58

all of the support they can get. And

12:00

just to be clear, I am not affiliated

12:02

with them, but I just want to use my

12:06

audience and my reach to expose as many

12:09

people as possible to this wonderful

12:11

project because they deserve all of the

12:13

support that they can get. And another

12:15

interesting thing about forj and which

12:17

also influenced my choice is because the

12:20

enterprise and government world is also

12:23

showing interest in this now. So there

12:25

is a discussion here on the official

12:27

forj repo where someone working in a

12:30

Dutch government actually expressed

12:32

interest that the Dutch government is

12:35

interested in using forjo. So I think if

12:38

you are uh someone who is oriented

12:41

towards open-source software also in

12:43

your career which I think is a very good

12:46

thing to do um I think forjjo will be a

12:49

good choice to learn. So to get started

12:51

with forj is actually super easy if you

12:54

just want to quickly try it out. You

12:55

just go to the installation guide in the

12:57

documentation and here they have some

13:00

installation instructions to um install

13:02

it with docker. And this is what I

13:05

recommend you do just to get started

13:07

with it and to try it out and then when

13:10

you have when you like the thing then

13:12

you can actually start moving it towards

13:15

your server. So on my machine here I'm

13:17

I'm running podman. So the command I'm

13:20

going to run here is podman run in

13:22

detached mode name for j and then we're

13:24

going to expose port 3000 and 2222 for

13:29

the ssh connection and we're going to

13:31

give it a volume as well. So if I run

13:33

this, it's going to start the 4Jo

13:35

container. And if I then go to localhost

13:39

3000,

13:41

I'm now connected to my fresh forj

13:44

instance.

13:46

So you can just accept the default

13:49

settings here and install forj. And you

13:52

have to uncheck this box. And when you

13:54

then install forj like this, it is now

13:57

going to load up. And there we go. We

13:59

can now log in. And that's how easy it

14:01

is to get started with for JO. Now, when

14:04

you've done this, you already have your

14:05

self-hosted git instance. Like you you

14:07

literally don't need more to get

14:09

started. But let's also look at the

14:11

self-hosted actions component of this.

14:14

So I am now on the on the CLI, I have

14:16

prepared a test blog post. So if I now

14:19

run my publish command, it is actually

14:21

going to commit the changes to the repo

14:24

and then it's going to trigger the build

14:26

and watch it run. So if I go to my blog

14:30

repo now, we'll see that the a git

14:33

commit has been has appeared now and

14:35

this also triggered an action which is

14:38

now running. So as we speak, this is now

14:40

running on my own kubernetes cluster at

14:43

home. it is going to check out the repo

14:47

and it's going to take check out the

14:50

code build that code into a container

14:52

image and then git ops is going to pull

14:55

in that change into my kubernetes

14:58

cluster. So now we see it is now going

15:00

to build the image and after it is

15:02

finished building this image it's also

15:04

going to push it to my own container

15:07

registry also provided by 4j. So the

15:11

whole software pipeline from hosting the

15:13

code to building the code and I'm I'm

15:16

not currently testing this code but I

15:18

could test it. I can do everything that

15:21

I normally do in a CI/CD pipeline in

15:24

these actions and this action runner is

15:27

running on my own Kubernetes cluster. So

15:31

if I go to my home lab now and if I

15:36

open up K9s

15:39

then if I search for for 4Jo then we'll

15:42

see there is a 4J runner which is now

15:45

actually running this process as we

15:48

speak. Okay, this is now running on my

15:50

uh on my home lab cluster.

15:53

It is building the image and now it has

15:56

pushed the image. So the changes are

15:58

pulled to my cluster and if I then

16:00

refresh my blog here, we see that there

16:02

is a test post here for my demo

16:05

purposes. So this was just added as a

16:08

demo. I'm going to be deleting this

16:09

after the after I finish recording this

16:12

video. But here you see that I have

16:14

committed code to a repository running

16:17

on my own infrastructure and then I'm

16:19

building this code and then I'm serving

16:21

that container image all from my own

16:23

Kubernetes home lab. And I'm doing this

16:25

on my own complete sovereign

16:27

infrastructure. So for JJO is a great

16:29

project. I really recommend you look

16:31

into it. It's really easy to get started

16:32

with Docker. But if you are running a

16:34

Kubernetes home lab and you also want to

16:36

run forj on Kubernetes, then I have all

16:40

of the source code available here. I

16:42

have the manifest already written out.

16:44

And I spent a lot of time on this

16:46

because it's actually really tricky to

16:48

get it running with a self-hosted runner

16:51

on Kubernetes. And if you want to get

16:53

all of these manifests so you can start

16:54

running forj on your Kubernetes cluster,

16:57

you can check out the link below and get

16:59

it all for free. Now, let me know in the

17:00

comments if you're going to try out

17:02

forjo. Let me know what you think. Make

17:04

sure to subscribe and I'll see you in

17:06

the next

UNLOCK MORE

Sign up free to access premium features

INTERACTIVE VIEWER

Watch the video with synced subtitles, adjustable overlay, and full playback control.

SIGN UP FREE TO UNLOCK

AI SUMMARY

Get an instant AI-generated summary of the video content, key points, and takeaways.

SIGN UP FREE TO UNLOCK

TRANSLATE

Translate the transcript to 100+ languages with one click. Download in any format.

SIGN UP FREE TO UNLOCK

MIND MAP

Visualize the transcript as an interactive mind map. Understand structure at a glance.

SIGN UP FREE TO UNLOCK

CHAT WITH TRANSCRIPT

Ask questions about the video content. Get answers powered by AI directly from the transcript.

SIGN UP FREE TO UNLOCK

GET MORE FROM YOUR TRANSCRIPTS

Sign up for free and unlock interactive viewer, AI summaries, translations, mind maps, and more. No credit card required.