Introduzione

Gogs è un server git open source self-hosted scritto in Go. Include un editor di file del repository, il rilevamento dei problemi del progetto e un wiki integrato.

Gogs è un'applicazione leggera e può essere installata su sistemi a bassa potenza. Se stai cercando un'alternativa a Gitlab con un footprint di memoria molto più piccolo e non hai bisogno di tutte le campane e fischietti che Gitlab offre, allora dovresti provare Gogs.

Questo tutorial illustra i passaggi per installare e configurare Gogs su Ubuntu 18.04. Le stesse istruzioni valgono per Ubuntu 16.04.

Se il tuo intento è installare Gogs su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Prima di iniziare

Gogs può utilizzare il database SQLite, PostgreSQL o MySQL/MariaDB per archiviare tutti i suoi dati.

In questo tutorial, useremo SQLite come database preferito. Se SQLite non è installato sul tuo sistema puoi installarlo digitando:

sudo apt install sqlite3

Per un ulteriore livello di sicurezza, si consiglia di impostare un firewall di base. Puoi seguire i passaggi nella nostra guida: Come configurare UFW Firewall su Ubuntu 18.04 LTS.

Installare Git

Installeremo Gogs da binario. L'installazione è un processo piuttosto semplice.

Il primo passo è installare Git sul tuo server. Per fare ciò, aggiorna l'indice del pacchetto locale e installa il pacchetto git eseguendo i seguenti comandi come utente sudo:

sudo apt update

Verifica l'installazione visualizzando la versione Git:

git --version

Dovresti visualizzare un messaggio di output simile al seguente:

git version 2.17.1

Creare un utente Git

Crea un nuovo utente di sistema per eseguire il servizio Gogs digitando:

sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git --gecos 'Git Version Control' git

Il comando creerà l'utente e imposterà la home directory su /home/git. L'output sarà simile al seguente:

Adding system user `git' (UID 111) ...
Adding new group `git' (GID 116) ...
Adding new user `git' (UID 111) with group `git' ...
Creating home directory `/home/git' ...

Scaricare il binario di Gogs

Visita la pagina di download di Gogs e scarica l'ultimo binario per la tua architettura. Al momento in cui scrivo, l'ultima versione è 0.11.91, se è disponibile una nuova versione cambia la VERSIONvariabile nel comando seguente.

Scarica l'archivio Gogs nella directory /tmp usando il seguente comando wget:

VERSION=0.11.91
wget https://dl.gogs.io/${VERSION}/gogs_${VERSION}_linux_amd64.tar.gz -P /tmp

Una volta completato il download, estrarre il file tar.gz di Gogs e spostarlo nella directory /home/git:

sudo tar xf /tmp/gogs_*_linux_amd64.tar.gz -C /home/git

Eseguire il comando seguente per modificare la proprietà della directory di installazione di Gogs per l'utente e raggruppare git:

sudo chown -R git: /home/git/gogs

Creare un file unità di systemd

Gogs viene fornito con un file di unità Systemd che è già configurato per corrispondere alla nostra configurazione.

Copia il file nella directory /etc/systemd/system/ digitando:

sudo cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system/

Una volta fatto, avvia e abilita il servizio Gogs con il seguente comando:

sudo systemctl start gogs

Verifica che il servizio sia avviato correttamente:

sudo systemctl status gogs

Dovresti visualizzare un messaggio di output simile al seguente:

● gogs.service - Gogs
   Loaded: loaded (/etc/systemd/system/gogs.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-01-09 20:00:24 CET; 6s ago
 Main PID: 18347 (gogs)
    Tasks: 7 (limit: 2298)
   CGroup: /system.slice/gogs.service
           └─18347 /home/git/gogs/gogs web
           
...

Configurare Gogs usando il programma di installazione web

Ora che Gogs è scaricato e in esecuzione, è tempo di finalizzare l'installazione tramite l'interfaccia web.

Apri il tuo browser, digita http://TUO_DOMINIO_O_IP:3000 e apparirà una schermata di configurazione di Gogs come la seguente:

Impostazioni del database:

  • Tipo di database: SQLite3
  • Percorso: usa un percorso assoluto, /home/git/gogs/gogs.db

Impostazioni generali dell'applicazione:

  • Nome applicazione: immettere il nome dell'organizzazione
  • Percorso root repository: lasciare l'impostazione predefinita /home/git/gogs-repositories
  • Run utente: git
  • Dominio: inserisci il tuo indirizzo IP di dominio o server.
  • Porta SSH: 22, cambiarla se SSH è in ascolto su un'altra porta
  • Porta HTTP: 3000
  • URL dell'applicazione: utilizzare http e l'indirizzo IP del dominio o del server.
  • Percorso registro: lascia il valore predefinito /home/git/gogs/log

Successivamente è possibile modificare le impostazioni modificando il file di configurazione di Gogs.

Una volta fatto premi il pulsante Install Gogs. L'installazione è istantanea e una volta completata verrai reindirizzato alla pagina di accesso.

Fai clic sul link Sign up now.

Il primo utente registrato viene automaticamente aggiunto al gruppo Admin.

Questo è tutto. Gogs è stato installato sul tuo computer Ubuntu.

Configurazione di Nginx come proxy di terminazione SSL

Questo passaggio è facoltativo ma è altamente raccomandato. Per utilizzare Nginx come proxy inverso è necessario disporre di un dominio o sottodominio che punti all'IP pubblico del server. In questo tutorial, useremo gogs.example.com.

Innanzitutto, installa Nginx e genera un certificato SSL Let's Encrypt gratuito seguendo le guide seguenti:

Una volta fatto, apri il tuo editor di testo e modifica il file di blocco del server (Server Blocks - Virtual Hosts) di dominio:

sudo nano /etc/nginx/sites-enabled/gogs.example.com
server {
    listen 80;
    server_name gogs.example.com;

    include snippets/letsencrypt.conf;
    return 301 https://gogs.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name gogs.example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    client_max_body_size 50m;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/gogs.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gogs.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/gogs.example.com/chain.pem;
    include snippets/letsencrypt.conf;
    include snippets/ssl.conf;

    # log files
    access_log /var/log/nginx/gogs.example.com.access.log;
    error_log /var/log/nginx/gogs.example.com.error.log;

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://127.0.0.1:3000;
    }
}

Non dimenticare di sostituire gogs.example.com con il tuo dominio Gogs e impostare il percorso corretto per i file del certificato SSL. Tutte le richieste HTTP verranno reindirizzate a HTTPS.

Riavvia il servizio Nginx per rendere effettive le modifiche:

sudo systemctl restart nginx

Successivamente, dobbiamo cambiare il dominio Gogs e l'URL di root. Per fare ciò, apri il file di configurazione e modifica le seguenti righe:

sudo nano /home/git/gogs/custom/conf/app.ini

Inserisci il tuo nome dominio:

[server]
DOMAIN           = gogs.example.com
ROOT_URL         = https://gogs.example.com/

Riavvia il servizio Gogs digitando:

sudo systemctl restart gogs

A questo punto, Gogs è configurato e puoi accedervi da HTTPS: https://gogs.example.com.

Configurazione delle notifiche e-mail

Affinché Gogs sia in grado di inviare e-mail di notifica, è possibile installare Postfix o utilizzare alcuni servizi di posta transazionale come SendGrid, MailChimp, MailGun o SES.

Per abilitare le notifiche e-mail, aprire il file di configurazione e modificare le seguenti righe:

sudo nano /home/git/gogs/custom/conf/app.ini
[mailer]
ENABLED = true
HOST    = SMTP_SERVER:SMTP_PORT
FROM    = SENDER_EMAIL
USER    = SMTP_USER
PASSWD  = YOUR_SMTP_PASSWORD

Assicurati di inserire le informazioni corrette sul server SMTP.

Riavvia il servizio Gogs per rendere effettive le modifiche:

sudo systemctl restart gogs

Gogs ti consente anche di connetterti a Slack creando un webhook web e inviando notifiche ai tuoi canali Slack.

Aggiornare Gogs

Per aggiornare Gogs, sono necessari diversi passaggi manuali.

Primo arresto del servizio Gogs:

sudo systemctl stop gogs

Rinomina la directory di installazione di Gogs.

sudo mv /home/git/gogs{,_old}

Scarica l'ultima versione di Gogs e spostala nella directory /home/git:

VERSION=<THE_LATEST_GOGS_VERSION>
wget https://dl.gogs.io/${VERSION}/gogs_${VERSION}_linux_amd64.tar.gz -P /tmp
sudo tar xf /tmp/gogs_*_linux_amd64.tar.gz -C /home/git

Assicurati di cambiare VERSION con l'attuale versione di rilascio di Gogs.

Copia custom, data, log alla directory estratta utilizzando il seguente comando rsync:

sudo rsync -a /home/git/gogs_old/{custom,data,log} /home/git/gogs/

Infine, avvia il servizio Gogs:

sudo systemctl restart gogs

Questo è tutto.

Conclusione

Questo tutorial ti ha guidato attraverso l'installazione e la configurazione di Gogs su Ubuntu 18.04. Ora puoi creare il tuo primo progetto e iniziare a utilizzare il tuo nuovo server Gogs.