While Github and Bitbucket provide you with everything you want as a developer, it is not always good to trust third party infrastructure. Self-hosted solutions like GitLab allow you to run your own Github-clone on your own server.
GitLab however is quite difficult to set up and comes with a number of dependencies. It is a Ruby on Rails based application and uses Redis as a key-value store. It can definitely compete with the features that Github has to offer and allows you to host your repositories and collaborate with fellow developers. All in all it is a well written piece of software that is under active development and has definitely matured over the last few versions.
Recently I came across Gitbucket an easily installable Github-clone written in Scala. It definitely lacks some features that are already available in GitLab, but it is a working solution for hosting repositories, forking and sending pull requests, creating issues and creating a wiki. Users can be assigned to groups which work similar to Github Organizations.
The UI is Github-oriented and easy to use. Here and there are some CSS issues with missing margin, but that will probably be fixed in one of the next versions. Gitbucket currently has no support for SSH key-based authentication which means you can only push over http/https.
Testing Gitbucket is insanely easy since you just have to download a recent .war (Web Archive) from the release page and fire it up with Java:
java -jar gitbucket.war
Gitbucket ships with an integrated Jetty server and by default is accessible at localhost:8080. You can login with root/root but should change the password immediately if you decide to make it publicly accessible.
The .war can easily be deployed to any servlet container like Tomcat or Jetty and run on your server. Gitbucket automatically creates a gitbucket directory in your $HOME and stores all repositories and the H2 database it uses in that directory.
The easiness of Gitbucket's setup is definitely impressive and although the project lacks a number of features that Github and GitLab provide it is mature enough for every day usage.