Ако е необходима инсталация на 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. За да влезете като потребител 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 завърши успешно.

Инсталацията на 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
Проверка на работоспособност на Git услугата Gogs.

Стартира уеб сървър, който слуша 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

Всичко стартира и работи перфектно! Може да се рестартира сървъра и да се провери, че Git услугата Gogs се стартира автоматично.

Инсталиране на PostgreSQL

Gogs не изисква задължителното използване на база данни на сървъра. Затова можете да пропуснете този раздел, ако не планирате да използвате Gogs заедно със сървър за бази данни.

Инсталираме необходимите пакети:

apt install postgresql postgresql-client libpq-dev
Инсталиране на PostgreSQL

Отварям терминала на PostgreSQL, за да създадем база данни и потребител за Gogs:

sudo -u postgres psql -d template1
PostgreSQL терминал

Създаваме нов потребител с името 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:

Настройка на Nginx. Домейнът е достъпен по 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, работи.

Настройка на Nginx. Домейн е достъпен чрез HTTPS на порт 443.

За автоматично обновяване на 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, за да се приложат промените в конфигурационния файл:

nginx -s reload

Въвеждаме в адресната лента на браузъра http://git.adminkin.pro/, след което се пренасочваме към https://git.adminkin.pro/install. Инсталирането на Git услугата Gogs ще продължи в браузъра.

Уеб Инсталатор Gogs

Настройка Git услуги Gogs

Настройки базы данных (вижте горната снимка) оставяме по подразбиране. Въвеждаме само Паролата на потребителя gogs на базата данни PostgreSQL, която сме задали в раздела Инсталиране на PostgreSQL.

Общите параметри на Gogs оставяме по подразбиране, освен:

  • Домейнът се променя от localhost на git.adminkin.pro.
  • Порт SSH оставляем пустым, так как SSH сервер не будет использоваться;“
  • URL на приложението се променя от http://localhost:3000/ на https://git.adminkin.pro.
Основни настройки на Gogs

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

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

Контролен панел Gogs

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

Достъп до Gogs чрез HTTP протокола

Това е защото уеб сървърът на Gogs слуша всички мрежови интерфейси на порт 3000. За да бъде достъпен само чрез сигурния HTTPS протокол, е необходимо да се настрои така, че уеб сървърът на Gogs да слуша само loopback интерфейса на порт 3000.

Отварям файл /home/git/local/gogs/custom/conf/app.ini с настройки на Gogs и в секция [server] добавяме ред:

HTTP_ADDR    = 127.0.0.1
Файл app.ini с настройками Gogs.

Рестартираме услугата Gogs:

systemctl restart gogs

Проверка. Достъпът през незащитения HTTP протокол е забранен:

Достъпът до Gogs чрез HTTP протокола е забранен.

Изводи

Инсталация на Git услугата Gogs премина без проблеми. Самата услуга Gogs не изисква много ресурси от сървъра. Както твърдят разработчиците му, тя може да работи на евтин Raspberry Pi. Gogs е достоен алтернатива на GitHub и GitLab.

Как това може да помогне на бизнеса?

Git услугата Gogs ще спести пари на бизнеса: няма нужда да се наема сървър със супер конфигурация (както е при GitLab) и няма нужда да се плащат все по-високи тарифи (както е при GitHub). Gogs е безплатен, лек и кросплатформенен!

Моля, задавайте въпросите в коментарите под статията!

Коментари

Вашият коментар

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.