Я хочу к mirgrate свои репозитории от: (Сантьяго) RedHat 6.9 с апачскими 2.2 и php 5.3
кому: Ubuntu 16.04.4 LTS с апачскими 2.4 и php 7.0
Я использую "gitweb/git-http-backend" для сервера репозитории через https, таким образом, я не использую SSH здесь. Другая важная вещь состоит в том, что я не собираюсь изменять Имя сервера VirtualHost, таким образом, пользователи даже не должны замечать это.
К сожалению, предварительные тесты на моем новом сервере не работают при попытке клонировать существующий репозиторий, я получу 404, не найденные ошибкой.
Мой первый вопрос здесь: для тестов название исходного сервера: my_server.com, затем для нового сервера, я использую my_server_dev.com. Это только для тестирования. Впоследствии я заменю название нового сервера с названием старого сервера. Я должен изменить имя сервера в репозиториях установки тестирования, чтобы смочь видеть, работает ли мерзавец? Я предполагаю, что однажды тесты работают и ничего не должен будет изменять на репозиториях, правильно?
Это работает в моем старом сервере:
<VirtualHost *:443>
ServerName my_server.com
AddType application/x-httpd-php .php
CustomLog "/var/log/httpd/my_server_access.log" common
RewriteEngine On
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/etc/ssl/certs/my_cert.crt"
SSLCertificateChainFile "/etc/ssl/certs/my_fullchain.crt"
SSLCertificateKeyFile "/etc/ssl/certs/my_key.priv.key"
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
SetEnv GIT_PROJECT_ROOT /home/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Alias /git /home/git
<Location /git>
AuthType Basic
AuthName "Git repositories"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL "ldaps://my_server1.com my_server2.com my_server3.com/ou=users,ou=my_ou,o=my_domain,c=my_country?uid?sub?(objectClass=*)"
AuthLDAPBindDN "my_bind_dn"
AuthLDAPBindPassword my_password
AuthLDAPGroupAttributeIsDN off
AuthLDAPGroupAttribute memberUid
require valid-user
AuthGroupFile /etc/httpd/my_group_file
</Location>
<Location /git/my_repo1.git>
Allow from all
Order allow,deny
require group group1 group2
</Location>
<Location /git/my_repo2.git>
Allow from all
Order allow,deny
require group group1 group3
</Location>
#More repositories here
</VirtualHost>
Таким образом, теперь, скопировав все под "/home/git" с моего старого сервера на мой новый сервер, я имею:
<VirtualHost *:443>
ServerName my_server.com
SSLEngine on
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCertificateFile /etc/ssl/certs/my_cert.pem
SSLCertificateChainFile /etc/ssl/certs/my_fullchain.pem
SSLCertificateKeyFile /etc/ssl/certs/my_privkey.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/my_domain_access.log combined
RewriteEngine On
DocumentRoot ${APACHE_ROOT}/my_server
<Directory ${APACHE_ROOT}/my_server>
Options Indexes FollowSymLinks MultiViews
Require all granted
AllowOverride All
</Directory>
SetEnv GIT_PROJECT_ROOT /var/www/html/my_server/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Alias /git /var/www/html/my_server/git
<Location /git>
AuthType Basic
AuthName "Git repositories"
AuthBasicProvider ldap
AuthLDAPBindAuthoritative on
AuthLDAPURL "ldaps://my_server1.com my_server2.com my_server3.com/ou=users,ou=my_ou,o=my_domain,c=my_country?uid?sub?(objectClass=*)"
AuthLDAPBindDN "my_bind_dn"
AuthLDAPBindPassword my_password
AuthLDAPGroupAttributeIsDN off
AuthLDAPGroupAttribute memberUid
require valid-user
AuthGroupFile /etc/apache2/my_group_file
</Location>
<Location /git/my_repo1.git>
require group group1 group2
</Location>
<Location /git/my_repo2.git>
require group group1 group3
</Location>
#More repositories here
</VirtualHost>
Если Вы посмотрите тщательно, то Вы будете видеть, что единственные изменения, которые я имею:
Это было изменено:
Порядок позволяет, отклоняет
позвольте от всех
:
Потребуйте всех предоставленных
"/home/git" был изменен: "/var/www/html/my_domain/git". Честно говоря, я также попробовал первую опцию, но она не работала. Я видел случаи, где другие папки снаружи от "/var/www/html" не будут работать.
Позвольте от всех
Порядок позволяет, отклоняет
потребуйте группы group1
просто:
потребуйте группы group1
Это, кажется, достаточно для Apache 2.4
Остальная часть моей конфигурации симпатична то же. Я сейчас, что SSL работает и аутентификация LDAP также. Если я дам учетные данные от пользователя, которому не разрешают получить доступ к репозиторию, то я буду видеть это на файле регистрации ошибок:
[authz_groupfile:error] [pid 17829] [client xxx.xxx.xxx.xxx:xxxx] AH01666: Authorization of user my_user1 to access /git/my_repo.git failed, reason: user doesn't appear in group file (/etc/apache2/my_group_file).
[authz_core:error] [pid 17829] [client xxx.xxx.xxx.xxx:xxxx] AH01631: user my_user1: authorization failure for "/git/my_repo.git":
Попытка пользователем, который имеет доступ, передаст аутентификацию, но я буду видеть это на клиенте:
fatal: repository 'https://my_domain.com/git/my_repo.git/' not found
И в журнале доступа существует действительно 404 кода ошибки:
xxx.xxx.xxx.xxx - my_user [14/Mar/2018:20:45:29 +0100] "GET /git/my_repo.git/info/refs?service=git-upload-pack HTTP/1.1" 404 596 "-" "git/2.10.0.windows.1"
Что могло быть неправильным здесь?
Спасибо в усовершенствованном
Наилучшие пожелания Josef
Хорошо, я понял это. Оказывается, что или mod_cgi или mod_cgid необходимы. Вот стандарт/etc/apache2/conf-available/gitweb.conf, который идет с двоичным пакетом из Ubuntu:
<IfModule mod_alias.c>
<IfModule mod_mime.c>
<IfModule mod_cgi.c>
Define ENABLE_GITWEB
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_GITWEB
</IfModule>
</IfModule>
</IfModule>
<IfDefine ENABLE_GITWEB>
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
</IfDefine>
Таким образом, если Вы работаете с gitweb, Вам нужно: mod_alias и mod_mime. Вам нужно также: mod_cgi или mod_cgid. В моем случае у меня были первые два, но ни один из последних двух cgi модулей.
Для включения mod_cgid Вы нуждаются или в mpm_worker_module или в mpm_event_module. Для mod_cgi Вам нужно: mpm_prefork_module
Я не знаю, какой различия между двумя cgis, но так как у меня уже есть mpm_prefork_module, я решил включить последний:
sudo a2enmod cgi
На моем случае для сервера тестирования я должен перейти к каждому репозиторию и сделать:
git update-server-info
Начальные тесты теперь работают.
Наилучшие пожелания Josef