Eu quero mirgrar meus repositórios de:
RedHat 6.9 (Santiago) com o apache 2.2 e php 5.3
para:
Ubuntu 16.04.4 LTS com apache 2.4 e php 7.0
Estou usando o "gitweb / git-http-backend" para armazenar os repositórios por meio de https, portanto, não estou usando o SSH aqui. Outra coisa importante é que eu não vou mudar o nome do VirtualHost Server, então os usuários nem vão notar isso.
Infelizmente, os testes preliminares no meu novo servidor não estão funcionando, ao tentar clonar um repositório existente, recebo um erro 404 não encontrado.
Minha primeira pergunta aqui: para os testes, o nome do servidor original é: my_server.com e, em seguida, para o novo servidor, estou usando my_server_dev.com. Isso é apenas para testes. Depois, substituirei o nome do novo servidor pelo nome do servidor antigo. Preciso alterar o nome do servidor nos repositórios da configuração de teste para poder ver se o git funciona? Eu acho que uma vez que os testes funcionem e não terão que mudar nada nos repositórios, certo?
Isso está funcionando no meu servidor antigo:
<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>
Então, agora, depois de ter copiado tudo em "/ home / git" do meu antigo servidor para o meu novo servidor, eu tenho:
<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>
Se você observar com cuidado, verá que as únicas alterações que eu tenho são:
- Removido: "aplicativo AddType / x-httpd-php .php". Isso já está habilitado no Ubuntu apesar de "/ etc / mods-enabled - > php7.0. *"
- Os diretórios do apache foram alterados para os do Ubuntu: / etc / apache2, / var / log / apache2 e / var / www / html
- O SSLCipherSuite mudou um pouco, mas isso não deve ser um problema
-
Isso foi alterado:
Permitir pedido, negar
permitir de todo
por:
Exigir tudo concedido
-
"/ home / git" foi alterado por: "/ var / www / html / my_domain / git". Para ser honesto, também tentei a primeira opção, mas não funcionou. Tenho visto casos em que outras pastas fora de "/ var / www / html" não funcionam.
- "/ usr / libexec / git-core / git-http-backend /" foi alterado por: "/ usr / lib / git-core / git-http-backend /", que é onde este binário reside no Ubuntu .
- "AuthzLDAPAuthoritative" foi alterado por: "AuthLDAPBindAuthoritative". A primeira diretiva não existe mais no apache 2.4.
- Alterado:
Permitir de todos
Permitir pedido, negar
requer grupo de grupo1
apenas por:
requer grupo de grupo1
Isto parece ser suficiente para o Apache 2.4
O resto da minha configuração é praticamente o mesmo. Eu só agora que o SSL está funcionando e a autenticação LDAP também. Se eu der as credenciais do usuário, isso não é permitido para acessar um repositório, então eu vou ver isso no arquivo de log de erros:
[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":
Tentar com um usuário que tenha o acesso, passará a autenticação, mas vou ver isso no cliente:
fatal: repository 'https://my_domain.com/git/my_repo.git/' not found
E no log de acesso, de fato, existe um código de erro 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"
O que poderia estar errado aqui?
Obrigado em avançado
Atenciosamente
Josef