Apache git сервер с Alpine Linux на Docker - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь обслуживать репозитории git через http, используя образ Apache Alpine в Docker.

Я могу заставить Apache обслуживать документы и папки более http (есть некоторые репозитории без gitв этой папке это только подтверждение концепции на данный момент, поэтому их можно игнорировать):

docker alpine apache git

Однако, когда я пытаюсь клонироватьGit РЕПО, я могу только успешно клонировать репо DynamicDockerTesting.git.При попытке клонировать другое репо я получаю

fatal: repository 'http://192.168.1.32/<repo-name>.git' not found

Я проверил каждую разницу, которую я могу представить, между DynamicDockerTesting.git и подарком другого репо, но не смог найти сколько-нибудь значимого различия, которое могло бы объяснитьпочему я могу клонировать этот конкретный репо, но ни один из других.Если у вас есть предложения о том, как выяснить, почему это так, я бы хотел их услышать, но что более важно, если вы знаете, что я делаю неправильно, и как успешно развернуть эти репозитории с помощью docker-alpine-apache-git комбинация, я был бы чрезвычайно признателен.

Вот содержимое моего Dockerfile

FROM httpd:alpine 

RUN mkdir -p /usr/local/apache2/git
RUN apk update && apk upgrade && apk add git git-gitweb apache2-utils apache2
COPY apacheGitServer.xml  /usr/local/apache2/
RUN cat /usr/local/apache2/apacheGitServer.xml >> /usr/local/apache2/conf/httpd.conf
RUN sed -i '/LoadModule alias_module modules\/mod_alias.so/aLoadModule cgi_module modules/mod_cgi.so' /usr/local/apache2/conf/httpd.conf

Кажется, что Alpine Apache запускает все из /usr/local/apache2 (вместо * 1024)*), поэтому здесь я просто добавляю к стандартному httpd.conf логику для развертывания репозиториев, а также включаю модуль cgi, так как он отключен по умолчанию (env и alias включены по умолчанию).

Вот содержание apacheGitServer.xml

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /usr/local/apache2/git/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/git
    ServerName 192.168.1.32

    <Directory "/usr/local/apache2/git">
        Allow from All
        Options +Indexes +ExecCGI
        AllowOverride All
        AddHandler cgi-script cgi
    </Directory>

    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv GIT_PROJECT_ROOT /usr/local/apache2/git
    ScriptAlias /git/ /usr/libexec/git-core/git-http-backend
    #ScriptAlias / /usr/share/gitweb/gitweb.cgi
</VirtualHost>

apacheGitServer.xml прошло ряд ревизий, так как я попробовал каждую конфигурацию, которая могла придумать, чтобы это работало, ноно безрезультатно.Эта конфигурация делает репозитории доступными, но не клонированными (за исключением, конечно, DynamicDockerTesting.git)

С Dockerfile и apacheGitServer.xml в одной папке, я создаю образ с

docker build -t apachegit .

, а затем я cd 'отправился в каталог с моим git-репо и выдал команду

docker run -d --name apachegitserver -p 80:80 -v $(pwd):/usr/local/apache2/git apachegit

Iпотратили два дня, пытаясь заставить это работать, поэтому любые указания на этом этапе приветствуются.

РЕДАКТИРОВАТЬ

top command inside container

бег top Я вижу, что процесс принадлежит daemon, у меня cd 'до /usr/local/apache2/git изнутри контейнера и запускаю chown -R daemon:daemon ., но теперь, когда я клонирую:

git clone http://192.168.1.32/git/ScalaOpenCV.git

Я получаю 403:

fatal: unable to access 'http://192.168.1.32/git/<repo name>.git/': The requested URL returned error: 403

(на самом деле я получаю 403 независимо от того, изменяю я разрешения или нет)

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Итак, я наконец-то смог клонировать через http. Вот что наконец сработало:

1) поместите все репозитории git в папку развертывания по умолчанию (/usr/local/apache2/htdocs), используя флаг docker -v из моего исходного сообщения с вопросом.

2) Измените значение по умолчанию httpd.conf для альпийского изображения и добавьте следующее:

2a) <Directory "usr/local/apache2/htdocs"> узел теперь имеет: Options +Indexes +FollowSymLinks +ExecCGI (не уверен, что опция FollowSymLinks необходима)

2b) Нет необходимости добавлять <VirtualHost> узел

2c) добавить следующие настройки в конфигурацию: SetEnv GIT_PROJECT_ROOT /usr/local/apache2/htdocs, SetEnv GIT_HTTP_EXPORT_ALL, ScriptAlias / /usr/libexec/git-core/git-http-backend/ (Очевидно, это все довольно стандартные материалы из других публикаций о том, как настроить сервер Apache Git)

2d) Комментарий в LoadModule cgi_module modules/mod_cgi.so

2e) Добавьте следующий Directory узел:

<Directory "/usr/libexec/git-core">
   Options +ExecCGI
   AllowOverride All
   Require all granted
</Directory>

Я НЕ ЗНАЮ, КАК БЕЗОПАСНЫ ЭТИ КОНФИГУРАЦИИ

Теперь, когда я перемещаюсь локально по IP-адресу контейнера, браузер выдает мне 404, что обслуживать нечего. Однако, если я пытаюсь клонировать, git находит репозитории и клоны просто отлично.

Я клонирую из корневого контекста, т.е. http://<ip address>/<git repo>.git.

Я все еще работаю, чтобы выяснить, почему браузер не индексирует репо для отображения, но по крайней мере основная потребность (клонирование по http) работает.

0 голосов
/ 14 мая 2018
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend

Это означает, что любая операция git должна включать URL с /git/ в нем (как показано в этой настройке ).

git clone http://192.168.1.32/git/<repo-name>.git

Проверьте журналы apache, чтобы увидетьесли есть разница между DynamicDockerTesting.git и остальными.Проверьте право собственности, как показано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...