From a311543ca290ab837ec1ce726390ed9f2ac03e24 Mon Sep 17 00:00:00 2001 From: bruno Date: Mon, 13 Jul 2026 20:10:29 +0200 Subject: [PATCH] gitignore changes --- .gitignore | 1 + Dockerfile | 29 +++ HAPROXY/blackpi-domains.pem | 95 +++++++ HAPROXY/haproxy.cfg | 65 +++++ HAPROXY/mrhossa.pem | 86 +++++++ MAIL/msmtprc | 14 + SCRIPTS/Database.sh | 65 +++++ SCRIPTS/MONITOR.sh | 52 ++++ SCRIPTS/certs-renew.sh | 69 +++++ SCRIPTS/deploy.sh | 241 ++++++++++++++++++ SCRIPTS/docker.sh | 121 +++++++++ SCRIPTS/generate-sitemap.sh | 177 +++++++++++++ SCRIPTS/git-config.sh | 10 + ...CKEND-20260713-142246-v2202607332846482301 | 1 + ...CKEND-20260713-145324-v2202607332846482301 | 1 + ...UBLIC-20260713-142715-v2202607332846482301 | 1 + docker-compose.yml | 78 ++++++ 17 files changed, 1106 insertions(+) create mode 100755 Dockerfile create mode 100755 HAPROXY/blackpi-domains.pem create mode 100755 HAPROXY/haproxy.cfg create mode 100755 HAPROXY/mrhossa.pem create mode 100755 MAIL/msmtprc create mode 100755 SCRIPTS/Database.sh create mode 100755 SCRIPTS/MONITOR.sh create mode 100755 SCRIPTS/certs-renew.sh create mode 100755 SCRIPTS/deploy.sh create mode 100755 SCRIPTS/docker.sh create mode 100755 SCRIPTS/generate-sitemap.sh create mode 100755 SCRIPTS/git-config.sh create mode 160000 WEBSERVER/BACKUP/BACKEND-20260713-142246-v2202607332846482301 create mode 160000 WEBSERVER/BACKUP/BACKEND-20260713-145324-v2202607332846482301 create mode 160000 WEBSERVER/BACKUP/PUBLIC-20260713-142715-v2202607332846482301 create mode 100755 docker-compose.yml diff --git a/.gitignore b/.gitignore index 5ed8b59..f651c26 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ TEMP/ MARIADB/ WEBSERVER/BACKEND/ WEBSERVER/PUBLIC/ +WEBSERVER/BACKUP/ HAPROXY/backups/ diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..0387dc9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Basis-Image: Apache + PHP +FROM php:8.2-apache + +# PHP Erweiterungen installieren (mysqli) +RUN docker-php-ext-install mysqli + +# pdftk installieren +RUN apt-get update && \ + apt-get install -y \ + pdftk \ + net-tools \ + msmtp \ + msmtp-mta \ + geoip-bin && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +# Apache Mod Rewrite aktivieren (optional) +RUN a2enmod rewrite + +# NEU: AllowOverride All aktivieren, damit .htaccess funktioniert +RUN sed -i '//,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf + +RUN echo "sendmail_path=/usr/bin/msmtp -t -i -f bruno.eckhardt07@gmail.com" > /usr/local/etc/php/conf.d/sendmail.ini + +COPY MAIL/msmtprc /etc/msmtprc + +RUN chmod 644 /etc/msmtprc + +RUN touch /var/log/msmtp.log && chmod 666 /var/log/msmtp.log diff --git a/HAPROXY/blackpi-domains.pem b/HAPROXY/blackpi-domains.pem new file mode 100755 index 0000000..f257545 --- /dev/null +++ b/HAPROXY/blackpi-domains.pem @@ -0,0 +1,95 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+03+oq/lud3kCNQr +vIlmMd+9Sx/uvTIQ4uDbSu5va4WhRANCAARyiOHLZwJ+6m6zKfwf0HVOVSVtZrFk +uFWMXbFcKnCpyKkkscD2JuDW7MJcY6JQy5t6OghdiEAzN/d0WqLzJgvM +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIFTDCCBNKgAwIBAgISBr1UbkRQrXMgn4nycSatC4czMAoGCCqGSM49BAMDMDMx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZ +RTIwHhcNMjYwNjE1MDczMDA2WhcNMjYwOTEzMDczMDA1WjAcMRowGAYDVQQDExFi +bGFja3BpLmlwdjY0Lm5ldDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHKI4ctn +An7qbrMp/B/QdU5VJW1msWS4VYxdsVwqcKnIqSSxwPYm4NbswlxjolDLm3o6CF2I +QDM393RaovMmC8yjggPbMIID1zAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYI +KwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU4jqdnPo1OagGzCvmE2Zz +webpFNgwHwYDVR0jBBgwFoAUuVnyjs8i8IbTN0j/dhQYuoLYVYcwMwYIKwYBBQUH +AQEEJzAlMCMGCCsGAQUFBzAChhdodHRwOi8veWUyLmkubGVuY3Iub3JnLzCCAdUG +A1UdEQSCAcwwggHIghZhcC0xLmJsYWNrcGkuaXB2NjQubmV0ghZhcC0yLmJsYWNr +cGkuaXB2NjQubmV0ghliYWNrZW5kLmJsYWNrcGkuaXB2NjQubmV0ghFibGFja3Bp +LmlwdjY0Lm5ldIIdZGV2LWJhY2tlbmQuYmxhY2twaS5pcHY2NC5uZXSCHGRldi1w +dWJsaWMuYmxhY2twaS5pcHY2NC5uZXSCHGZyaXR6Ym94LTEuYmxhY2twaS5pcHY2 +NC5uZXSCHGZyaXR6Ym94LTIuYmxhY2twaS5pcHY2NC5uZXSCF2dpdGVhLmJsYWNr +cGkuaXB2NjQubmV0ghloZWl6dW5nLmJsYWNrcGkuaXB2NjQubmV0ggptcmhvc3Nh +LmRlghduYXMtMS5ibGFja3BpLmlwdjY0Lm5ldIIXbmFzLTIuYmxhY2twaS5pcHY2 +NC5uZXSCGXByb3htb3guYmxhY2twaS5pcHY2NC5uZXSCGHB1YmxpYy5ibGFja3Bp +LmlwdjY0Lm5ldIIXc3RhdHMuYmxhY2twaS5pcHY2NC5uZXSCGHN3aXRjaC5ibGFj +a3BpLmlwdjY0Lm5ldIIVd3d3LmJsYWNrcGkuaXB2NjQubmV0MBMGA1UdIAQMMAow +CAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly95ZTIuYy5sZW5jci5v +cmcvNTIuY3JsMIIBDQYKKwYBBAHWeQIEAgSB/gSB+wD5AHcAr2eIO1ewTt2Pptl+ +9i6o64EKx3Fg8CReVdYML+eFhzoAAAGeymWZegAABAMASDBGAiEAr/+rLulyL/tP +aCEBIS68NKXI17gp+lYSFKDAIwgTHjUCIQD7vWydrsMAcvprfunfuy9vQhyL9O8b +wLnqQ/SL4bne1QB+ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV05Mz/ZkYq0cjAAAB +nspll8wACAAABQAd6Ay0BAMARzBFAiEAsrVPg4rmTFDF2MKytuaa3WFQfKqMtyRn +WAs0FtA1th8CIDWcgAt4wG/QH71Fh+IaJiRXo/52f9nhAOQ3jPOre1a4MAoGCCqG +SM49BAMDA2gAMGUCMGi1YYBJfmQHDIe+KsrE8vaFA+lfSO3MhuESEHtVAga1aLdc +7JdBVnkS81XD7mmjFwIxANaZHnzaBNIS6JR+lXpZ01PfrDyu7oktsbqyZXuI1+jA +BScTE1/su2vkrcj8/yF4GA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjDCCAhGgAwIBAgIQTfOxXdbAeExQfNN7WObxFTAKBggqhkjOPQQDAzAuMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4GA1UEAxMHUm9vdCBZRTAeFw0y +NTA5MDMwMDAwMDBaFw0yODA5MDIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZRTIwdjAQBgcqhkjOPQIBBgUr +gQQAIgNiAARxmrQzkdbEEL3MqXt3dJQttYc47axkdDTHud5TPqM2z5uSD5cmk0Wr +HlWXvnlvqBLqiB34kluxIbmMyAiq3/YD6e80/vV259K8XQIdjFXloYOa0mIU71f7 +HQ09PvYDlw+jge4wgeswDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +BwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlZ8o7PIvCG0zdI/3YU +GLqC2FWHMB8GA1UdIwQYMBaAFKPIJlqOoUzQNWP8myPIOq5W809WMDIGCCsGAQUF +BwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3llLmkubGVuY3Iub3JnLzATBgNV +HSAEDDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veWUuYy5s +ZW5jci5vcmcvMAoGCCqGSM49BAMDA2kAMGYCMQDIcnw5dcZLN9ffynXnnkLD/itS +JEycJPb3sRkzeqBowup7vOsAwaqoCnNn/jh9wycCMQCJM6CPlaOC4pQYYbJtVPYb +DKrIb2EKk5NpOpE6/XttQYZV/3gilB9l+Cc/DOVwmyg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICpjCCAiugAwIBAgIRAIchZfw0tuX7qK3Vs3BftTowCgYIKoZIzj0EAwMwTzEL +MAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNo +IEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDIwHhcNMjYwNTEzMDAwMDAwWhcN +MzIwOTAyMjM1OTU5WjAuMQswCQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4G +A1UEAxMHUm9vdCBZRTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDwS/6vhrcVqcbBo ++wgdI3fwn9x7DNJJOY/lTOti0vkwuRN87RhEhTH17E7XyFjWsPYhIPt/wzOqxTd2 +b+4ZJNy9ID04YywF9U5zasDVyGSNErVNtz8uSGh5izW87j77GaOB6zCB6DAOBgNV +HQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUo8gmWo6hTNA1Y/ybI8g6rlbzT1YwHwYDVR0jBBgwFoAUfEKW +rt5LSDv6kviejM9ti6lyN5UwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZo +dHRwOi8veDIuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1Ud +HwQgMB4wHKAaoBiGFmh0dHA6Ly94Mi5jLmxlbmNyLm9yZy8wCgYIKoZIzj0EAwMD +aQAwZgIxAMU19WCtmxVND8UHBZRoma49Z7jPs64Dma0eTu1OChVbB/2J7GV3nvYK +Ax54uk1G9QIxAO0miLVJu8PLNiXXXkiE/gsK3CTRTF/aeo4bMX42Zw40csRU6AC2 +6hSW1/IWaas6dg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEcDCCAligAwIBAgIQbI8dxyfHEX97r4U6yYD5zTANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy +Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNjA1MTMwMDAwMDBa +Fw0zMjA5MDIyMzU5NTlaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5l +dCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgy +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7 +AlF9ItgKbppbd9/w+kHsOdx1ymgHDB/qo4H1MIHyMA4GA1UdDwEB/wQEAwIBBjAd +BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwHwYDVR0jBBgwFoAUebRZ5nu2 +5eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRw +Oi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1UdHwQg +MB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcNAQELBQAD +ggIBAD2/e9frmMxNpCV03qUHegg+MV2wz9644YoXdqtH8RyWYcBO7xfjjGEXdU1e +/o0OkEFiynUCOSIk/vLLo7ttz6CPAeNlWfC0XNkoGeWgK6jjXvozBaGuGH5n0Ufo +shMeWTuURqNN5G00sSXDTBrpp2+mgvdZQjb8K11TYMA25QA+YHNfbIEL0BniAhKS +2gsnJjSzrdZLI+EZ7SEyqdR2rkjd1KutLDU+n3TFyxjniZVGur4YlhMP3mY/dV95 +IruAkkjOZier6hGBdEgZXXvaCz9u9iVEadsIE75pAGL8oHV5vxdARDiotRpul1IN +/UZwzAbrfUFcw1HkAcYD/mlZfnQ2ieCF2MS7j3Vhv7JPDKp45fmykmzYNSrumRW0 +upFFKDBOoF7hsOb7oLyHS+Uft6jOUfOrogj8YUx38hKb2K20r42OgsSdDdxdeYWc +MS3Sb6mwJeSZEYxJ2gaXnDSPaKhhrNkYwljyVQyr4Nq+MEJytXNTnHqaAcrNwZlV +pcJL1KBnMrMjP7eanvUwL3FYj3cF17jtboLt7gLoi4+2rWZFvn+w54jmd/FIuhhZ +cEaU/wvU6BUNMtcVquVGHp7itQeDth5j+XL3j4WJ2SABwzUl6OeYdgpIt/ITZa+p +TT0mQ/r5XyA4MEAiabn7XJjvCERlF2dcn2wqJw+CreTkkQ2R +-----END CERTIFICATE----- diff --git a/HAPROXY/haproxy.cfg b/HAPROXY/haproxy.cfg new file mode 100755 index 0000000..d6beb8c --- /dev/null +++ b/HAPROXY/haproxy.cfg @@ -0,0 +1,65 @@ +global + log stdout format raw local0 info + maxconn 8192 + +defaults + log global + mode http + option httplog + option dontlognull + option forwardfor + timeout connect 5000 + timeout client 50000 + timeout server 50000 + + userlist users + user alex password $6$kW4zFajpkGGupxHU$KgzNS59z9OvJwAMvFg.EtU/hlgXWbGANoazzedpYRExZE9tJzw8kQlivIDUtvLgcsHYrFTpldRzeTaekBFtIW0 + user worker password $6$kW4zFajpkGGupxHU$KgzNS59z9OvJwAMvFg.EtU/hlgXWbGANoazzedpYRExZE9tJzw8kQlivIDUtvLgcsHYrFTpldRzeTaekBFtIW0 + +frontend https + bind *:80 + bind *:443 ssl crt /usr/local/etc/haproxy/mrhossa.pem + http-request set-header X-Forwarded-Proto https if { ssl_fc } + +# acl valid_method method PUT DELETE GET POST HEAD PATCH +# http-request deny if !valid_method + +# acl is_trusted src 178.19.224.210 + +# stick-table type ip size 100k expire 30s store http_req_rate(60s) + +# http-request track-sc0 src +# acl rate_too_high sc0_http_req_rate gt 240 +# http-request deny status 429 if rate_too_high !is_trusted + + acl is_public hdr(host) -i mrhossa.de + acl is_backend hdr(host) -i backend.mrhossa.de + acl is_gitea hdr(host) -i gitea.mrhossa.de + acl is_stats hdr(host) -i stats.mrhossa.de + + use_backend web_public if is_public + use_backend web_backend if is_backend + use_backend web_gitea if is_gitea + use_backend stats if is_stats + + default_backend web_public + +backend web_public + cookie SESSSRV insert preserve nocache httponly secure + server node1 152.53.159.169:8001 cookie node1 check + +backend web_backend + cookie SESSSRV insert preserve nocache httponly secure + server node1 152.53.159.169:8002 cookie node1 check + +backend web_gitea + server Gitea 152.53.159.169:3000 check + +backend stats + mode http + stats enable + stats uri / + stats realm Haproxy\ Statistics + stats auth worker:souIfurULCSDnoKuPNxrLCTi + stats admin if TRUE + diff --git a/HAPROXY/mrhossa.pem b/HAPROXY/mrhossa.pem new file mode 100755 index 0000000..772c45b --- /dev/null +++ b/HAPROXY/mrhossa.pem @@ -0,0 +1,86 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRXzLH/jwuk2w+3Se +5PcY6d/GrWahEUDgaCakiCML4iChRANCAARNru+Mcv4BstET3VWTZ2cW0lmBVun7 +yF0Dd+19UNtYhoz3eB2QSnTGV306BYM5VJRuHYJuvaZg5NPaMnDIT18G +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDuTCCAz+gAwIBAgISBZl61oPt/oKJ1zGciZ01eCSEMAoGCCqGSM49BAMDMDMx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZ +RTIwHhcNMjYwNzEzMTE0MzEyWhcNMjYxMDExMTE0MzExWjAVMRMwEQYDVQQDEwpt +cmhvc3NhLmRlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETa7vjHL+AbLRE91V +k2dnFtJZgVbp+8hdA3ftfVDbWIaM93gdkEp0xld9OgWDOVSUbh2Cbr2mYOTT2jJw +yE9fBqOCAk8wggJLMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD +ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTmNfRC8thoWS9xd5pNQpMOoAuCzzAf +BgNVHSMEGDAWgBS5WfKOzyLwhtM3SP92FBi6gthVhzAzBggrBgEFBQcBAQQnMCUw +IwYIKwYBBQUHMAKGF2h0dHA6Ly95ZTIuaS5sZW5jci5vcmcvME0GA1UdEQRGMESC +EmJhY2tlbmQubXJob3NzYS5kZYIQZ2l0ZWEubXJob3NzYS5kZYIKbXJob3NzYS5k +ZYIQc3RhdHMubXJob3NzYS5kZTATBgNVHSAEDDAKMAgGBmeBDAECATAtBgNVHR8E +JjAkMCKgIKAehhxodHRwOi8veWUyLmMubGVuY3Iub3JnLzUuY3JsMIIBDAYKKwYB +BAHWeQIEAgSB/QSB+gD4AH0ARq+GPTs+5Z+ld96oJF02sNntIqIj9GF3QSKUUu6V +UF8AAAGfW39ivAAIAAAFAAzOLYIEAwBGMEQCIA3O3m+v4QXXj5Bk/sbP/nQQA6A1 +oJ8rBXMcKCNvuGWJAiBW2SkMum780BhxnKY3IaS/sFLqzgbOF/XoSUWAK4wXxQB3 +ANgJVTuUT3r/yBYZb5RPhauw+Pxeh1UmDxXRLnK7RUsUAAABn1t/YowAAAQDAEgw +RgIhALDpjsHgUB7W+MbHa7pECcxMRvNS4+rfZoapQSXRNKazAiEAmM37lPhV83en +4JHtv87ijP0ZCS9d5lX1zCFhxnXHy5IwCgYIKoZIzj0EAwMDaAAwZQIwJCREcbS2 +Qu7kE8EBE5CSmAYWb20UiVUw1eh1vR8Ok3f0wFRBeZmSaIoc/sOPXfYZAjEAtF4N +0zP9ATWQVE7m/gL+4mH3d7Y+ZgbgDRZbXloo3EAMSezyk/+ZAZfSEcMIFZkw +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjDCCAhGgAwIBAgIQTfOxXdbAeExQfNN7WObxFTAKBggqhkjOPQQDAzAuMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4GA1UEAxMHUm9vdCBZRTAeFw0y +NTA5MDMwMDAwMDBaFw0yODA5MDIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZRTIwdjAQBgcqhkjOPQIBBgUr +gQQAIgNiAARxmrQzkdbEEL3MqXt3dJQttYc47axkdDTHud5TPqM2z5uSD5cmk0Wr +HlWXvnlvqBLqiB34kluxIbmMyAiq3/YD6e80/vV259K8XQIdjFXloYOa0mIU71f7 +HQ09PvYDlw+jge4wgeswDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +BwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlZ8o7PIvCG0zdI/3YU +GLqC2FWHMB8GA1UdIwQYMBaAFKPIJlqOoUzQNWP8myPIOq5W809WMDIGCCsGAQUF +BwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3llLmkubGVuY3Iub3JnLzATBgNV +HSAEDDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veWUuYy5s +ZW5jci5vcmcvMAoGCCqGSM49BAMDA2kAMGYCMQDIcnw5dcZLN9ffynXnnkLD/itS +JEycJPb3sRkzeqBowup7vOsAwaqoCnNn/jh9wycCMQCJM6CPlaOC4pQYYbJtVPYb +DKrIb2EKk5NpOpE6/XttQYZV/3gilB9l+Cc/DOVwmyg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICpjCCAiugAwIBAgIRAIchZfw0tuX7qK3Vs3BftTowCgYIKoZIzj0EAwMwTzEL +MAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNo +IEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDIwHhcNMjYwNTEzMDAwMDAwWhcN +MzIwOTAyMjM1OTU5WjAuMQswCQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4G +A1UEAxMHUm9vdCBZRTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDwS/6vhrcVqcbBo ++wgdI3fwn9x7DNJJOY/lTOti0vkwuRN87RhEhTH17E7XyFjWsPYhIPt/wzOqxTd2 +b+4ZJNy9ID04YywF9U5zasDVyGSNErVNtz8uSGh5izW87j77GaOB6zCB6DAOBgNV +HQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUo8gmWo6hTNA1Y/ybI8g6rlbzT1YwHwYDVR0jBBgwFoAUfEKW +rt5LSDv6kviejM9ti6lyN5UwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZo +dHRwOi8veDIuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1Ud +HwQgMB4wHKAaoBiGFmh0dHA6Ly94Mi5jLmxlbmNyLm9yZy8wCgYIKoZIzj0EAwMD +aQAwZgIxAMU19WCtmxVND8UHBZRoma49Z7jPs64Dma0eTu1OChVbB/2J7GV3nvYK +Ax54uk1G9QIxAO0miLVJu8PLNiXXXkiE/gsK3CTRTF/aeo4bMX42Zw40csRU6AC2 +6hSW1/IWaas6dg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEcDCCAligAwIBAgIQbI8dxyfHEX97r4U6yYD5zTANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy +Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNjA1MTMwMDAwMDBa +Fw0zMjA5MDIyMzU5NTlaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5l +dCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgy +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7 +AlF9ItgKbppbd9/w+kHsOdx1ymgHDB/qo4H1MIHyMA4GA1UdDwEB/wQEAwIBBjAd +BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwHwYDVR0jBBgwFoAUebRZ5nu2 +5eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRw +Oi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1UdHwQg +MB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcNAQELBQAD +ggIBAD2/e9frmMxNpCV03qUHegg+MV2wz9644YoXdqtH8RyWYcBO7xfjjGEXdU1e +/o0OkEFiynUCOSIk/vLLo7ttz6CPAeNlWfC0XNkoGeWgK6jjXvozBaGuGH5n0Ufo +shMeWTuURqNN5G00sSXDTBrpp2+mgvdZQjb8K11TYMA25QA+YHNfbIEL0BniAhKS +2gsnJjSzrdZLI+EZ7SEyqdR2rkjd1KutLDU+n3TFyxjniZVGur4YlhMP3mY/dV95 +IruAkkjOZier6hGBdEgZXXvaCz9u9iVEadsIE75pAGL8oHV5vxdARDiotRpul1IN +/UZwzAbrfUFcw1HkAcYD/mlZfnQ2ieCF2MS7j3Vhv7JPDKp45fmykmzYNSrumRW0 +upFFKDBOoF7hsOb7oLyHS+Uft6jOUfOrogj8YUx38hKb2K20r42OgsSdDdxdeYWc +MS3Sb6mwJeSZEYxJ2gaXnDSPaKhhrNkYwljyVQyr4Nq+MEJytXNTnHqaAcrNwZlV +pcJL1KBnMrMjP7eanvUwL3FYj3cF17jtboLt7gLoi4+2rWZFvn+w54jmd/FIuhhZ +cEaU/wvU6BUNMtcVquVGHp7itQeDth5j+XL3j4WJ2SABwzUl6OeYdgpIt/ITZa+p +TT0mQ/r5XyA4MEAiabn7XJjvCERlF2dcn2wqJw+CreTkkQ2R +-----END CERTIFICATE----- diff --git a/MAIL/msmtprc b/MAIL/msmtprc new file mode 100755 index 0000000..6f2ceb7 --- /dev/null +++ b/MAIL/msmtprc @@ -0,0 +1,14 @@ +defaults +auth on +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +logfile /var/log/msmtp.log + +account gmail +host smtp.gmail.com +port 587 +from bruno.eckhardt07@gmail.com +user bruno.eckhardt07@gmail.com +password qrwj rnqp qoks qzpy +account default : gmail + diff --git a/SCRIPTS/Database.sh b/SCRIPTS/Database.sh new file mode 100755 index 0000000..b40e66e --- /dev/null +++ b/SCRIPTS/Database.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +BLUE="\e[34m" +RESET="\e[0m" + +log_info() { echo -e "${BLUE}[INFO]${RESET} $1"; } +log_success() { echo -e "${GREEN}[OK]${RESET} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${RESET} $1"; } +log_error() { echo -e "${RED}[ERROR]${RESET} $1"; } + +trap 'log_error "Fehler in Zeile $LINENO"' ERR + +if [[ "$EUID" -ne 0 ]]; then + log_error "Script muss als root laufen!" + exit 1 +fi + +exec 9>/var/lock/docker-control.lock +flock -n 9 || { log_error "Script läuft bereits!"; exit 1; } + +export_database() { + log_info "Exportiere DEV" + cp /data/TEMP/Database.sql /data/TEMP/Database-$(date +%Y-%m-%d_%H-%M-%S).sql + echo "Letzten 5 Dateien gelistet:" + du -sh /data/TEMP/* | tail -n 5 + mariadb-dump -h 127.0.0.1 -u worker -pbBHofurUJWKzPE8Z --all-databases > /data/TEMP/Database.sql + log_info "DEV wurde nach DEV.sql exportiert" +} + +import_database() { + $timestamp=$(date +%Y%m%d%H%M%S) + log_info "Bereinige alte Datenbank" + mariadb -h 127.0.0.1 -u worker -pbBHofurUJWKzPE8Z -e "DROP DATABASE DEV; CREATE DATABASE DEV;" + log_info "Alte Datenbank bereinigt" + echo "" + log_info "Lese DEV.sql ein" + mariadb -h 127.0.0.1 -u worker -pbBHofurUJWKzPE8Z DEV < /data/TEMP/Database.sql + mv /data/TEMP/Database.sql /data/TEMP/Database-${timestamp}.sql + log_info "DEV-${timestamp}.sql wurde eingelesen" +} + +ACTION="${1:-}" + +case "$ACTION" in + + export) + export_database + ;; + + import) + import_database + ;; + + *) + echo "Usage:" + echo " $0 import" + echo " $0 export" + exit 1 + ;; +esac diff --git a/SCRIPTS/MONITOR.sh b/SCRIPTS/MONITOR.sh new file mode 100755 index 0000000..b97d705 --- /dev/null +++ b/SCRIPTS/MONITOR.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# ------------------------------- +# Server Status Report Script +# ------------------------------- +# Datum/Zeit +DATE=$(date +"%Y-%m-%d %H:%M:%S") + +# ------------------------------- +# Systemauslastung +# ------------------------------- + +CPU_LOAD=$(uptime | awk -F 'load average:' '{ print $2 }' | sed 's/^ *//') +CPU_TEMP=$(vcgencmd measure_temp) +MEMORY_USAGE=$(free -h | awk '/Mem:/ {print $3 " used / " $2 " total"}') +DISK_USAGE=$(df -h /) +NFS_USAGE=$(df -h /data) + +# ------------------------------- +# Docker Status +# ------------------------------- + +if command -v docker &> /dev/null +then + DOCKER_CONTAINERS=$(docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}") +else + DOCKER_CONTAINERS="Docker ist nicht installiert oder der Docker-Daemon läuft nicht." +fi + +# ------------------------------- +# Ausgabe auf Konsole +# ------------------------------- + +echo "Server Status Report" +echo ===================================================== +echo +echo "Hostname : $(hostname)" +echo "Datum : $DATE" +echo "CPU Load : $CPU_LOAD" +echo "CPU Temperature : $CPU_TEMP" +echo "RAM : $MEMORY_USAGE" +echo +echo "System Festplatten:" +echo "$DISK_USAGE" +echo +echo "NFS Festplatten:" +echo "$NFS_USAGE" +echo +echo "Docker Container:" +echo "$DOCKER_CONTAINERS" +echo +echo "=====================================================" diff --git a/SCRIPTS/certs-renew.sh b/SCRIPTS/certs-renew.sh new file mode 100755 index 0000000..f144a8e --- /dev/null +++ b/SCRIPTS/certs-renew.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +DB_HOST="127.0.0.1" +DB_USER="worker" +DB_PASS="bBHofurUJWKzPE8Z" +DB_NAME="LIVE" + +CERT_NAME="mrhossa" +EMAIL="bruno.eckhardt07@gmail.com" + +PEM_FILE="/data/HAPROXY/mrhossa.pem" +BACKUP_DIR="/data/HAPROXY/backups" + +mkdir -p "$BACKUP_DIR" + +echo "Lade Domains aus MySQL..." + +DOMAINS=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" -D "$DB_NAME" -N -B -e "SELECT SUBDOMAIN FROM Domains;") + +DOMAIN_ARGS=() + +for domain in $DOMAINS +do + DOMAIN_ARGS+=("-d" "$domain") +done + +echo "Domains:" +printf '%s\n' "${DOMAIN_ARGS[@]}" + +# Backup vorhandenes Zertifikat +if [ -f "$PEM_FILE" ]; then + TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") + cp "$PEM_FILE" "$BACKUP_DIR/mrhossa_$TIMESTAMP.pem" + echo "Backup erstellt: $BACKUP_DIR/mrhossa_$TIMESTAMP.pem" +fi + +echo "Bereinige alte Backups..." +ls -t $BACKUP_DIR/*.pem 2>/dev/null | tail -n +21 | xargs -r rm -f + +echo "Stoppe HAProxy Container..." +sudo docker stop haproxy + +echo "Hole/erneuere Zertifikat..." + +sudo certbot certonly --standalone \ + --cert-name "$CERT_NAME" \ + "${DOMAIN_ARGS[@]}" \ + --non-interactive \ + --agree-tos \ + -m "$EMAIL" \ + --keep-until-expiring + +echo "Finde aktuelles Zertifikat..." + +LATEST_CERT=$(ls -dt /etc/letsencrypt/live/mrhossa* | head -n1) + +echo "Benutze Zertifikat aus:" +echo "$LATEST_CERT" + +echo "Baue HAProxy PEM..." + +cat "$LATEST_CERT/privkey.pem" \ + "$LATEST_CERT/fullchain.pem" \ + > "$PEM_FILE" + +echo "Starte HAProxy Container..." +sudo docker start haproxy + +echo "Fertig." diff --git a/SCRIPTS/deploy.sh b/SCRIPTS/deploy.sh new file mode 100755 index 0000000..da9db27 --- /dev/null +++ b/SCRIPTS/deploy.sh @@ -0,0 +1,241 @@ +#!/usr/bin/env bash + +# ./deploy.sh public +# ./deploy.sh backend +# ./deploy.sh all +# ./deploy.sh list-backups public +# ./deploy.sh rollback public +# ./deploy.sh rollback public PUBLIC-20260216-143015-server01 + + +set -Eeuo pipefail + +######################################## +# Farben +######################################## +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +BLUE="\e[34m" +BOLD="\e[1m" +RESET="\e[0m" + +######################################## +# Logging +######################################## +log_info() { echo -e "${BLUE}[INFO]${RESET} $1"; } +log_success() { echo -e "${GREEN}[OK]${RESET} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${RESET} $1"; } +log_error() { echo -e "${RED}[ERROR]${RESET} $1"; } + +trap 'log_error "Fehler in Zeile $LINENO"' ERR + +######################################## +# Konfiguration +######################################## +BASE_DIR="/data/WEBSERVER" +BACKUP_DIR="$BASE_DIR/BACKUP" + +PUBLIC_REPO="http://gitea.blackpi.ipv64.net/bruno/Web-Public.git" +BACKEND_REPO="http://gitea.blackpi.ipv64.net/bruno/Backend.git" + +TIMESTAMP=$(date +"%Y%m%d-%H%M%S") +HOSTNAME=$(hostname) + +######################################## +# Root-Check +######################################## +if [[ "$EUID" -ne 0 ]]; then + log_error "Script muss als root laufen!" + exit 1 +fi + +######################################## +# Lockfile +######################################## +exec 9>/var/lock/webdeploy.lock +flock -n 9 || { log_error "Deploy läuft bereits!"; exit 1; } + +######################################## +# Helper +######################################## +ensure_directory() { + [[ -d "$1" ]] || mkdir -p "$1" +} + +restart_container() { + local container="$1" + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + docker restart "$container" >/dev/null + log_success "Container $container neu gestartet." + else + log_warn "Container $container existiert nicht." + fi +} + +backup_current() { + local name="$1" + local target="$BASE_DIR/$name" + local rsync_server="10.233.1.89" + local rsync_user="root" + local rsync_dir="/root/BACKUP/NFS/WEBSERVER/" + + if [[ -d "$target" ]]; then + ensure_directory "$BACKUP_DIR" + local backup_name="${name}-${TIMESTAMP}-${HOSTNAME}" + mv "$target" "$BACKUP_DIR/$backup_name" + log_info "$name wurde lokal gesichert: $backup_name" + + # rsync ausführen + if rsync -avz "$BACKUP_DIR/$backup_name" "${rsync_user}@${rsync_server}:${rsync_dir}"; then + log_info "$backup_name wurde erfolgreich auf den Backup-Server: ${rsync_user}@${rsync_server}:${rsync_dir} kopiert." + else + log_error "Fehler beim Kopieren von $backup_name auf den Backup-Server!" + fi + fi +} + +deploy() { + local name="$1" + local repo="$2" + local container="$3" + local target="$BASE_DIR/$name" + + log_info "Deploying $name ..." + + backup_current "$name" + + git clone "$repo" "$target" + + if [[ "$name" == "BACKEND" ]]; then + git -C "$target" checkout live + fi + + restart_container "$container" + log_success "$name erfolgreich deployed." +} + +######################################## +# Rollback +######################################## +list_backups() { + local name="$1" + log_info "Verfügbare Backups für $name:" + ls -ldt "$BACKUP_DIR/${name}-"* 2>/dev/null || log_warn "Keine Backups gefunden." +} + +rollback() { + local name="$1" + local container="$2" + local specific_backup="${3:-}" + + ensure_directory "$BACKUP_DIR" + + local current="$BASE_DIR/$name" + local backup_to_restore + + if [[ -n "$specific_backup" ]]; then + backup_to_restore="$BACKUP_DIR/$specific_backup" + else + backup_to_restore=$(ls -dt "$BACKUP_DIR/${name}-"* 2>/dev/null | head -n1) + fi + + if [[ -z "${backup_to_restore:-}" || ! -d "$backup_to_restore" ]]; then + log_error "Kein gültiges Backup gefunden!" + exit 1 + fi + + log_warn "Rollback von $name → $(basename "$backup_to_restore")" + + # 🔴 Container stoppen + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + log_info "Stoppe Container $container ..." + docker stop "$container" >/dev/null + fi + + # 🔴 Verzeichnis sicher löschen + if [[ -d "$current" ]]; then + log_info "Entferne aktuelles Verzeichnis ..." + rm -rf "$current" + fi + + # 🔴 Backup zurückspielen + mv "$backup_to_restore" "$current" + + # 🟢 Container neu starten + docker start "$container" >/dev/null + log_success "Rollback abgeschlossen." +} + + +######################################## +# Fetch +######################################## +fetch_changes() { + local name="$1" + local target="$BASE_DIR/$name" + + if [[ -d "$target/.git" ]]; then + git -C "$target" fetch origin + git -C "$target" diff HEAD..origin/main --name-only + else + log_warn "$name ist nicht installiert." + fi +} + +######################################## +# CLI +######################################## +ACTION="${1:-}" +TARGET="${2:-}" +OPTIONAL="${3:-}" + +case "$ACTION" in + all) + deploy "PUBLIC" "$PUBLIC_REPO" "webserver_public" + deploy "BACKEND" "$BACKEND_REPO" "webserver_backend" + ;; + public) + deploy "PUBLIC" "$PUBLIC_REPO" "webserver_public" + ;; + backend) + deploy "BACKEND" "$BACKEND_REPO" "webserver_backend" + ;; + rollback) + case "$TARGET" in + public) + rollback "PUBLIC" "webserver_public" "$OPTIONAL" + ;; + backend) + rollback "BACKEND" "webserver_backend" "$OPTIONAL" + ;; + *) + echo "Usage: $0 rollback {public|backend} [backup-name]" + exit 1 + ;; + esac + ;; + list-backups) + case "$TARGET" in + public) list_backups "PUBLIC" ;; + backend) list_backups "BACKEND" ;; + *) + echo "Usage: $0 list-backups {public|backend}" + exit 1 + ;; + esac + ;; + fetch) + fetch_changes "PUBLIC" + fetch_changes "BACKEND" + ;; + *) + echo "Usage:" + echo " $0 {all|public|backend}" + echo " $0 rollback {public|backend} [backup-name]" + echo " $0 list-backups {public|backend}" + echo " $0 fetch" + exit 1 + ;; +esac + diff --git a/SCRIPTS/docker.sh b/SCRIPTS/docker.sh new file mode 100755 index 0000000..d2eeb6f --- /dev/null +++ b/SCRIPTS/docker.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +BLUE="\e[34m" +RESET="\e[0m" + +log_info() { echo -e "${BLUE}[INFO]${RESET} $1"; } +log_success() { echo -e "${GREEN}[OK]${RESET} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${RESET} $1"; } +log_error() { echo -e "${RED}[ERROR]${RESET} $1"; } + +trap 'log_error "Fehler in Zeile $LINENO"' ERR + +if [[ "$EUID" -ne 0 ]]; then + log_error "Script muss als root laufen!" + exit 1 +fi + +exec 9>/var/lock/docker-control.lock +flock -n 9 || { log_error "Script läuft bereits!"; exit 1; } + +docker_up() { + + local CONTAINER="$1" + + if [[ "$CONTAINER" == "all" ]]; then + log_info "Starte alle gestoppten Container" + docker start $(docker ps -aq) + else + log_info "Starte Container: $CONTAINER" + docker start "$CONTAINER" + fi + + log_success "Start abgeschlossen" +} + +docker_stop() { + + local CONTAINER="$1" + + if [[ "$CONTAINER" == "all" ]]; then + log_info "Stoppe alle Container" + docker stop $(docker ps -q) + else + log_info "Stoppe Container: $CONTAINER" + docker stop "$CONTAINER" + fi + + log_success "Stop abgeschlossen" +} + +docker_restart() { + + local CONTAINER="$1" + + if [[ "$CONTAINER" == "all" ]]; then + log_info "Restart aller Container" + docker restart $(docker ps -q) + else + log_info "Restart Container: $CONTAINER" + docker restart "$CONTAINER" + fi + + log_success "Restart abgeschlossen" +} + +docker_remove() { + + local CONTAINER="$1" + + if [[ "$CONTAINER" == "all" ]]; then + log_info "Loesche aller Container" + docker stop $(docker ps -q) + docker rm $(docker ps -q) + else + log_info "Loesche Container: $CONTAINER" + docker stop "$CONTAINER" + docker rm "$CONTAINER" + fi + + log_success "Loeschen abgeschlossen" +} + +######################################## +# CLI +######################################## + +ACTION="${1:-}" +TARGET="${2:-}" + +case "$ACTION" in + + up) + docker_up "$TARGET" + ;; + + stop) + docker_stop "$TARGET" + ;; + + restart) + docker_restart "$TARGET" + ;; + + remove) + docker_remove "$TARGET" + ;; + + *) + echo "Usage:" + echo " $0 up " + echo " $0 stop " + echo " $0 remove " + echo " $0 restart " + exit 1 + ;; +esac \ No newline at end of file diff --git a/SCRIPTS/generate-sitemap.sh b/SCRIPTS/generate-sitemap.sh new file mode 100755 index 0000000..ffd9b8b --- /dev/null +++ b/SCRIPTS/generate-sitemap.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +BLUE="\e[34m" +BOLD="\e[1m" +RESET="\e[0m" + +log_info() { echo -e "${BLUE}[INFO]${RESET} $1"; } +log_success() { echo -e "${GREEN}[OK]${RESET} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${RESET} $1"; } +log_error() { echo -e "${RED}[ERROR]${RESET} $1"; } + +trap 'log_error "Fehler in Zeile $LINENO"' ERR + +if [[ "$EUID" -ne 0 ]]; then + log_error "Script muss als root laufen!" + exit 1 +fi + +backend() { + echo "" + echo "BACKEND Sitemap wird erzeugt..." + echo "" + BASEURL="https://backend.blackpi.ipv64.net" + SEARCH_PATH="/data/WEBSERVER/BACKEND/WEBROOT" + SITEMAP="/data/WEBSERVER/BACKEND/WEBROOT/sitemap.xml" + EXCLUDE_DIRS=( + "config_backups" + "Commands" + "controller" + "modules" + "config.php" + "main.js" + "style.js" + "login.php" + ".htaccess" + "static" + "templates" + #"api" + ) + + echo "" + echo '' > $SITEMAP + echo '' >> $SITEMAP + + find "$SEARCH_PATH" -type f | while read file; do + relpath="${file#$SEARCH_PATH/}" + + skip=false + for dir in "${EXCLUDE_DIRS[@]}"; do + if [[ "$relpath" == "$dir"* ]]; then + skip=true + break + fi + done + if [ "$skip" = true ]; then + continue + fi + + lastmod=$(date -r "$file" "+%Y-%m-%d") + + changefreq="daily" + priority="1.0" + + if [ "$relpath" == "index.php" ] || [ "$relpath" == "index.html" ]; then + changefreq="weekly" + priority="1.0" + fi + + echo " " >> $SITEMAP + echo " $BASEURL/$relpath" >> $SITEMAP + echo " $lastmod" >> $SITEMAP + echo " $changefreq" >> $SITEMAP + echo " $priority" >> $SITEMAP + echo " " >> $SITEMAP + + echo " -> $BASEURL/$relpath" + done + + echo '' >> $SITEMAP + + echo "" + echo "Sitemap wurde erzeugt: $SITEMAP" + echo "" +} + +public() { + echo "" + echo " PUBLIC Sitemap wird erzeugt..." + echo "" + BASEURL="https://www.blackpi.ipv64.net" + SEARCH_PATH="/data/WEBSERVER/PUBLIC/WEBROOT" + SITEMAP="/data/WEBSERVER/PUBLIC/WEBROOT/sitemap.xml" + EXCLUDE_DIRS=( + "controller" + "moduls" + "templates" + "services/GenBerichte/" + "services/GenBerichte/Arbeitsberichte/overtime_corrections.json" + "services/Berichte/Arbeitsberichte/overtime_corrections.json" + "services/test/" + "services/test.php" + "main.js" + "style.js" + "api" + ".htaccess" + ) + + echo "" + echo '' > $SITEMAP + echo '' >> $SITEMAP + + find "$SEARCH_PATH" -type f | while read file; do + relpath="${file#$SEARCH_PATH/}" + + skip=false + for dir in "${EXCLUDE_DIRS[@]}"; do + if [[ "$relpath" == "$dir"* ]]; then + skip=true + break + fi + done + if [ "$skip" = true ]; then + continue + fi + + lastmod=$(date -r "$file" "+%Y-%m-%d") + + changefreq="daily" + priority="1.0" + + if [ "$relpath" == "index.php" ] || [ "$relpath" == "index.html" ]; then + changefreq="weekly" + priority="1.0" + fi + + echo " " >> $SITEMAP + echo " $BASEURL/$relpath" >> $SITEMAP + echo " $lastmod" >> $SITEMAP + echo " $changefreq" >> $SITEMAP + echo " $priority" >> $SITEMAP + echo " " >> $SITEMAP + + echo " -> $BASEURL/$relpath" + done + + echo '' >> $SITEMAP + + echo "" + echo "Sitemap wurde erzeugt: $SITEMAP" + echo "" +} + +ACTION="${1:-}" +TARGET="${2:-}" +OPTIONAL="${3:-}" + +case "$ACTION" in + all) + backend + public + ;; + public) + public + ;; + backend) + backend + ;; + *) + echo " $0 {public|backend}" + exit 1 + ;; +esac + diff --git a/SCRIPTS/git-config.sh b/SCRIPTS/git-config.sh new file mode 100755 index 0000000..d33e2f8 --- /dev/null +++ b/SCRIPTS/git-config.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +echo "Git Config" + +USER="bruno" +MAIL="bruno.eckhardt07@gmail.com" + +git config --global credential.helper store +git config --global user.name $USER +git config --global user.email $MAIL diff --git a/WEBSERVER/BACKUP/BACKEND-20260713-142246-v2202607332846482301 b/WEBSERVER/BACKUP/BACKEND-20260713-142246-v2202607332846482301 new file mode 160000 index 0000000..643be91 --- /dev/null +++ b/WEBSERVER/BACKUP/BACKEND-20260713-142246-v2202607332846482301 @@ -0,0 +1 @@ +Subproject commit 643be91c57048aabccc2003dfafa44296591e7de diff --git a/WEBSERVER/BACKUP/BACKEND-20260713-145324-v2202607332846482301 b/WEBSERVER/BACKUP/BACKEND-20260713-145324-v2202607332846482301 new file mode 160000 index 0000000..6798a60 --- /dev/null +++ b/WEBSERVER/BACKUP/BACKEND-20260713-145324-v2202607332846482301 @@ -0,0 +1 @@ +Subproject commit 6798a60d8360f4be0eb2c3c88010eb49681ceb98 diff --git a/WEBSERVER/BACKUP/PUBLIC-20260713-142715-v2202607332846482301 b/WEBSERVER/BACKUP/PUBLIC-20260713-142715-v2202607332846482301 new file mode 160000 index 0000000..decd7bc --- /dev/null +++ b/WEBSERVER/BACKUP/PUBLIC-20260713-142715-v2202607332846482301 @@ -0,0 +1 @@ +Subproject commit decd7bcf50f6a19d819fcc12f2261c570a677505 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100755 index 0000000..cf3070a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,78 @@ +services: + haproxy: + image: haproxy:latest + container_name: haproxy + volumes: + - ./HAPROXY:/usr/local/etc/haproxy + ports: + - "80:80" + - "443:443" + networks: + docker-net: + ipv4_address: 172.30.0.2 + restart: always + + mariadb: + image: mariadb:latest + container_name: mariadb + volumes: + - ./MARIADB:/var/lib/mysql + environment: + MARIADB_ROOT_PASSWORD: bBHofurUJWKzPE8Z + MARIADB_DATABASE: LIVE + MARIADB_USER: worker + MARIADB_PASSWORD: bBHofurUJWKzPE8Z + ports: + - "3306:3306" + networks: + docker-net: + ipv4_address: 172.30.0.10 + restart: always + + webserver-public: + build: . + container_name: webserver_public + volumes: + - ./WEBSERVER/PUBLIC/WEBROOT:/var/www/html/ + ports: + - "8001:80" + networks: + docker-net: + ipv4_address: 172.30.0.11 + restart: always + + webserver-backend: + build: . + container_name: webserver_backend + volumes: + - ./WEBSERVER/BACKEND/WEBROOT:/var/www/html/ + ports: + - "8002:80" + networks: + docker-net: + ipv4_address: 172.30.0.12 + restart: always + + gitea: + image: gitea/gitea:latest + container_name: gitea + volumes: + - ./GITEA:/data + environment: + - TZ=Europe/Berlin + - APP_INI_PATH=./GITEA/conf/app.ini + networks: + docker-net: + ipv4_address: 172.30.0.13 + ports: + - "3000:3000" + - "2222:22" + restart: always + + +networks: + docker-net: + driver: bridge + ipam: + config: + - subnet: 172.30.0.0/16