Parte - Cómo construir un servidor Git en la capa gratuita de GCP - Introducción a Gitea

7 min

language: ja bn en es hi pt ru zh-cn zh-tw

Hola, soy un incompetente.
Esta vez, se trata de instalar Gitea en GCE y configurar la VPN de WireGuard.

Instalar los componentes necesarios

No es lo ideal, pero procederé como usuario root.
Para más detalles, consulte la documentación oficial.

apt install -y git mariadb-server mariadb-client
adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
ufw allow 3000/tcp
ufw reload

Obtendré el binario más reciente usando wget.

wget -O gitea https://dl.gitea.com/gitea/1.22.4/gitea-1.22.4-linux-amd64
chmod +x gitea
mv gitea /usr/local/bin/gitea

Configuración de la base de datos

mysql -u root -p
CREATE DATABASE gitea;
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Configuración del archivo de demonio

Archivo conf oficial como ejemplo para Systemd

Siempre lo configuro con Supervisor, pero de vez en cuando me gusta probar Systemd.
Lo configuré de la siguiente manera:

$ sudo cat /etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target

[Service]
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/bin/gitea
Restart=always
Environment=USER=gitea HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target
systemctl enable gitea
systemctl start gitea
systemctl status gitea
● gitea.service - Gitea (Git with a cup of tea)
     Loaded: loaded (/etc/systemd/system/gitea.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-11-24 15:16:30 UTC; 3 days ago
   Main PID: 3276 (gitea)
      Tasks: 9 (limit: 1136)
     Memory: 114.6M
        CPU: 2min 4.743s
     CGroup: /system.slice/gitea.service
             └─3276 /usr/local/bin/gitea
~~~

Si está Active de esta manera, está bien.

Configurar WireGuard VPN

A menudo configuro el lado del cliente de WireGuard, pero se volvió tedioso, así que decidí generar la mayor parte posible.
wg-genconf/wg-client.sh en main · haturatu/wg-genconf · GitHub
Es un script interactivo un poco rudimentario, pero es principalmente para mi propio uso.
Finalmente, es una configuración sencilla que termina simplemente pegando "Por favor, configure lo siguiente en el lado del servidor." directamente en el archivo conf del servidor.
Si parece estar conectado con lo siguiente, intentaré hacer un curl al puerto estándar 3000 de Gitea.

wg-quick up wg0
wg

Lado del servidor

wg-quick down wg0
wg-quick up wg0
wg
ping -c 5 10.1.0.6
curl 10.1.0.6:3000

Si la página de Gitea se muestra como salida estándar de curl, entonces está bien.

Configuración de DNS

Configuré el registro DNS de git.mydomain.jp para que apunte a la dirección IP como un registro A en el lado del servidor VPN, verifiqué cuándo se reflejó con nslookup, y como ya se reflejó, pasamos al siguiente paso.

Proxy inverso con Nginx

Dado que el DNS se actualizó correctamente, también obtendré un certificado con certbot.

server {
    if ($host = git.mydomain.jp) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name git.mydomain.jp;

    location / {
        proxy_pass http://10.1.0.6: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;
        
    }
}

server {
    listen 443 ssl;
    server_name git.mydomain.jp;

    location / {
        proxy_pass http://10.1.0.6: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;

    }
    ssl_certificate /usr/local/etc/letsencrypt/live/git.mydomain.jp/fullchain.pem; # managed by Certbot
    ssl_certificate_key /usr/local/etc/letsencrypt/live/git.mydomain.jp/privkey.pem; # managed by Certbot
}

Por cierto, para obtener un certificado SSL

certbot --nginx -d  git.mydomain.jp

para obtenerlo.
Verificar la sintaxis y reiniciar

nginx -t
service nginx reload

Verificar en el navegador

Image
Funcionó correctamente.

Ahora, continuemos con la Q.

Related Posts