feat: script de instalacion automatizado para Debian/Ubuntu/RPi

Adds install.sh and uninstall.sh for one-command deployment of Nexus POS
on Debian 12+, Ubuntu 22.04+, and Raspberry Pi OS. The installer handles
PostgreSQL setup, tenant provisioning, systemd service, and nginx reverse
proxy with interactive business configuration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-02 07:15:06 +00:00
parent fa7015e642
commit bdbbc78a15
2 changed files with 703 additions and 0 deletions

190
uninstall.sh Executable file
View File

@@ -0,0 +1,190 @@
#!/bin/bash
# ============================================================
# Nexus Autoparts POS — Uninstaller
# Cleanly removes all Nexus POS components
# Usage: sudo bash /opt/nexus-pos/uninstall.sh
# ============================================================
set -uo pipefail
# ----- Colors & helpers -----
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
INSTALL_DIR="/opt/nexus-pos"
SERVICE_NAME="nexus-pos"
DB_USER="nexus"
DB_NAME="nexus_autoparts"
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
err() { echo -e "${RED}[ERROR]${NC} $*"; }
# Must be root
if [[ $EUID -ne 0 ]]; then
err "This script must be run as root. Use: sudo bash uninstall.sh"
exit 1
fi
echo ""
echo -e "${BOLD}${RED}"
echo " ========================================"
echo " Nexus Autoparts POS — Uninstaller"
echo " ========================================"
echo -e "${NC}"
echo ""
echo -e " ${YELLOW}WARNING: This will remove:${NC}"
echo " - Nexus POS systemd service"
echo " - Nginx site configuration"
echo " - Application files at ${INSTALL_DIR}"
echo ""
echo -e " ${BOLD}Database removal is optional (asked separately).${NC}"
echo ""
echo -en " ${BOLD}${RED}Continue with uninstall? [y/N]: ${NC}"
read -r confirm
if [[ "${confirm,,}" != "y" ]]; then
info "Uninstall cancelled."
exit 0
fi
# ============================================================
# 1. STOP AND REMOVE SYSTEMD SERVICE
# ============================================================
echo ""
info "Stopping ${SERVICE_NAME} service..."
if systemctl is-active --quiet "${SERVICE_NAME}" 2>/dev/null; then
systemctl stop "${SERVICE_NAME}" 2>/dev/null
ok "Service stopped."
else
info "Service was not running."
fi
if systemctl is-enabled --quiet "${SERVICE_NAME}" 2>/dev/null; then
systemctl disable "${SERVICE_NAME}" 2>/dev/null
ok "Service disabled."
fi
if [[ -f "/etc/systemd/system/${SERVICE_NAME}.service" ]]; then
rm -f "/etc/systemd/system/${SERVICE_NAME}.service"
systemctl daemon-reload 2>/dev/null
ok "Service file removed."
fi
# ============================================================
# 2. REMOVE NGINX CONFIGURATION
# ============================================================
info "Removing nginx configuration..."
if [[ -f /etc/nginx/sites-enabled/nexus-pos ]]; then
rm -f /etc/nginx/sites-enabled/nexus-pos
fi
if [[ -f /etc/nginx/sites-available/nexus-pos ]]; then
rm -f /etc/nginx/sites-available/nexus-pos
fi
if command -v nginx &>/dev/null; then
# Restore default site if it exists
if [[ -f /etc/nginx/sites-available/default ]]; then
ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default 2>/dev/null || true
fi
nginx -t &>/dev/null && systemctl reload nginx 2>/dev/null
ok "Nginx configuration removed."
fi
# ============================================================
# 3. REMOVE APPLICATION FILES
# ============================================================
info "Removing application files..."
if [[ -d "${INSTALL_DIR}" ]]; then
rm -rf "${INSTALL_DIR}"
ok "Removed ${INSTALL_DIR}"
else
info "${INSTALL_DIR} not found (already removed?)."
fi
# ============================================================
# 4. DATABASE REMOVAL (OPTIONAL)
# ============================================================
echo ""
echo -e " ${BOLD}${YELLOW}Database removal${NC}"
echo " This will drop ALL tenant databases, the master database,"
echo " and the PostgreSQL user. All data will be permanently lost."
echo ""
echo -en " ${BOLD}${RED}Remove databases and PostgreSQL user? [y/N]: ${NC}"
read -r drop_db
if [[ "${drop_db,,}" == "y" ]]; then
echo -en " ${BOLD}${RED}Type 'DELETE' to confirm: ${NC}"
read -r final_confirm
if [[ "$final_confirm" == "DELETE" ]]; then
info "Dropping databases..."
# Get list of tenant databases
TENANT_DBS=$(sudo -u postgres psql -tAc "SELECT db_name FROM tenants" "${DB_NAME}" 2>/dev/null || echo "")
TEMPLATE_DB=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='tenant_template'" 2>/dev/null || echo "")
# Drop tenant databases
if [[ -n "$TENANT_DBS" ]]; then
while IFS= read -r tdb; do
if [[ -n "$tdb" ]]; then
sudo -u postgres psql -c "DROP DATABASE IF EXISTS \"${tdb}\";" 2>/dev/null
ok "Dropped tenant database: ${tdb}"
fi
done <<< "$TENANT_DBS"
fi
# Drop template database
if [[ -n "$TEMPLATE_DB" ]]; then
sudo -u postgres psql -c "DROP DATABASE IF EXISTS tenant_template;" 2>/dev/null
ok "Dropped template database."
fi
# Drop master database
sudo -u postgres psql -c "DROP DATABASE IF EXISTS ${DB_NAME};" 2>/dev/null
ok "Dropped master database: ${DB_NAME}"
# Drop user
sudo -u postgres psql -c "DROP USER IF EXISTS ${DB_USER};" 2>/dev/null
ok "Dropped PostgreSQL user: ${DB_USER}"
else
warn "Database removal cancelled (confirmation did not match)."
fi
else
info "Databases preserved. You can remove them manually later."
echo " sudo -u postgres psql -c \"DROP DATABASE ${DB_NAME};\""
echo " sudo -u postgres psql -c \"DROP USER ${DB_USER};\""
fi
# ============================================================
# 5. REMOVE LOG FILE
# ============================================================
if [[ -f /var/log/nexus-pos-install.log ]]; then
rm -f /var/log/nexus-pos-install.log
ok "Install log removed."
fi
# ============================================================
# DONE
# ============================================================
echo ""
echo -e "${BOLD}${GREEN}"
echo " ========================================"
echo " Uninstall Complete"
echo " ========================================"
echo -e "${NC}"
echo ""
echo -e " ${BOLD}Removed:${NC}"
echo " - Systemd service (${SERVICE_NAME})"
echo " - Nginx site configuration"
echo " - Application files (${INSTALL_DIR})"
if [[ "${drop_db,,}" == "y" && "$final_confirm" == "DELETE" ]]; then
echo " - All databases and PostgreSQL user"
else
echo -e " - Databases: ${YELLOW}NOT removed${NC} (kept by user request)"
fi
echo ""
echo " Note: System packages (python3, postgresql, nginx, git)"
echo " were NOT removed. Remove them manually if desired:"
echo " apt-get remove --purge postgresql nginx"
echo ""