
O Gogs é um servidor Git self-hosted escrito em Go: um binário único, sem Ruby, sem Node, sem fila, sem Redis. Você joga o arquivo no servidor, aponta para um banco e tem uma interface parecida com a do GitHub rodando com uns 100 MB de RAM. É a razão de ele ainda fazer sentido num VPS pequeno, num Raspberry Pi ou numa máquina interna de empresa — casos em que o GitLab simplesmente não cabe.
Gogs, Gitea ou Forgejo: qual instalar
Os três são o mesmo código na origem. A separação foi de governança, não de tecnologia:
| Gogs | Gitea | Forgejo | |
|---|---|---|---|
| Origem | Original, 2014 | Fork do Gogs, 2016 | Fork do Gitea, 2022 (Codeberg) |
| Versão atual | 0.14.3 (jun/2026) | 1.27.3 (ago/2026) | 16.0.3 (ago/2026) |
| Licença | MIT | MIT | GPL-3.0 |
| Ritmo | Lento, poucas mãos | Rápido, comunidade grande | Rápido, governança coletiva |
| CI embutido | No | Gitea Actions | Forgejo Actions |
| Registro de pacotes | No | Sim | Sim |
| Consumo | O mais leve | Leve | Leve |
Regra prática: se você quer só Git com interface web, no menor consumo possível, o Gogs entrega e continua recebendo correções. Se você quer CI, registro de pacotes e um projeto com muita gente empurrando, vá de Gitea ou Forgejo — a instalação abaixo é praticamente idêntica nos três, mudando o nome do binário.
Preparando o servidor
Vale para Ubuntu 24.04/26.04 e Debian 12/13. O Gogs precisa de pouca coisa: git, um usuário de sistema e um banco.
sudo apt update
sudo apt install -y git curl
# usuário de sistema dedicado (sem login)
sudo adduser --system --group --disabled-password --home /home/git --shell /bin/bash git
Para o banco, escolha um dos dois. SQLite resolve para uso pessoal ou equipe pequena e não exige nada além do próprio binário. PostgreSQL é o que você quer se houver mais de um punhado de pessoas:
sudo apt install -y postgresql
sudo -u postgres psql -c "CREATE ROLE gogs WITH LOGIN PASSWORD 'troque-esta-senha';"
sudo -u postgres psql -c "CREATE DATABASE gogs WITH OWNER gogs ENCODING 'UTF8';"
Instalando o binário
cd /tmp
VER=0.14.3
ARCH=amd64 # use arm64 num Raspberry Pi ou servidor ARM
curl -fLO https://github.com/gogs/gogs/releases/download/v${VER}/gogs_v${VER}_linux_${ARCH}.tar.gz
tar xzf gogs_v${VER}_linux_${ARCH}.tar.gz
sudo mv gogs /home/git/gogs
sudo chown -R git:git /home/git/gogs
Confira antes de seguir:
sudo -u git /home/git/gogs/gogs --version
Running as a service in systemd
Create /etc/systemd/system/gogs.service:
[Unit]
Description=Gogs
After=network-online.target postgresql.service
Wants=network-online.target
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs/gogs web
Restart=always
RestartSec=5
Environment=USER=git HOME=/home/git
# endurecimento básico
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=false
[Install]
WantedBy=multi-user.target
The WorkingDirectory não é decoração: o Gogs procura custom/conf/app.ini a partir dele. E o Environment=USER=git HOME=/home/git é o que faz o Git achar as chaves SSH certas.
sudo systemctl daemon-reload
sudo systemctl enable --now gogs
journalctl -u gogs -f
Open http://SEU-SERVIDOR:3000 e responda ao assistente de instalação: tipo de banco, credenciais, domínio, URL da aplicação e a conta de administrador. Ao gravar, ele escreve tudo em /home/git/gogs/custom/conf/app.ini — é esse arquivo que você edita depois, nunca o do diretório conf/.
Ou, se você prefere Docker
docker run -d --name=gogs
--restart=always
-p 10022:22 -p 3000:3000
-v /var/lib/gogs:/data
gogs/gogs:0.14.3
Os dados todos — repositórios, banco SQLite e configuração — vivem no volume /data. Faça backup dele e você tem backup do serviço inteiro. O 10022 é a porta SSH do container: os clones ficam com ssh://git@servidor:10022/usuario/repo.git.
Nginx na frente, com TLS
Não exponha a porta 3000 direto na internet. Coloque o Gogs atrás do nginx e feche o resto no firewall:
server {
listen 443 ssl;
http2 on;
server_name git.exemplo.com.br;
ssl_certificate /etc/letsencrypt/live/git.exemplo.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.exemplo.com.br/privkey.pem;
# push grande não pode esbarrar no limite padrão de 1 MB
client_max_body_size 512m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo certbot --nginx -d git.exemplo.com.br
sudo ufw allow 'Nginx Full'
sudo ufw deny 3000
Depois disso, ajuste o app.ini para o Gogs saber que está atrás de HTTPS — senão os links de clone saem errados:
[server]
DOMAIN = git.exemplo.com.br
ROOT_URL = https://git.exemplo.com.br/
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
DISABLE_SSH = false
SSH_PORT = 22
E, num servidor exposto, feche o cadastro público:
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true
ENABLE_CAPTCHA = true
sudo systemctl restart gogs
Backup
São três coisas, e o Gogs tem comando próprio para juntá-las:
sudo -u git /home/git/gogs/gogs backup
--config /home/git/gogs/custom/conf/app.ini
--target /var/backups/gogs
Se preferir na unha: os repositórios ficam em /home/git/gogs-repositories, a configuração em custom/ e o banco no PostgreSQL (pg_dump gogs) ou no arquivo SQLite. Sem os três, o restore não fecha.
Atualizando
Como é binário único, atualizar é trocar o arquivo — mas com o serviço parado e o backup feito antes:
sudo -u git /home/git/gogs/gogs backup --target /var/backups/gogs
sudo systemctl stop gogs
# baixe e extraia a nova versão, substituindo /home/git/gogs
sudo chown -R git:git /home/git/gogs
sudo systemctl start gogs
Saltos de versão do Gogs às vezes exigem migração de banco, que roda sozinha na primeira subida. Leia o changelog da versão antes — é curto.
O post original (abril de 2017)
Preservado como registro. Os scripts abaixo instalavam o Gogs em Ubuntu 16.04 e não devem ser usados hoje:
## Script Install on Debian, Ubuntu, OpenSUSE 64Bits !!!
wget https://gist.githubusercontent.com/jniltinho/280573e10206e31ab1c7/raw/6d9eb2c6abff9d61f903b2704c50926915b531cb/install_gogs_ubuntu.sh
bash install_gogs_ubuntu.sh
Gist original: jniltinho/280573e10206e31ab1c7
Vídeo de instalação do Gogs no Debian (2017)
Links
- gogs.io · github.com/gogs/gogs
- Gitea · Forgejo
- Aqui no blog: A história do Git · A história do GitLab · Instalando o Go no Linux