#!/usr/bin/env bash # # Nginx Proxy Manager (NPM) Automated Installer for Fedora # set -e # 1. Ensure script is run with root/sudo privileges if [ "$EUID" -ne 0 ]; then echo "❌ Please run this script with sudo or as root." exit 1 fi echo "🚀 Starting Nginx Proxy Manager installation for Fedora..." # 2. Install Docker and Docker Compose plugin if not already installed if ! command -v docker &> /dev/null; then echo "📦 Docker not found. Installing Docker and dependencies via dnf..." dnf install -y dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin fi # 3. Start and enable Docker service echo "⚙️ Enabling and starting Docker service..." systemctl enable --now docker # 4. Open required firewall ports (Firewalld is default on Fedora) if command -v firewall-cmd &> /dev/null; then echo "🔥 Configuring Firewalld to allow HTTP (80), HTTPS (443), and NPM Admin (81)..." firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=81/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload fi # 5. Create deployment directory INSTALL_DIR="/opt/nginx-proxy-manager" echo "📁 Creating installation directory at ${INSTALL_DIR}..." mkdir -p "${INSTALL_DIR}" cd "${INSTALL_DIR}" # 6. Generate docker-compose.yml echo "📝 Writing docker-compose.yml configuration..." cat << 'EOF' > docker-compose.yml services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' # Public HTTP - '81:81' # Admin Web Port - '443:443' # Public HTTPS volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt EOF # 7. Start the container stack echo "🐳 Launching Nginx Proxy Manager container..." docker compose up -d # 8. Complete setup feedback echo "" echo "==========================================================" echo "🎉 Setup complete! Nginx Proxy Manager is running." echo "" echo "🌐 Access the Web Dashboard at:" echo " http://$(hostname -I | awk '{print $1}'):81" echo "" echo "🔑 Default Credentials:" echo " Email: admin@example.com" echo " Password: changeme" echo "=========================================================="