Всем привет!  В данном туториале я расскажу вам как можно задеплоить gitea на своём железе с использованием docker-compose подключить drone, для возможности автоматизации тестирования и доставки собственных приложений, настроить reverse-proxy через nginx  для доступа через сеть и включить portainer для мониторинга запущенных контейнеров. Для запуска полного стека нам будет необходим следующий софт: docker - стоит v20.10.21, хотя версии больше 18 должны подойти; docker-compose - главное что бы поддерживался compose v3, у меня стоит 2.12.2; go - golang v1.19.3+ будет использоваться для получения сертификатов через lego, тем кто не планирует размещение сайта данный пункт можно пропустить. Инструкций по установке в зависимости от системы более чем достаточно, установка не должна быть сложной. Для проверки, что всё в норме можно запустить данный скрипт: go version;docker version;docker compose version Скрипт должен показать установленные версии программ. Минимальный compose для запуска локального инстанса выглядит следующим образом: Создаем рабочую директорию, в ней файл docker-compose.yml и добавляем туда следующее содержимое. После запускаем команду docker compose up. После мы можем перейти в браузере по адресу localhost, порт можно не указывать, и мы должны увидеть окно настройки gitea: Параметры менять не обязательно, можно оставить всё как есть и запустить локальную копию. После небольшого ожидания мы должны увидеть локальную версию gitea, уже готовую к использованию. У gitea очень большой набор настроек, и список различных модификаций, далее постараюсь подсветить список самого интересного для первого запуска: DEFAULT_USER_IS_RESTRICTED (service) - позволяет ограничить в правах новых пользователей (не могут просматривать контент и выполнять никакие действия), подойдет для закрытых команд; MAX_CREATION_LIMIT (repository) - пользователи могут просматривать репозитории и создавать issue, но ограниченны определенным количеством в создании собственных; PROTOCOL (server) - будет ли использоваться http или https, если планируется выносить сайт в сеть, то строго рекомендуется использовать https или настроить https после через nginx; DOMAIN (server) - название домена сервера, которое в случае использование поддомена должно так же включать и его sub.example.pw; ROOT_URL (server) - должен совпадать с используемой ссылкой и включать http:// или https://. Полный список настроек есть на официальном сайте. Так же есть много различных опций по настройке тем, плагинов и других плюшек. Далее можно подключить к gitea дрона, что бы автоматизировать процесс тестирования и анализа кода: Дрон подключается к gitea как сторонее приложение и требует предоставления ему соответствующих прав, через графу настройки -> приложения: Там нужно указать название приложения и его адрес для перехода по ссылке в формате: http://localhost:81/login - протокол, хост, порт, /login И после создать кнопку создать приложение, сохраненные secret/ client_id сохранить для compose. Далее необходимо сгенерировать токен в этой же вкладке, опять же для compose. Теперь добавим дрон в сам с полученными параметрами docker-compose: Полученный токен идет в env DRONE_USER_CREATE, после token. Запускаем compose и подключаем drone. Если запутались в процессе настройки, то тут официальная дока. Авторизуем приложение и можем настроить дрон. В данный момент drone может начать выдавать ошибку: invalid character '<' looking for beginning of value Не стоит из-за этого сильно переживать, тк после настройки nginx данная проблема быстро решается. Сейчас наша задача - перенаправить весь входящий трафик на нашу железку, что бы при переходе по ссылке можно было всегда попадать в одно место. Как правило данное действие состоит из двух этапов, во-первых - перенаправляем DNS записи у предоставителя нашего домена (на fozzy это выглядит так, сильных отличий в других местах быть не должно, интерфейс будет однообразен): Для каждого поддомена рекомендуется создать отдельную запись. Далее необходимо перенаправить трафик в роутере в локальной сети (в случае с использованием виртуалки достаточно просто открыть порты). На моём роутере это выглядит примерно так: Теперь когда у нас уже есть gitea и drone, можно приступить к настройке nginx: Добавляем следующие строки в уже написанный docker-compose. Так мы добавим nginx к существующим сервисам, но сначала нам нужно прописать конфиг для nginx. Я буду писать его в файле - nginx/nginx.conf (и потом маунтить его в докер). Он будет включать 2 пункта - в зависимости от поддомена (которые вы можете задать как хотите) будет перенаправлять трафик на запущенные контейнеры: Теперь мы установим cli-утилиту которая называется lego и получим бесплатные сертификаты запустив данный скрипт в нашей директории с docker-compose.yml файлом. при этом певая строка - установка сертбота, последняя - предоставление доступа к сертам всем пользователям на устройстве (замените имя на своего пользователя). Далее мы можем запускать nginx вместе с остальными контейнерами. Теперь мы можем опционально подключить портейнер (не всем это нужно, даже без него у нас есть рабочая конфигурация).  Далее этого добавим в compose еще 1 сервис: И выполним похожие действия по настройке домена/серта/nginx-a. Настроенный портейнер позволит мониторить состояние остальных сервисов: Данный сетап позволяет полностью уйти от использования внешних систем контроля версий (в моём случае - github) и оставлять все свои данные на собственных носителях. Настройка требует времени, но появляются следующие плюшки: Полностью open-source + self-hosted стек. Полный контроль за всеми данными в системе, отсутствие облаков и третьих лиц. Удобный drone-ci для автоматизации операций с контейнерами. Возможность моментальной автоматической выкладки в сеть верифицированного контента. При наличии свободной железки (старый ноут или raspberry), система будет обходится примерно в 200Р в месяц в зависимости от стоимости домена/статического ip адреса у провайдера. Мой собственный инстанс после настройки тем и других докрутов выглядит примерно так: https://fmnx.su/ Моя версия docker-compose.yml (многое докрутил под себя): При наличии вопросов в настройке прошу обращаться: tlg @dancheg97  0xFC04D07F75B663FC