GOGS - the "Go Git Service" - is a simple Github clone written in go. I say simple because it just works.

What can Gogs do? Let me list the reasons that I love it:

  • Private repos
  • SMTP registration
  • Groups
  • Issues
  • Webhooks
  • SSH Keys
It has wiki support, but I don't need that. When doing freelance for clients, one of the last things they usually have is the workflow for getting IT work done. This usually includes an issue tracker, a chat room, and VCS. Gogs solves all these issues amazingly well, better than something like Redmine or MantisBT (except for chat).

Gogs as a multi-tennant project manager

Back in the day, I really liked Mantis BT. The problem is that it is (or wasn't) multi-tennant capable (maybe it is now). You couldn't support all of your clients on one installation. Mantis BT became a last resort if the client didn't have their own bug tracker. But, with Gogs, the setup is so simple that you can proactively recomment it as your normal means of client communication.

The organizations in Gogs provide a multi-tenant capability that is lacking in Mantis BT. With Gogs, there's no way to browse organizations and no way to browse private repos. So, as long as you don't make any repos public, your clients won't know who else is on there.

You can skip over client registration by adding in SMTP authentication methods. As long as the user types in their own email and password, Gogs will verify with the SMTP server. This makes registration easy for the clients, and you never have to reset somebody's password. Although, you do have to add them to an organization after they first login.

Gogs versus

When comparing Gogs to an Atlassian line-up of issues and wiki system, they're pretty much on par. I think Atlassian's automatic linking of issues and wiki pages might be a bit more sophisticated, but it's not a show-stopper.

Redmine is also a great choice for managing multiple projects, but the issue commenting interface is pretty clunky. I feel like the simplicity of Github-style issues works better in most situations. Throw in the ability to link issues to commits and the choice is clear for me.

Gogs as local backup

In addition to all that, I have setup Gogs on a RaspberryPi with external USB storage. I can push any one of my pet projects to this local Github clone at any time, so my project backups are more up-to-date than the regular whole-computer backups.

Gogs in Docker

Go ahead and try-out Gogs in a Docker container. Just remember to forward a regular web port and an SSH port for passwordless git pushes. Then you can use NGINX to proxy all requests (SSL and non-SSL) into the docker container like this.

    server { 
        listen       80;
        listen       [::]:80;

        listen       443 ssl;
        listen       [::]:443 ssl;

        location /  { 
           proxy_pass http://127.0.0.1:10080;
        }
    }