From 293a220719fccbcab6cdd4e1fd82f05ec26af31d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 11 Mar 2025 12:01:10 +0100 Subject: [PATCH] Plant-it (#3000) * Plant-it * update source * fix header * Update json/plant-it.json Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com> * Update plant-it.sh --------- Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com> --- ct/plant-it.sh | 64 ++++++++++++++++ install/plant-it-install.sh | 145 ++++++++++++++++++++++++++++++++++++ json/plant-it.json | 43 +++++++++++ 3 files changed, 252 insertions(+) create mode 100644 ct/plant-it.sh create mode 100644 install/plant-it-install.sh create mode 100644 json/plant-it.json diff --git a/ct/plant-it.sh b/ct/plant-it.sh new file mode 100644 index 000000000..c95e12ba9 --- /dev/null +++ b/ct/plant-it.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://plant-it.org/ + +APP="Plant-it" +var_tags="plants;garden" +var_cpu="2" +var_ram="2048" +var_disk="5" +var_os="debian" +var_version="12" +var_unprivileged="1" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/plant-it ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + RELEASE=$(curl -s https://api.github.com/repos/MDeLuise/plant-it/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" + systemctl stop plant-it + msg_ok "Stopped $APP" + + msg_info "Updating $APP to v${RELEASE}" + wget -q -O /opt/plant-it/server.jar "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" + cd /opt/plant-it/frontend + wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz + tar -xzf client.tar.gz + rm -f client.tar.gz + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Starting $APP" + systemctl start plant-it + msg_ok "Started $APP" + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/install/plant-it-install.sh b/install/plant-it-install.sh new file mode 100644 index 000000000..9083093c8 --- /dev/null +++ b/install/plant-it-install.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://plant-it.org/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + curl \ + mc \ + sudo \ + gnupg2 \ + mariadb-server \ + redis \ + nginx +msg_ok "Installed Dependencies" + +msg_info "Setting up Adoptium Repository" +mkdir -p /etc/apt/keyrings +wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg +echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list +$STD apt-get update +msg_ok "Set up Adoptium Repository" + +msg_info "Installing Temurin JDK 21 (LTS)" +$STD apt-get install -y temurin-21-jdk +msg_ok "Setup Temurin JDK 21 (LTS)" + +msg_info "Setting up MariaDB" +JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=') +DB_NAME=plantit +DB_USER=plantit_usr +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +$STD mysql -u root -e "CREATE DATABASE $DB_NAME;" +$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');" +$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;" +{ + echo "Plant-it Credentials" + echo "Plant-it Database User: $DB_USER" + echo "Plant-it Database Password: $DB_PASS" + echo "Plant-it Database Name: $DB_NAME" +} >>~/plant-it.creds +msg_ok "Set up MariaDB" + +msg_info "Setup Plant-it" +RELEASE=$(curl -s https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar +mkdir -p /opt/plant-it/{backend,frontend} +mkdir -p /opt/plant-it-data +mv -f server.jar /opt/plant-it/backend/server.jar + +cat </opt/plant-it/backend/server.env +MYSQL_HOST=localhost +MYSQL_PORT=3306 +MYSQL_USERNAME=$DB_USER +MYSQL_PSW=$DB_PASS +MYSQL_DATABASE=$DB_NAME +MYSQL_ROOT_PASSWORD=$DB_PASS + +JWT_SECRET=$JWT_SECRET +JWT_EXP=1 + +USERS_LIMIT=-1 +UPLOAD_DIR=/opt/plant-it-data +API_PORT=8080 +FLORACODEX_KEY= +LOG_LEVEL=DEBUG +ALLOWED_ORIGINS=* + +CACHE_TYPE=redis +CACHE_TTL=86400 +CACHE_HOST=localhost +CACHE_PORT=6379 +EOF + +cd /opt/plant-it/frontend +wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz +tar -xzf client.tar.gz +echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" +msg_ok "Setup Plant-it" + +msg_info "Creating Service" +cat </etc/systemd/system/plant-it.service +[Unit] +Description=Plant-it Backend Service +After=syslog.target network.target + +[Service] +Type=simple +WorkingDirectory=/opt/plant-it/backend +EnvironmentFile=/opt/plant-it/backend/server.env +ExecStart=/usr/bin/java -jar -Xmx2g server.jar +TimeoutStopSec=20 +KillMode=process +Restart=on-failure + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable --now -q plant-it + +cat </etc/nginx/nginx.conf +events { + worker_connections 1024; +} + +http { + server { + listen 3000; + server_name localhost; + + root /opt/plant-it/frontend; + index index.html; + + location / { + try_files \$uri \$uri/ /index.html; + } + + error_page 404 /404.html; + location = /404.html { + internal; + } + } +} +EOF +systemctl restart nginx +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -rf /opt/plant-it/frontend/client.tar.gz +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" diff --git a/json/plant-it.json b/json/plant-it.json new file mode 100644 index 000000000..41c397bb2 --- /dev/null +++ b/json/plant-it.json @@ -0,0 +1,43 @@ +{ + "name": "Plant-it", + "slug": "plant-it", + "categories": [ + 24 + ], + "date_created": "2025-03-11", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://docs.plant-it.org/latest/", + "website": "https://plant-it.org/", + "logo": "https://raw.githubusercontent.com/MDeLuise/plant-it/refs/heads/main/images/plant-it-logo.png", + "description": "Plant-it is a self-hosted, open-source app designed to help users manage and track plant care. It allows users to add plants, log activities like watering, fertilizing, and pruning, set reminders, and upload photos for visual tracking. The app includes a database of over 400,000 plant species, offering detailed care information such as optimal growing conditions and maintenance tips.\n\nUsers can organize their plant collection, monitor growth, and share data with others. The app is free to use and works on Android, iOS, and the web.", + "install_methods": [ + { + "type": "default", + "script": "ct/plant-it.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 5, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "This Script use Adoptium JDK 21 - Sometimes the installation of these takes a while", + "type": "info" + }, + { + "text": "After the initial start, the backend requires approx. 1-2 minutes boot time", + "type": "info" + } + ] +} \ No newline at end of file