This commit is contained in:
Tower committed 2026-07-13 20:17:59 +02:00
1 parent b6b63a663b
commit 8a99e9e845
14 files changed
+961

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
MARIADB/
WEBSERVER/
TEMP/
+16
View File
@@ -0,0 +1,16 @@
# 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 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
+53
View File
@@ -0,0 +1,53 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCAzOgAwIBAgISBftNmlblpprVEwQ90Ba8xcnJMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTEyMTAwNzA0MTNaFw0yNjAzMTAwNzA0MTJaMBwxGjAYBgNVBAMTEWJs
YWNrcGkuaXB2NjQubmV0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEUjOsE2/
P2uG7qtZzACOvGIo60ILeArhcXkabLeYZuYiM+m9V8lzfRw1I69f2C2cG6oKZZN0
jfbaupqp2hsTnqOCAj0wggI5MA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggr
BgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQULsYl0Ccu
8LxQ3E3ErsbZlVaz4UkwHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcow
MgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5v
cmcvMDMGA1UdEQQsMCqCEWJsYWNrcGkuaXB2NjQubmV0ghV3d3cuYmxhY2twaS5p
cHY2NC5uZXQwEwYDVR0gBAwwCjAIBgZngQwBAgEwLQYDVR0fBCYwJDAioCCgHoYc
aHR0cDovL2U4LmMubGVuY3Iub3JnLzc0LmNybDCCAQsGCisGAQQB1nkCBAIEgfwE
gfkA9wB2AEmcm2neHXzs/DbezYdkprhbrwqHgBnRVVL76esp3fjDAAABmwdItI4A
AAQDAEcwRQIgEWU6WP/UjWpOplHAJyVKu38dHZdFsWVmksGleeLuv58CIQCMU1T1
efco+svUKzC0AgQ+wVx2LLKoExngI29CklPVeAB9ABqLnWlKV5jImaDKiL30j8C0
VmDMw2ANH3H0af/H0ayjAAABmwdIuGsACAAABQAjFj4YBAMARjBEAiAGF8tLRC+P
FV1kyEihTlluRDL3+O6HnYP6gvpRHgMIJgIgWMBgZXFgPmSbY31H5ASbkfSrkt5E
fJ44yviNrAjRXbAwCgYIKoZIzj0EAwMDZwAwZAIwdT1TTRq/4DueiBoofMh7s+CZ
Viz7TqDfpsAiSV7V6FD3NkH08OJds/BOywlc4jZ0AjAV6WG+PPQ302/VeYCKSczn
p3haTeSiFQgUTzA4/Jwva+745L5TXe1/lyzL3s2lt5Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXXSjWepmrhBxCPnB
e9swRUqo71F+dsQtbNfUySLF37KhRANCAAQRSM6wTb8/a4buq1nMAI68YijrQgt4
CuFxeRpst5hm5iIz6b1XyXN9HDUjr1/YLZwbqgplk3SN9tq6mqnaGxOe
-----END PRIVATE KEY-----
+41
View File
@@ -0,0 +1,41 @@
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
frontend https
bind *:80
acl is_public hdr_end(host) -i public.local.ipv64.net
acl is_backend hdr_end(host) -i backend.local.ipv64.net
acl is_stats hdr_end(host) -i stats.local.ipv64.net
use_backend web_public if is_public
use_backend web_backend if is_backend
use_backend stats if is_stats
default_backend web_public
backend web_public
server node1 172.30.0.11:80 cookie node1 check
backend web_backend
server node1 172.30.0.13:80 cookie node1 check
backend stats
mode http
stats enable
stats uri /
stats realm Haproxy\ Statistics
stats auth worker:p2x338
stats admin if TRUE
+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
+13
View File
@@ -0,0 +1,13 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"files.exclude": {
// "**/.git": true,
// "**/WEBSERVER": true,
}
}
}
+61
View File
@@ -0,0 +1,61 @@
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.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.13
restart: always
mariadb:
image: mariadb:latest
container_name: MARIADB
volumes:
- ./MARIADB:/var/lib/mysql
ports:
- "3306:3306"
environment:
MARIADB_ROOT_PASSWORD: bBHofurUJWKzPE8Z
MARIADB_DATABASE: DEV
MARIADB_USER: worker
MARIADB_PASSWORD: bBHofurUJWKzPE8Z
networks:
docker-net:
ipv4_address: 172.30.0.12
restart: always
networks:
docker-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
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"; }
BASE_DIR="$(pwd)/WEBSERVER/"
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
HOSTNAME=$(hostname)
PUBLIC_REPO="https://gitea.mrhossa.de/bruno/Web-Public.git"
BACKEND_REPO="https://gitea.mrhossa.de/bruno/Backend.git"
if [[ "$EUID" -ne 0 ]]; then
log_error "Script muss als root laufen!"
exit 1
fi
git clone https://gitea.mrhossa.de/bruno/Backend.git $BASE_DIR/BACKEND
git -C $BASE_DIR/BACKEND checkout live
docker restart webserver_backend
git clone https://gitea.mrhossa.de/bruno/Web-Public.git $BASE_DIR/PUBLIC