forked from axiom-team/astrXbian
117 lines
4.6 KiB
Bash
Executable File
117 lines
4.6 KiB
Bash
Executable File
#/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
|
|
###
|
|
args="$@"
|
|
domain="$1"
|
|
ip="$2"
|
|
port="$3"
|
|
|
|
parseArgs(){
|
|
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
|
|
}
|
|
parseArgs
|
|
|
|
newVHost="/etc/nginx/conf.d/$domain.conf"
|
|
|
|
[[ $ip == "local" ]] && ip="127.0.0.1"
|
|
|
|
addSSL(){
|
|
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}"
|
|
|
|
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
|
|
}
|
|
|
|
if [[ -e $newVHost ]]; then
|
|
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
|
|
fi
|
|
|
|
|
|
create_vhost(){
|
|
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
|
|
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
|
|
sudo service nginx reload && echo "${green}Le domaine $domain à bien été créé et configuré =)${reset}" || echo "${red}Impossible de recharger nginx${reset}"
|
|
}
|
|
|
|
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
|
|
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
|
|
else
|
|
create_vhost
|
|
fi
|
|
|
|
## 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
|
|
|
|
## 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
|
|
|
|
## 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.
|
|
# Publier en json !
|
|
|
|
exit 0
|