diff --git a/ct/changedetection.sh b/ct/changedetection.sh index 42d00ad13..ad337b743 100644 --- a/ct/changedetection.sh +++ b/ct/changedetection.sh @@ -34,13 +34,32 @@ function update_script() { NODE_VERSION="24" setup_nodejs - msg_info "Updating ${APP}" - $STD pip3 install changedetection.io --upgrade --break-system-packages --ignore-installed typing_extensions - msg_ok "Updated ${APP}" + VENV_PATH="/opt/changedetection/.venv" + CHANGEDETECTION_BIN="${VENV_PATH}/bin/changedetection.io" - msg_info "Updating Playwright" - $STD pip3 install playwright --upgrade --break-system-packages - msg_ok "Updated Playwright" + PYTHON_VERSION="3.13" setup_uv + + if [[ ! -d "$VENV_PATH" || ! -x "$CHANGEDETECTION_BIN" ]]; then + msg_info "Migrating to uv/venv" + rm -rf "$VENV_PATH" + $STD uv venv --clear "$VENV_PATH" + $STD "$VENV_PATH/bin/python" -m ensurepip --upgrade + $STD "$VENV_PATH/bin/python" -m pip install --upgrade pip + $STD "$VENV_PATH/bin/python" -m pip install changedetection.io playwright + msg_ok "Migrated to uv/venv" + else + msg_info "Updating ${APP}" + $STD "$VENV_PATH/bin/python" -m pip install --upgrade changedetection.io playwright + msg_ok "Updated ${APP}" + fi + + SERVICE_FILE="/etc/systemd/system/changedetection.service" + if ! grep -q "${VENV_PATH}/bin/changedetection.io" "$SERVICE_FILE"; then + msg_info "Updating systemd service" + sed -i "s|^ExecStart=.*|ExecStart=${VENV_PATH}/bin/changedetection.io -d /opt/changedetection -p 5000|" "$SERVICE_FILE" + $STD systemctl daemon-reload + msg_ok "Updated systemd service" + fi if [[ -f /etc/systemd/system/browserless.service ]]; then msg_info "Updating Browserless (Patience)" diff --git a/install/changedetection-install.sh b/install/changedetection-install.sh index c74f87d3e..cd1089507 100644 --- a/install/changedetection-install.sh +++ b/install/changedetection-install.sh @@ -43,19 +43,16 @@ $STD apt-get install -y \ ca-certificates msg_ok "Installed Dependencies" -msg_info "Setup Python3" -$STD apt-get install -y \ - python3 \ - python3-dev \ - python3-pip -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Setup Python3" +PYTHON_VERSION="3.13" setup_uv NODE_VERSION="24" setup_nodejs msg_info "Installing Change Detection" -mkdir /opt/changedetection -$STD pip3 install changedetection.io +mkdir -p /opt/changedetection +$STD uv venv --clear /opt/changedetection/.venv +$STD /opt/changedetection/.venv/bin/python -m ensurepip --upgrade +$STD /opt/changedetection/.venv/bin/python -m pip install --upgrade pip +$STD /opt/changedetection/.venv/bin/python -m pip install changedetection.io cat </opt/changedetection/.env WEBDRIVER_URL=http://127.0.0.1:4444/wd/hub PLAYWRIGHT_DRIVER_URL=ws://localhost:3000/chrome?launch=eyJkZWZhdWx0Vmlld3BvcnQiOnsiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwfSwiaGVhZGxlc3MiOmZhbHNlLCJzdGVhbHRoIjp0cnVlfQ==&blockAds=true @@ -64,7 +61,7 @@ msg_ok "Installed Change Detection" msg_info "Installing Browserless & Playwright" mkdir /opt/browserless -$STD python3 -m pip install playwright +$STD /opt/changedetection/.venv/bin/python -m pip install playwright $STD git clone https://github.com/browserless/chrome /opt/browserless $STD npm ci --include=optional --include=dev --prefix /opt/browserless $STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null @@ -121,7 +118,7 @@ Wants=browserless.service Type=simple EnvironmentFile=/opt/changedetection/.env WorkingDirectory=/opt/changedetection -ExecStart=changedetection.io -d /opt/changedetection -p 5000 +ExecStart=/opt/changedetection/.venv/bin/changedetection.io -d /opt/changedetection -p 5000 [Install] WantedBy=multi-user.target