Git gogs как работать
Перейти к содержимому

Git gogs как работать

  • автор:

Работа с системой контроля версий

В данном занятии для управления версиями используется сервис Gogs, построенный на основе Git. Основные возможности VCS демонстрируются на примере написания приложения для вывода названий отелей, полученных с помощью API. В рамках решения задачи в master репозитории разрабатывается метод для вывода списка отелей, а в новом репозитории будет реализована верстка названий. Основные шаги:

  1. Настройка репозитория в Visual Studio
  2. Работа в master ветке: разработка функционала
  3. Работа в новой ветке: изменение верстки, демонстрация отката изменений, слияние веток

Обычно для решения новой задачи программист заводит новую ветку. После написания кода и его отладки изменения из новой ветки сливаются в master ветку

Git gogs как работать

###### tags: Linux, Gogs, git, nginx, ufw, ssl. # Развертывание Gogs. В этой заметки: установка и настройка легковесного git репозитория написанного на go,создание самоподписанных ssl сертификатов, настройка nginx как прокси сервера для https, а также настройка ufw для блокировки нежелательных подключений по 80 и 3000 порту. ## Установка gogs на Ubuntu 20.04 LTS. Устанавливаем git и sqlite3. ![](https://i.imgur.com/gcOWDVU.png) Создаем пользователя для gogs. «` adduser —system —group —disabled-password —shell /bin/bash —home /home/git —gecos ‘Контроль версий Git’ git «` Скачиваем архив с бинарным файлом gogs используя wget с [сайта](https://dl.gogs.io/ ). ![](https://i.imgur.com/NTEfpAS.png) Разархивируем скаченный архив. ![](https://i.imgur.com/cdpxYCf.png) Переносим папку gogs в созданный ранее каталог /home/git. Изменяем владельца каталога и файлов в нем на git:git. ![](https://i.imgur.com/wkWhUbu.png) Скопируем готовый файл модуля systemd в каталог с сервисами. ![](https://i.imgur.com/ASKCwMP.png) Запускаем сервис. И добавляем в автозагрузку. ![](https://i.imgur.com/lQp1tIL.png) Перейдем по ip_адрес-сервера:3000. И продожаем web установку. Выбираем базу данный SQLite3. Указываем полный путь до файла бд /home/git/gogs/gogs.db. ![](https://i.imgur.com/0MDJeqE.png) Указываем в разделе домен адрес нашего сервера или DNS имя сервера. ![](https://i.imgur.com/VvP7vxR.png) Жмем установить gogs. После ждем минутку и обновляем страницу. Нажимаем на регистрацию. Создайем аккаунт. Первый созданный аккаунт это будет аккаунт администратора gogs. ![](https://i.imgur.com/btEzDCv.png) Входим в аккаунт. ![](https://i.imgur.com/SmEVdqz.png) ## Настройка nginx в качестве прокси сервера завершения ssl. Мы можем с вами заметить что по умолчанию gogs использует протокол http что не является безопасным. ![](https://i.imgur.com/oszIY3J.png) Для решения этой проблемы настроим Nginx в качестве прокси завершения ssl. Устанавливаем nginx. Создаем директорию /etc/nginx/ssl. Генерируем самоподписанный ssl сертификат. «` openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt «` ![](https://i.imgur.com/ohkGLGQ.png) Создайем конфиг gogs_ssl.conf в директории /etc/nginx/conf.d. В proxy_pass указываем адрес сервера gogs. Не забываем удалить стандартный сайт Nginx или отключить его если используеться IP адресс вместо dns имени. ![](https://i.imgur.com/ufo6G6l.png) Теперь мы можем переходит на сайт по https без указания порта. ![](https://i.imgur.com/pPaz1Ic.png) ## Настройка ufw для блокировки 80 и 3000 портов. На сайт можно до сих пор зайти по 3000 порту это дыра в системе и стоит это исправить. Установите ufw. Ufw это надстройка над IPtables с более дружелюбным способом создавать правила. ![](https://i.imgur.com/qvHS2qC.png) Перед тем как что то блокировать и запускать ufw создаем правило разрешающие ssh подключения в ufw это делается просто: ![](https://i.imgur.com/eML9OKx.png) Теперь нам нужно разрешить подключения по https. ![](https://i.imgur.com/R9DX7nu.png) По умолчанию после включение ufw все не указанные как разрешенные порты будут блокироваться. Поэтому блокировать 3000 порт нам не нужно. Однако нужно создать разрешающие правило для подключения на этот порт с нашего Nginx proxy. ![](https://i.imgur.com/8VC6Wnl.png) Запускаем ufw. И смотрим статус. ![](https://i.imgur.com/TvdRo8O.png) Теперь при попытки подключиться по http мы будет получать такое сообщение от браузера, тоже самое, будет и по 3000 порту. Зато по https у нас все будет прекрасно работать. ![](https://i.imgur.com/rP0cqca.png) Работа по https. ![](https://i.imgur.com/ZdrcqNq.png) ## Тестирование Gogs. Давайте проверим работоспособность нашей системы контроля версий gogs. Создаем репозиторий. ![](https://i.imgur.com/bXHGsxl.png) Мы попадем на такую страницу. ![](https://i.imgur.com/2rx6xSt.png) Открываем свой любимый редактор кода в моем случае это vscode. Открываем терминал, отключаем проверку ssl гитом и добавляем репозиторий. ![](https://i.imgur.com/6Rvm9MX.png) Создаем файл Readme.md ![](https://i.imgur.com/3c7y3pd.png) Закоммитьтем изменения. ![](https://i.imgur.com/ZW0i5os.png) Залеваем обновления в репозиторий. Нас спросит логин и пароль указываем логин пароль созданного ранее аккаунта. ![](https://i.imgur.com/bU5Ghbn.png) Обновляем страницу репозитория в браузере. Как можно увидеть появился файл Readme.md. ![](https://i.imgur.com/XDkyYfB.png) Отключать проверку ssl сертификата не рекомендую с точки зрения безопасности, поэтому после тестирование верните в значение true. В обычной ситуации вам нужно было бы добавлять созданный нами сертификат в доверенные для нашего ПК с git. Но еще более вероятно мы бы использовали сертификат подписанный доверенным центром сертификации.

Last changed by

Read more

МДК02.04 Сетевые языки

Практико-ориентированный курс по изучению администрирования операционных систем Linux.

Атаки на сеть на уровне доступа

В данном мануале вы узнаете несколько банальных атак которые можно провести на L2 уровне.Все тут показанное будет происходить в рамках виртуальное лаборатории EVE-ng.

Знакомство с Linux. Часть четвертая. Сети.

Студент должен уметь настраивать сетевые интерфейсы в основных debian подобных операционных системах Linux.

Межсетевые экраны в OC Linux

Межсетево́й экра́н, сетево́й экра́н, фаервол — программный или программно-аппаратный элемент компьютерной сети, осуществляющий контроль и фильтрацию проходящего через него сетевого трафика в соответствии с заданными правилами.

Создаем собственный GitHub с помощью Gogs

Создаем собственный GitHub с помощью Gogs

Сегодня поговорим о том, как создать собственный Git-сервер с помощью Gogs.

В первую очередь нужно заказать VPS/VDS-сервер с Debian 10/11 на борту у Timeweb Cloud. Далее установить и настроить систему управления базами данных и создать таблицу в ней.

Установка Gogs

Заходим в консоль сервера по SSH.

sudo apt install apache2

Далее установим git:

sudo apt-get install git

Переходим на сайт Gogs: https://gogs.io/docs/installation/install_from_binary. Листаем вниз и ищем заголовок «Downloads». В таблице находим «linux amd64», копируем ссылку под названием «TAR.GZ».

gogs.io

В консоли переходим в нашу папку с сайтом:

сd /var/www/

И скачиваем Gogs:

wget ссылка, которую скопировали раннее

С помощью команды ls посмотрим содержимое папки.

Скопируйте файл с именем «gogs_0.12.4_linux_amd64.tar.gz», имя может отличаться в зависимости от версии.

Далее нам нужно разархивировать загруженный файл на сервере:

tar xzvf название файла

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей

Настройка виртуального хоста

Gogs слушает 3000 порт, поэтому нам нужно создать хост, который будет отзываться на этом порту, с помощью данной команды:

sudo cp /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-available/site1.ru.conf

Мы копируем стандартный конфиг виртуального хоста. Теперь нам нужно отредактировать недавно созданный конфиг:

nano /etc/apache2/sites-available/gods.conf

В конце файла скопируйте приведенный ниже код, где ServerName – ваш домен:

 ServerName ваш домен ProxyPreserveHost On ProxyRequests off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ ErrorLog $/error.log CustomLog $/access.log combined \

Если есть желание, можно использовать поддомен, например git.site.com. Сохраняем наш файл, далее в консоли пишем:

sudo a2ensite gogs

Затем перезапустим Apache:

sudo systemctl restart apache2

Активируем модули apache2, они необходимы для работы с прокси:

sudo a2enmod proxy sudo a2enmod proxy_http
systemctl reload apache2

Переходим в папку Gogs:

cd /var/www/gogs/
./gogs web .

Если в окне консоли нет никаких ошибок, идем дальше.

Gogs по умолчанию слушает хост по следующему адресу: http://0.0.0.1. Нам нужно его заменить на локальный хост apache2. Для этого в консоли переходим в папку Gogs:

cd /var/www/gogs/

Создаем новую папку и переходим в нее:

mkdir custom cd custom

В этой папке создаем еще одну папку и переходим в нее:

mkdir conf cd conf

Создаем файл и открываем его для редактирования:

nano app.ini

В начала файла добавляем приведенный ниже код:

[server] HTTP_ADDR = 127.0.0.1

Сохраняем и открываем сайт по адресу, который вы указали в ServerName. Если все хорошо, откроется окно установки.

База данных, настройка службы запуска и SSL

Теперь создаем базу данных. Я рекомендую создать отдельного пользователя базы данных, который сможет управлять только таблицей, необходимой для работы Gogs.

Чтобы не запускать каждый раз Gogs вручную, необходимо создать службу:

nano /etc/systemd/system/gogs.service

И вставить в нее следующее:

[Unit] Description=Gogs After=syslog.target After=network.target After=mariadb.service mysqld.service postgresql.service memcached.service redis.service [Service] Type=simple User=root Group=sudo WorkingDirectory=/var/www/gogs ExecStart=/var/www/gogs/gogs web Restart=always Environment=USER=root HOME=/home ProtectSystem=full PrivateDevices=yes PrivateTmp=yes NoNewPrivileges=true [Install] WantedBy=multi-user.target
systemctl enable gogs.service
systemctl start gogs.service

Кроме того, желательно наличие SSL-сертификата. Если у вашего домена его нет, сертификат можно получить бесплатно. Для этого вводим команду в консоль:

apt install python3-certbot-apache sudo certbot --apache -d ваш_домен

Установка Git сервиса Gogs на Linux (Debian 11)

Если требуется установка Git сервиса для индивидуального разработчика или небольшой компании, то легковесный аналог GitLib, который называется Gogs, — это лучшее решение.

Содержание скрыть

Git сервис Gogs

Gogs (GO Git Service) — это сервис Git для установки на собственном сервере, очень похож на GitLib. Gogs написан на языке Go, имеет низкие требования к системным ресурсам (в отличие от GitLib). Прост в установке и настройке. 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-терминала:

Установка и настройка Nginx

Установим и настроим Nginx в качестве обратного прокси-сервера для Gogs. Благодаря этому, сможем получать доступ к Gogs не по IP адресу сервера, где располагается Gogs, а используя доменное имя (git.adminkin.com). Nginx также будет обрабатывать HTTPS соединения к Gogs.

apt install nginx

Создаем конфигурационный файл /etc/nginx/sites-available/git.adminkin.com.conf:

touch /etc/nginx/sites-available/git.adminkin.com.conf

Добавляем в файл следующие строки:

server < listen 80; server_name git.adminkin.com; root /var/www/html; index index.nginx-debian.html; location / < try_files $uri $uri/ =404; >> 

Создаем символьную ссылку:

ln -s /etc/nginx/sites-available/git.adminkin.com.conf /etc/nginx/sites-enabled/git.adminkin.com.conf
nginx

Ура! Домен git.adminkin.com доступен по HTTP на 80 порту:

Настройка Nginx. Домен доступен по HTTP на 80 порту

Пора получать бесплатный SSL сертификат от Let’s Encrypt на домен git.adminkin.com. Устанавливаем Certbot (клиент Let’s Encrypt, который создает и устанавливает SSL сертификаты от Let’s Encrypt):

apt install certbot python3-certbot-nginx

Запускаем Certbot для генерации SSL сертификата и его установки на сайт:

certbot --nginx -d git.adminkin.com -d www.git.adminkin.com --register-unsafely-without-email

Если просмотреть конфигурационный файл /etc/nginx/sites-available/git.adminkin.com.conf, то обнаружите, что Certbot внес изменения в этот файл. Перезагружаем Nginx, чтобы изменения в конфигурационном файле были применены:

nginx -s reload

SSL сертификат работает. Переадресация (редирект) с HTTP на HTTPS, прописанная Certbot-ом в конфигурационном файле, работает.

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

Для автоматического обновления SSL сертификата добавим задачу в cron. Для этого под пользователем root откроем для редактирования файл crontab:

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.com.conf и приводим его к виду:

server < listen 443 ssl; server_name git.adminkin.com; location / < proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:3000; >ssl_certificate /etc/letsencrypt/live/git.adminkin.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.adminkin.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; > server < listen 80; server_name git.adminkin.com www.git.adminkin.com; return 301 https://$server_name$request_uri; >server < listen 443; server_name www.git.adminkin.com; ssl_certificate /etc/letsencrypt/live/git.adminkin.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.adminkin.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; return 301 https://git.adminkin.com$request_uri; >

Настройка Nginx. Обратный прокси-сервер

Перезагружаем Nginx, чтобы изменения в конфигурационном файле были применены:

nginx -s reload

Набираем в адресной строке браузера http://git.adminkin.com/, и происходит редирект на https://git.adminkin.com/install. Установка Git сервиса Gogs продолжится в браузере.

Web Installer Gogs

Настройка Git сервиса Gogs

Настройки базы данных (см. рисунок выше) оставляем по умолчанию. Вводим только Пароль пользователя gogs базы данных PostgreSQL, который задали в разделе Установка PostgreSQL.

Общие параметры Gogs тоже оставляем по умолчанию, кроме:

Общие параметры Gogs

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

Расширенные настройки тоже оставляем по умолчанию. Только создадим учетную запись администратора. Для этого заполняем поля: Имя пользователя, Пароль, Подтвердить пароль и нажимаем кнопку Установить Gogs:

В дальнейшем, если потребуется изменение параметров Gogs, это можно сделать вручную, открыв конфигурационный файл /home/git/local/gogs/custom/conf/app.ini.

Все! Мы оказались в панели управления администратора Gogs, можем создавать свой первый собственный Git-репозиторий (здесь мы этого касаться не будем).

Панель управления Gogs

Осталось запретить доступ к сайту Gogs по незащищенному протоколу HTTP. Если в адресной строке браузера набрать http://git.adminkin.com:3000/, то будет предоставлен доступ по HTTP-протоколу:

Доступ к Gogs по HTTP протоколу

Это потому, что веб-сервер Gogs прослушивает все сетевые интерфейсы на порту 3000. Для того, чтобы сайт Gogs был доступен только по безопасному 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 сэкономит деньги бизнеса: не нужно арендовать cервер c супер-конфигурацией (как в случае с GitLab) и не нужно оплачивать все новые и новые тарифы (как в случае с GitHub). Gogs бесплатный, легковесный и кроссплатформенный!

Пожалуйста, вопросы задавайте в комментариях под статьей!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *