diff --git a/seqs/webserver.sh b/seqs/webserver.sh index c1bd6c2..4c24cdf 100755 --- a/seqs/webserver.sh +++ b/seqs/webserver.sh @@ -1,52 +1,56 @@ #!/bin/bash serverName="nginx" +serverPackages="nginx" databaseName="mariadb" -phpPackages="php7.0-fpm php7.0-json php7.0-mysql php7.0-curl php7.0-intl php7.0-mcrypt php7.0-gd php7.0-zip php7.0-xml php7.0-mbstring php-imagick php-apcu" +databasePackages="mariadb-server mariadb-client" +phpName="php7.0" +phpPackages="${phpName}-fpm ${phpName}-json ${phpName}-mysql ${phpName}-curl ${phpName}-intl ${phpName}-mcrypt ${phpName}-gd ${phpName}-zip ${phpName}-xml ${phpName}-mbstring php-imagick php-apcu" -step_1_info() { echo "Installation of $serverName and $databaseName"; } +step_1_info() { echo -e "Installation of $serverName and ${databaseName} packages:\n $serverPackages $databasePackages"; } step_1_alias() { ALIAS=install; } step_1() { apt update - apt install mariadb-server mariadb-client + apt install $databasePackages saveReturn $? endReturn - apt install nginx + apt install $serverPackages saveReturn $? } -step_2_info() { echo "Basic nginx configuration for initial letsencrypt reception"; } +step_2_info() { echo "Basic nginx configuration for initial letsencrypt certificate creation"; } step_2() { - echo "$siteLetsencrypt" > "$siteLetsencryptLoc" - cp -ar "$siteDefaultLoc" "$siteDefaultLoc".bck - read -p "Enter your domain: " siteName - setMyDomain $siteName + # Writing acme-challenge code snipped for certbot web root authentication + addConf "$snippetLetsencrypt" "$snippetLetsencryptLoc" + + # Writing minimal default (see below) + addConf "$siteDefaultIp4" "$siteDefaultLoc" + + # try fix errors on first install attempt + # (possible missing ipv6 support on system) if [ $ERNO -ne 0 ] ; then apt install nginx fi - mkdir -p /var/www/letsencrypt - echo "Restarting Nginx ..." - service nginx restart + + # create webroot + mkdir -p "$siteLetsencryptWww" + + echo -n "Restarting Nginx ... " + service nginx restart && echo "ok" + saveReturn $? + endReturn } -setMyDomain() { - echo -n "$siteDefaultIp4" > "$siteDefaultLoc" - echo -n "$1" >> "$siteDefaultLoc" - echo "$siteDefaultIp42" >> "$siteDefaultLoc" -} -siteLetsencryptLoc="/etc/nginx/snippets/letsencrypt.conf" -siteLetsencrypt="\ +snippetLetsencryptLoc="/etc/nginx/snippets/letsencrypt.conf" +siteLetsencryptWww="/var/www/letsencrypt" +snippetLetsencrypt="\ location ^~ /.well-known/acme-challenge/ { default_type \"text/plain\"; - root /var/www/letsencrypt; + root ${siteLetsencryptWww}; }" siteDefaultLoc="/etc/nginx/sites-available/default" siteDefaultIp4="server { - listen 80; - #listen [::]:80; - - server_name " -siteDefaultIp42="; + listen 80 default_server; include ${siteLetsencryptLoc}; }" @@ -58,7 +62,8 @@ step_3() { step_4_info() { echo "Mariadb configuration"; } step_4() { - echo "$mariadbConfig" > "$mariadbConfigLoc" + addConf "$mariadbConfig" "$mariadbConfigLoc" + echo -n "Restarting mysql ... " service mysql restart && echo "ok" } @@ -74,7 +79,7 @@ lower_case_table_names=0 #innodb_force_recovery=6" -step_5_info() { echo "Installation of PHP7.0"; } +step_5_info() { echo -e "Installation of $phpName packages:\n $phpPackages"; } step_5() { apt install $phpPackages } @@ -100,15 +105,82 @@ phpCliConfigLocation="/etc/php/7.0/cli/conf.d/90-custom_pi.ini" phpCliConfig="\ date.timezone = Europe/Berlin" -step_6_info() { echo "Configuration of PHP fpm and cli"; } +step_6_info() { echo -e "Configuration of ${phpName} fpm and cli\n"; } step_6() { - echo -n "Writing $phpFpmConfigLocation ... " - echo "$phpFpmConfig" > "$phpFpmConfigLocation" && echo "ok" - echo -n "Writing $phpCliConfigLocation ... " - echo "$phpCliConfig" > "$phpCliConfigLocation" && echo "ok" - service php7.0-fpm restart + addConf "$phpFpmConfig" "$phpFpmConfigLocation" + addConf "$phpCliConfig" "$phpCliConfigLocation" + + echo "Restarting ${phpName} ... " + service ${phpName}-fpm restart && echo "ok" } +step_10_info() { echo -e "Create mysql database without specific characterset\n"; } +step_10_alias() { ALIAS="createdb"; } +step_10() { + local mysqlDatabase + local mysqlUser + local mysqlPass + + echo "Existing mysql databases:" + mysql -u root -e 'SHOW DATABASES;' + + read -p "Enter database name: " mysqlDatabase + endCheckEmpty mysqlDatabase "database name" + mysql -u root -e 'CREATE DATABASE '$mysqlDatabase';' + saveReturn $? + endReturn + + echo "Existing mysql user:" + mysql -u root -e 'SELECT User, Host FROM mysql.user;' + read -p "Enter mysql user name: " mysqlUser + endCheckEmpty mysqlDatabase "user name" + + read -p "Enter mysql user password: " mysqlPass + endCheckEmpty mysqlPass "password" + mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';' + saveReturn $? + endReturn + + mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';' + saveReturn $? + endReturn + + mysql -u root -e 'FLUSH PRIVILEGES;' +} + +step_12_info() { echo -e "Create mysql database with characterset utf8mb4\n"; } +step_12_alias() { ALIAS="createdb_utf8mb4"; } +step_12() { + local mysqlDatabase + local mysqlUser + local mysqlPass + + echo "Existing mysql databases:" + mysql -u root -e 'SHOW DATABASES;' + + read -p "Enter database name: " mysqlDatabase + endCheckEmpty mysqlDatabase "database name" + mysql -u root -e 'CREATE DATABASE '$mysqlDatabase' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' + saveReturn $? + endReturn + + echo "Existing mysql user:" + mysql -u root -e 'SELECT User, Host FROM mysql.user;' + read -p "Enter mysql user name: " mysqlUser + endCheckEmpty mysqlDatabase "user name" + + read -p "Enter mysql user password: " mysqlPass + endCheckEmpty mysqlPass "password" + mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';' + saveReturn $? + endReturn + + mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';' + saveReturn $? + endReturn + + mysql -u root -e 'FLUSH PRIVILEGES;' +} VERSION_SEQREV=2 . sequencer.sh