Ха - Хочу развернуть Git-сервер на бесплатном уровне GCP - Введение в Gitea

6 min

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

Здравствуйте, я бездарь.
На этот раз речь пойдет об установке Gitea на GCE и настройке VPN WireGuard.

Установка необходимых компонентов

Это не очень хорошо, но мы будем использовать пользователя root.
Подробности смотрите в официальной документации.

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

Получим последнюю бинарную версию с помощью 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

Настройка БД

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;

Настройка файла демона

Официальный пример conf файла для Systemd

Обычно я настраиваю с помощью Supervisor, но иногда я использую Systemd. Я настроил следующим образом:

$ 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
~~~

Если он Active, то все в порядке.

Настройка WireGuard VPN

Я часто настраиваю клиентскую часть WireGuard, но это стало утомительным, поэтому я решил генерировать конфигурацию, насколько это возможно.
wg-genconf/wg-client.sh at main · haturatu/wg-genconf · GitHub
Это не очень хороший интерактивный скрипт, но он почти полностью для личного использования.
Это простая настройка, которая заканчивается тем, что вы просто вставляете то, что написано в конце: "Пожалуйста, настройте следующее на стороне сервера", прямо в файл conf на стороне сервера.
Если кажется, что соединение установлено, попробуем curl к стандартному порту Gitea 3000.

wg-quick up wg0
wg

На стороне сервера

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

Если в стандартном выводе curl отображается страница Gitea, то все в порядке.

Настройка DNS

В DNS-записях установил git.mydomain.jp как A-запись на стороне VPN-сервера с IP-адресом, проверил с помощью nslookup, когда изменения вступят в силу, и после их применения перешел к следующему шагу.

Обратный прокси с Nginx

После успешного обновления DNS, получим сертификат с помощью 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
}

Кстати, для получения SSL-сертификата

certbot --nginx -d  git.mydomain.jp

используйте это.
Проверьте синтаксис и перезапустите.

nginx -t
service nginx reload

Проверка в браузере

Image
Все прошло успешно.

Далее следует Q.

Related Posts