[Настройка Linux, Git] Как я домашний Git-сервер Gogs на Alpine linux устанавливал
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
“Опасное это дело, Фродо, выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесет.” (с) Властелин Колец: Братство Кольца
С чего всё началосьМне захотелось завести себе домашний 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
===========
Похожие новости:
- [Работа с 3D-графикой, Машинное обучение] Phygital podcast — разговариваем о 3D ML и phygital технологиях
- [Open source, GitHub, Законодательство в IT, Биографии гиков] Опубликовано открытое письмо в поддержку Столлмана
- [Настройка Linux, Серверное администрирование] Monitorix - за минуту развёртываем мониторинг Linux сервера
- [Информационная безопасность, Системы управления версиями, Управление продуктом] Как мы устранили редкую ошибку, из-за которой пришлось разлогинить всех пользователей Github (перевод)
- [Open source, GitHub, Законодательство в IT, Биографии гиков] Открытое письмо за увольнение Столлмана из совета FSF подписали более 600 сторонников СПО
- [Настройка Linux, Open source, Графические оболочки, *nix] Почему оболочка Garuda KDE превзошла Deepin Linux (перевод)
- [Настройка Linux, Информационная безопасность, C] Серьёзная безопасность: всплывшие спустя 15 лет баги в ядре Linux (перевод)
- [Open source, Разработка мобильных приложений, Разработка под Android, GitHub, Kotlin] Легкий DataBinding для Android
- [Настройка Linux] Чиним резолвинг адресов в VPN-локалке (openconnect) для docker и systemd-resolved
- [Настройка Linux, Производство и разработка электроники, Компьютерное железо, Ноутбуки] Pangolin — маленький Linux-ноутбук с процессором Ryzen и графикой Radeon
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_git, #_alpinelinux, #_git, #_gogs, #_nastrojka_linux (
Настройка Linux
), #_git
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 24-Ноя 22:15
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
“Опасное это дело, Фродо, выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесет.” (с) Властелин Колец: Братство Кольца
alpine:~# apk search zabbix
alpine:~# hostname gogs-githost
gogs-githost:~# apk add openssh nano
gogs-githost:~# rc-update add sshd
...
Port 22 … PermitRootLogin yes ... gogs-githost:~# /etc/init.d/sshd start
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-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 gogs-githost:~# gogs -v
Gogs version 0.11.91.0811 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-githost:/opt# chown -R root:root gogs
gogs-githost:/opt/gogs# ./gogs web
-ash: ./gogs: not found gogs-githost:/opt/gogs# cp /usr/bin/gogs 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 #!/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:~# 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 ] =========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_git |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 24-Ноя 22:15
Часовой пояс: UTC + 5