Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Passo a passo para configurar servidor Git no Ubuntu 22.04 (sem erros)

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:

  1. Instalar Git e criar usuário dedicado
  2. Configurar autenticação SSH
  3. Criar repositório bare no servidor
  4. Definir permissões e grupos de acesso
  5. Testar conexão e primeiro push
  6. 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

Leia também

  • 0 Os usuários acharam isso útil
  • git, ubuntu, servidor, ssh, repositorio, controle-versao, avirahost
Esta resposta foi útil?

Artigos Relacionados

Otimizar cache Redis para aplicações PHP no Ubuntu 22.04

Para otimizar o cache Redis para aplicações PHP no Ubuntu 22.04, instale e configure o Redis,...

Configurar Alertas Automáticos com Zabbix no Ubuntu

Para configurar alertas automáticos com Zabbix no Ubuntu, instale o Zabbix Server, configure...

Otimizar MySQL: como reduzir uso de memória e acelerar consultas

Otimizar MySQL é o processo de ajustar configurações e consultas para reduzir o consumo de...

Entenda o que é Swap no Linux: como funciona e quando usar

Swap no Linux é um espaço em disco usado como extensão da memória RAM quando esta se esgota. O...

Guia Definitivo: Configurar Nginx como Proxy Reverso

Para configurar o Nginx como proxy reverso, instale o Nginx, crie um arquivo de configuração de...