Introdução ao gitrust: compile, configure e envie seu primeiro commit¶
Source : ce tutoriel intègre le contenu de
gitrust/docs/GETTING_STARTED.mdavec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).
Metas¶
Ao final deste tutorial, você saberá:
- O1. Compile gitrust do código-fonte e inicie a instância de desenvolvimento localmente
- O2. Configure o ambiente de desenvolvimento (banco de dados, variáveis de ambiente, ativos CSS)
- O3. Execute um primeiro push SSH para sua instância local e verifique o resultado na interface web
Pré-requisitos¶
- Técnico: Rust estável ≥ 1,80 (
rustc --version), PostgreSQL ≥ 15 (psql --version), Node.js ≥ 18 (node --version), Git 2.x (git --version), Docker (opcional, recomendado para o banco de dados) - Pédagogique : être un utilisateur autonome de gitrust (parcours
usercomplété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL - Tempo estimado: ~45 minutos
Visão geral¶
Antes de executar o primeiro comando, vamos dedicar 3 minutos para entender o que você vai montar e como as peças se encaixam.
gitrust é um monorepo Rust de 6 caixas que compila em um único binário. Quando você executa cargo run, este binário inicia dois servidores simultaneamente: um servidor HTTP (:4000) para a interface web e API REST, e um servidor SSH (:2222) para operações git push/pull. Eles compartilham o mesmo banco de dados PostgreSQL e armazenamento de repositório em disco simples.
graph TB
subgraph sources ["Sources gitrust (monorepo Rust)"]
C1[rustwarden-core
auth, sessions, middleware]
C2[gitrust-core
modèles, services métier]
C3[gitrust-git
opérations Git bare]
C4[gitrust-web
handlers HTTP + templates]
C5[gitrust-ssh
serveur SSH Git]
C6[gitrust-hooks
post-receive, pre-receive]
end
subgraph runtime ["Processus unique (cargo run)"]
HTTP["HTTP :4000
UI + API REST"]
SSH["SSH :2222
git push/pull"]
end
subgraph storage ["Stockage"]
PG[(PostgreSQL
comptes, dépôts,
issues, PRs)]
REPOS[Dépôts bare
data/repos/]
end
C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP
C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH
HTTP & SSH --> PG
HTTP & SSH --> REPOS
O que você fará: clonar as fontes → preparar o PostgreSQL → copiar e preencher .env → compilar os ativos CSS → executar cargo run → verificar a instância → enviar um primeiro commit via SSH.
Etapa 1: verifique os requisitos do sistema¶
Antes de clonar qualquer coisa, certifique-se de ter todas as ferramentas necessárias instaladas:
Resultado esperado (as versões exatas podem variar):
rustc 1.82.0 (f6e511eec 2024-10-15)
cargo 1.82.0 (8f40fc59f 2024-10-15)
psql (PostgreSQL) 16.3
v20.11.0
git version 2.43.0
Se alguma dependência do sistema estiver faltando, instale-a:
# Debian / Ubuntu
sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git
# macOS
brew install postgresql openssl cmake
Ponto de verificação: todos os comandos de verificação devem retornar um número de versão sem erros. Se rustc não for encontrado, instale o Rust via curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh então recarregue seu shell.
Etapa 2: clonar o projeto¶
Resultado esperado:
Cloning into 'gitrust'...
remote: Enumerating objects: 12847, done.
remote: Counting objects: 100% (12847/12847), done.
Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done.
Ponto de verificação: verifique se a estrutura da caixa está presente:
Resultado esperado:
Etapa 3: configurar o ambiente (.env)¶
Copie o arquivo de exemplo e edite os 5 valores essenciais:
Abra .env em seu editor e preencha estes valores:
# Connexion à la base de données
DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust
# Clé secrète JWT (générez-la avec : openssl rand -hex 32)
JWT_SECRET=votre_cle_secrete_64_caracteres
# Compte administrateur créé au premier lancement
ADMIN_USERNAME=admin
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=MotDePasseFort123!
Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez
.env.examplepour la liste complète.
Gere um valor real para JWT_SECRET:
Saída esperada (valor diferente a cada execução):
Copie este valor para .env para JWT_SECRET.
Ponto de verificação: verifique se nenhum valor de exemplo permanece em .env:
O comando deve retornar vazio (sem linhas). Se retornar linhas, esses valores de espaço reservado ainda estarão presentes — o aplicativo será iniciado, mas com uma configuração insegura.
Etapa 4: preparar o banco de dados PostgreSQL¶
Você tem duas opções:
Opção A — Docker (recomendado para iniciantes):
Resultado esperado:
[+] Running 2/2
✔ Container gitrust_postgres_dev Started 0.8s
✔ Container gitrust_pgadmin Started 1.1s
Opção B — PostgreSQL existente na máquina:
psql -U postgres << 'SQL'
CREATE USER gitrust WITH PASSWORD 'motdepasse';
CREATE DATABASE gitrust OWNER gitrust;
SQL
Resultado esperado:
Adapte a senha em DATABASE_URL em .env se você usar a opção B.
Ponto de verificação: verifique se a base está acessível a partir do aplicativo:
Resultado esperado:
version
-------------------------------------------------------------------------------------------------------
PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit
(1 row)
Se você receber psql: erro: falha na conexão com o servidor, verifique se o PostgreSQL está em execução e se DATABASE_URL corresponde.
Etapa 5: compilar os ativos CSS¶
gitrust usa Tailwind CSS + DaisyUI. Os ativos devem ser compilados localmente — sem CDN, todos os arquivos são servidos a partir de static/:
Resultado esperado:
Ponto de verificação: verifique se o arquivo CSS foi gerado:
Resultado esperado:
Se o arquivo tiver 0 bytes ou não existir, a compilação falhou - execute npm install novamente e depois o comando npx tailwindcss.
Etapa 6: inicie o aplicativo¶
A primeira compilação leva de 2 a 5 minutos (todas as dependências são compiladas). As compilações subsequentes são incrementais e muito mais rápidas.
Au premier lancement, gitrust exécute automatiquement :
1. Migrações de banco de dados (criação de todas as tabelas)
2. Criando a conta de administrador (de .env)
3. Gerando a chave do host SSH (data/ssh_host_ed25519_key)
4. Criando o diretório de armazenamento do repositório (data/repos/)
Saída esperada (após compilação):
Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s
Running `target/debug/gitrust`
2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0
2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42
2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin
2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx
Server listening on http://0.0.0.0:4000
Ponto de verificação: abra http://localhost:4000 em seu navegador. Você precisa ver a página inicial do gitrust. Faça login com as credenciais ADMIN_USERNAME / ADMIN_PASSWORD definidas em .env. Caso a página não carregue, verifique se a mensagem Servidor escutando em http://0.0.0.0:4000 aparece nos logs.
Etapa 7: Crie um repositório e envie seu primeiro commit¶
Na interface web (http://localhost:4000), clique em “Novo repositório”, dê um nome (por exemplo, meu-projeto) e clique em Criar.
Adicione sua chave SSH pública em Configurações > Chaves SSH colando o conteúdo de ~/.ssh/id_ed25519.pub.
Então no seu terminal:
git clone ssh://git@localhost:2222/admin/mon-projet.git
cd mon-projet
echo "# Mon projet" > README.md
git add README.md
git commit -m "Initial commit"
git push origin main
Resultado esperado:
Cloning into 'mon-projet'...
warning: You appear to have cloned an empty repository.
[main (root-commit) a1b2c3d] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To ssh://localhost:2222/admin/mon-projet.git
* [new branch] main -> main
Ponto de verificação: retorne ao navegador para http://localhost:4000/admin/my-project. A página deverá exibir o arquivo README.md com o conteúdo #My project e indicar 1 commit no branch main.
Recursos adicionais disponíveis¶
IC integrado (opcional)¶
O CI é executado em um servidor de compilação via SSH + rsync. Configure em .env:
# Même machine (défaut pour le développement)
CI_REMOTE_HOST=localhost
# Ou serveur dédié
CI_REMOTE_HOST=192.168.13.110
CI_REMOTE_USER=ci-runner
Modo Fácil — adicione .gitrust-ci.yml à raiz do seu repositório:
Power Mode — coloque um módulo Dagger em .dagger/ na raiz. gitrust irá executar dagger call -m .dagger/ci.
Notificações¶
Configure o SMTP em .env para notificações por e-mail:
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=user
SMTP_PASSWORD=password
SMTP_FROM=noreply@gitrust.eu
Idioma da interface¶
gitrust está disponível em 6 idiomas (fr, en, de, es, pt, it). Defina o idioma padrão para a instância:
Resumo¶
- ✓ O1 realizado: gitrust é compilado a partir do código-fonte e executado localmente —
cargo runexibe “Servidor escutando em http://0.0.0.0:4000” - ✓ O2 realizado: o ambiente está configurado —
.envpreenchido, PostgreSQL conectado, ativos CSS gerados, migrações aplicadas - ✓ O3 realizado: um primeiro push SSH foi bem-sucedido — o commit está visível na interface web em
http://localhost:4000/admin/mon-project
E se não funcionar¶
| Symptôme | Cause probable | Correction |
|---|---|---|
error[E0463]: can't find crate for 'std' à la compilation |
Toolchain Rust manquante ou mauvaise version | Exécutez rustup update stable && rustup default stable. Vérifiez avec rustc --version ≥ 1.80 |
connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed |
PostgreSQL non démarré ou DATABASE_URL incorrect |
Démarrez PostgreSQL (sudo systemctl start postgresql ou docker compose up -d dans database/). Vérifiez que DATABASE_URL dans .env correspond |
Permission denied (publickey) lors du git push |
Clé SSH non enregistrée dans gitrust ou mauvais port | Vérifiez dans Settings > SSH Keys que la clé est présente. Testez avec ssh -T git@localhost -p 2222 — vous devez voir « Vous êtes authentifié » |
Próxima etapa¶
→ 02 — Primeira contribuição: clonar, construir, testar, PR: aprenda como criar um branch de recurso, escrever testes e enviar sua primeira solicitação pull seguindo o fluxo de trabalho gitrust (~90 min)