Gogs | Self-Hosted Git
Tu propio servicio de hospedaje para repositorios Git
Todos los que de uno u otro modo estamos relacionados con el desarrollo de software, antes o después hemos usado algún servicio de repositorios Git en la nube. Por lo general, son gratuitos para repositorios públicos, y pagando podemos crear repositorios privados.
Gogs es un servicio de Git opensource para alojar nuestros repositorios Git en nuestro propio servidor. He probado otras alternativas similares, pero para mi, Gogs es la ganadora ya que consume poquísimos recursos y funciona perfectamente ¿que más se puede pedir? Que sea gratuito, y lo es.
Estoy seguro de que una de las razones principales por las que consume tan pocos recursos, es el hecho de estar escrito en GO. Explicaré como instalarlo en una Raspberry Pi con Raspbian, pero simplemente cambiando la versión ARM de GO por una x86, se podrá instalar en Debian y derivados.
Primeros pasos
- Si no los tenemos, instalar git y wget:
$ sudo apt install -y git wget
- Crear el usuario Gogs:
$ sudo adduser --disabled-login --gecos 'Gogs' git
Si ya tenemos corriendo en nuestro servidor MySQL/MariaDB
y Nginx
podemos saltar a la instalación de GO, si no:
- Instalamos MariaDB y Nginx:
$ sudo apt install mariadb-server nginx
- Para dejar lista nuestra nueva instalación de MariaDB:
$ sudo mysql_secure_installation
Iremos respondiendo a todas las preguntas, con el fin de establecer el password de nuestro usuario root
para MariaDB.
1. Instalación de GO (Golang)
- Creamos el directorio /home/git/local:
$ sudo su - git
$ mkdir $HOME/local && cd $_
- Descargar Go y extraer el contenido:
En el momento de escribir este tutorial la última versión estable disponible en golang.org es GO 1.11.1
$ wget https://dl.google.com/go/go1.11.1.linux-armv6l.tar.gz
$ tar -C /home/git/local -xvzf go1.11.1.linux-armv6l.tar.gz
- Establecer la variable de entorno GOPATH para especificar la ubicación de nuestro espacio de trabajo:
$ echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
$ echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
$ echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
$ source $HOME/.bashrc
- Comprobar que Go está bien instalado:
$ go version
- Si está bien instalado, se mostrará algo como lo siguiente:
go version go1.11.1 linux/arm
2. Descargar y compilar Gogs
- Descargar Gogs:
$ go get -u github.com/gogs/gogs
Tardará unos minutos y parecerá que la consola no responde, ya que no muestra progreso.
- Compilar Gogs:
$ cd $GOPATH/src/github.com/gogs/gogs
$ go build
- Ejecutamos:
$ ./gogs web
Esto arrancará el servidor web integrado escuchando en el puerto 3000
Abrir localhost:3000
en el explorador. Gogs mostrará la página de instalación. Como no tenemos todavía configurada la base de datos, cerraremos el explorador y pararemos el servidor web con CTRL+C
Volveremos a la página de instalación de Gogs tras configurar MariaDB y Nginx.
- Salir del usuario git :
$ exit
3. Configuración de la base de datos
- Entramos en MariaDB
$ sudo mysql -u root -p
- Creamos el nuevo usuario para Gogs:
> CREATE USER 'gogs'@'localhost' IDENTIFIED BY 'password';
Sustituye password
por la contraseña que decidas y guárdala, se necesitará después para configurar Gogs.
- Crear nueva base de datos para Gogs:
> CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
- Dar permisos al usuario gogs:
> GRANT ALL PRIVILEGES ON gogs.* TO gogs@localhost ;
- Salir de Mariadb:
> quit
4. Configuración de Nginx
Configuraremos un Reverse Proxy
en Nginx, de esta forma podremos acceder a Gogs con nuestro nombre de dominio. Si queremos establecer un subdominio del estilo gogs.tudominio.com
solo tendremos que establecer location \
e indicar el server_name
deseado.
- Entrar en /etc/nginx/sites-available y añadir la configuración del Reverse Proxy:
$ cd /etc/nginx/sites-available
$ sudo nano gogs
Pegar lo siguiente modificando segun nuestra configuración:
http{
server {
listen 80;
server_name tudominio.com;
location /gogs/ {
proxy_pass http://localhost:3000/;
}
}
- Habilitamos el nuevo sitio:
$ sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/
- Reiniciamos Nginx:
$ sudo systemctl restart nginx
- Configuramos Gogs con la url tudominio.com/gogs/
$ sudo nano /home/git/go/src/github.com/gogits/gogs/custom/conf/app.ini
Buscar la ROOT URL
y modificarla así:
[server] ROOT_URL = tudominio.com/gogs/
5. Inicio automático con systemd
- Crear el archivo gogs.service:
$ sudo nano /etc/systemd/system/gogs.service
Pegar el siguiente contenido y guardar los cambios:
[Unit]
Description=Gogs (Go Git Service)
After=syslog.target
After=network.target
After=mariadb.service
After=nginx.service
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/go/src/github.com/gogits/gogs
ExecStart=/home/git/go/src/github.com/gogs/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
- Habilitar Gogs, iniciar el servicio y comprobar el estado:
$ sudo systemctl enable gogs
$ sudo systemctl restart gogs
$ sudo systemctl status gogs
Por último, entra en tudominio.com/gogs/ para iniciar la configuración de Gogs, y completar lo siguiente:
Database type = MySQL
Host = 127.0.0.1:3306
User = gogs
Password = <password para el usuario gogs>
Database Name = gogs
Espero que sea útil, ¡gracias por leerme!
Comparte esta publicación
Twitter
Facebook
Reddit
LinkedIn
Pinterest
Email