[Настройка Linux, Git] Как я домашний Git-сервер Gogs на Alpine linux устанавливал

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
24-Мар-2021 20:32

“Опасное это дело, Фродо, выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесет.” (с)  Властелин Колец: Братство Кольца
С чего всё началосьМне захотелось завести себе домашний Git-сервер, чтобы практиковаться в разработке и развёртывании пет-проектов. Плюс спокойнее, когда твои наработки лежат не только на github.В качестве операционной системы выбрал Alpine linux, так как меня заинтересовали её возможности. Был опыт размещения на ней небольшого сервиса. Понравилось, что в ней нет ничего лишнего, а ещё она очень лёгкая в плане системных ресурсов.Исходные данныеВ распоряжении был гипервизор на Proxmox 6.1-3, контейнер с системой Alpine  просто взял из шаблонов (template) - Alpine Linux 3.12 Kernel 5.3.10-1-pve on an x86_64.Реализацию Git-сервера выбирал из числа открытых и бесплатных проектов. Решил взять для начала, тот у которого меньше настроек и лишних плюшек. Мне нужен git-сервер, который не требователен к ресурсам и наличием базовых операций. Остановился на проекте Gogs.io.Причины такого выбора:
  • знакомый интерфейс, т.к. использую на работе;
  • написан на Golang - значит довольно шустрый;
  • минимальный набор настроек и функционала;
  • нормальная документация.
Мой гипервизор пока обладает скромным железом. В распоряжении только:
  • ЦПУ - 4 x AMD Ryzen 3 1200 Quad-Core
  • ОЗУ - 8 Гб
  • Диски - два SSD в ZFS
Из них 1-2 Гб ОЗУ забирает ОС гипервизора. Значит на контейнеры и виртуалки остаётся не так много ресурсов. Решил, что для 1-2 пользователей git-сервера хватит одного ядра, 512 Мб ОЗУ и 8 Гб диска.Запуск контейнера с ОС AlpineНастройка и запуск Alpine на Proxmox очень просты и удобны. Описывать их не буду. Скажу только, что мне эта тема с шаблонами очень понравилась. Жаль, что самих шаблонов не так много на мой взгляд.С другой стороны, никто не мешает развернуть любую ОС и поставить нужный сервис из её пакетов. Например в Alpine так:
alpine:~# apk search zabbix
Подготовка системыСменил имя хоста сервера:
alpine:~# hostname gogs-githost
Вначале я установил openssh и nano для его настройки, чтобы нормально подключаться по ssh:
gogs-githost:~# apk add openssh nano
Далее добавил демон в автозагрузку:
gogs-githost:~# rc-update add sshd
Поправил конфиг /etc/ssh/sshd_config и убрал комментарии строк:
...
Port 22

PermitRootLogin yes
...
Всё, запустил демон:
gogs-githost:~# /etc/init.d/sshd start
Установка сервиса GogsПопытка перваяВ документации к Alpine рекомендуют для разработки использовать Gitea. Но это слишком просто неть, поэтому выбрал другое. Я решил внаглую установить git-сервер командой:
gogs-githost:~# apk add gogs
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/8) Installing ca-certificates (20191127-r4)
(2/8) Installing nghttp2-libs (1.41.0-r0)
(3/8) Installing libcurl (7.69.1-r3)
(4/8) Installing expat (2.2.9-r1)
(5/8) Installing pcre2 (10.35-r0)
(6/8) Installing git (2.26.3-r0)
(7/8) Installing gogs (0.11.91-r1)
Executing gogs-0.11.91-r1.pre-install
(8/8) Installing gogs-openrc (0.11.91-r1)
Executing busybox-1.31.1-r19.trigger
Executing ca-certificates-20191127-r4.trigger
OK: 89 MiB in 38 packages
В результате, система помимо самого сервиса gogs установила ещё и дополнительные пакеты, например сам git. Пробую запустить сервер и получаю ошибку:
gogs-githost:~# gogs web
2021/03/18 20:13:42 [ WARN] Custom config '/usr/bin/custom/conf/app.ini' not found, ignore this if you're running first time
2021/03/18 20:13:42 [TRACE] Custom path: /usr/bin/custom
2021/03/18 20:13:42 [TRACE] Log path: /usr/bin/log
2021/03/18 20:13:42 [TRACE] Log Mode: Console (Trace)
2021/03/18 20:13:42 [ INFO] Gogs 0.11.91.0811
2021/03/18 20:13:42 [ INFO] Cache Service Enabled
2021/03/18 20:13:42 [ INFO] Session Service Enabled
2021/03/18 20:13:42 [ INFO] SQLite3 Supported
2021/03/18 20:13:42 [ INFO] Run Mode: Development
2021/03/18 20:13:42 [FATAL] [...gogs/gogs/cmd/web.go:66 checkVersion()] Fail to read 'templates/.VERSION': open /usr/bin/templates/.VERSION: no such file or directory
Как мы видим, ему не хватает конфига и структуры каталогов для работы. Проверил каталог /usr/bin, там оказался лишь одинокий исполняемый файл gogs.Попытка втораяПосле первой попытки я попробовал воссоздать необходимую структуру и конфиг вручную. Ничего хорошего из этого не вышло.Тогда решил пойти другим путём - в документации Gogs описывается установка под популярные дистрибутивы Linux. Обнаружил там таблицу архивов под две версии Gogs, поэтому проверил, какой установился у меня на Alpine:
gogs-githost:~# gogs -v
Gogs version 0.11.91.0811
Решил попробовать вот этот. Скопировал его в директорию /opt на Alpine:
gogs-githost:/opt# wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz
Распаковал:
gogs-githost:/opt# tar -xvf gogs_0.11.91_linux_amd64.tar.gz
Мой замысел был в том, что либо он заработает после распаковки сразу, либо с него можно будет взять недостающей структуры и конфигов. Поменял права на директорию распакованного gogs:
gogs-githost:/opt# chown -R root:root gogs
Попробовал запустить и получил странную ошибку (спойлер: не удивительно, ведь С-компиляторы разные на Alpine это mysl, но об этом я узнаю позже):
gogs-githost:/opt/gogs# ./gogs web
-ash: ./gogs: not found
Тогда то мне и пришла дикая идея подсунуть gogs из Alpine пакетов:
gogs-githost:/opt/gogs# cp /usr/bin/gogs gogs
И бинго! Сервер стартанул и я даже смог его настроить из веб-интерфейса. Но это был не конец…Попытка третьяНесмотря на охватившую меня эйфорию, радости и “я у мамки сисадмин!” весь следующий день я провёл в раздумьях. Мне не верилось, что в таком перспективном проекте как Alpine, есть место битому пакету. Чувство, что ошибка на моей стороне, не давала покоя.Я нашел телеграм-чат по Alpine и (увы) на ломаном инглише объяснил свою проблему. Меня направили проверять конфиги в репозитории пакета gogs проекта Alpine.Честно - у меня не получилось выяснить, в чём ошибка. Но добыл ценную инфу - сервер можно запускать с явным указанием пути к файлу конфига. Попробовал, и штатный gogs-сервер запустился:
gogs-githost:~# gogs web -c /etc/gogs/conf/app.ini
2021/03/20 19:22:47 [TRACE] Custom path: /usr/bin/custom
2021/03/20 19:22:47 [TRACE] Log path: /var/log/gogs
2021/03/20 19:22:47 [TRACE] Log Mode: File (Info)
2021/03/20 19:22:47 [ INFO] Gogs 0.11.91.0811
Дальше настраивал по этому видео-уроку, начиная с момента про настройку из веб-интерфейса.Конечно, это не полная настройка. При настройке из GUI, я выяснил, что нужно ещё ставить bash. Кроме этого, нужно настроить автозапуск сервера. Вернее, он уже есть - /etc/init.d/gogs, но не работает:
#!/sbin/openrc-run
name=gogs
conffile="$GOGS_CUSTOM/conf/app.ini"
command="/usr/bin/gogs"
command_args="web -c $conffile"
start_stop_daemon_args="${GOGS_USER:+--user} $GOGS_USER --env GOGS_CUSTOM=$GOGS_CUSTOM"
pidfile="/var/run/gogs.pid"
command_background="yes"
depend() {
        use logger dns
        need net
        after firewall
}
Путём перебора вариантов пришёл к такому:
#!/sbin/openrc-run
name=gogs
conffile="/etc/gogs/conf/app.ini"
command="/usr/bin/gogs"
command_args="web -c $conffile"
start_stop_daemon_args="${GOGS_USER:+--user} root --env GOGS_CUSTOM=/etc/gogs"
pidfile="/var/run/gogs.pid"
command_background="yes"
depend() {
        use logger dns
        need net
        after firewall
}
Грубо, но да - я просто вместо переменных прописал путь и пользователя (того, которого задавал при настройке из веб-интерфейса). Возможно на этот момент мне указывали в чатике Alpine?Как на самом деле нужно былоПосле такого долгого пути экспериментов и щупанья головой стены на прочность, меня осенило! Сервер не нужно запускать вручную, он должен стартовать вместе с системой. Значит, его надо настроить по аналогии с openssh.Снова решил проверить - клонировал контейнер с Alpine и уже настроенным ssh. А дальше всё оказалось очень просто:
alpine:~# apk add gogs
alpine:~# rc-update add gogs
* service gogs added to runlevel default
alpine:~# /etc/init.d/gogs start
* Starting gogs ...                                                                     [ ok ]
alpine:~# rc-status
Runlevel: default
networking                                                                    [  started  ]
sshd                                                                             [  started  ]
crond                                                                            [  started  ]
gogs                                                                             [  started  ]
Этого действительно достаточно, чтобы запустить свой Git-сервер (если вас устраивает БД SQLite). Теперь можно идти на веб-интерфейс, у меня это был http://192.168.50.205:3000, и делать базовые настройки. ЗаключениеЭтой статьёй я хочу обратить внимание на важность документации и навыков по ОС Linux. Скорее всего, опытные линуксоиды сразу поняли в чём дело и от души посмеялись над моим дилетанством. Что ж, теперь мне и самому забавно, каким извилистым был мой путь =).Но правда также и в том, что простой справки по развороту именно пакета gogs на Alpine я не нашёл. Надеюсь, моя статья будет полезна тем, кто задумает нечто подобное.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_nastrojka_linux (Настройка Linux), #_git, #_alpinelinux, #_git, #_gogs, #_nastrojka_linux (
Настройка Linux
)
, #_git
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 24-Ноя 22:15
Часовой пояс: UTC + 5