121 lines
3.6 KiB
Bash
Executable File
121 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# piNail2 Deploy Script
|
|
#
|
|
# Deploys piNail2 to the Raspberry Pi. Steps:
|
|
# 1. Copy piNail2 files to ~/piNail2/ on the Pi
|
|
# 2. Copy the MAX6675 library from the old project
|
|
# 3. Install pip dependencies (system-wide for Python 3.5)
|
|
# 4. Optionally install and enable the systemd service
|
|
#
|
|
# Usage: ./deploy.sh [--service]
|
|
# --service Also install and enable the systemd service
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
PI_HOST="pinail" # SSH alias from ~/.ssh/config
|
|
PI_USER="pi"
|
|
REMOTE_DIR="/home/${PI_USER}/piNail2"
|
|
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
INSTALL_SERVICE=false
|
|
|
|
if [[ "${1:-}" == "--service" ]]; then
|
|
INSTALL_SERVICE=true
|
|
fi
|
|
|
|
echo "=== piNail2 Deployment ==="
|
|
echo "Target: ${PI_HOST} -> ${REMOTE_DIR}"
|
|
echo ""
|
|
|
|
# -------------------------------------------------------------------
|
|
# Step 1: Copy project files
|
|
# -------------------------------------------------------------------
|
|
echo "--- Step 1: Copying piNail2 to Pi ---"
|
|
|
|
ssh ${PI_HOST} "mkdir -p ${REMOTE_DIR}/static ${REMOTE_DIR}/templates ${REMOTE_DIR}/logs"
|
|
|
|
# Copy Python source files
|
|
scp -q "${LOCAL_DIR}/app.py" \
|
|
"${LOCAL_DIR}/config.py" \
|
|
"${LOCAL_DIR}/thermocouple.py" \
|
|
"${LOCAL_DIR}/pid_controller.py" \
|
|
"${LOCAL_DIR}/config.json" \
|
|
"${LOCAL_DIR}/requirements.txt" \
|
|
"${LOCAL_DIR}/pinail.service" \
|
|
"${PI_HOST}:${REMOTE_DIR}/"
|
|
|
|
# Copy static + templates
|
|
scp -q "${LOCAL_DIR}/static/app.js" \
|
|
"${LOCAL_DIR}/static/style.css" \
|
|
"${PI_HOST}:${REMOTE_DIR}/static/"
|
|
|
|
scp -q "${LOCAL_DIR}/templates/index.html" \
|
|
"${PI_HOST}:${REMOTE_DIR}/templates/"
|
|
|
|
echo "Files copied."
|
|
echo ""
|
|
|
|
# -------------------------------------------------------------------
|
|
# Step 2: Copy MAX6675 library from old project
|
|
# -------------------------------------------------------------------
|
|
echo "--- Step 2: Copying MAX6675 library ---"
|
|
|
|
ssh ${PI_HOST} bash -s <<'REMOTE_SCRIPT'
|
|
# Copy the MAX6675 Python package from the old piNail project
|
|
if [ -d /home/pi/piNail/MAX6675-master/MAX6675 ]; then
|
|
cp -r /home/pi/piNail/MAX6675-master/MAX6675 /home/pi/piNail2/MAX6675
|
|
echo "MAX6675 library copied from old project"
|
|
else
|
|
echo "WARNING: MAX6675 library not found in old project!"
|
|
fi
|
|
REMOTE_SCRIPT
|
|
|
|
echo ""
|
|
|
|
# -------------------------------------------------------------------
|
|
# Step 3: Install pip dependencies
|
|
# -------------------------------------------------------------------
|
|
echo "--- Step 3: Installing dependencies ---"
|
|
|
|
ssh ${PI_HOST} bash -s <<'REMOTE_SCRIPT'
|
|
cd /home/pi/piNail2
|
|
|
|
echo "Installing dependencies with pip3..."
|
|
pip3 install --user -r requirements.txt 2>&1 | tail -10
|
|
|
|
echo ""
|
|
echo "Key packages:"
|
|
pip3 show Flask simple-pid RPi.GPIO Adafruit-GPIO 2>/dev/null | grep -E '^(Name|Version):'
|
|
REMOTE_SCRIPT
|
|
|
|
echo ""
|
|
|
|
# -------------------------------------------------------------------
|
|
# Step 4: Systemd service (optional)
|
|
# -------------------------------------------------------------------
|
|
if $INSTALL_SERVICE; then
|
|
echo "--- Step 4: Installing systemd service ---"
|
|
|
|
ssh ${PI_HOST} bash -s <<'REMOTE_SCRIPT'
|
|
sudo cp /home/pi/piNail2/pinail.service /etc/systemd/system/pinail2.service
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable pinail2.service
|
|
echo "Service installed and enabled (pinail2.service)"
|
|
echo "Start with: sudo systemctl start pinail2"
|
|
echo "Logs with: sudo journalctl -u pinail2 -f"
|
|
REMOTE_SCRIPT
|
|
else
|
|
echo "--- Step 4: Skipping systemd service (use --service flag to install) ---"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Deployment complete! ==="
|
|
echo ""
|
|
echo "To run manually:"
|
|
echo " ssh ${PI_HOST}"
|
|
echo " cd ~/piNail2"
|
|
echo " python3 app.py"
|
|
echo ""
|
|
echo "Web UI will be at: http://192.168.0.159:5000"
|