From fb0706469b27dc72661aa1fd77a9bbb5eb6f00dd Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 18 Nov 2024 10:33:19 +0100 Subject: [PATCH] Linkwarden - Harmonize Script, Add Monolith & Bugfixing (#306) * Update linkwarden.sh Add new StorageCheck Harmonize Update Script Increase Ressources Correct check of version * Update linkwarden-install.sh Harmonize Script Switch from Git to Release Add Monolith Add Cargo * Tweak * Update linkwarden.json --- ct/linkwarden.sh | 28 ++++++++++++------ install/linkwarden-install.sh | 56 ++++++++++++++++++++++++----------- json/linkwarden.json | 10 +++---- 3 files changed, 63 insertions(+), 31 deletions(-) diff --git a/ct/linkwarden.sh b/ct/linkwarden.sh index dd2f8ed7..7292d503 100644 --- a/ct/linkwarden.sh +++ b/ct/linkwarden.sh @@ -19,7 +19,7 @@ EOF header_info echo -e "Loading..." APP="Linkwarden" -var_disk="8" +var_disk="12" var_cpu="2" var_ram="2048" var_os="ubuntu" @@ -54,8 +54,9 @@ function default_settings() { function update_script() { header_info +check_container_storage +check_container_resources if [[ ! -d /opt/linkwarden ]]; then msg_error "No ${APP} Installation Found!"; exit; fi - RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Stopping ${APP}" @@ -63,20 +64,29 @@ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP} msg_ok "Stopped ${APP}" msg_info "Updating ${APP} to ${RELEASE}" + cd /opt + mv /opt/linkwarden /opt/linkwarden_bak + RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" + unzip -q ${RELEASE}.zip + mv linkwarden-${RELEASE:1} /opt/linkwarden cd /opt/linkwarden - git pull - yarn - npx playwright install-deps - yarn playwright install - yarn prisma generate - yarn build - yarn prisma migrate deploy + yarn &>/dev/null + npx playwright install-deps &>/dev/null + yarn playwright install &>/dev/null + cp /opt/linkwarden_bak/.env /opt/linkwarden/.env + yarn build &>/dev/null + yarn prisma migrate deploy &>/dev/null echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP} to ${RELEASE}" msg_info "Starting ${APP}" systemctl start linkwarden msg_ok "Started ${APP}" + msg_info "Cleaning up" + rm -rf /opt/${RELEASE}.zip + rm -rf /opt/linkwarden_bak + msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}." diff --git a/install/linkwarden-install.sh b/install/linkwarden-install.sh index ccbda473..6067e174 100644 --- a/install/linkwarden-install.sh +++ b/install/linkwarden-install.sh @@ -2,6 +2,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) +# Co-Author: MickLesk (Canbiz) # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -14,12 +15,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y git -$STD apt-get install -y gpg -$STD apt-get install -y postgresql +$STD apt-get install -y \ + curl \ + sudo \ + mc \ + make \ + postgresql \ + cargo msg_ok "Installed Dependencies" msg_info "Setting up Node.js Repository" @@ -34,22 +36,28 @@ $STD apt-get install -y nodejs $STD npm install -g yarn msg_ok "Installed Node.js/Yarn" -msg_info "Clone Linkwarden Repository" -$STD git clone https://github.com/linkwarden/linkwarden.git /opt/linkwarden -cd /opt/linkwarden -msg_ok "Cloned Linkwarden Repository" +msg_info "Installing Monolith" +$STD cargo install monolith +echo 'export PATH=~/.cargo/bin:$PATH' >>~/.bashrc +export PATH=~/.cargo/bin:$PATH +msg_ok "Installed Monolith" msg_info "Setting up PostgreSQL DB" DB_NAME=linkwardendb DB_USER=linkwarden DB_PASS="$(openssl rand -base64 18 | tr -d '/' | cut -c1-13)" $STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" -$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;" - -echo "" >>~/linkwarden.creds -echo -e "Linkwarden Database User: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds -echo -e "Linkwarden Database Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds -echo -e "Linkwarden Database Name: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds +$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" +{ + echo "Linkwarden-Credentials" + echo "Linkwarden Database User: $DB_USER" + echo "Linkwarden Database Password: $DB_PASS" + echo "Linkwarden Database Name: $DB_NAME" + echo "Linkwarden Secret: $SECRET_KEY" +} >> ~/linkwarden.creds msg_ok "Set up PostgreSQL DB" read -r -p "Would you like to add Adminer? " prompt @@ -66,12 +74,24 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds + { + echo "" + echo "Adminer-Credentials" + echo "Adminer WebUI: $IP/adminer/" + echo "Adminer Database User: $DB_USER" + echo "Adminer Database Password: $DB_PASS" + echo "Adminer Database Name: $DB_NAME" +} >> ~/linkwarden.creds msg_ok "Installed Adminer" fi msg_info "Installing Linkwarden (Patience)" +cd /opt RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') -echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip" +unzip -q ${RELEASE}.zip +mv linkwarden-${RELEASE:1} /opt/linkwarden +cd /opt/linkwarden $STD yarn $STD npx playwright install-deps $STD yarn playwright install @@ -85,6 +105,7 @@ DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME} " >$env_path $STD yarn build $STD yarn prisma migrate deploy +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt msg_ok "Installed Linkwarden" msg_info "Creating Service" @@ -108,6 +129,7 @@ motd_ssh customize msg_info "Cleaning up" +rm -rf /opt/${RELEASE}.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" diff --git a/json/linkwarden.json b/json/linkwarden.json index e6d24dc7..d621cb53 100644 --- a/json/linkwarden.json +++ b/json/linkwarden.json @@ -9,7 +9,7 @@ "updateable": false, "privileged": false, "interface_port": "3000", - "documentation": null, + "documentation": "https://docs.linkwarden.app/", "website": "https://linkwarden.app/", "logo": "https://raw.githubusercontent.com/linkwarden/linkwarden/main/assets/logo.png", "description": "Linkwarden is a fully self-hostable, open-source collaborative bookmark manager to collect, organize and archive webpages.", @@ -20,7 +20,7 @@ "resources": { "cpu": "2", "ram": "2048", - "hdd": "8", + "hdd": "12", "os": "ubuntu", "version": "22.04" } @@ -32,8 +32,8 @@ }, "notes": [ { - "text": "Show Database/Adminer Credentials: `cat linkwarden.creds`", - "type": "warning" + "text": "Linkwarden > 2.8.2 needs Monolith, More info: `https://github.com/community-scripts/ProxmoxVE/discussions/305`", + "type": "info" } ] -} \ No newline at end of file +}