Files
Domain_web/install.sh
Андрей Бобырев 311e501561 feat: lightweight static PCA Lab site with domain groups
Replace Next.js scanner deploy with static React CDN pages: student
VPN cabinet, regional setup, curated blocked-domain lists, and nginx
one-line install on port 80 without touching Amnezia/Docker services.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-28 03:34:31 +03:00

108 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Domain Web — lightweight static site (nginx :80)
# curl -fsSL https://raw.githubusercontent.com/andrey271192/Domain_web/main/install.sh | sudo bash
set -euo pipefail
REPO_URL="${DOMAIN_WEB_REPO_URL:-https://github.com/andrey271192/Domain_web.git}"
BRANCH="${DOMAIN_WEB_BRANCH:-main}"
INSTALL_SRC="${DOMAIN_WEB_INSTALL_SRC:-/opt/domain-web-src}"
WEB_ROOT="${DOMAIN_WEB_ROOT:-/var/www/domain-web}"
NGINX_SITE="domain-web"
LEGACY_SERVICES=("domain-scanner" "geoexport-site")
export DEBIAN_FRONTEND=noninteractive
log() { echo "[domain-web] $*"; }
need_root() {
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
echo "Run as root: sudo bash" >&2
exit 1
fi
}
install_packages() {
log "Installing nginx, git, curl..."
apt-get update -qq
apt-get install -y -qq nginx git curl ca-certificates rsync >/dev/null
}
stop_legacy_scanner() {
log "Disabling legacy Node scanner site (if present)..."
for svc in "${LEGACY_SERVICES[@]}"; do
systemctl stop "${svc}.service" 2>/dev/null || true
systemctl disable "${svc}.service" 2>/dev/null || true
rm -f "/etc/systemd/system/${svc}.service"
done
rm -f /etc/nginx/sites-enabled/domain-scanner 2>/dev/null || true
rm -f /etc/nginx/sites-available/domain-scanner 2>/dev/null || true
systemctl daemon-reload 2>/dev/null || true
}
clone_repo() {
log "Fetching ${REPO_URL} (${BRANCH})..."
if [[ -d "${INSTALL_SRC}/.git" ]]; then
git -C "${INSTALL_SRC}" fetch origin "${BRANCH}"
git -C "${INSTALL_SRC}" checkout "${BRANCH}"
git -C "${INSTALL_SRC}" reset --hard "origin/${BRANCH}"
else
rm -rf "${INSTALL_SRC}"
git clone --depth 1 --branch "${BRANCH}" "${REPO_URL}" "${INSTALL_SRC}"
fi
}
deploy_web() {
log "Deploying static files to ${WEB_ROOT}..."
mkdir -p "${WEB_ROOT}"
rsync -a --delete "${INSTALL_SRC}/web/" "${WEB_ROOT}/"
chown -R www-data:www-data "${WEB_ROOT}" 2>/dev/null || chown -R nginx:nginx "${WEB_ROOT}" 2>/dev/null || true
}
configure_nginx() {
log "Configuring nginx (HTTP :80)..."
local conf_src="${INSTALL_SRC}/nginx/domain-web.conf"
if [[ ! -f "${conf_src}" ]]; then
echo "Missing nginx config in repo" >&2
exit 1
fi
# Backup existing default if it listens on 80 and is not ours
if [[ -f /etc/nginx/sites-enabled/default ]] && ! grep -q "domain-web" /etc/nginx/sites-enabled/default 2>/dev/null; then
if grep -q "listen 80" /etc/nginx/sites-enabled/default 2>/dev/null; then
mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.bak.$(date +%s) 2>/dev/null || true
fi
fi
sed "s|/var/www/domain-web|${WEB_ROOT}|g" "${conf_src}" > "/etc/nginx/sites-available/${NGINX_SITE}"
ln -sf "/etc/nginx/sites-available/${NGINX_SITE}" "/etc/nginx/sites-enabled/${NGINX_SITE}"
nginx -t
systemctl enable nginx
systemctl reload nginx
}
print_done() {
local ip
ip="$(hostname -I 2>/dev/null | awk '{print $1}' || echo 'SERVER_IP')"
log "Done."
echo ""
echo " Site root: ${WEB_ROOT}"
echo " URL: http://${ip}/"
echo " Pages: /connect.html /domains.html"
echo ""
echo " Amnezia (443) and Docker containers were not stopped."
echo ""
}
main() {
need_root
install_packages
stop_legacy_scanner
clone_repo
deploy_web
configure_nginx
print_done
}
main "$@"