Comment servir d'autres serveurs virtuels à côté du serveur Omnibus Gitlab? [Solution complète étape par étape]

j'ai installé Gitlab CE sur une Ubuntu server 14.04 édition avec projet Omnibus .

maintenant je voudrais installer trois autres hôtes virtuels à côté de gitlab.

deux noeuds.js web applications lancées par un non-root user tournant sur deux distincts ports > 1024 , le troisième est une application web PHP qui ont besoin d'un serveur web à lancer.

il y a:

  • privé de verdure de registre en cours d'exécution sur 8081 ( node.js )
  • un registre npm privé fonctionnant sur 8082 ( node.js )
  • un privé compositeur de registre ( PHP )

mais Omnibus listen 80 et ne semble utiliser ni Apache2 ni Nginx, donc je ne peux pas les utiliser pour servez mon application PHP et inversez-proxy mes deux autres applications de noeud .

Qu'est-ce que la mécanique de service Gitlab Omnibus utilise à listen 80 ? Comment créer les trois autres serveurs virtuels pour pouvoir fournir les serveurs virtuels suivants ?

  • gitlab.mycompany.com ( :80 ) -- déjà en service
  • bower.mycompany.com ( :80 )
  • npm.mycompany.com ( :80 )
  • packagist.mycompany.com ( :80 )
24
demandé sur Rémi Becheras 2015-08-01 17:18:25

2 réponses

à propos de ces

mais Omnibus listen 80 et ne semble pas utiliser ni Apache2 ni Nginx [ , donc ...] .

et @stdob comment:

omnibus n'a-t-il pas utilisé nginx comme serveur web ??? -

Dont j'ai répondu

je suppose que non parce que le paquet nginx n'est pas installé dans le système ...

dans les faits

de Gitlab documents officiels:

par défaut, omnibus-gitlab installe GitLab avec Nginx.

alors oui!

Omnibus package utilise NGINX !

mais il a été regroupé, expliquant pourquoi il ne nécessite pas d'être installé comme dépendance de l'OS hôte.

donc oui! Nginx peut, et doit être utilisé pour servir mon application PHP et inverser-proxy mes deux autres applications de noeud.

puis maintenant

Omnibus-gitlab permet l'accès webserver par l'intermédiaire de l'utilisateur gitlab-www qui réside dans le groupe avec le même nom. Pour permettre à un serveur web externe d'accéder à GitLab, utilisateur webserver externe doit être ajouté gitlab-www du groupe.

pour utiliser un autre serveur Web comme Apache ou une installation NGINX existante, vous devrez faire les étapes suivantes:

Désactiver livré Nginx en précisant dans /etc/gitlab/gitlab.rb

nginx['enable'] = false
# For GitLab CI, use the following:
ci_nginx['enable'] = false

vérifiez le nom d'utilisateur de l'utilisateur du serveur web non-groupé. Par défaut, omnibus-gitlab n'a pas de paramètre par défaut pour l'utilisateur webserver externe. Vous devez spécifier le nom d'utilisateur du serveur web externe dans le configuration! Disons par exemple que l'utilisateur webserver est www-data . Dans /etc/gitlab/gitlab.rb set

web_server['external_users'] = ['www-data']

Ce paramètre est un tableau de sorte que vous pouvez spécifier plus d'un utilisateur à ajouter à gitlab-www groupe.

Exécuter sudo gitlab-ctl reconfigure pour que la modification prenne effet.

paramétrage de l'adresse ou des adresses NGINX listen

par défaut NGINX accepte les connexions entrantes sur toutes les adresses IPv4 locales. Vous pouvez modifier la liste des adresses dans /etc/gitlab/gitlab.rb .

nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # listen on all IPv4 and IPv6 addresses

pour GitLab CI, utilisez le réglage ci_nginx['listen_addresses'] .

réglage du port d'écoute NGINX

par défaut NGINX écoutera sur le port spécifié dans external_url ou utilisez implicitement le bon port (80 pour HTTP, 443 pour HTTPS). Si vous exécutez GitLab derrière un proxy inversé, Vous pouvez vouloir surcharger le port listen de quelque chose d'autre. Par exemple, pour utiliser le port 8080:

nginx['listen_port'] = 8080

de même, pour GitLab CI:

ci_nginx['listen_port'] = 8081

support proxied SSL

par défaut, NGINX détectera automatiquement S'il faut utiliser SSL si external_url contient https:// . Si vous exécutez GitLab derrière un mandataire inverse, vous peut souhaiter conserver le external_url comme adresse HTTPS mais communiquer avec le GitLab NGINX en interne sur HTTP. Pour ce faire, vous pouvez désactiver HTTPS en utilisant l'option listen_https :

nginx['listen_https'] = false

de même, pour GitLab CI:

ci_nginx['listen_https'] = false

notez que vous pourriez avoir besoin de configurer votre mandataire inverse pour transmettre certains headers (e.g. Host , X-Forwarded-Ssl , X-Forwarded-For , X-Forwarded-Port ) au GitLab.

vous pouvez voir des redirections inappropriées ou des erreurs (par exemple " 422 Unprocessable Entity", "Je ne peux pas vérifier l'authenticité du token CSRF") si vous oubliez cela étape. Pour plus d' information, voir:

pour aller plus loin, vous pouvez suivre les documents officiels à https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

configurer notre hôte virtuel gitlab

Installation De Phusion Passenger

Nous avons besoin d'installer ruby (gitlab exécuter dans les omnibus avec des tarifs groupés, ruby) à l'échelle mondiale dans l'OS

$ sudo apt-get update 
$ sudo apt-get install ruby
$ sudo gem install passenger

Recompiler nginx avec le passager, module

Au lieu de Apache2 par exemple, nginx ne peut pas être branché avec des modules binaires à la volée. Il doit être recompilés pour chaque nouveau plugin que vous souhaitez ajouter.

Phusion passenger l'équipe de développement a travaillé dur pour fournir en disant, " une liasse de nginx version de passagers " : nginx bacs compilé avec passager plugin.

alors, utilisons-le:

exigence : nous avons besoin d'ouvrir notre TCP port 11371 (le APT key port).

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install apt-transport-https ca-certificates
création de passenger.list
$ sudo nano /etc/apt/sources.list.d/passenger.list

avec ces lignes

# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

utilisez le bon repo pour votre version ubuntu. Pour Ubuntu 15.04 par exemple: deb https://oss-binaries.phusionpassenger.com/apt/passenger vive principal

Edit autorisations:

$ sudo chown root: /etc/apt/sources.list.d/passenger.list
$ sudo chmod 600 /etc/apt/sources.list.d/passenger.list

mise à Jour de liste de paquet:

$ sudo apt-get update

lui permettant comme unattended-upgrades

$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

trouver ou créer ce bloc de configuration en haut du fichier:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

};

ajouter le texte suivant:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

  // To check "Origin:" and "Suite:", you could use e.g.:
  // grep "Origin\|Suite" /var/lib/apt/lists/oss-binaries.phusionpassenger.com*
    "Phusion:stable";

};

maintenant (re)install nginx-extra et passenger :

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak_"$(date +%Y-%m-%d_%H:%M)"
$ sudo apt-get install nginx-extras passenger

configurer

Décommenter passenger_root et passenger_ruby directives du /etc/nginx/nginx.conf fichier:

$ sudo nano /etc/nginx/nginx.conf

... pour obtenir quelque chose comme:

##
# Phusion Passenger config
##
# Uncomment it if you installed passenger or passenger-enterprise
##

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/passenger_free_ruby;

créer la nginx site de configuration de l'hôte virtuel conf)

$ nano /etc/nginx/sites-available/gitlab.conf

server {
  listen *:80;
  server_name gitlab.mycompany.com;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  client_max_body_size 250m;
  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  # Ensure Passenger uses the bundled Ruby version
  passenger_ruby /opt/gitlab/embedded/bin/ruby;

  # Correct the $PATH variable to included packaged executables
  passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin";

  # Make sure Passenger runs as the correct user and group to
  # prevent permission issues
  passenger_user git;
  passenger_group git;

  # Enable Passenger & keep at least one instance running at all times
  passenger_enabled on;
  passenger_min_instances 1;

  error_page 502 /502.html;
}

Maintenant, nous pouvons l'activer:

$ sudo ln -s /etc/nginx/sites-available/gitlab.cong /etc/nginx/sites-enabled/

il n'y a pas de a2ensite équivalent venant nativement avec nginx, donc nous utilisons ln mais si vous voulez, il y a un projet sur github: nginx_ensite : nginx_ensite et nginx_dissite rapide de l'hôte virtuel de l'activation et de la désactivation de

c'est un script shell (Bash) qui reproduit pour nginx les Debian a2ensite et a2dissite pour activer et désactiver les sites en tant qu'hôtes virtuels dans Apache 2.2/2.4.

C'est fait :-). Enfin, redémarrez nginx

$ sudo service nginx restart

avec cette nouvelle configuration, vous pouvez exécuter d'autres serveurs virtuels à côté de gitlab pour servir ce que vous voulez ""

il suffit de créer de nouvelles configs dans /etc/nginx/sites-available .

dans mon cas, j'ai fait courir et servir ainsi sur le même hôte :

par exemple, pour servir npm.mycompany.com :

créer un répertoire pour les journaux:

$ sudo mkdir -p /var/log/private-npm/nginx/

et remplir un nouveau fichier de configuration vhost:

$ sudo nano /etc/nginx/sites-available/npm.conf

avec cette config

server {
  listen *:80;
  server_name npm.mycompany.com

  client_max_body_size 5m;
  access_log  /var/log/private-npm/nginx/npm_access.log;
  error_log   /var/log/private-npm/nginx/npm_error.log;

  location / {
    proxy_pass http://localhost:8082;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

puis activez - le et redémarrez-le:

$ sudo ln -s /etc/nginx/sites-available/npm.conf /etc/nginx/sites-enabled/
$ sudo service nginx restart

22
répondu Rémi Becheras 2017-05-23 11:55:06

comme je ne voudrais pas changer le serveur Nginx pour gitlab (avec d'autres intégrations), le moyen le plus sûr serait la solution ci-dessous.

aussi que par

Gitlab:Ningx =>Insertion de paramètres personnalisés dans la config NGINX

édite le /etc/gitlab/gitlab.rb de votre gitlab:

nano /etc/gitlab/gitlab.rb

et sroll à NGINX ['custom_nginx_config'] et modifier comme ci-dessous assurez-vous de uncement

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

créer la nouvelle config dir:

mkdir -p /etc/nginx/conf.d/
nano /etc/nginx/conf.d/new_app.conf

et ajouter du contenu à votre nouvelle configuration

# my new app config : /etc/nginx/conf.d/new_app.conf
# set location of new app 
upstream new_app {
  server localhost:1234; # wherever it might be
}
# set the new app server
server {
  listen *:80;
  server_name new_app.mycompany.com;
  server_tokens off;
  access_log  /var/log/new_app_access.log;
  error_log   /var/log/new_app_error.log;
  proxy_set_header Host      $host;
  proxy_set_header X-Real-IP $remote_addr;
  location / { proxy_pass  http://new_app; }
}

et reconfigurer gitlab pour obtenir les nouveaux paramètres insérés

gitlab-ctl reconfigure

pour redémarrer nginx

gitlab-ctl restart nginx

pour vérifier le journal des erreurs nginx:

tail -f /var/log/gitlab/nginx/error.log
17
répondu Danny 2017-07-11 03:36:48