gitignore changes

This commit is contained in:
bruno committed 2026-07-13 20:10:29 +02:00
1 parent d0011ca97d
commit a311543ca2
17 files changed
+1106

No files matched your search

+1
View File
@@ -3,4 +3,5 @@ TEMP/
MARIADB/
WEBSERVER/BACKEND/
WEBSERVER/PUBLIC/
WEBSERVER/BACKUP/
HAPROXY/backups/
Executable
+29
View File
@@ -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 \/var\/www\/>/,/<\/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
+95
View File
@@ -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-----
+65
View File
@@ -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
+86
View File
@@ -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-----
Executable
+14
View File
@@ -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
+65
View File
@@ -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
+52
View File
@@ -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 "====================================================="
+69
View File
@@ -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."
+241
View File
@@ -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
+121
View File
@@ -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 <container|all>"
echo " $0 stop <container|all>"
echo " $0 remove <container|all>"
echo " $0 restart <container|all>"
exit 1
;;
esac
+177
View File
@@ -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 '<?xml version="1.0" encoding="UTF-8"?>' > $SITEMAP
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> $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 " <url>" >> $SITEMAP
echo " <loc>$BASEURL/$relpath</loc>" >> $SITEMAP
echo " <lastmod>$lastmod</lastmod>" >> $SITEMAP
echo " <changefreq>$changefreq</changefreq>" >> $SITEMAP
echo " <priority>$priority</priority>" >> $SITEMAP
echo " </url>" >> $SITEMAP
echo " -> $BASEURL/$relpath"
done
echo '</urlset>' >> $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 '<?xml version="1.0" encoding="UTF-8"?>' > $SITEMAP
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> $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 " <url>" >> $SITEMAP
echo " <loc>$BASEURL/$relpath</loc>" >> $SITEMAP
echo " <lastmod>$lastmod</lastmod>" >> $SITEMAP
echo " <changefreq>$changefreq</changefreq>" >> $SITEMAP
echo " <priority>$priority</priority>" >> $SITEMAP
echo " </url>" >> $SITEMAP
echo " -> $BASEURL/$relpath"
done
echo '</urlset>' >> $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
+10
View File
@@ -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
Submodule WEBSERVER/BACKUP/BACKEND-20260713-142246-v2202607332846482301 added at 643be91c57.
Submodule WEBSERVER/BACKUP/BACKEND-20260713-145324-v2202607332846482301 added at 6798a60d83.
Submodule WEBSERVER/BACKUP/PUBLIC-20260713-142715-v2202607332846482301 added at decd7bcf50.
+78
View File
@@ -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