Un script pour automatiser la création d'un site virtuel pour utiliser un serveur NodeJS.
Le script demande quelques informations, puis il crée ce qu'il faut pour exécuter un site par proxy.
Le tout utilise un certificat SSL Self-Signed.
#!/bin/bash # Source : https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04 # Source : https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04 echo "Auteur : Tommy Gingras" echo "Date : 2017-07-07" echo "But : Installer et configurer Nginx." echo "Version : 1.1.0" echo "Note : le script a été testé sur Debian 9.0.0" RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' # No Color read -p "Quel est le nom du fichier de config (eg. example) ? " configfile ip -o addr | awk '!/^[0-9]*: ?lo|link\/ether/ {gsub("/", " "); print $2" "$4}' read -p "Quel est l'adresse ip du serveur (eg. 10.10.10.10) ? " ip read -p "Quel est le nom du site (eg. example.com www.example.com) ? " servername read -p "Quel est le répertoire du site (eg. /var/www/example) ? " root mkdir -p $root read -p "Où ce trouve les logs (eg. /var/log/nginx) ? " logpath mkdir -p $logpath touch $logpath/$configfile.access.log touch $logpath/$configfile.error.log read -p "Proxy pass port (eg. 3030)? " proxy # Installation et configuration du serveur Web de développement avec un certificat https self-signed apt-get update apt-get install nginx-full -y sed -i "s|# server_tokens off;|server_tokens off;|" /etc/nginx/nginx.conf echo -e "${GREEN}Configuration du serveur virtuel avec https${NC}" # GÉNÉRER LES CERTIFICATS mkdir -p /etc/nginx/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/$configfile.key -out /etc/nginx/ssl/$configfile.crt # Configuration du redirect à partir du port 80 echo "########### $configfile ###########" >> /etc/nginx/sites-available/$configfile echo "########### 80 ###########" >> /etc/nginx/sites-available/$configfile echo "server {" > /etc/nginx/sites-available/$configfile echo "listen 80;" >> /etc/nginx/sites-available/$configfile echo "server_name $servername;" >> /etc/nginx/sites-available/$configfile echo "return 301 https://\$host\$request_uri;" >> /etc/nginx/sites-available/$configfile echo "}" >> /etc/nginx/sites-available/$configfile echo "########### 443 ###########" >> /etc/nginx/sites-available/$configfile # Configuration du port 443 ssl echo "server {" >> /etc/nginx/sites-available/$configfile echo "listen 443 ssl;" >> /etc/nginx/sites-available/$configfile echo "server_name $servername;" >> /etc/nginx/sites-available/$configfile echo "access_log $logpath/$configfile.access.log;" >> /etc/nginx/sites-available/$configfile echo "error_log $logpath/$configfile.error.log;" >> /etc/nginx/sites-available/$configfile echo "ssl_certificate /etc/nginx/ssl/$configfile.crt;" >> /etc/nginx/sites-available/$configfile echo "ssl_certificate_key /etc/nginx/ssl/$configfile.key;" >> /etc/nginx/sites-available/$configfile echo "location / {" >> /etc/nginx/sites-available/$configfile echo "try_files \$uri @proxy;" >> /etc/nginx/sites-available/$configfile echo "}" >> /etc/nginx/sites-available/$configfile echo "location @proxy {" >> /etc/nginx/sites-available/$configfile echo "proxy_pass https://$ip:$proxy;" >> /etc/nginx/sites-available/$configfile echo "proxy_http_version 1.1;" >> /etc/nginx/sites-available/$configfile echo "proxy_set_header Upgrade \$http_upgrade;" >> /etc/nginx/sites-available/$configfile echo "proxy_set_header Connection 'upgrade';" >> /etc/nginx/sites-available/$configfile echo "proxy_set_header Host \$host;" >> /etc/nginx/sites-available/$configfile echo "proxy_set_header X-Real-IP \$remote_addr;" >> /etc/nginx/sites-available/$configfile echo "proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" >> /etc/nginx/sites-available/$configfile echo "proxy_cache_bypass \$http_upgrade;" >> /etc/nginx/sites-available/$configfile echo "}" >> /etc/nginx/sites-available/$configfile echo "error_page 404 /404.html;" >> /etc/nginx/sites-available/$configfile echo "error_page 500 502 503 504 /50x.html;" >> /etc/nginx/sites-available/$configfile echo "location = /50x.html {" >> /etc/nginx/sites-available/$configfile echo "root $root;" >> /etc/nginx/sites-available/$configfile echo "}" >> /etc/nginx/sites-available/$configfile echo "}" >> /etc/nginx/sites-available/$configfile # On active le site ln -s /etc/nginx/sites-available/$configfile /etc/nginx/sites-enabled/$configfile echo "<h1>An error occur, please customize me !</h1>" > $root/50x.html echo "<h1>What are you doing ? are you lost ...</h1>" > $root/404.html echo -e "${RED}Suppression du fichier de defaut : /etc/nginx/sites-enabled/default${NC}"; rm /etc/nginx/sites-enabled/default service nginx restart echo -e "${GREEN}Installation et configuration terminée !${NC}"