Parte - Cómo construir un servidor Git en la capa gratuita de GCP - Introducción a Gitea
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

Funcionó correctamente.
Ahora, continuemos con la Q.