@@ -18,28 +18,77 @@ REMOTE_HOST="45.32.31.139"
1818REMOTE_USER=" ${BMA_REMOTE_USER:- root} "
1919REMOTE_DOMAIN=" lauradei.us"
2020REMOTE_PATH=" /var/www/html/brarner.m.alete"
21- SITE_URL=" http://${REMOTE_DOMAIN} /brarner.m.alete"
21+ SITE_URL=" https://${REMOTE_DOMAIN} /brarner.m.alete"
22+
23+ # SSH options to prevent hanging
24+ SSH_OPTS=" -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ServerAliveInterval=15 -o ServerAliveCountMax=3"
2225
2326echo " ═══════════════════════════════════════════════════════════════"
2427echo " Brarner.M.Alete™ — Remote Linux Server Deploy"
2528echo " Target: ${SITE_URL} "
2629echo " Server: ${REMOTE_HOST} (${REMOTE_DOMAIN} )"
2730echo " ═══════════════════════════════════════════════════════════════"
2831
29- # Verify SSH access
32+ # ─── Pre-flight: Reverse DNS check ───
33+ echo " [*] Checking reverse DNS for ${REMOTE_HOST} ..."
34+ RDNS=$( dig +short -x " $REMOTE_HOST " 2> /dev/null | head -1 || host " $REMOTE_HOST " 2> /dev/null | awk ' {print $NF}' || echo " " )
35+ if [ -n " $RDNS " ]; then
36+ echo " [*] Reverse DNS: ${REMOTE_HOST} → ${RDNS} "
37+ # Verify it resolves back to our domain
38+ if echo " $RDNS " | grep -qi " lauradei" ; then
39+ echo " [*] PTR matches expected domain"
40+ else
41+ echo " [!] WARNING: PTR (${RDNS} ) does not match lauradei.us"
42+ echo " SSL cert may fail. Ensure DNS A record points to ${REMOTE_HOST} "
43+ echo " Continuing anyway..."
44+ fi
45+ else
46+ echo " [!] WARNING: No reverse DNS found for ${REMOTE_HOST} "
47+ echo " Set PTR record: ${REMOTE_HOST} → mail.lauradei.us"
48+ echo " Continuing anyway..."
49+ fi
50+
51+ # ─── Pre-flight: Verify SSH access ───
3052echo " [*] Verifying SSH access to ${REMOTE_USER} @${REMOTE_HOST} ..."
31- if ! ssh -o ConnectTimeout=10 -o BatchMode=yes " $REMOTE_USER @$REMOTE_HOST " " echo OK" & > /dev/null; then
53+ if ! ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " " echo OK" 2 > /dev/null; then
3254 echo " [!] Cannot SSH to ${REMOTE_HOST} . Check your key or access."
55+ echo " Try: ssh-copy-id ${REMOTE_USER} @${REMOTE_HOST} "
3356 exit 1
3457fi
3558echo " [*] SSH access confirmed"
3659
60+ # ─── Pre-flight: Check if Apache alias config already exists ───
61+ echo " [*] Checking for existing Apache alias configuration..."
62+ ALIAS_EXISTS=$( ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " "
63+ if [ -f /etc/apache2/conf-available/brarner-m-alete.conf ] || \
64+ [ -f /etc/apache2/conf-enabled/brarner-m-alete.conf ] || \
65+ [ -f /etc/httpd/conf.d/brarner-m-alete.conf ]; then
66+ echo 'EXISTS'
67+ else
68+ echo 'NONE'
69+ fi
70+ " 2> /dev/null)
71+
72+ if [ " $ALIAS_EXISTS " = " EXISTS" ]; then
73+ echo " [*] Apache alias config already exists — will update in place"
74+ else
75+ echo " [*] No existing alias config — will create new"
76+ fi
77+
78+ # ─── Pre-flight: Check webapp source exists locally ───
79+ if [ ! -d " $WEBAPP_SRC " ]; then
80+ echo " [!] Webapp source not found: $WEBAPP_SRC "
81+ echo " Run download-jars.sh and build first."
82+ exit 1
83+ fi
84+ echo " [*] Webapp source OK: $WEBAPP_SRC "
85+
3786# Install Apache2 if not present
3887echo " [*] Ensuring Apache2 is installed..."
39- ssh " $REMOTE_USER @$REMOTE_HOST " "
88+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " "
4089 if ! command -v apache2 &>/dev/null && ! command -v httpd &>/dev/null; then
4190 if command -v apt &>/dev/null; then
42- apt update && apt install -y apache2
91+ DEBIAN_FRONTEND=noninteractive apt update && DEBIAN_FRONTEND=noninteractive apt install -y apache2
4392 elif command -v dnf &>/dev/null; then
4493 dnf install -y httpd && systemctl enable httpd && systemctl start httpd
4594 fi
@@ -50,49 +99,52 @@ ssh "$REMOTE_USER@$REMOTE_HOST" "
5099
51100# Create directory structure on remote
52101echo " [*] Creating remote directory: ${REMOTE_PATH} "
53- ssh " $REMOTE_USER @$REMOTE_HOST " " mkdir -p ${REMOTE_PATH} /WEB-INF/lib"
102+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " " mkdir -p ${REMOTE_PATH} /WEB-INF/lib"
54103
55104# Deploy webapp
56105echo " [*] Deploying webapp files..."
57- scp -r " $WEBAPP_SRC /" * " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /"
106+ scp -o ConnectTimeout=10 -o BatchMode=yes - r " $WEBAPP_SRC /" * " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /"
58107
59108# Deploy JARs
60109if [ -d " $BMA_ROOT /lib" ]; then
61110 echo " [*] Deploying library JARs..."
62- scp " $BMA_ROOT /lib/" * .jar " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /WEB-INF/lib/" 2> /dev/null || true
111+ scp -o ConnectTimeout=10 -o BatchMode=yes " $BMA_ROOT /lib/" * .jar " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /WEB-INF/lib/" 2> /dev/null || true
63112fi
64113
65114# Deploy images
66115if [ -d " $BMA_ROOT /images" ]; then
67116 echo " [*] Deploying images..."
68- ssh " $REMOTE_USER @$REMOTE_HOST " " mkdir -p ${REMOTE_PATH} /images"
69- scp -r " $BMA_ROOT /images/" * " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /images/" 2> /dev/null || true
117+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " " mkdir -p ${REMOTE_PATH} /images"
118+ scp -o ConnectTimeout=10 -o BatchMode=yes - r " $BMA_ROOT /images/" * " $REMOTE_USER @$REMOTE_HOST :$REMOTE_PATH /images/" 2> /dev/null || true
70119fi
71120
72121# Set permissions
73- ssh " $REMOTE_USER @$REMOTE_HOST " " chmod -R 755 ${REMOTE_PATH} && chown -R www-data:www-data ${REMOTE_PATH} 2>/dev/null || chown -R apache:apache ${REMOTE_PATH} 2>/dev/null"
122+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " " chmod -R 755 ${REMOTE_PATH} && chown -R www-data:www-data ${REMOTE_PATH} 2>/dev/null || chown -R apache:apache ${REMOTE_PATH} 2>/dev/null"
74123
75- # Install Tomcat on top of Apache2 if Apache is found
76- echo " [*] Checking for Tomcat / installing if Apache2 already present..."
77- ssh " $REMOTE_USER @$REMOTE_HOST " "
124+ # Install Tomcat — BMA runs on Java Enterprise; auto-install or prompt
125+ INSTALL_TOMCAT=" y"
126+ if [ -t 0 ]; then
127+ read -rp " [?] Install Tomcat 11 for Java Enterprise servlets? [Y/n] " INSTALL_TOMCAT
128+ INSTALL_TOMCAT=" ${INSTALL_TOMCAT:- y} "
129+ fi
130+
131+ if [[ " $INSTALL_TOMCAT " =~ ^[Yy]$ ]]; then
132+ echo " [*] Installing Tomcat (Java Enterprise runtime for BMA)..."
133+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " "
78134 TOMCAT_VERSION='11.0.2'
79135 TOMCAT_HOME='/opt/tomcat'
80136 TOMCAT_URL=\" https://archive.apache.org/dist/tomcat/tomcat-11/v\$ {TOMCAT_VERSION}/bin/apache-tomcat-\$ {TOMCAT_VERSION}.tar.gz\"
81137
82- APACHE_FOUND=false
83138 TOMCAT_FOUND=false
84139
85- if systemctl is-active --quiet apache2 2>/dev/null || systemctl is-active --quiet httpd 2>/dev/null; then
86- APACHE_FOUND=true
87- fi
88-
89140 if [ -d \"\$ TOMCAT_HOME\" ] && [ -f \"\$ TOMCAT_HOME/bin/catalina.sh\" ]; then
90141 TOMCAT_FOUND=true
142+ echo '[*] Tomcat already installed at '\$ TOMCAT_HOME
91143 fi
92144
93- # Install Tomcat alongside Apache2
94- if [ \"\$ APACHE_FOUND \" = true ] && [ \"\$ TOMCAT_FOUND\" = false ]; then
95- echo '[*] Apache2 found — installing Tomcat '\$ TOMCAT_VERSION' on top ...'
145+ # Install Tomcat (BMA requires Java Enterprise / Jakarta Servlet runtime)
146+ if [ \"\$ TOMCAT_FOUND\" = false ]; then
147+ echo '[*] Installing Tomcat '\$ TOMCAT_VERSION' (Jakarta Servlet 6.1 runtime) ...'
96148 cd /tmp
97149 curl -sfLO \"\$ TOMCAT_URL\"
98150 mkdir -p \"\$ TOMCAT_HOME\"
@@ -137,10 +189,13 @@ TOMSVC
137189 echo '[*] Deployed to Tomcat context: /brarner'
138190 fi
139191"
192+ else
193+ echo " [*] Skipping Tomcat install — Apache2 static only"
194+ fi
140195
141196# Configure Apache2 — ServerAlias + Tomcat proxy (if both) or static alias (Apache only)
142197echo " [*] Configuring Apache2 ServerAlias and routing..."
143- ssh " $REMOTE_USER @$REMOTE_HOST " "
198+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " "
144199 CONF='/etc/apache2/conf-available/brarner-m-alete.conf'
145200 [ -d /etc/httpd/conf.d ] && CONF='/etc/httpd/conf.d/brarner-m-alete.conf'
146201
@@ -209,7 +264,7 @@ echo ""
209264
210265# ─── SSL/TLS 443 — Let's Encrypt (Trusted CA) + Tomcat locked to localhost ───
211266echo " [*] Configuring SSL/TLS port 443 via Let's Encrypt (Trusted CA)..."
212- ssh " $REMOTE_USER @$REMOTE_HOST " "
267+ ssh $SSH_OPTS " $REMOTE_USER @$REMOTE_HOST " "
213268 # Install certbot
214269 if ! command -v certbot &>/dev/null; then
215270 if command -v apt &>/dev/null; then
0 commit comments