Once upon a time, a long time ago, I was a happy github user. However these were the days before github pages, travis-ci, and readthedocs (or, if they existed, I didn't know about them). I needed to have some other service to host my blog, do my continuous integration testing, and host my software's built documentation. After looking around for options I decided that I was just going to host them myself using wordpress, jenkins, and some home-grown post-commit hooks to build and move the documentation to my web server.
Since I was going to be hosting some of my own applications anyway, I started wondering if I should replace github with my own git repository mirror and issue tracker. I don't remember all my thoughts that went into that decision, but I do remember holding many of the opinions expressed here. Particularly I remember being disatisifed with github's pull requests being incompatible with git's pull requests (an opinion shared by others, including Linus Torvalds). I also remember seeing a few features in redmine that were not available in github's issue tracker, but I don't remember now what those features were.
I also suffer from the affliction of being fiercly independent. Why let someone else host my stuff when I am perfectly capable of doing it on my own?
So, I decided to move to an entirely self-hosted solution. Well, not "entirely". I had it all set up on a linode, not my own hardware, but apart from that I did it all myself. I hosted the git repositories using gitolite and provided a browser view to them using cgit. I set up a redmine issue tracker and had a jenkins continuous integration server, that were both tightly coupled to the git repositories containing the code they were interested in. I had my own wordpress instance to host my blog (which I eventually ditched for pelican). I even eventually had my own instance of readthedocs to automatically build the documentation. And all of this was hosted using nginx and uwsgi.
It was a pretty sweet setup. It took several months to get setup, but by the end it was awesome. But it was also fragile.
I initially tried to set it up on centos and debian, but I couldn't get redmine to work in uwsgi on either of those. I finally tried again using archlinux and was able to get it working. This worked great for a while, but the redmine/uwsgi setup would break about once a month after updating the box, even when updating packages that didn't seem like they'd matter to the setup.
I had just finished fixing the redmine/uwsgi setup again after an update from archlinux when I realized something. I had just spent all of my free time for the day fixing my software infrastructure instead of doing what I really wanted to do, which was work on one of my software applications. I pondered the situation over the next few days, and eventually decided to abandon my setup and move to a less self-hosted plan. I do not regret my earlier decision to go self-hosted because I learned a lot about various technologies and about myself, but I am definitely ready for something else.
Here are some of the things I learned, in no particular order. Maybe they will help other people make their own decision, but at least they will remind me of how I felt when I get the itch to do it myself in a few months or years.
- I would much rather spend my time developing my software applications than maintaining my software infrastructure. I had come to this conclusion before when it came to Linux distributions and window managers vs. desktop environments, but it applies to this as well.
- I hate deploying ruby/rails apps. The php and C applications I deployed were all very simple to setup, but the ruby/rails applications were much harder to do and much more fragile. The python applications I tried were also a challenge, but they didn't seem near as bad as the ruby ones. Maybe I just need more experience, but my current thinking is I will never host my own ruby application ever again.
So, here I am, moving back to github. I'll do everything I can on github, like issue tracking and git hosting, and I'll use readthedocs to host my documentation and travis-ci to host my continuous integration testing. I've even moved my blog to using github pages. Hopefully this will be a good solution for me. At a minimum it will leave me more time to actually work in my applications.