web-dev-qa-db-fra.com

GitLab 7.2.1 avec Apache Server au lieu de Nginx

J'ai installé GitLab 7.2.1 avec le paquet .deb de GitLab.org pour Debian 7 sur un serveur virtuel sur lequel j'ai un accès root . Sur ce serveur virtuel, j'ai déjà installé Apache, la version 2.2.22 et je ne le fais pas. Je ne veux pas utiliser Ngnix pour GitLab.

Maintenant, je ne sais plus où sont les dossiers publics de GitLab, ni ce que je dois faire ou sur quoi je dois faire attention. 

Ma question est donc la suivante: comment dois-je configurer mon vhost pour Apache ou que dois-je également faire pour pouvoir utiliser un sous-domaine tel que "gitlab.example.com" sur mon serveur Web Apache?

16
Rinma

Avec deux choses en tête:

  1. Unicorn écoute sur 8080 (vous pouvez le vérifier avec Sudo netstat -pant | grep Unicorn)
  2. Votre racine de document est /opt/gitlab/embedded/service/gitlab-Rails/public

Vous pouvez créer un nouvel hôte virtuel pour gitlab dans Apache avec la configuration suivante:

<VirtualHost *:80>
  ServerName gitlab.example.com
  ServerSignature Off

  ProxyPreserveHost On

  <Location />
    Order deny,allow
    Allow from all

    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://gitlab.example.com/
  </Location>

  RewriteEngine on
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]

  # needed for downloading attachments
  DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public

</VirtualHost>
20
pincoded

J'ai suivi cet article http://eserdeniz.fr/articles/view/4/installer-gitlab-sous-debian-7-avec-nginx-et-mysql et cela a fonctionné, mais j'avais besoin d'Apache au lieu de nginx.

Après avoir eu beaucoup de mal à configurer Apache2 avec gitlab-ce 7.9.0.rc3, j'ai examiné la documentation Apache concernant les directives ProxyPass et ProxyPassReverse.

J'ai résolu mes problèmes avec ce vhost:

    <VirtualHost *:80>
            ServerName gitlab.me

            # those options below are recommanded by Apache, dealing with the simple Proxy we need for gitlab
            ProxyRequests Off
            ProxyPreserveHost On
            AllowEncodedSlashes NoDecode

            # here we don't want to proxify the requests for the existing assets in gitlab's public directory
            ProxyPassMatch ^(/[^/]+\.(html|png|ico|css|txt))$ !
            ProxyPass /assets !

            # here we "redirect" the requests for http://gitlab.me/ to http://127.0.0.1:8080/
            ProxyPass / http://127.0.0.1:8080/

            # here we "rewrite" the redirections form Unicorn for http://127.0.0.1:8080/ into http://gitlab.me/
            ProxyPassReverse / http://127.0.0.1:8080/

            # And of course the DocumentRoot to handle the assets requests
            DocumentRoot /home/git/gitlab/public/

            # In the last versions of Apache, there is a deny,allow default order so we put those two sections to prevent 'client denied by server configuration' 403 error

            <Directory /home/git/gitlab/public/>
                    # Apache 2.2
                    Order allow,deny
                    Allow from all

                    # Apache 2.4
                    Require all granted
            </Directory>

            <Location />
                    # Apache 2.2
                    Order allow,deny
                    Allow from all

                    # Apache 2.4
                    Require all granted
            </Location>
    </VirtualHost>

Maintenant, c'est rapide!

En espérant que cela vous aidera!

10
shaft

Sur Debian GNU/Linux 8.4 (jessie) avec la version Omnibus 8.5.0 (apt-get):

Configuration GitLab

# cat /etc/gitlab/gitlab.rb | grep -v '^$\|^\s*\#'
external_url 'http://gitlab.example.fr'
gitlab_workhorse['enable'] = true
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"
web_server['external_users'] = ['www-data']
nginx['enable'] = false

Configuration Apache2

# cat /etc/Apache2/sites-enabled/gitlab.conf  | grep -v '^$\|^\s*\#'
<VirtualHost *:80>
  ServerName gitlab.example.fr
  ServerSignature Off
  ProxyPreserveHost On
  AllowEncodedSlashes NoDecode
  <Location />
    Require all granted
    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://gitlab.example.fr/
  </Location>
  RewriteEngine on
  RewriteCond %{REQUEST_URI} ^/api/v3/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA]
  DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 503 /deploy.html
  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog  /var/log/Apache2/gitlab_error.log
  CustomLog /var/log/Apache2/gitlab_forwarded.log common_forwarded
  CustomLog /var/log/Apache2/gitlab_access.log combined env=!dontlog
  CustomLog /var/log/Apache2/gitlab.log combined
</VirtualHost>

Sortie Netstat

# netstat -pant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      11849/postgres
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      23736/config.ru
tcp        0      0 127.0.0.1:8181          0.0.0.0:*               LISTEN      26061/gitlab-workho

La source

https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/Apache/gitlab-omnibus-Apache24.conf

http://doc.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

3
themadmax

Si vous avez un problème d’accès HTTP git, regardez cette configuration:

# cat /etc/gitlab/gitlab.rb | grep -v '^$\|^\s*\#'
external_url 'http://gitlab.example.fr'
web_server['external_users'] = ['www-data']
nginx['enable'] = false
ci_nginx['enable'] = false
gitlab_git_http_server['listen_network'] = "tcp"
gitlab_git_http_server['listen_addr'] = "localhost:8282"

et configuration Apache2:

# cat /etc/Apache2/sites-enabled/gitlab
<VirtualHost *:80>
        ServerName gitlab.example.fr
        ProxyRequests Off
        ServerSignature Off
        ProxyPreserveHost On
        AllowEncodedSlashes NoDecode
        ProxyPassMatch ^(/[^/]+\.(html|png|ico|css|txt))$ !
        ProxyPass /assets !
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        RewriteEngine on
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule /[-\/\w\.]+\.git\/ http://127.0.0.1:8282%{REQUEST_URI} [P,QSA,L]
        DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public
            <Directory /opt/gitlab/embedded/service/gitlab-Rails/public/>
                    Order allow,deny
                    Allow from all
            </Directory>
            <Location />
                    Order allow,deny
                    Allow from all
            </Location>
</VirtualHost>

Appliquer les modifications:

# gitlab-ctl reconfigure
# service Apache2 reload

De https://gitlab.com/gitlab-org/gitlab-ce/issues/2669#note_2176671

2
themadmax

Pour les voyageurs récents avec GitLab 10.X.X, regardez ce repo . Vous pouvez y trouver des fichiers de configuration Apache2 ainsi que des instructions pour que GitLab s'exécute uniquement avec Apache2 et NGINX désactivés.

2
Flatron

Installation depuis la source. gitlab 7.4.5 

Unicorn écoute 9095. Apache est 2.2.9 et je n'utilise pas https.

System information
System:         CentOS 6.7
Current User:   git
Using RVM:      no
Ruby Version:   2.1.2p95
Gem Version:    2.2.2
Bundler Version:1.11.2
Rake Version:   10.3.2
Sidekiq Version:2.17.0

GitLab information
Version:        7.4.5
Revision:       19d572e
Directory:      /home/git/gitlab
DB Adapter:     mysql2
URL:            http://gitlab.example.com
HTTP Clone URL: http://gitlab.example.com/some-project.git
SSH Clone URL:  [email protected]:some-project.git
Using LDAP:     no
Using Omniauth: no

GitLab Shell
Version:        2.0.1
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-Shell/hooks/
Git:            /usr/bin/git

Modifier le fichier de configuration d’Apache 2.2 fonctionne pour moi.

Un autre ancien fichier de configuration de gitlab 6.0 est ici qui fonctionne aussi pour moi.

#This configuration has been tested on GitLab 8.0.0
#Note this config assumes Unicorn is listening on default port 8080 and gitlab-git-http-server is listening on port 8181.
#To allow gitlab-git-http-server to listen on port 8181, edit or create /etc/default/gitlab and change or add the following:
#gitlab_git_http_server_options="-listenUmask 0 -listenNetwork tcp -listenAddr localhost:8181 -authBackend http://127.0.0.1:8080"

#Module dependencies
#  mod_rewrite
#  mod_proxy
#  mod_proxy_http
# HTTP Configuration
<VirtualHost *:80>
  ServerName gitlab.example.com
  ServerSignature Off

  ProxyPreserveHost On

  # Ensure that encoded slashes are not decoded but left in their encoded state.
  # http://doc.gitlab.com/ce/api/projects.html#get-single-project
  AllowEncodedSlashes NoDecode

    # Ensure that encoded slashes are not decoded but left in their encoded state.
    # http://doc.gitlab.com/ce/api/projects.html#get-single-project
    #AllowEncodedSlashes NoDecode
    <Location />
        #Require all granted
        Order deny,allow
        Allow from all

        #Allow forwarding to gitlab-git-http-server
        #ProxyPassReverse http://127.0.0.1:8181
        #Allow forwarding to GitLab Rails app (Unicorn)
        ProxyPassReverse http://127.0.0.1:9095
        ProxyPassReverse http://gitlab.example.com/
    </Location>

  #Apache equivalent of nginx try files
  # http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
  # http://stackoverflow.com/questions/10954516/Apache2-proxypass-for-Rails-app-gitlab
  RewriteEngine on
  #Forward these requests to gitlab-git-http-server
  #Forward these requests to gitlab-git-http-server
  #RewriteCond %{REQUEST_URI} ^/[\w\.-]+/[\w\.-]+/repository/archive.* [OR]
  #RewriteCond %{REQUEST_URI} ^/api/v3/projects/.*/repository/archive.* [OR]
  #RewriteCond %{REQUEST_URI} ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$
  #RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA]

  #Forward any other requests to GitLab Rails app (Unicorn)
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads
  RewriteRule .* http://127.0.0.1:9095%{REQUEST_URI} [P,QSA,NE]

  # needed for downloading attachments
  DocumentRoot /home/git/gitlab/public

  #Set up Apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 503 /deploy.html

  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog  logs/gitlab.example.com_error.log
  CustomLog logs/gitlab.example.com_forwarded.log common_forwarded
  CustomLog logs/gitlab.example.com_access.log combined env=!dontlog
  CustomLog logs/gitlab.example.com.log combined

</VirtualHost>

Espoir utile pour quelqu'un qui installe depuis la source avec la vieille édition de gitlab.

1
Nick Dong

En utilisant la réponse de @ pincoded, j’ai pu mettre GitLab en service, mais lorsqu’il a été procédé à des changements, j’ai toujours reçu une erreur 500.

Ensuite, j'ai utilisé la configuration officielle pour Apache fournie par GitLab dans la réponse de @ themadmax. Le problème ici était que le serveur n’était jamais joignable et qu’il produisait une erreur 502 après un certain temps. 

Ma solution: En utilisant la solution officielle par GitLab (soyez prudent, choisissez la configuration SSL dans ce lien, si vous utilisez uniquement SSL GitLab) MAIS après cette entrée de forum je devais tourner nginx à nouveau.

En fin de compte, ma configuration ressemblait à ceci:

vhost:

<VirtualHost *:80>
  ServerName YOUR_SERVER_FQDN
  ServerSignature Off

  ProxyPreserveHost On

  # Ensure that encoded slashes are not decoded but left in their encoded state.
  # http://doc.gitlab.com/ce/api/projects.html#get-single-project
  AllowEncodedSlashes NoDecode

  <Location />
    # New authorization commands for Apache 2.4 and up
    # http://httpd.Apache.org/docs/2.4/upgrading.html#access
    Require all granted

    #Allow forwarding to gitlab-workhorse
    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://YOUR_SERVER_FQDN/
  </Location>

  # Apache equivalent of nginx try files
  # http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
  # http://stackoverflow.com/questions/10954516/Apache2-proxypass-for-Rails-app-gitlab
  RewriteEngine on

  #Forward all requests to gitlab-workhorse except existing files like error documents
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

  # needed for downloading attachments
  DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public

  #Set up Apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html

</VirtualHost>

gitlab.ru:

# nginx['enable'] = false # this defaults to true
gitlab_workhorse['enable'] = true
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"
0
Elektropepi

Je viens de passer une demi-journée à comprendre pourquoi gitlab me donnait l'erreur 422 et à me plaindre des jetons CSRF dans les journaux de production de gitlab-Rails.

Il s'est avéré que je devais ajouter ceci à la configuration d'Apache:

RequestHeader set X-Forwarded-Ssl on

Dans mon cas, gitlab a été installé à partir du paquet deb et Apache est exécuté sur HTTPS.

0
John Wilcox