#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" INSTALL_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" REPO_ROOT="$(cd "${INSTALL_DIR}/.." && pwd)" # shellcheck source=install/lib/common.sh source "${INSTALL_DIR}/lib/common.sh" # shellcheck source=install/lib/logging.sh source "${INSTALL_DIR}/lib/logging.sh" # shellcheck source=install/lib/packages.sh source "${INSTALL_DIR}/lib/packages.sh" atlas_set_script_name "40-nginx.sh" atlas_install_error_trap ATLAS_SITE_ROOT="/var/www/atlas" ATLAS_SITE_CONF_SOURCE="${REPO_ROOT}/config/nginx/atlas-default.conf" ATLAS_SITE_CONF_DEST="/etc/nginx/sites-available/atlas-default.conf" ATLAS_SITE_LINK="/etc/nginx/sites-enabled/atlas-default.conf" NGINX_DEFAULT_LINK="/etc/nginx/sites-enabled/default" NGINX_BACKUP_DIR="/etc/nginx/atlas-backups" usage() { cat <<'USAGE' Usage: install/phases/40-nginx.sh [options] Install nginx from Ubuntu repositories and deploy the temporary Atlas default HTTP status site. This does not configure HTTPS or PlotDirector proxying. Options: --help Show this help text. --version Show script/framework version. --dry-run Show intended actions without making changes. --verbose Print additional diagnostic output. USAGE } while [[ "$#" -gt 0 ]]; do case "$1" in --help) usage exit "${ATLAS_EXIT_OK}" ;; --version) atlas_print_version exit "${ATLAS_EXIT_OK}" ;; --dry-run) atlas_enable_dry_run ;; --verbose) atlas_enable_verbose ;; *) atlas_usage_error "Unknown option: $1" exit "${ATLAS_EXIT_USAGE}" ;; esac shift done install_nginx() { if atlas_package_installed nginx; then atlas_log_ok "nginx is already installed" else atlas_install_packages nginx fi } write_site_content() { local tmp_file tmp_file="$(mktemp)" cat >"$tmp_file" <<'HTML' Atlas

Atlas is operational

This is the temporary Atlas status site. Application routing has not been configured yet.

HTML if [[ "${ATLAS_DRY_RUN}" == "1" ]]; then atlas_log_info "Dry-run mode: would deploy static site content to ${ATLAS_SITE_ROOT}" rm -f "$tmp_file" return 0 fi sudo -n install -d -m 0755 -o www-data -g www-data "$ATLAS_SITE_ROOT" sudo -n install -m 0644 -o www-data -g www-data "$tmp_file" "${ATLAS_SITE_ROOT}/index.html" rm -f "$tmp_file" } deploy_nginx_config() { if [[ "${ATLAS_DRY_RUN}" == "1" ]]; then atlas_log_info "Dry-run mode: would deploy ${ATLAS_SITE_CONF_DEST}" atlas_log_info "Dry-run mode: would enable Atlas nginx site and disable Ubuntu default site" return 0 fi sudo -n install -d -m 0755 /etc/nginx/sites-available /etc/nginx/sites-enabled sudo -n install -d -m 0750 "$NGINX_BACKUP_DIR" sudo -n nginx -t if [[ -e "$ATLAS_SITE_CONF_DEST" ]] && ! cmp -s "$ATLAS_SITE_CONF_SOURCE" "$ATLAS_SITE_CONF_DEST"; then sudo -n cp -a "$ATLAS_SITE_CONF_DEST" "${NGINX_BACKUP_DIR}/atlas-default.conf.$(date -u '+%Y%m%dT%H%M%SZ').bak" fi sudo -n install -m 0644 "$ATLAS_SITE_CONF_SOURCE" "$ATLAS_SITE_CONF_DEST" if [[ -e "$NGINX_DEFAULT_LINK" ]]; then sudo -n cp -a "$NGINX_DEFAULT_LINK" "${NGINX_BACKUP_DIR}/default-link.$(date -u '+%Y%m%dT%H%M%SZ').bak" sudo -n rm -f "$NGINX_DEFAULT_LINK" fi sudo -n ln -sfn "$ATLAS_SITE_CONF_DEST" "$ATLAS_SITE_LINK" sudo -n nginx -t } enable_nginx() { atlas_sudo_run systemctl enable nginx atlas_sudo_run systemctl restart nginx } verify_nginx() { if [[ "${ATLAS_DRY_RUN}" == "1" ]]; then atlas_log_info "Dry-run mode: would verify nginx service and health endpoint" return 0 fi sudo -n nginx -t systemctl is-enabled nginx >/dev/null systemctl is-active nginx >/dev/null curl -fsS http://127.0.0.1/health >/dev/null curl -fsS http://192.168.10.10/health >/dev/null atlas_log_ok "nginx verification passed" } main() { atlas_require_sudo_noninteractive || { atlas_log_error "Passwordless non-interactive sudo is required" exit "${ATLAS_EXIT_PREREQ}" } install_nginx write_site_content deploy_nginx_config enable_nginx verify_nginx } main