###### 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. Но еще более вероятно мы бы использовали сертификат подписанный доверенным центром сертификации.