108 lines
3.9 KiB
Bash
Executable File
108 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# =============================================================
|
||
# Dental Manager — fresh-machine install (README Steps 4–14, 16)
|
||
# Run in a terminal: bash install-all.sh
|
||
# It asks for your sudo password once at the start.
|
||
# Safe to re-run: every step skips what's already done.
|
||
# =============================================================
|
||
|
||
set -e
|
||
cd "$(dirname "$0")"
|
||
PROJECT_DIR="$(pwd)"
|
||
|
||
step() { echo ""; echo "=============================="; echo " $1"; echo "=============================="; }
|
||
|
||
sudo -v # ask for password up front
|
||
# keep sudo alive while the script runs
|
||
while true; do sudo -n true; sleep 50; kill -0 "$$" || exit; done 2>/dev/null &
|
||
|
||
step "Base tools (curl, wget, git)"
|
||
sudo apt-get update
|
||
sudo apt-get install -y curl wget ca-certificates git
|
||
|
||
step "STEP 4 — Node.js 20"
|
||
if command -v node >/dev/null && node -v | grep -q '^v2[0-9]'; then
|
||
echo "Node already installed: $(node -v)"
|
||
else
|
||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
fi
|
||
node -v; npm -v
|
||
|
||
step "STEP 5 — Python (+ venv, pip)"
|
||
sudo apt-get install -y python3 python3-pip python3-venv
|
||
python3 --version
|
||
|
||
step "STEP 6 — Google Chrome"
|
||
if command -v google-chrome >/dev/null; then
|
||
echo "Chrome already installed"
|
||
else
|
||
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O /tmp/google-chrome-stable.deb
|
||
sudo apt-get install -y /tmp/google-chrome-stable.deb
|
||
fi
|
||
google-chrome --version
|
||
|
||
step "STEP 7 — PostgreSQL"
|
||
sudo apt-get install -y postgresql postgresql-contrib
|
||
sudo systemctl enable postgresql
|
||
sudo systemctl start postgresql
|
||
sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname='dentalapp'" | grep -q 1 \
|
||
|| sudo -u postgres psql -c "CREATE DATABASE dentalapp OWNER postgres;"
|
||
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'mypassword';"
|
||
sudo sed -i 's/scram-sha-256/md5/g' /etc/postgresql/*/main/pg_hba.conf
|
||
sudo systemctl restart postgresql
|
||
PGPASSWORD=mypassword psql -U postgres -d dentalapp -h 127.0.0.1 -c 'SELECT 1' >/dev/null && echo "✓ PostgreSQL login works"
|
||
|
||
step "STEP 8 — Redis"
|
||
sudo apt-get install -y redis-server
|
||
sudo systemctl enable redis-server
|
||
sudo systemctl start redis-server
|
||
redis-cli ping
|
||
|
||
step "STEP 9 — rclone"
|
||
bash scripts/install-rclone.sh
|
||
|
||
step "STEP 10 — Node.js dependencies"
|
||
npm install
|
||
|
||
step "STEP 11 — Python dependencies (venvs)"
|
||
npm run setup:python
|
||
|
||
step "STEP 12 — .env files (only the missing ones; existing ones are kept)"
|
||
for f in packages/db/prisma/.env apps/Frontend/.env apps/Backend/.env \
|
||
apps/PatientDataExtractorService/.env apps/SeleniumService/.env apps/PaymentOCRService/.env; do
|
||
if [ -f "$f" ]; then echo "keep $f"
|
||
else cp "$f.example" "$f" && echo "created $f"; fi
|
||
done
|
||
|
||
step "STEP 13 — Database (migrate, generate, seed)"
|
||
npm run db:migrate
|
||
npm run db:generate
|
||
npm run db:seed
|
||
|
||
step "STEP 14 — nginx"
|
||
sudo apt-get install -y nginx
|
||
CERT=$(grep -m1 -oP 'ssl_certificate\s+\K\S+(?=;)' nginx.conf)
|
||
if sudo test -f "$CERT"; then
|
||
sudo cp nginx.conf /etc/nginx/sites-available/dental-app
|
||
sudo ln -sf /etc/nginx/sites-available/dental-app /etc/nginx/sites-enabled/dental-app
|
||
sudo rm -f /etc/nginx/sites-enabled/default
|
||
sudo nginx -t && sudo systemctl reload nginx
|
||
echo "✓ nginx configured"
|
||
else
|
||
echo "⚠ Skipped enabling the dental-app nginx site: certificate not found at"
|
||
echo " $CERT"
|
||
echo " Do the README's 'LAN HTTPS Setup' (certbot) first, then re-run this script."
|
||
fi
|
||
|
||
step "STEP 16 — Desktop shortcuts"
|
||
bash setup-desktop-shortcut.sh
|
||
|
||
echo ""
|
||
echo "============================================"
|
||
echo " Done. To run the app (Step 15):"
|
||
echo " Terminal 1: cd $PROJECT_DIR && npm run dev"
|
||
echo " Terminal 2: cd $PROJECT_DIR/apps/SeleniumService && .venv/bin/python3 agent.py"
|
||
echo " ...or double-click the 'Dental App' desktop shortcut."
|
||
echo "============================================"
|