diff --git a/ct/bar-assistant.sh b/ct/bar-assistant.sh new file mode 100644 index 00000000..de694ef8 --- /dev/null +++ b/ct/bar-assistant.sh @@ -0,0 +1,136 @@ +#!/usr/bin/env bash +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: bvdberg01 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/karlomikus/bar-assistant +# Source: https://github.com/karlomikus/vue-salt-rim +# Source: https://www.meilisearch.com/ + +APP="Bar-Assistant" +var_tags="${var_tags:-network}" +var_cpu="${var_cpu:-4}" +var_ram="${var_ram:-4096}" +var_disk="${var_disk:-15}" +var_os="${var_os:-debian}" +var_version="${var_version:-12}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + if [[ ! -d /opt/manyfold ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE_MEILISEARCH=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE_BARASSISTANT=$(curl -s https://api.github.com/repos/benjaminjonard/manyfold/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + RELEASE_SALTRIM=$(curl -s https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') + + if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE_BARASSISTANT}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping Service" + systemctl stop nginx + msg_ok "Stopped Service" + + msg_info "Updating ${APP} to v${RELEASE_BARASSISTANT}" + cd /opt + mv /opt/bar-assistant /opt/bar-assistant-backup + curl -fsSL "https://github.com/karlomikus/bar-assistant/archive/refs/tags/v${RELEASE_BARASSISTANT}.zip" -o barassistant.zip + unzip -q barassistant.zip + mv /opt/barassistant-${RELEASE_BARASSISTANT}/ /opt/bar-assistant + cp /opt/bar-assistant-backup/.env /opt/bar-assistant/.env + cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant + cd /opt/bar-assistant + composer install + php artisan migrate --force + php artisan storage:link + php artisan bar:setup-meilisearch + php artisan scout:sync-index-settings + php artisan config:cache + php artisan route:cache + php artisan event:cache + echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt + msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}" + + msg_info "Starting Service" + systemctl start service nginx + msg_ok "Started Service" + + msg_info "Cleaning up" + rm -rf /opt/barassistant.zip + rm -rf /opt/bar-assistant-backup + msg_ok "Cleaned" + else + msg_ok "No update required. ${APP} is already at v${RELEASE_BARASSISTANT}" + fi + + if [[ ! -f /opt/vue-salt-rim_version.txt ]] || [[ "${RELEASE_SALTRIM}" != "$(cat /opt/vue-salt-rim_version.txt)" ]]; then + msg_info "Stopping Service" + systemctl stop nginx + msg_ok "Stopped Service" + + msg_info "Updating Salt Rim to v${RELEASE_SALTRIM}" + cd /opt + mv /opt/vue-salt-rim /opt/vue-salt-rim-backup + curl -fsSL "https://github.com/karlomikus/vue-salt-rim/archive/refs/tags/v${RELEASE_SALTRIM}.zip" -o saltrim.zip + unzip -q saltrim.zip + mv /opt/vue-salt-rim-${RELEASE_SALTRIM}/ /opt/vue-salt-rim + cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js + cd /opt/vue-salt-rim + npm run build + echo "${RELEASE_SALTRIM}" >/opt/vue-salt-rim_version.txt + msg_ok "Updated $APP to v${RELEASE_SALTRIM}" + + msg_info "Starting Service" + systemctl start service nginx + msg_ok "Started Service" + + msg_info "Cleaning up" + rm -rf /opt/saltrim.zip + rm -rf /opt/vue-salt-rim-backup + msg_ok "Cleaned" + else + msg_ok "No update required. Salt Rim is already at v${RELEASE_SALTRIM}" + fi + + if [[ ! -f /opt/meilisearch_version.txt ]] || [[ "${RELEASE_MEILISEARCH}" != "$(cat /opt/meilisearch_version.txt)" ]]; then + msg_info "Stopping Service" + systemctl stop meilisearch + msg_ok "Stopped Service" + + msg_info "Updating Meilisearch to v${RELEASE_MEILISEARCH}" + cd /opt + RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') + curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o meilisearch.deb + $STD dpkg -i meilisearch.deb + echo "${RELEASE_MEILISEARCH}" >/opt/meilisearch_version.txt + msg_ok "Updated Meilisearch to v${RELEASE_MEILISEARCH}" + + msg_info "Starting Service" + systemctl start meilisearch + msg_ok "Started Service" + + msg_info "Cleaning up" + rm -rf "/opt/meilisearch.deb" + msg_ok "Cleaned" + msg_ok "Updated Meilisearch" + else + msg_ok "No update required. Meilisearch is already at v${RELEASE_MEILISEARCH}" + 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}${CL}" diff --git a/install/bar-assistant-install.sh b/install/bar-assistant-install.sh new file mode 100644 index 00000000..4d9e25fc --- /dev/null +++ b/install/bar-assistant-install.sh @@ -0,0 +1,168 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: bvdberg01 +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/karlomikus/bar-assistant +# Source: https://github.com/karlomikus/vue-salt-rim +# Source: https://www.meilisearch.com/ + +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 \ + php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm} \ + composer \ + redis-server \ + npm \ + nginx +msg_ok "Installed Dependencies" + +msg_info "Installing MeiliSearch" +cd /opt +RELEASE_MEILISEARCH=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') +curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o meilisearch.deb +$STD dpkg -i meilisearch.deb +curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml +MASTER_KEY=$(openssl rand -base64 12) +LOCAL_IP="$(hostname -I | awk '{print $1}')" +sed -i \ + -e 's|^env =.*|env = "production"|' \ + -e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \ + -e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \ + -e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \ + -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \ + -e 's|^# no_analytics = true|no_analytics = true|' \ + -e 's|^http_addr =.*|http_addr = "0.0.0.0:7700"|' \ + /etc/meilisearch.toml +echo "${RELEASE_MEILISEARCH}" >/opt/meilisearch_version.txt +msg_ok "Installed MeiliSearch" + +msg_info "Creating MeiliSearch service" +cat </etc/systemd/system/meilisearch.service +[Unit] +Description=Meilisearch +After=network.target + +[Service] +ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now meilisearch +msg_ok "Created Service MeiliSearch" + +msg_info "Installing Bar Assistant" +RELEASE_BARASSISTANT=$(curl -s https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +cd /opt +curl -fsSL "https://github.com/karlomikus/bar-assistant/archive/refs/tags/v${RELEASE_BARASSISTANT}.zip" -o barassistant.zip +unzip -q barassistant.zip +mv /opt/barassistant-${RELEASE_BARASSISTANT}/ /opt/bar-assistant +cd /opt/bar-assistant +cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env +MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//') +MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//') + +composer install +php artisan key:generate +touch storage/bar-assistant/database.ba3.sqlite +php artisan migrate --force +php artisan storage:link +php artisan bar:setup-meilisearch +php artisan scout:sync-index-settings +php artisan config:cache +php artisan route:cache +php artisan event:cache +echo "${RELEASE_BARASSISTANT}" >/opt/${APPLICATION}_version.txt +msg_ok "Installed Bar Assistant" + +msg_info "Installing Salt Rim" +RELEASE_SALTRIM=$(curl -s https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +cd /opt +curl -fsSL "https://github.com/karlomikus/vue-salt-rim/archive/refs/tags/v${RELEASE_SALTRIM}.zip" -o saltrim.zip +unzip -q saltrim.zip +mv /opt/vue-salt-rim-${RELEASE_SALTRIM}/ /opt/vue-salt-rim +cd /opt/vue-salt-rim +cat </opt/vue-salt-rim/public/config.js +window.srConfig = {} +window.srConfig.API_URL = "http://my-bar.com" +window.srConfig.MEILISEARCH_URL = "http://my-milisearch.com" +EOF +npm run build +echo "${RELEASE_SALTRIM}" >/opt/vue-salt-rim_version.txt +msg_ok "Installed Salt Rim" + +msg_info "Creating Service" +cat </etc/nginx/sites-available/barassistant.conf +server { + listen 80; + listen [::]:80; + server_name example.com; + root /opt/bar-assistant/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + + index index.php; + + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ ^/index\.php(/|$) { + fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_hide_header X-Powered-By; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} +EOF + +cat </etc/nginx/sites-available/saltrim.conf +server { + listen 8080 default_server; + listen [::]:8080 default_server; + server_name _; + root /opt/vue-salt-rim/dist; + + location / { + try_files $uri $uri/ /index.html; + } +} +EOF + +ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/ +ln -s /etc/nginx/sites-available/saltrim.conf /etc/nginx/sites-enabled/ +rm -f /etc/nginx/sites-enabled/default +$STD systemctl reload nginx +msg_ok "Created Service" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -rf /opt/meilisearch.deb +rm -rf "/opt/barassistant.zip" +rm -rf "/opt/saltrim.zip" +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned"