Instalando Gogs no Ubuntu

Mascote do LinuxPro conectando o cabo no servidor Gogs, com o gopher do Go acompanhando a instalação

Nota (2026): Texto original de abril de 2017, quando a instalação era um script para Ubuntu 16.04. O Gogs continua vivo — 0.14.3, de junho de 2026 —, mas o ecossistema se dividiu: o Gitea (fork de 2016) e o Forgejo (fork do Gitea, de 2022) são hoje mais ativos. Abaixo, o caminho atual em três sabores; o post original de 2017 fica preservado no fim.

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