diff --git a/ct/haproxy.sh b/ct/haproxy.sh new file mode 100644 index 000000000..b59e1f152 --- /dev/null +++ b/ct/haproxy.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://www.haproxy.org/ + +APP="HAProxy" +var_tags="${var_tags:-network;proxy}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-4}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f /etc/haproxy/haproxy.cfg ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + msg_info "Updating ${APP}" + $STD apt update + $STD apt install -y haproxy + msg_ok "Updated ${APP}" + + msg_info "Validating Configuration" + if ! $STD haproxy -c -f /etc/haproxy/haproxy.cfg; then + msg_error "Configuration is invalid - service not restarted" + exit + fi + msg_ok "Validated Configuration" + + msg_info "Restarting Service" + systemctl restart haproxy + msg_ok "Restarted Service" + msg_ok "Updated successfully!" + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW}Statistics page:${CL}" +echo -e "${GATEWAY}${BGN}http://${IP}:8404${CL}" +echo -e "${INFO}${YW}The generated stats password is in /etc/haproxy/haproxy.cfg${CL}" diff --git a/ct/headers/haproxy b/ct/headers/haproxy new file mode 100644 index 000000000..83e67523f --- /dev/null +++ b/ct/headers/haproxy @@ -0,0 +1,6 @@ + __ _____ ____ + / / / / | / __ \_________ _ ____ __ + / /_/ / /| | / /_/ / ___/ __ \| |/_/ / / / + / __ / ___ |/ ____/ / / /_/ /> /etc/haproxy/haproxy.cfg +global + log /dev/log local0 + chroot /var/lib/haproxy + stats socket /run/haproxy/admin.sock mode 660 level admin + stats timeout 30s + user haproxy + group haproxy + daemon + ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets + +defaults + log global + mode http + option httplog + option dontlognull + timeout connect 5s + timeout client 50s + timeout server 50s + errorfile 400 /etc/haproxy/errors/400.http + errorfile 403 /etc/haproxy/errors/403.http + errorfile 408 /etc/haproxy/errors/408.http + errorfile 500 /etc/haproxy/errors/500.http + errorfile 502 /etc/haproxy/errors/502.http + errorfile 503 /etc/haproxy/errors/503.http + errorfile 504 /etc/haproxy/errors/504.http + +listen stats + bind *:8404 + stats enable + stats uri / + stats refresh 10s + stats admin if TRUE + stats auth admin:${HAPROXY_STATS_PASSWORD} + +# Example: replace with your own frontend/backend pairs. +#frontend http_in +# bind *:80 +# default_backend servers +# +#backend servers +# balance roundrobin +# server web1 192.168.1.10:80 check +# server web2 192.168.1.11:80 check +EOF +$STD haproxy -c -f /etc/haproxy/haproxy.cfg +systemctl restart haproxy +msg_ok "Configured HAProxy" + +motd_ssh +customize +cleanup_lxc