# Criando seu proprio servidor de git
## Por que criar e manter um servidor de Git próprio?

Com o aumento de produtividade, tranquilidade e qualidade que o uso de repositórios remotos e sistemas de controle de versão podem trazer para equipes de desenvolvimento de software [1][2][3] é natural que grandes corporações demonstrem interesse em adequar seus fluxos de trabalho para o uso dessas tecnologias, muitas vezes por demanda dos próprios membros das equipes de tecnologia [4]. Um grande problema para essas grandes empresas envolve toda a burocracia que grandes empresas demandam de forma a garantir a segurança, autonomia e privacidade de seus serviços e produtos, por esse motivo muitas optam por não hospedar seus softwares em infraestruturas externas as quais não seja possível obter controle total do que acontece com seus artefatos ou com a ferramenta em uso, como o GitHub.
Governo, por exemplo, por políticas de segurança muitas vezes precisa concentrar muitos aspectos de seus negócios em redes internas e não podem correr o risco de que terceiros possam obter detalhes sobre o que, ou como, está sendo construído dentro da organização. Uma grande instituição também não pode correr de não ter acesso aos seus softwares porque determinado serviço foi desligado, está fora do ar ou por falta de conexão, é muito importante que tudo esteja protegido e acessível pela rede interna. Garantir que não vão haver problemas com atualizações e integrações outros serviços também é muito importante. Por conta dos requisitos de confiabilidade e suporte geralmente preferem contratações ao invés da implantação de alguma solução livre e gratuita.
Os mecanismos de contratação geralmente também são burocráticos, no caso do Governo são exigidos projetos, justificativas, termos de referência, pesquisas de mercado, licitações, etc e a necessidade de um amplo suporte. Alguns órgãos optam por utilizar o Bitbucket pela facilidade de contratação em um pacote de serviços da Atlassian (Jira). Grandes empresas não são tão burocráticas, mas também precisam seguir uma série de ritos processuais entre departamentos.

## Pontos positivos

* Controle sobre o serviço
* Privacidade
* Flexibilidade (integrações customizadas)
* Independência (conexão, uptime, etc)
* Velocidade
* Suporte (se houver contratação)

## Pontos negativos

* Segurança
* Manutenção (se não houver contratação)
* Custo

## Opções disponíveis
### Git

Com a simples instalação do Git em uma máquina qualquer disponível na rede interna é possível criar um repositório remoto apto a gerenciar o código criado pela equipe. É a solução mais fácil e barata, mas também a que oferece menos recursos. Por padrão o Git oferece um paínel web como comando 'git instaweb'. Para clonar um repositório qualquer na rede basta dar um git clone com o endereço do arquivo .git do repositório, como por exemplo: 'git clone git@gitserver:/opt/git/project.git'. Não é oferecido qualquer tipo de suporte.

### GitHub Enterprise

Exatamente como o GitHub.com, o GitHub Enterprise oferece todos os recursos que fizeram com que o GitHub se tornasse uma das opções mais populares do mercado mas rodando dentro da sua organização e nos seus próprios servidores, é possível hospeda-lo em servidores próprios ou na nuvem. Oferecem pacotes para que seja instalado automaticamente na Amazon AWS ou Microsoft Azure, também permitem que sejam feitas customizações para que o GitHub se adapte as necessidades da organização, como backups automatizados e scripts de monitoramento e controle. Os custos variam de acordo com a quantidade de usuários, mas começam em US$2500/ano para 10 usuários, com direito a suporte 24hrs. Para times maiores pedem que entrem em contato para uma negociação.

### Bitbucket

Solução de Git da Atlassian, mesma empresa que desenvolveu o Jira. Possui uma ótima integração com o software para acompanhamento de projetos e um bom suporte. Desde o início foi construído com foco no público corporativo e oferecem um bom suporte para esse mercado. É capaz de gerenciar repositórios SVN, SourceTree e Git e pode ser instalado em servidores com Windows, Linux ou Mac. Se destacam por trabalharem com um modelo de pagamento único e pela possibilidade de adquirir um pacote de serviços da mesma empresa que podem trazer uma boa integração, produtividade e rastreabilidade para a organização. Os valores iniciam com US$10 para 10 usuários e US$1800 para 25. Esses valores podem chegar até U$48.000 para 2000 usuários.

### GitLab

Muito similar ao que é oferecido pelo GitHub, mas com toda a administração por conta do software criado pelo GitLab. Os recursos são bem similares e os preços muito mais atrativos, começam em US$39 por usuários/ano. Por se tratar de um software open-source também disponibilizam uma versão "Community Edition" que pode ser instalada em qualquer computador Linux(Debian, Ubuntu, CentOS e Raspbian) gratuitamente, mas sem direito a suporte e uma série de recursos exclusivos da "Enterprise Edition". A empresa alega que a versão gratuita é capaz de gerenciar 25 mil usuários e o DigitalOcean oferece Droplets já configurados para ele.

### Gogs

Versão totalmente gratuita e open-source feita em Go. É capaz de rodar em qualquer sistema operacional (Windows, Linux e Mac) e muitos usuários alegam que, além de ser muito fácil de se instalar, roda muito bem no Raspbian/Raspberry Pi.

### Phabricator

Phabricator é uma opção conhecida free e open-source desenvolvida em PHP, além de oferecer o serviço de self-hosted git também oferece um conjunto de ferramentas para controle de tarefas, sprints e revisão de código. Deve ser instalado em máquinas linux também funciona em qualquer sistema Unix-based, também exige a instalação e configuração do Apache e MySQL.

### Gitblit

Com foco em pequenos grupo é Gitblit é totalmente grátis e open-source, desenvolvido em Java. Uma boa opção para quem deseja ter este tipo de serviço de forma rápida e simples. É uma opção versátil, funciona nos principais sistemas operacionais além de poder utilizar o webserver que desejar.

## Como instalar

* Como criar um servidor Git "puro"
* Repositório do Gogs
* Tutorial para instalação do Gogs
* Repositório do GitLab
* Tutorial para instalação do GitLab
* GitLab no Raspberry Pi
* Repositório do Phabricator
* Tutorial para instalação do Phabricator
* Repositório do Gitblit