Ако е необходима инсталация на Git услуга за индивидуален разработчик или малка компания, лек аналог на GitLib, наречен Gogs, е най-доброто решение.
Git услуга Gogs
Gogs (GO Git Service) – това е Git услуга за инсталиране на собствен сървър, много подобна на GitLab. Gogs е написан на Go езика, има ниски изисквания към системните ресурси (за разлика от GitLab). Лесен е за инсталиране и настройка. Gogs е най-доброто решение, ако имате нужда от собствен Git репозиторий и не искате да плащате такси на други Git услуги.
Инсталиране на Git услугата Gogs
Инсталиране на Git
Инсталираме системата за контрол на версиите git:
apt install git
Създаване на потребител
Създаваме потребител git:
adduser --disabled-login --gecos 'Gogs' git

Създадохме нов потребител с името git и всички следващи действия ще извършваме като потребител git. За да влезете като потребител git, трябва да изпълните командата:
su - git
За да завършите работата под потребител git, ще трябва да изпълните командата:
exit
Инсталиране на Go
За компилацията на Gogs е необходимо Go версия 1.18 или по-нова.
Под потребителя git, когото който току-що създадохме, създаваме нова директория /home/git/local/:
su - git
mkdir $HOME/local && cd $_
Изтегляме най-новата версия на Go. Към момента на написването на статията това беше версия 1.20.2:
wget https://golang.google.cn/dl/go1.20.2.linux-amd64.tar.gz
Разархивираме изтегления архив:
tar -C /home/git/local -xvzf go1.20.2.linux-amd64.tar.gz
Ще зададем променлива на околната среда GOROOT, за да посочим местната инсталация на Go. Променливите на околната среда се задават във файл .bashrc. Така променливите на околната среда ще бъдат достъпни, когато потребителят влиза в системата:
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
Проверяваме инсталацията на Go:
go version

Инсталацията на Go е успешно завършена.
Инсталиране на Gogs
Клонираме хранилището в подпапка gogs:
git clone --depth 1 https://github.com/gogs/gogs.git gogs
cd gogs
Компилираме Gogs, всички необходими зависимости ще бъдат изтеглени:
go build -o gogs
Проверка на функционалност на Gogs.
За да проверим работоспособността на Gogs, изпълняваме командата:
./gogs web

Стартира уеб сървър, който слуша HTTP връзки на порт 3000. За да спрете уеб сървъра, натиснете комбинацията от клавиши CRTL+C
.
Завършваме работата под потребител git:
exit
Добавяне на Gogs към автоматично зареждане
Ще настроим автоматично зареждане на Git услугата Gogs при стартиране на системата.
Създаваме файл /etc/systemd/system/gogs.service:
touch /etc/systemd/system/gogs.service
Добавяме следното съдържание в създадения файл (след като проверим пътищата на WorkingDirectory и ExecStart):
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=postgresql.service
After=nginx.service
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/local/gogs
ExecStart=/home/git/local/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
Активираме създадения от нас systemd файл:
systemctl enable gogs
Стартирам услугата:
systemctl start gogs
Проверяваме статуса на услугата:
systemctl status gogs

Всичко стартира и работи перфектно! Може да се рестартира сървъра и да се провери, че Git услугата Gogs се стартира автоматично.
Инсталиране на PostgreSQL
Gogs не изисква задължителното използване на база данни на сървъра. Затова можете да пропуснете този раздел, ако не планирате да използвате Gogs заедно със сървър за бази данни.
Инсталираме необходимите пакети:
apt install postgresql postgresql-client libpq-dev

Отварям терминала на PostgreSQL, за да създадем база данни и потребител за Gogs:
sudo -u postgres psql -d template1

Създаваме нов потребител с името gogs:
CREATE USER gogs CREATEDB;
Задаваме парола за потребителя gogs:
\password gogs
Ще бъде предложено да се въведе нова парола за потребител gogs, след което да се повтори въвеждането й.
Създаваме база данни gogs, като собственик е потребителят gogs:
CREATE DATABASE gogs OWNER gogs;
Излизаме от PostgreSQL терминала:
\q
Инсталиране и конфигуриране на Nginx
Ще инсталираме и конфигурираме Nginx като обратен прокси-сървър за Gogs. Това ще ни позволи да достъпваме Gogs не чрез IP адреса на сървъра, където се намира Gogs, а чрез домейн име (git.adminkin.pro). Nginx също така ще обработва HTTPS връзки към Gogs.
Инсталираме Nginx:
apt install nginx
Създаваме конфигурационен файл /etc/nginx/sites-available/git.adminkin.pro.conf:
touch /etc/nginx/sites-available/git.adminkin.pro.conf
Добавяме следните редове в файла:
server {
listen 80;
server_name git.adminkin.pro;
root /var/www/html;
index index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Създаваме символична връзка:
ln -s /etc/nginx/sites-available/git.adminkin.pro.conf /etc/nginx/sites-enabled/git.adminkin.pro.conf
Стартираме Nginx:
nginx
Ура! Домейн git.adminkin.pro е достъпен чрез HTTP на порт 80:

Време е да получите безплатен SSL сертификат от Let’s Encrypt за домейн git.adminkin.pro. Инсталираме Certbot (клиент на Let’s Encrypt, който създава и инсталира SSL сертификати от Let’s Encrypt):
apt install certbot python3-certbot-nginx
Стартираме Certbot за генериране на SSL сертификат и монтиране му на уебсайта:
certbot --nginx -d git.adminkin.pro -d www.git.adminkin.pro --register-unsafely-without-email
Ако разгледате конфигурационния файл /etc/nginx/sites-available/git.adminkin.pro.conf, ще забележите, че Certbot е направил промени в този файл. Рестартираме Nginx, за да приложим промените в конфигурационния файл:
nginx -s reload
SSL сертификат работи. Пренасочването (редирект) от HTTP към HTTPS, записано в конфигурационния файл от Certbot, работи.

За автоматично обновяване на SSL сертификата ще добавим задача в cron. За тази цел ще отворим файла crontab за редактиране под потребител root: „
crontab -e
И ще добавим следващия ред:
30 2 * * 1 /usr/bin/certbot renew >> /var/log/certbot.log
Всяка понеделник в 2:30 часа нощта ще се извършва проверка на валидността на SSL сертификата. Ако срокът на действие на SSL сертификата изтича, сертификатът ще бъде обновен.
Ще настроим Nginx като обратен прокси-сървър за Gogs. Отваряме конфигурационния файл /etc/nginx/sites-available/git.adminkin.pro.conf и го променяме на:
server {
listen 443 ssl;
server_name git.adminkin.pro;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:3000;
}
ssl_certificate /etc/letsencrypt/live/git.adminkin.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.adminkin.pro/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
listen 80;
server_name git.adminkin.pro www.git.adminkin.pro;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
server_name www.git.adminkin.pro;
ssl_certificate /etc/letsencrypt/live/git.adminkin.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.adminkin.pro/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
return 301 https://git.adminkin.pro$request_uri;
}

Презареждаме Nginx, за да се приложат промените в конфигурационния файл:
nginx -s reload
Въвеждаме в адресната лента на браузъра http://git.adminkin.pro/, след което се пренасочваме към https://git.adminkin.pro/install. Инсталирането на Git услугата Gogs ще продължи в браузъра.

Настройка Git услуги Gogs
Настройки базы данных (вижте горната снимка) оставяме по подразбиране. Въвеждаме само Паролата на потребителя gogs на базата данни PostgreSQL, която сме задали в раздела Инсталиране на PostgreSQL.
Общите параметри на Gogs оставяме по подразбиране, освен:
- Домейнът се променя от localhost на git.adminkin.pro.
- „Порт SSH оставляем пустым, так как SSH сервер не будет использоваться;“
- URL на приложението се променя от http://localhost:3000/ на https://git.adminkin.pro.

Разширени настройки оставяме по подразбиране. Само ще създадем администраторски акаунт. За тази цел попълваме полетата: Потребителско име, Парола, Потвърдете паролата и натискаме бутона Инсталирай Gogs:

Всичко! Вече сме в административния панел на Gogs и можем да създадем нашия първи Git хранилище (но няма да се занимаваме с това тук).

Остава се да се забрани достъпът до сайта Gogs по незащитения протокол HTTP. Ако в адресната лента на браузъра се въведе http://git.adminkin.pro:3000/, ще бъде предоставен достъп по HTTP протокола:

Това е защото уеб сървърът на Gogs слуша всички мрежови интерфейси на порт 3000. За да бъде достъпен само чрез сигурния HTTPS протокол, е необходимо да се настрои така, че уеб сървърът на Gogs да слуша само loopback интерфейса на порт 3000.
Отварям файл /home/git/local/gogs/custom/conf/app.ini с настройки на Gogs и в секция [server] добавяме ред:
HTTP_ADDR = 127.0.0.1

Рестартираме услугата Gogs:
systemctl restart gogs
Проверка. Достъпът през незащитения HTTP протокол е забранен:

Изводи
Инсталация на Git услугата Gogs премина без проблеми. Самата услуга Gogs не изисква много ресурси от сървъра. Както твърдят разработчиците му, тя може да работи на евтин Raspberry Pi. Gogs е достоен алтернатива на GitHub и GitLab.
Как това може да помогне на бизнеса?
Git услугата Gogs ще спести пари на бизнеса: няма нужда да се наема сървър със супер конфигурация (както е при GitLab) и няма нужда да се плащат все по-високи тарифи (както е при GitHub). Gogs е безплатен, лек и кросплатформенен!
Моля, задавайте въпросите в коментарите под статията!
Коментари