title: "Choosing a Source Control System and Host"
date: 2019-12-25T19:12:50-06:00
draft: true
draft: false
tags:
- "guide"
- "source control"
categories:
- "guide"
---
Over the last 10 years I've used a handful of source control systems, however the world seems to mostly have converged on git as the soruce control system of choice for open source projects. It's also the source control system that I'm most familiar with, so it's the system I'll focus on.
Over the last 10 years I've used a handful of source control systems, however the world seems to mostly have converged on git as the source control system of choice for open source projects. It's also the source control system that I'm most familiar with, so it's the system I'll focus on.
With that decided, let's focus on the options for self hosting a git repository. Gitlab CE is what I run on the local homelab, however it's a little heavy for what I want to run outside the home. So, that leaves Gogs, Gitea, Phabicator, cgit, or gitbucket. There are other alternatives out there, but these are the ones I evaluated.
With that decided, let's focus on the options for self hosting a git repository. Gitlab CE is what I run on the local home-lab, however it's a little heavy for what I want to run outside the home. So, that leaves Gogs, Gitea, Phabicator, cgit, or gitbucket. There are other alternatives out there, but these are the ones I evaluated.
* Gogs - Is a GitHub clone that is written in Go and seems to be focused on being lightweight and functional.
* Gitea - Is a fork of Gogs, and seems to recieve more regular updates and features over Gogs.
* Phabricator - Is a suite of tools, one of which is a git repostory management and public exposure. I'm not sure I want to use all the baked in tools of the suite, it does look like a nice set of tools.
* cgit - Is a pretty basic git web frontend, though I don't think it exposes some of the functionality I'm looking for. Namely collaboration features for the projects where I'm working with someone else on.
* gitbucket - Is a bitbucket clone that is written in Scala and while not as lightweight as Gogs, it does seem to compete on the features that I'm looking for.
* GitBucket - Is a Bitbucket clone that is written in Scala and while not as lightweight as Gogs, it does seem to compete on the features that I'm looking for.
Of the systems I looked at above, I decided on giving Gitea a try. Hosting it is fairly straigtforward as the application is a single binary. With that said I run as many of my services in containers as I can. Running Gitea is a docker container is fairly straightforward.
Of the systems I looked at above, I decided on giving Gitea a try. Hosting it is fairly straightforward as the application is a single binary. With that said I run as many of my services in containers as I can. Running Gitea is a docker container is fairly straightforward.
The docker-compose.yml for the service looks like this.
@ -76,7 +76,7 @@ services:
- gitea
```
There's an accompanying .env file for the variables above. Running the service is as simple as ```docker-compose down && docker-compose up -d```
There's an accompanying .env file for the variables above. Running the service is as simple as ```docker-compose pull && docker-compose down && docker-compose up -d```
The only thing remaining is to expose the service to the world through a reverse proxy. I personally use nginx for most of my simple reverse proxying needs. Thaat config looks a little like this.
@ -145,6 +145,8 @@ server {
}
```
With this we expose the http endpoint for an ACME cetificate provider, and redirect all other http traffic to the https endpoint. Nginx terminates the SSL connection and passes the traffic to the local backend. This is the general setup for most of my simple https termination and reverse proxying.
With this we expose the http endpoint for an ACME certificate provider, and redirect all other http traffic to the https endpoint. Nginx terminates the SSL connection and passes the traffic to the local backend. This is the general setup for most of my simple https termination and reverse proxying.
With these two configurations in place, Gitea can be brought up and the service can be accessed publically on the server.
With these two configurations in place, Gitea can be brought up and the service can be accessed publicly on the server.
![Gitea Main Page](/static/img/posts/2019-12-25-choosing-a-source-control/gitea_main_page.jpg)