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 servicebower.mycompany.com
(:80
)npm.mycompany.com
(:80
)packagist.mycompany.com
(:80
)
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:
- Quelle est la norme de facto pour qu'un mandataire inversé indique que le protocole SSL est utilisé?
- https://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy
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
port11371
(leAPT 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 utilisonsln
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 dec'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 :
- gitlab.mycompany.com - le impressionnant git plate-forme écrit en ruby
- ci.mycompany.com - le gitlab serveur d'intégration continue écrit en ruby
- npm.mycompany.com - un privé mnp registre écrit dans
node.js
- bower.mycompany.com - un privé la charmille registre écrit dans
node.js
- packagist.mycompany.com -un packagiste privé pour compositeur registre écrit en php
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
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