Миграция репозиториев мерзавца к новому серверу

Я хочу к 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>

Если Вы посмотрите тщательно, то Вы будете видеть, что единственные изменения, которые я имею:

  1. Удаленный: "AddType application/x-httpd-php .php". Это уже включено в Ubuntu хотя "/etc/mods-enabled-> php7.0.*"
  2. Апачские каталоги были изменены на Ubuntu:/etc/apache2,/var/log/apache2, и/var/www/html
  3. SSLCipherSuite изменился, litte укусил, но это не должно быть проблемой
  4. Это было изменено:

    Порядок позволяет, отклоняет

    позвольте от всех

    :

    Потребуйте всех предоставленных

  5. "/home/git" был изменен: "/var/www/html/my_domain/git". Честно говоря, я также попробовал первую опцию, но она не работала. Я видел случаи, где другие папки снаружи от "/var/www/html" не будут работать.

  6. "/usr/libexec/git-core/git-http-backend /" был изменен: "/usr/lib/git-core/git-http-backend /", который является, где этот двоичный файл находится на Ubuntu.
  7. "AuthzLDAPAuthoritative" был изменен: "AuthLDAPBindAuthoritative". Первая директива больше не существует на апачских 2.4.
  8. Измененный:

Позвольте от всех

Порядок позволяет, отклоняет

потребуйте группы 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

1
задан 14 March 2018 в 23:15

1 ответ

Хорошо, я понял это. Оказывается, что или 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

0
ответ дан 8 December 2019 в 01:58

Другие вопросы по тегам:

Похожие вопросы: