Implémentation utilisée : nginx
Sauf exception, tout est servi en HTTPS par défaut. Voir ssl.
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.
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; } }
cd /var/www rsync -av --progress wordpress wordpress-$(date +%F)
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
# su - wordpress $ wp core update $ wp core update-db $ wp core language update $ wp plugin update --all
https://gurvant.grifon.fr/
Sert pour afficher les stats awstats.
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.
Idem interface hyperviseur (en cours de déploiement).
https://ipam.grifon.fr/?page=login
phpIPAM pour la gestion des IPs.
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; }
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; }
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; }
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 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; }
https://passbolt.grifon.fr
Gestionnaire de mots de passes avec GPG en JS côté navigateur.
https://travaux.grifon.fr
Flyspray pour la gestion des tâches
Ce présent wiki.
Utilisation du paquet debian, configuration sans base de données.