Table des matières

HTTP sur gurvant

Implémentation utilisée : nginx

Sites servis

Sauf exception, tout est servi en HTTPS par défaut. Voir ssl.

Site principal de gifon

https://grifon.fr

Il s’agit d’un wordpress. Il existe un utilisateur particulier permettant de le mettre à jour, nginx n’a pas le droit d’écrire dans le dossier de wordpress.

Doc de déploiement

On crée l’utilisateur voulu :

useradd -rmd /var/www/wordpress wordpress

On rapatrie le wordpress de dev sur gurvant, là c’est laissé à la discrétion de l’admin, ça importe peu.

On autorise wordpress à lire et écire, nginx à lire, et le reste à aller se faire voir. Notons que sous debian, nginx tourne sous l’utilisateur www-data.

chown -R wordpress:www-data /var/www/wordpress/
chmod -R o-rwx /var/www/wordpress/
chmod -R g-rwx /var/www/wordpress/
chmod g+rX /var/www/wordpress/

On installe wp-cli afin d’avoir un truc à peu près utilisable :

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

On crée l’utilisateur MySQL pour wordpress (évidemment, ce n’est pas le vrai mot de passe ;). Le mot de passe est à renseigner dans /var/www/wordpress/wp-config.php

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX, LOCK TABLES, REFERENCES, CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, EXECUTE, ALTER ROUTINE ON wordpress.* TO 'wordpress'@'localhost';
CREATE DATABASE wordpress;

On importe la DB de dev (la méthode de rapatriement est libre) :

mysql -u wordpress -p wordpress < /home/alarig/wordpress.sql 

Wordpress fait un 301 (redirection permanante) si le domaine demandé ne correspond à celui dans la DB. On va donc changer ça.

root ~ # su - wordpress
$ wp option update siteurl https://grifon.fr
$ wp option update home https://grifon.fr

Et enfin, on met à jour la conf nginx :

cp /etc/nginx/sites-available/www /etc/nginx/sites-available/www.git
vim /etc/nginx/sites-available/www
server {
	listen		80;
	listen		[::]:80;
	server_name	grifon.fr www.grifon.fr;
	access_log	/var/log/nginx/grifon.fr.access.log;

#	return		301 https://grifon.fr$request_uri;
	location / {
		root /var/www/letsencrypt;
		try_files $uri @redirect;
	}

	location @redirect {
		return 301 https://$server_name$request_uri;
	}
}

server {
	listen		443 ssl;
	listen		[::]:443 ssl;
	server_name	www.grifon.fr;

	ssl_certificate		/etc/ssl/nginx/grifon.fr.crt;
	ssl_certificate_key	/etc/ssl/nginx/grifon.fr.key;
	include			ssl/ssl-bourrin.conf;

	return		301 https://grifon.fr$request_uri;
}

server {
	listen		443 ssl;
	listen		[::]:443 ssl;
	server_name	grifon.fr;
	access_log	/var/log/nginx/grifon.fr.access.log;

	ssl_certificate		/etc/ssl/nginx/grifon.fr.crt;
	ssl_certificate_key	/etc/ssl/nginx/grifon.fr.key;
	include			ssl/ssl-bourrin.conf;

	root	/var/www/wordpress/;
	index	index.php index.html;

	location / {
		try_files $uri $uri/ /index.php?$args;
	}

        # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
        location ~ \.php$ {
                #try_files $uri $uri/ /index.php?q=$uri&$args =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

	location /config/ {
		deny all;
		return 403;
	}
}

Doc de mise à jour

Sauvegarder le dossier
cd /var/www
rsync -av --progress wordpress wordpress-$(date +%F)
Sauvegarder la base de données

Pour avoir les informations de la base (utilisateur, hôte, mot de passe, etc.) :

grep DB /var/www/wordpress/wp-config.php

Puis dump de la base :

mysqldump -u wordpress -h constance.grif -p wordpress > /var/www/wordpress-$(date +%F)/wordpress-$(date +%F).sql
Mise à jour en elle-même
# su - wordpress
$ wp core update
$ wp core update-db
$ wp core language update
$ wp plugin update --all

vHost par défaut

https://gurvant.grifon.fr/
Sert pour afficher les stats awstats.

Interface web de l’hyperviseur

https://hv-access.grifon.fr/#v1:0:18:4::::::
Reverse proxy vers erispoe avec authentification par x509

		# on vérifie que le certificat est valide (date d'expiration, etc.)
		# un code 412 sera retourné s'il y a une erreur sur le certificat (expiré)
		if ( $ssl_client_verify != SUCCESS ) {
			return 412;
		}
		# Si le code 403 est retourné, c'est qu'un certificat qui n'est pas géré par
		# grifon qui a été envoyé
		if ( $ssl_client_s_dn !~ /(O=GRIFON)/ ) {
			return 403;
		}
		# Su le code 402 est retourné, c'est que le certificat ne permet pas l'accès à cette 
		# interface précise. 
		if ( $ssl_client_s_dn !~ /(OU=VM)/ ){
			return 402;
		}

Voir https://grifon.fr/adminsys/cacert-client.html pour la gestion des certificats clients.

Interface web de gestion des adhérents

Idem interface hyperviseur (en cours de déploiement).

https://adherents.grifon.fr

IPAM

https://ipam.grifon.fr/?page=login
phpIPAM pour la gestion des IPs.

mirror

http://mirror.grifon.fr
vHost servi en HTTP seulement, cache pour les paquets debian et debian.
Voir également apt-cacher-ng

Simple reverse proxy :

	location / {
		proxy_pass http://127.0.0.1:3142/;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header Host $http_x_forwarded_host;
        	proxy_set_header Upgrade $http_upgrade;
	       	proxy_set_header Connection "upgrade";
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	       	proxy_read_timeout 3m;
        	proxy_send_timeout 3m;
	}

Il peut être intéressant d’empêcher l’accès à la page d’administration. Ça évitera par exemple qu’un petit malin vide tout le cache ; ce qui est dommage quand on met en place un cache…

	location /acng-report.html {
		deny all;
	}

listes

https://lists.grifon.fr
Interface web de mailman

Fonctionne avec un mélange de cgi et d’aliases en fonction de la location :

        location / {
                rewrite ^/$ $1/listinfo permanent;

                fastcgi_split_path_info ^(/[^/]*)(.*)$;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                include /etc/nginx/fastcgi.conf;
                fastcgi_param PATH_INFO         $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED   $document_root$fastcgi_path_info;
        }

        location /mailman {
                root    /usr/lib/cgi-bin;
                fastcgi_split_path_info (^/mailman/[^/]+)(/.*)$;
                fastcgi_pass            unix:/var/run/fcgiwrap.socket;
                include                 /etc/nginx/fastcgi.conf;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
                if ($request_method = 'POST') {
                        add_header 'Access-Control-Allow-Origin' '*';
                }
        }

        location /images/mailman {
                alias /var/lib/mailman/icons;
        }
 
        location /pipermail {
                alias /var/lib/mailman/archives/public;
                autoindex on;
        }

monitoring

shinken, munin et LibreNMS.

shinken

Reverse proxy sur le daemon http de shinken :

        # Serve static content directly
        location /static/(.*\/)? {
                        try_files htdocs/$uri plugins/$1/htdocs/$uri @webui;
                }

        location @webui {
                        #root /var/lib/shinken/modules/webui2/;
                        root /usr/share/shinken-mod-webui/;
                }


        # Redirection
        location / {
                # Set the adequate variables so that the WebUI will
                # know what hostname it has, this is useful for redirects
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   Host      $http_host;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   X-Forwarded-Proto $scheme;

                # Replace 7767 (default) by the port your shinken WebUI is listening on.
                proxy_pass http://localhost:7767;
                proxy_read_timeout  60;

                proxy_redirect http://localhost:7767 https://monitoring.grifon.fr:443;
        }
munin

cgi vers le script de munin :

        # munin
        location /munin/ {
                alias /var/cache/munin/www/;
        }

        location /munin/static/ {
                alias /etc/munin/static/;
                expires 31d;
        }

        # spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph
        location /munin-cgi/ {
                fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
                include fastcgi_params;
        }
LibreNMS

LibreNMS est une application web en PHP qui sait prendre du SNMP d’un côté et sortir de jolis graphs de l’autre.

Si on suit la doc officielle, il faut créer un vHost spécial pour LibreNMS, mais ça veut dire un certificat en plus et une redirection HTTP → HTTPS en plus. Et comme je suis feignant, j’ai pas envie.
J’ai donc légèrement modifié la conf nginx pour l’utiliser dans le vHost de monitoring. Le premier bloc pour PHP est à mettre avant celui déjà utilisé s’il y en a un.

        # php configuration for librenms
        location ~ /librenms/(.*)\.php {
               	fastcgi_pass unix:/var/run/php5-fpm.sock;
              	fastcgi_index index.php;
             	include fastcgi.conf;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		proxy_intercept_errors on;
		fastcgi_intercept_errors on;
       }
	location ~ /\.ht {
		deny all;
	}

	location /librenms/ {
		try_files	$uri $uri/ @librenms;
	}

	location @librenms {
		rewrite api/v0(.*)$ /librenms/api_v0.php/$1 last;
		rewrite ^(.+)$ /librenms/index.php/$1 last;
	}

passbolt

https://passbolt.grifon.fr
Gestionnaire de mots de passes avec GPG en JS côté navigateur.

travaux

https://travaux.grifon.fr
Flyspray pour la gestion des tâches

wiki

Ce présent wiki.
Utilisation du paquet debian, configuration sans base de données.