2021-08-11 21:20:05 +02:00
#/bin/bash
red = ` tput setaf 1`
green = ` tput setaf 2`
yellow = ` tput setaf 3`
bold = ` tput bold`
blue = ` tput setaf 4`
reset = ` tput sgr0`
MY_PATH = " `dirname \" $0 \"` " # relative
MY_PATH = " `( cd \" $MY_PATH \" && pwd )` " # absolutized and normalized
sslRedir = " $MY_PATH /ssl-bloc-redirect.txt "
tplVHost = " $MY_PATH /templates/vhost.txt "
###
# Get Arguments
###
2021-08-11 23:27:50 +02:00
args = " $@ "
domain = " $1 "
ip = " $2 "
port = " $3 "
2021-08-11 21:20:05 +02:00
parseArgs( ) {
2021-08-11 23:27:50 +02:00
i = 0
for cmd in $args ; do
arg[ $i ] = $cmd
[ [ ${ arg [ $i ] } = ~ "domain=" ] ] && domain = $( echo ${ arg [ $i ] } | grep "\<domain=" | awk -F '=' '{ print $2 }' )
[ [ ${ arg [ $i ] } = ~ "ip=" ] ] && ip = $( echo ${ arg [ $i ] } | grep "\<ip=" | awk -F '=' '{ print $2 }' )
[ [ ${ arg [ $i ] } = ~ "port=" ] ] && port = $( echo ${ arg [ $i ] } | grep "\<port=" | awk -F '=' '{ print $2 }' )
[ [ ${ arg [ $i ] } = ~ "ssl=" ] ] && ssl = $( echo ${ arg [ $i ] } | grep "\<ssl=" | awk -F '=' '{ print $2 }' )
( ( i++) )
done
2021-08-11 21:20:05 +02:00
}
parseArgs
newVHost = " /etc/nginx/conf.d/ $domain .conf "
[ [ $ip = = "local" ] ] && ip = "127.0.0.1"
addSSL( ) {
2021-08-11 23:27:50 +02:00
echo " ${ yellow } Création du certificat SSL pour $domain ... ${ reset } "
sudo /usr/bin/certbot --nginx certonly -d $domain && echo " ${ green } Le certificat de $domain a bien été déployé ${ reset } " || echo " ${ red } Une erreur s'est produite lors de la création du certificat SSL ${ reset } "
2021-08-11 21:20:05 +02:00
2021-08-11 23:27:50 +02:00
sudo sed -i -e 's/listen 80;/listen 443 ssl;/' $newVHost
sudo sed -i -e '/includes\/errors.conf/i \\ listen [::]:443 ssl;\n include includes/ssl.conf;' $newVHost
sudo sed -i -e '/error_log/i \\ ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;\n' $newVHost
sudo cat $sslRedir | sudo tee -a $newVHost > /dev/null
sudo sed -i -e 's/$domain/' " $domain " '/g' $newVHost
2021-08-11 21:20:05 +02:00
}
if [ [ -e $newVHost ] ] ; then
2021-08-11 23:27:50 +02:00
echo " ${ yellow } Le virtualhost existe déjà ${ reset } "
if [ [ -z $( grep "ssl_certificate_key" $newVHost ) ] ] ; then
echo "Certificat SSL non présent"
if [ [ $ssl = ~ ^( 1| true| oui) $ ] ] ; then
echo "Installation du certificat SSL ..."
addSSL
sudo service nginx reload && echo " ${ green } Le domaine $domain à bien été créé et configuré =) ${ reset } " || echo " ${ red } Impossible de recharger nginx ${ reset } "
exit 0
else
echo " ${ yellow } Aucune action n'a été effectué ${ reset } "
exit 0
fi
else
echo " ${ yellow } Le SSL est déjà configuré sur le VHost ${ reset } "
exit 0
fi
2021-08-11 21:20:05 +02:00
fi
create_vhost( ) {
2021-08-11 23:27:50 +02:00
echo " ${ yellow } Génération du nouveau VirtualHost... ${ reset } "
sudo cp $tplVHost $newVHost
sudo sed -i -e 's/$_DOMAIN/' " $domain " '/g' $newVHost
sudo sed -i -e 's/$_IP/' " $ip " '/g' $newVHost
sudo sed -i -e 's/$_PORT/' " $port " '/g' $newVHost
2021-08-11 21:20:05 +02:00
if [ [ $ssl = ~ ^( 1| true| oui) $ ] ] ; then
printf " ${ yellow } Configuration SSL du VHost... ${ reset } "
addSSL && echo " ${ green } OK ${ reset } " || echo " ${ red } KO ${ reset } "
else
echo " ${ yellow } Aucune configuration SSL ne sera effectué. ${ reset } "
fi
2021-08-11 23:27:50 +02:00
sudo service nginx reload && echo " ${ green } Le domaine $domain à bien été créé et configuré =) ${ reset } " || echo " ${ red } Impossible de recharger nginx ${ reset } "
2021-08-11 21:20:05 +02:00
}
echo " Nous allons créer le domaine ${ blue } $domain ${ reset } qui sera lié au port ${ blue } $port ${ reset } de l'IP ${ blue } $ip . ${ reset } "
if [ [ $p2vmProvided != 1 ] ] ; then
2021-08-11 23:27:50 +02:00
read -p " ${ bold } Confirmez-vous cette action ? ${ reset } ( ${ green } y ${ reset } ou ${ red } n ${ reset } ) : " yn
case $yn in
[ Yy] * ) create_vhost break; ;
[ Nn] * ) echo " ${ red } Fermeture du script ${ reset } " && exit; ;
* ) echo "Merci de sélectionner yes ou no" ; ;
esac
2021-08-11 21:20:05 +02:00
else
2021-08-11 23:27:50 +02:00
create_vhost
2021-08-11 21:20:05 +02:00
fi
2021-08-11 23:27:50 +02:00
## 1ere analyse
# A priori utiliser avec domain=$IPFSNODEID ip=local port=10101 ssl=no
# [[ ! $(ipfs p2p ls | grep '/x/10101') ]] && ipfs p2p listen /x/10101 /ip4/127.0.0.1/tcp/10101
# Chaque station publie ses services/API sur un port numéroté /x/10101 relayé en 127.0.0.1/tcp/20101
# Elle publie cette information aux bootstrap (gateway) qui prennent en charge le relai https "ipfs p2p"
# [[ ! $(ipfs p2p ls | grep '/x/10101') ]] && ipfs --timeout=5s ping -n 1 /p2p/$IPFSNODEID && ipfs p2p forward /x/10101 /ip4/127.0.0.1/tcp/20101 /p2p/$IPFSNODEID
# A l'autre boût on sort domain=tata.toto.com ip=local port=20101 ssl=yes
2021-08-11 23:50:16 +02:00
## PAR défaut tous publient ~/.zen/astrXbian/www/boris sur leur port 80 / 443 (pour éxécuter l'API PHP)
# Ca ressemble au fonctionnement du ln -s ;)
# ipfs p2p ln -s /p2p/$IPFSNODEID/tcp/10101 /ip4/127.0.0.1/tcp/20101
2021-08-12 00:18:21 +02:00
## Dédier Le canal star1 pour le flux m3u8 webcam activable.
# Utiliser les canaux stars pour publier ses ports à ceux de ses amis du niveau choisi.
2021-08-12 02:05:32 +02:00
# Publier en json !
2021-08-12 00:18:21 +02:00
2021-08-11 21:20:05 +02:00
exit 0