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:
190
uninstall.sh
Executable file
190
uninstall.sh
Executable 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 ""
|
||||
Reference in New Issue
Block a user