Configurar un frontend web de Git y un servidor Git con FreeBSD + fcgiwrap + cgit
Hola, soy Munou.
Hasta hace poco, lo había estado construyendo con GItea, pero era demasiado rico en funciones y consumía recursos de servidor innecesarios, por lo que quería mejorar este aspecto.
Además, quería crear repositorios básicos desde la CLI tanto como fuera posible, y aunque Github tiene el comando gh, no quería adoptar un comando tan dependiente de la plataforma para uso personal, así que no lo implementé.
Esto se debe a que los binarios dependientes de la plataforma no ofrecen mucho aprendizaje de bajo nivel.
Por lo tanto, al adoptar cgit como un frontend web separado para git y almacenar git en una ubicación remota a través de SSH, pude construirlo como deseaba.
Habilitar el push de Git
En otras palabras, se trata simplemente de crear un repositorio bare en el lado del servidor Git y poder hacer push a él.
Se asume que ya se puede acceder al destino remoto, en este caso, el servidor Git, a través de SSH.
Creación de usuario git
En el caso de FreeBSD, se puede crear de forma interactiva con el comando "adduser".
adduser
Después de crear el usuario git aquí, cambie a él y agregue la clave pública del cliente a .ssh/authorized_keys.
su - git
mkdir .ssh
chmod 700 .ssh
vim .ssh/authorized_keys
# o
echo "clave pública del cliente" > ".ssh/authorized_keys"
chmod 600 .ssh/authorized_keys
Con esto, confirme que puede hacer ssh.
Además, cree un directorio para almacenar los repositorios bajo el directorio de inicio de este usuario git.
mkdir repos
Luego, configure la rama predeterminada con git config.
git config --global init.defaultBranch main
Habilitar la creación de repositorios desde el cliente al servidor
Tal como está, tendría que iniciar sesión en el servidor Git cada vez, crear un repositorio y luego hacer git push desde el cliente, lo cual es demasiado engorroso, así que lo haré para que una serie de operaciones se puedan realizar desde el cliente.
Agregué lo siguiente a .bashrc.
mkr() {
ssh git@bsd "git init --bare repos/$1.git"
ssh git@bsd "cd repos/$1.git; git branch -m main"
echo "remote add origin git@bsd:~/repos/$1.git"
}
Ahora, se pueden crear repositorios en el lado del cliente a partir del nombre de repositorio proporcionado como argumento.
Finalmente, al imprimir el comando para ejecutar la URL remota en la salida estándar, se puede configurar fácilmente la URL remota.
Instalación de cgit
Para usar cgit, se requiere cgi, así que instale los paquetes necesarios. Se asume que Nginx ya está instalado.
pkg install cgit fcgiwrap
Es necesario habilitar el servicio y permitir que Nginx acceda a través de un socket UNIX con los permisos de usuario y grupo www:www.
sysrc fcgiwrap_enable=YES
sysrc fcgiwrap_user=www
sysrc fcgiwrap_group=www
sysrc fcgiwrap_socket_owner=www
sysrc fcgiwrap_socket_group=www
service fcgiwrap start
Configuración de cgit
Es necesario configurar cgit.
Esta vez, lo personalicé un poco del valor predeterminado, por lo que quedó así:
$ cat /usr/local/etc/cgitrc
root-title=Git
root-desc=public repositories
virtual-root=/
scan-path=/home/git/repos/
css=/style.css
logo=/top.png
head-include=/usr/local/www/cgit/head.html
readme=:README.md
readme=:README.rst
enable-commit-graph=1
Los archivos a distribuir se crearon en /usr/local/www/cgit/ en el momento de la instalación del paquete.
Configuración de Nginx
Y ahora, Nginx.
server {
if ($host = git.soulminingrig.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name git.soulminingrig.com;
listen 80;
}
server {
server_name git.soulminingrig.com;
listen 443 ssl;
root /usr/local/www/cgit;
location / {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/local/www/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $query_string;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
}
location ~* \.(css|png|ico)$ {
root /usr/local/www/cgit;
}
ssl_certificate /usr/local/etc/letsencrypt/live/git.soulminingrig.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /usr/local/etc/letsencrypt/live/git.soulminingrig.com/privkey.pem; # managed by Certbot
}
Después de crear el archivo conf anterior, verifique la sintaxis con nginx -t y luego reinicie.
nginx -t
service nginx restart
Por cierto, ya había obtenido el certificado con certbot.
certbot --nginx -d git.soulminingrig.com
Con esto, el acceso ya es posible.
Conclusión
Con esto, pude construir un frontend web de Git muy ligero.
Estoy bastante satisfecho porque se puede construir con muy pocos recursos.
Hasta la próxima. Saludos.