11 min de leitura · Guia técnico
Configurar servidor Git no Ubuntu 22.04 é o processo de instalar e configurar um repositório Git centralizado para controle de versão em equipe. Para configurar um servidor Git funcional, siga estes passos:
- Instalar Git e criar usuário dedicado
- Configurar autenticação SSH
- Criar repositório bare no servidor
- Definir permissões e grupos de acesso
- Testar conexão e primeiro push
- Configurar hooks para automação
Pré-requisitos
- Servidor Ubuntu 22.04 LTS com acesso root ou sudo
- Conexão SSH ativa e estável
- Pelo menos 2GB de espaço livre em disco
- Conhecimento básico de comandos Linux
- Chaves SSH geradas nos computadores dos desenvolvedores
Instalação e configuração inicial do Git
O primeiro passo para configurar servidor Git é instalar o pacote Git e criar um usuário dedicado para gerenciar os repositórios. Este usuário isolado aumenta a segurança e facilita o gerenciamento de permissões.
Atualize o sistema e instale o Git:
sudo apt update
sudo apt install git -y
Verifique a instalação:
git --version
Output esperado:
git version 2.34.1
Crie um usuário dedicado para o Git:
sudo adduser git
Durante a criação, defina uma senha temporária e preencha as informações solicitadas. Em seguida, crie o diretório para os repositórios:
sudo mkdir -p /opt/git
sudo chown git:git /opt/git
sudo chmod 755 /opt/git
Configuração de autenticação SSH para acesso seguro
A autenticação SSH é fundamental para permitir que desenvolvedores acessem o servidor Git de forma segura. Configure as chaves públicas dos usuários autorizados no diretório SSH do usuário git.
Mude para o usuário git e configure o diretório SSH:
sudo su - git
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Adicione as chaves públicas dos desenvolvedores ao arquivo authorized_keys. Cada desenvolvedor deve enviar sua chave pública (conteúdo do arquivo ~/.ssh/id_rsa.pub):
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... usuario@hostname" >> ~/.ssh/authorized_keys
Atenção: Substitua o conteúdo do exemplo pela chave pública real do desenvolvedor. Cada chave deve ocupar uma linha completa no arquivo.
Para maior segurança, configure o shell do usuário git para aceitar apenas comandos Git:
sudo chsh git -s $(which git-shell)
Criação de repositório bare no servidor
Repositórios bare são essenciais em servidores Git pois não possuem working directory, permitindo que múltiplos desenvolvedores façam push sem conflitos. Crie seu primeiro repositório bare seguindo esta estrutura.
Como usuário git, navegue até o diretório de repositórios:
cd /opt/git
Crie um novo repositório bare:
git init --bare projeto.git
Output esperado:
Initialized empty Git repository in /opt/git/projeto.git/
Verifique a estrutura criada:
ls -la projeto.git/
O repositório bare contém apenas os arquivos internos do Git (hooks/, objects/, refs/, etc.) sem arquivos de trabalho. Configure as permissões adequadas:
chmod -R 755 projeto.git/
chown -R git:git projeto.git/
Para projetos existentes, você pode clonar um repositório remoto como bare:
git clone --bare https://github.com/usuario/projeto.git
Configuração de grupos e permissões de acesso
O gerenciamento adequado de permissões garante que apenas usuários autorizados possam acessar repositórios específicos. Configure grupos Unix para organizar o acesso por projeto ou equipe.
Saia do usuário git e retorne ao root para configurar grupos:
exit
sudo groupadd git-devs
sudo groupadd git-admins
Adicione o usuário git aos grupos criados:
sudo usermod -aG git-devs git
sudo usermod -aG git-admins git
Configure permissões específicas por repositório:
sudo chgrp -R git-devs /opt/git/projeto.git
sudo chmod -R g+rw /opt/git/projeto.git
sudo find /opt/git/projeto.git -type d -exec chmod g+s {} \;
O comando find com chmod g+s garante que novos arquivos herdem o grupo do diretório pai. Para repositórios privados, remova permissões de outros usuários:
sudo chmod -R o-rwx /opt/git/projeto.git
Teste de conexão e primeiro push
Teste a configuração do servidor Git realizando uma conexão SSH e executando o primeiro push. Este processo valida toda a configuração anterior e confirma que o servidor está operacional.
Em uma máquina cliente, teste a conexão SSH:
ssh [email protected]
Se configurado corretamente com git-shell, você verá:
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands directory does not exist.
hint: Try creating it with "mkdir ~/git-shell-commands".
Connection to seu-servidor.com closed.
Esta mensagem indica que a conexão SSH funciona, mas o shell interativo está desabilitado por segurança. Clone o repositório para teste:
git clone [email protected]:/opt/git/projeto.git
cd projeto
Crie um arquivo de teste e faça o primeiro commit:
echo "# Projeto Teste" > README.md
git add README.md
git commit -m "Primeiro commit"
git push origin main
Output esperado do push:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 245 bytes | 245.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To seu-servidor.com:/opt/git/projeto.git
* [new branch] main -> main
Configuração de hooks para automação
Os hooks do Git permitem automatizar tarefas como notificações, validações e deploys. Configure hooks essenciais para melhorar o fluxo de trabalho da equipe e manter a qualidade do código.
Navegue até o diretório de hooks do repositório:
cd /opt/git/projeto.git/hooks
Crie um hook post-receive para notificações por email:
sudo nano post-receive
Adicione o seguinte conteúdo:
#!/bin/bash
while read oldrev newrev refname; do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
echo "Novo push no branch $branch do repositório projeto.git" | mail -s "Git Push Notification" [email protected]
done
Torne o hook executável:
sudo chmod +x post-receive
Para validação de commits, crie um hook pre-receive:
sudo nano pre-receive
Exemplo de validação que rejeita commits com mensagens muito curtas:
#!/bin/bash
while read oldrev newrev refname; do
if [ "$oldrev" = "0000000000000000000000000000000000000000" ]; then
# Novo branch, pular validação
continue
fi
for commit in $(git rev-list $oldrev..$newrev); do
message=$(git log --format=%s -n 1 $commit)
if [ ${#message} -lt 10 ]; then
echo "Erro: Mensagem de commit muito curta: '$message'"
echo "Mensagens devem ter pelo menos 10 caracteres"
exit 1
fi
done
done
Configure permissões e ownership dos hooks:
sudo chmod +x pre-receive
sudo chown git:git post-receive pre-receive
Problemas comuns e como resolver
Erro de permissão negada ao fazer push
Causa: Permissões incorretas no repositório ou chave SSH não configurada adequadamente.
Solução: Verifique se a chave pública está em ~/.ssh/authorized_keys do usuário git e confirme as permissões com chmod 600 authorized_keys. Verifique também se o repositório tem permissões corretas com chown -R git:git /opt/git/projeto.git.
Repositório não encontrado durante clone
Causa: Caminho incorreto do repositório ou repositório não inicializado como bare.
Solução: Confirme que o repositório existe em /opt/git/ e foi criado com git init --bare. Use o caminho completo no comando clone: git clone git@servidor:/opt/git/projeto.git. Verifique se o usuário git tem acesso ao diretório.
Hooks não executam após push
Causa: Hooks sem permissão de execução ou erros de sintaxe no script.
Solução: Torne os hooks executáveis com chmod +x nome-do-hook e teste a sintaxe com bash -n nome-do-hook. Verifique os logs do sistema com journalctl -u ssh para identificar erros específicos durante a execução.
Perguntas frequentes sobre configurar servidor Git
Qual a diferença entre repositório bare e normal no Git?
Repositório bare não possui working directory, apenas os dados do Git (.git). É usado em servidores para receber pushes de múltiplos desenvolvedores. Repositórios normais têm arquivos de trabalho e não devem receber pushes diretos.
Como adicionar novos usuários ao servidor Git depois da configuração?
Crie o usuário com 'sudo adduser nome', adicione ao grupo git com 'sudo usermod -aG git nome', configure a chave SSH em /home/nome/.ssh/authorized_keys e defina permissões corretas com chmod 700 .ssh e chmod 600 authorized_keys.
É possível usar HTTPS em vez de SSH para o servidor Git?
Sim, mas requer configuração adicional com Apache/Nginx e certificado SSL. SSH é mais simples e seguro para servidores privados. HTTPS é recomendado apenas para repositórios públicos ou quando SSH não é viável.
Como fazer backup dos repositórios Git do servidor?
Use 'git clone --bare' para cada repositório ou rsync para copiar toda a pasta /opt/git. Para backup automatizado, configure um script cron que execute 'tar -czf backup-git-$(date +%Y%m%d).tar.gz /opt/git' diariamente.
Posso restringir acesso a repositórios específicos por usuário?
Sim, usando gitolite ou configurando permissões Unix. Com permissões simples, crie grupos específicos e ajuste ownership dos repositórios. Para controle avançado, instale gitolite que oferece ACL granular por repositório e branch.
Conclusão
A configuração de um servidor Git no Ubuntu 22.04 proporciona controle total sobre o código-fonte da equipe e melhora significativamente o fluxo de desenvolvimento. Com este guia, você estabeleceu uma base sólida para versionamento colaborativo.
- Mantenha backups regulares dos repositórios usando scripts automatizados
- Configure hooks personalizados para validações específicas do seu projeto
- Monitore logs de acesso regularmente para identificar tentativas não autorizadas
Precisa de um servidor confiável para Git?
A AviraHost oferece servidores VPS Linux otimizados para desenvolvimento, com recursos dedicados e suporte técnico especializado. Ideal para hospedar repositórios Git corporativos com máxima disponibilidade.
Conheça nossos planos de VPS Linux