Работа с системой контроля версий
В данном занятии для управления версиями используется сервис Gogs, построенный на основе Git. Основные возможности VCS демонстрируются на примере написания приложения для вывода названий отелей, полученных с помощью API. В рамках решения задачи в master репозитории разрабатывается метод для вывода списка отелей, а в новом репозитории будет реализована верстка названий. Основные шаги:
- Настройка репозитория в Visual Studio
- Работа в master ветке: разработка функционала
- Работа в новой ветке: изменение верстки, демонстрация отката изменений, слияние веток
Обычно для решения новой задачи программист заводит новую ветку. После написания кода и его отладки изменения из новой ветки сливаются в 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.  Создаем пользователя для gogs. «` adduser —system —group —disabled-password —shell /bin/bash —home /home/git —gecos ‘Контроль версий Git’ git «` Скачиваем архив с бинарным файлом gogs используя wget с [сайта](https://dl.gogs.io/ ).  Разархивируем скаченный архив.  Переносим папку gogs в созданный ранее каталог /home/git. Изменяем владельца каталога и файлов в нем на git:git.  Скопируем готовый файл модуля systemd в каталог с сервисами.  Запускаем сервис. И добавляем в автозагрузку.  Перейдем по ip_адрес-сервера:3000. И продожаем web установку. Выбираем базу данный SQLite3. Указываем полный путь до файла бд /home/git/gogs/gogs.db.  Указываем в разделе домен адрес нашего сервера или DNS имя сервера.  Жмем установить gogs. После ждем минутку и обновляем страницу. Нажимаем на регистрацию. Создайем аккаунт. Первый созданный аккаунт это будет аккаунт администратора gogs.  Входим в аккаунт.  ## Настройка nginx в качестве прокси сервера завершения ssl. Мы можем с вами заметить что по умолчанию gogs использует протокол http что не является безопасным.  Для решения этой проблемы настроим 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 «`  Создайем конфиг gogs_ssl.conf в директории /etc/nginx/conf.d. В proxy_pass указываем адрес сервера gogs. Не забываем удалить стандартный сайт Nginx или отключить его если используеться IP адресс вместо dns имени.  Теперь мы можем переходит на сайт по https без указания порта.  ## Настройка ufw для блокировки 80 и 3000 портов. На сайт можно до сих пор зайти по 3000 порту это дыра в системе и стоит это исправить. Установите ufw. Ufw это надстройка над IPtables с более дружелюбным способом создавать правила.  Перед тем как что то блокировать и запускать ufw создаем правило разрешающие ssh подключения в ufw это делается просто:  Теперь нам нужно разрешить подключения по https.  По умолчанию после включение ufw все не указанные как разрешенные порты будут блокироваться. Поэтому блокировать 3000 порт нам не нужно. Однако нужно создать разрешающие правило для подключения на этот порт с нашего Nginx proxy.  Запускаем ufw. И смотрим статус.  Теперь при попытки подключиться по http мы будет получать такое сообщение от браузера, тоже самое, будет и по 3000 порту. Зато по https у нас все будет прекрасно работать.  Работа по https.  ## Тестирование Gogs. Давайте проверим работоспособность нашей системы контроля версий gogs. Создаем репозиторий.  Мы попадем на такую страницу.  Открываем свой любимый редактор кода в моем случае это vscode. Открываем терминал, отключаем проверку ssl гитом и добавляем репозиторий.  Создаем файл Readme.md  Закоммитьтем изменения.  Залеваем обновления в репозиторий. Нас спросит логин и пароль указываем логин пароль созданного ранее аккаунта.  Обновляем страницу репозитория в браузере. Как можно увидеть появился файл Readme.md.  Отключать проверку ssl сертификата не рекомендую с точки зрения безопасности, поэтому после тестирование верните в значение true. В обычной ситуации вам нужно было бы добавлять созданный нами сертификат в доверенные для нашего ПК с git. Но еще более вероятно мы бы использовали сертификат подписанный доверенным центром сертификации.
Last changed by
Read more
МДК02.04 Сетевые языки
Практико-ориентированный курс по изучению администрирования операционных систем Linux.
Атаки на сеть на уровне доступа
В данном мануале вы узнаете несколько банальных атак которые можно провести на L2 уровне.Все тут показанное будет происходить в рамках виртуальное лаборатории EVE-ng.
Знакомство с Linux. Часть четвертая. Сети.
Студент должен уметь настраивать сетевые интерфейсы в основных debian подобных операционных системах Linux.
Межсетевые экраны в OC Linux
Межсетево́й экра́н, сетево́й экра́н, фаервол — программный или программно-аппаратный элемент компьютерной сети, осуществляющий контроль и фильтрацию проходящего через него сетевого трафика в соответствии с заданными правилами.
Создаем собственный 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».
![]()
В консоли переходим в нашу папку с сайтом:
с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, нужно будет выполнить команду:
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-терминала:
Установка и настройка 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 порту:

Пора получать бесплатный 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-ом в конфигурационном файле, работает.

Для автоматического обновления 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 -s reload
Набираем в адресной строке браузера http://git.adminkin.com/, и происходит редирект на https://git.adminkin.com/install. Установка Git сервиса Gogs продолжится в браузере.

Настройка Git сервиса Gogs
Настройки базы данных (см. рисунок выше) оставляем по умолчанию. Вводим только Пароль пользователя gogs базы данных PostgreSQL, который задали в разделе Установка PostgreSQL.
Общие параметры 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 по незащищенному протоколу HTTP. Если в адресной строке браузера набрать http://git.adminkin.com:3000/, то будет предоставлен доступ по HTTP-протоколу:

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