Created
May 30, 2022 06:14
-
-
Save ginmaster/d5e35d0f3769cda4d675db521d68a76e to your computer and use it in GitHub Desktop.
Revisions
-
ginmaster created this gist
May 30, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,318 @@ #!/bin/bash set -e # Terminate if script has error #################################################################### # Variables used #################################################################### sitedir="" fqn="" sdub="" myip="" cftoken="" cfmail="" webmail="" servername="" vhostserver="" myip="$(curl ipecho.net/plain; echo)" #################################################################### # Query for location #################################################################### printf " #################################################################### # Enter location on disk for site (Default: /var/www/\$fqn): ####################################################################\n dir: " read -rp "" sitedir #################################################################### # Query for FQN #################################################################### printf " #################################################################### # Enter FQN for website: ####################################################################\n fqn: " read -rp "" fqn #################################################################### # Query for subdomain #################################################################### printf " #################################################################### # Enter subdomain for FQN: ####################################################################\n sub: " read -rp "" sub #################################################################### # Query for webmaster mail address #################################################################### printf " #################################################################### # Enter webmaster mail address for site: (Default: webmaster@\$fqn) ####################################################################\n webmaster: " read -rp "" webmail #################################################################### # Query non-root user credentials #################################################################### printf " #################################################################### # Enter CLOUDFLARE-TOKEN: ####################################################################\n cftoken: " read -rp "" cftoken #################################################################### # Query non-root user credentials #################################################################### printf " #################################################################### # Enter CLOUDFLARE-mail: ####################################################################\n cfmail: " read -rp "" cfmail #################################################################### # setting defaults #################################################################### # sitedir if [ -n "$sitedir" ]; then if [ ${sitedir:+1} ] then echo "yes" fi else sitedir="/var/www/$fqn" fi # webmaster mail if [ -n "$webmail" ]; then if [ ${webmail:+1} ] then echo "yes" fi else webmail=webmaster@$fqn fi # servername if [ -n "$sub" ]; then servername="server_name $sub.$fqn www.$sub.$fqn;" vhostserver="ServerName $sub.$fqn ServerAlias www.$sub.$fqn" else servername="server_name $fqn www.$fqn;" vhostserver="ServerName $fqn ServerAlias www.$fqn" fi #################################################################### # Enable basic firewall rules #################################################################### ufw allow OpenSSH ufw enable #################################################################### # Install required software #################################################################### apt update apt -y upgrade # EXA wget -c http://old-releases.ubuntu.com/ubuntu/pool/universe/r/rust-exa/exa_0.9.0-4_amd64.deb apt-get install ./exa_0.9.0-4_amd64.deb # basics apt -y install tree gnupg2 git net-tools original-awk fzf silversearcher-ag unzip pkg-config \ openssl apache2 php-fpm php-xml libtool # fastcgi for apache2 wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb #################################################################### # setup of apache2 #################################################################### # set apache listening on loopback for ipv4 only mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default echo "Listen 0.0.0.0:8080" | tee /etc/apache2/ports.conf # make working dir for server mkdir -v $sitedir # disable factory defaults a2dissite 000-default # configure apache for use of mod_fastcgi a2enmod actions a2enmod proxy_fcgi setenvif systemctl restart apache2 a2enconf php7.4-fpm systemctl reload apache2 # backup default fastcgi.conf mv /etc/apache2/mods-enabled/fastcgi.conf /etc/apache2/mods-enabled/fastcgi.conf.default # setting new defaults for fastcgi cat << EOF > /etc/apache2/mods-enabled/fastcgi.conf <IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi AddType application/x-httpd-fastphp .php Action application/x-httpd-fastphp /php-fcgi Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.4-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule> EOF systemctl restart apache2 # create a php-info page - to be removed before production echo "<?php phpinfo(); ?>" | tee /var/www/$fqn/info.php # adjust ufw ufw allow 8080 ufw allow "Apache Full" # mod_rpaf to get visitors real IP through cloudflare and reverse proxy apt -y install build-essential apache2-dev libtool-bin wget https://github.com/gnif/mod_rpaf/archive/stable.zip unzip stable.zip && cd mod_rpaf-stable make && make install && libtool --finish /usr/lib/apache2/modules touch /etc/apache2/mods-available/rpaf.load echo 'LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so' >> /etc/apache2/mods-available/rpaf.load a2enmod rpaf systemctl restart apache2 # Set defaults for virtual host cat << EOF > /etc/apache2/sites-available/$fqn.conf <VirtualHost *:8080> $vhostserver ServerAdmin $webmail DocumentRoot $sitedir <IfModule rpaf_module> RPAF_Enable On RPAF_SetHostName On RPAF_ProxyIPs $myip RPAF_Header CF-CONNECTING-IP </IfModule> # Log format config LogFormat "%{CF-CONNECTING-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" forwarded CustomLog "/var/log/apache2/$fqn.access.log" forwarded ErrorLog /var/log/apache2/$fqn.error.log <Directory $sitedir> AllowOverride All </Directory> </VirtualHost> EOF a2ensite $fqn.conf systemctl restart apache2 # get SSL certificates by certbot apt-get -y install python3-certbot-dns-cloudflare # setup CF credentials mkdir /root/.secrets/ && touch /root/.secrets/cloudflare.ini echo "dns_cloudflare_email=$cfmail" >> /root/.secrets/cloudflare.ini echo "dns_cloudflare_api_key=$cftoken" >> /root/.secrets/cloudflare.ini chmod 0700 /root/.secrets/ chmod 0400 /root/.secrets/cloudflare.ini # go certbot certonly --agree-tos --no-eff-email --email \ $webmail --dns-cloudflare --dns-cloudflare-credentials \ /root/.secrets/cloudflare.ini -d $fqn,*.$fqn --preferred-challenges dns-01 #################################################################### # nginx setup #################################################################### apt -y install nginx # remove default rm /etc/nginx/sites-enabled/default # setup new defaults cat << EOF > /etc/nginx/sites-available/apache server { listen 80; $servername location / { return 301 https://\$host\$request_uri; } } server { listen 443 ssl http2; $servername location / { proxy_pass http://$myip:8080; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; proxy_read_timeout 600; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; client_max_body_size 100M; } location ~ /\.ht { deny all; } ssl_certificate /etc/letsencrypt/live/$fqn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/$fqn/privkey.pem; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on; ssl_dhparam /usr/lib/python3/dist-packages/certbot/ssl-dhparams.pem; access_log /var/log/nginx/$fqn.access.log; error_log /var/log/nginx/$fqn.error.log; } EOF # activate new settings ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache systemctl restart nginx #################################################################### # nginx setup #################################################################### # place files for new site in their dir tar -xvf /home/ts/site.tar.gz -C $sitedir