diff --git a/ct/scanopy.sh b/ct/scanopy.sh index c1bbb1c9b..1ce28ad44 100644 --- a/ct/scanopy.sh +++ b/ct/scanopy.sh @@ -38,35 +38,20 @@ function update_script() { [[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl stop scanopy-daemon msg_ok "Stopped services" - create_backup /opt/scanopy/.env /opt/scanopy/oidc.toml - - CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy" - - restore_backup - - ensure_dependencies pkg-config libssl-dev - TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')" - RUST_TOOLCHAIN=$TOOLCHAIN setup_rust + cp -f /usr/bin/scanopy-server /usr/bin/scanopy-server.bak 2>/dev/null || true + cp -f /opt/scanopy/.env /opt/scanopy/.env.bak + cp -f /etc/systemd/system/scanopy-server.service /etc/systemd/system/scanopy-server.service.bak if ! grep -q "PUBLIC_URL" /opt/scanopy/.env; then - sed -i "\|_PATH=|a\\scanopy_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env + sed -i "\|_PATH=|a\\SCANOPY_PUBLIC_URL=http://${LOCAL_IP}:60072" /opt/scanopy/.env fi sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env + sed -i '/^SCANOPY_WEB_EXTERNAL_PATH=/d' /opt/scanopy/.env + sed -i 's|^WorkingDirectory=/opt/scanopy/backend$|WorkingDirectory=/opt/scanopy|' /etc/systemd/system/scanopy-server.service + systemctl daemon-reload - msg_info "Building Scanopy Server (patience)" - cd /opt/scanopy/backend - CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures - $STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data - mv ./target/release/server /usr/bin/scanopy-server - msg_ok "Built Scanopy Server" - - msg_info "Creating frontend UI" - export PUBLIC_SERVER_HOSTNAME=default - export PUBLIC_SERVER_PORT="" - cd /opt/scanopy/ui - $STD npm ci --no-fund --no-audit - $STD npm run build - msg_ok "Created frontend UI" + fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)" + mv -f /usr/bin/Scanopy /usr/bin/scanopy-server if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-$(arch_resolve)" @@ -81,6 +66,26 @@ function update_script() { msg_info "Starting services" systemctl start scanopy-server + healthy=0 + for _ in {1..30}; do + if curl -fsS -o /dev/null http://127.0.0.1:60072/api/health 2>/dev/null; then + healthy=1 + break + fi + sleep 2 + done + if [[ "$healthy" -ne 1 ]]; then + systemctl stop scanopy-server + [[ -f /usr/bin/scanopy-server.bak ]] && mv -f /usr/bin/scanopy-server.bak /usr/bin/scanopy-server + mv -f /opt/scanopy/.env.bak /opt/scanopy/.env + mv -f /etc/systemd/system/scanopy-server.service.bak /etc/systemd/system/scanopy-server.service + systemctl daemon-reload + systemctl start scanopy-server + msg_error "New server did not answer /api/health, restored the previous version" + exit 1 + fi + rm -rf /opt/scanopy/backend /opt/scanopy/ui + rm -f /usr/bin/scanopy-server.bak /opt/scanopy/.env.bak /etc/systemd/system/scanopy-server.service.bak [[ -f /etc/systemd/system/scanopy-daemon.service ]] && systemctl start scanopy-daemon msg_ok "Updated successfully!" fi diff --git a/install/scanopy-install.sh b/install/scanopy-install.sh index b272a2297..a2ee2e9c3 100644 --- a/install/scanopy-install.sh +++ b/install/scanopy-install.sh @@ -13,40 +13,16 @@ setting_up_container network_check update_os -msg_info "Installing Dependencies" -$STD apt install -y \ - build-essential \ - libssl-dev \ - pkg-config -msg_ok "Installed Dependencies" - PG_VERSION=17 setup_postgresql -NODE_VERSION="24" setup_nodejs PG_DB_NAME="scanopy_db" PG_DB_USER="scanopy" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db -fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "tarball" "latest" "/opt/scanopy" -TOOLCHAIN="$(grep "channel" /opt/scanopy/backend/rust-toolchain.toml | awk -F\" '{print $2}')" -RUST_TOOLCHAIN=$TOOLCHAIN setup_rust +fetch_and_deploy_gh_release "Scanopy" "scanopy/scanopy" "singlefile" "latest" "/usr/bin" "scanopy-server-linux-$(arch_resolve)" +mv -f /usr/bin/Scanopy /usr/bin/scanopy-server -msg_info "Building Scanopy Server (patience)" -cd /opt/scanopy/backend -CARGO_BUILD_JOBS="$(get_parallel_jobs)" $STD cargo build --release --bin server --bin generate-fixtures -$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data -mv ./target/release/server /usr/bin/scanopy-server -msg_ok "Built Scanopy Server" - -msg_info "Creating frontend UI" -export PUBLIC_SERVER_HOSTNAME=default -export PUBLIC_SERVER_PORT="" -cd /opt/scanopy/ui -$STD npm ci --no-fund --no-audit -$STD npm run build -msg_ok "Created frontend UI" - -msg_info "Configuring server for first-run" +msg_info "Configuring Scanopy" +mkdir -p /opt/scanopy cat </opt/scanopy/.env ### - SERVER SCANOPY_DATABASE_URL=postgresql://$PG_DB_USER:$PG_DB_PASS@localhost:5432/$PG_DB_NAME -SCANOPY_WEB_EXTERNAL_PATH="/opt/scanopy/ui/build" SCANOPY_PUBLIC_URL=http://${LOCAL_IP}:60072 SCANOPY_SERVER_PORT=60072 SCANOPY_LOG_LEVEL=info @@ -73,7 +49,9 @@ SCANOPY_HEARTBEAT_INTERVAL=30 ### - see https://github.com/scanopy/scanopy/blob/main/docs/CONFIGURATION.md for more options EOF +msg_ok "Configured Scanopy" +msg_info "Creating Service" cat </etc/systemd/system/scanopy-server.service [Unit] Description=Scanopy Network Discovery Server @@ -81,7 +59,7 @@ After=network.target postgresql.service [Service] Type=simple -WorkingDirectory=/opt/scanopy/backend +WorkingDirectory=/opt/scanopy EnvironmentFile=/opt/scanopy/.env ExecStart=/usr/bin/scanopy-server Restart=always @@ -92,43 +70,8 @@ StandardError=journal [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now scanopy-server - -# Creating short script to configure scanopy-daemon -# cat <~/configure_daemon.sh -# #!/usr/bin/env bash -# -# echo "Auto-configuring integrated daemon..." -# -# NETWORK_ID="\$(sudo -u postgres psql -1 -t -d "${PG_DB_NAME}" -c 'SELECT id FROM networks;')" -# API_KEY="\$(sudo -u postgres psql -1 -t -d "${PG_DB_NAME}" -c 'SELECT key FROM api_keys;')" -# -# cat </etc/systemd/system/scanopy-daemon.service -# [Unit] -# Description=Scanopy Network Discovery Daemon -# After=network-online.target -# Wants=network-online.target -# -# [Service] -# Type=simple -# User=root -# ExecStart=/usr/bin/scanopy-daemon --server-url http://127.0.0.1:60072 --network-id \${NETWORK_ID} --daemon-api-key \${API_KEY} --mode push -# Restart=always -# RestartSec=10 -# StandardOutput=journal -# StandardError=journal -# -# [Install] -# WantedBy=multi-user.target -# END -# -# systemctl enable -q --now scanopy-daemon -# echo "Scanopy daemon configured and running" -# -# EOF -# chmod +x ~/configure_daemon.sh -msg_ok "Scanopy server running - please create an account, daemon API key and daemon in the Scanopy UI." +msg_ok "Created Service" motd_ssh customize