diff --git a/ct/excalidash.sh b/ct/excalidash.sh new file mode 100644 index 000000000..07f2f1764 --- /dev/null +++ b/ct/excalidash.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/ZimengXiong/ExcaliDash + +APP="ExcaliDash" +var_tags="${var_tags:-documents;drawing;collaboration}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-no}" +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/excalidash ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "excalidash" "ZimengXiong/ExcaliDash"; then + msg_info "Stopping Service" + systemctl stop excalidash + msg_ok "Stopped Service" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "excalidash" "ZimengXiong/ExcaliDash" "tarball" + ln -sf /opt/excalidash_data/.env /opt/excalidash/backend/.env + set -a && source /opt/excalidash_data/.env && set +a + + msg_info "Configuring Database Provider (${DATABASE_PROVIDER:-sqlite})" + cd /opt/excalidash/backend + sed -i '/datasource db {/,/}/ s/provider = env("[^"]*")/provider = "'"${DATABASE_PROVIDER:-sqlite}"'"/' prisma/schema.prisma + mv prisma/migrations/"${DATABASE_PROVIDER:-sqlite}"/* prisma/migrations/ + rm -rf prisma/migrations/postgresql prisma/migrations/sqlite + msg_ok "Configured Database Provider" + + msg_info "Rebuilding Application" + $STD npm ci + $STD npx prisma generate + $STD npx tsc + cd /opt/excalidash/frontend + $STD npm ci + $STD npm run build + cp -r /opt/excalidash/frontend/dist/. /var/www/excalidash/ + msg_ok "Rebuilt Application" + + msg_info "Running Migrations" + cd /opt/excalidash/backend + $STD npx prisma migrate deploy + msg_ok "Ran Migrations" + + msg_info "Starting Service" + systemctl start excalidash + msg_ok "Started Service" + msg_ok "Updated successfully!" + 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}:6767${CL}" diff --git a/ct/headers/excalidash b/ct/headers/excalidash new file mode 100644 index 000000000..5fb762583 --- /dev/null +++ b/ct/headers/excalidash @@ -0,0 +1,6 @@ + ______ ___ ____ __ + / ____/ ___________ _/ (_) __ \____ ______/ /_ + / __/ | |/_/ ___/ __ `/ / / / / / __ `/ ___/ __ \ + / /____> /opt/excalidash_data/.env +DATABASE_PROVIDER=postgresql +DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME} +PORT=8000 +NODE_ENV=production +FRONTEND_URL=http://${LOCAL_IP}:6767 +AUTH_MODE=local +TRUST_PROXY=false +RUN_MIGRATIONS=false +JWT_SECRET=$(openssl rand -hex 32) +CSRF_SECRET=$(openssl rand -base64 32) +EOF +ln -sf /opt/excalidash_data/.env /opt/excalidash/backend/.env +cd /opt/excalidash/backend +set -a && source /opt/excalidash_data/.env && set +a +$STD npx prisma migrate deploy +msg_ok "Configured Application" + +msg_info "Configuring Nginx" +cat </etc/nginx/sites-available/excalidash +server { + listen 6767; + server_name _; + root /var/www/excalidash; + index index.html; + client_max_body_size 50M; + + location /api/ { + proxy_pass http://127.0.0.1:8000/; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_read_timeout 300s; + proxy_send_timeout 300s; + } + + location /socket.io/ { + proxy_pass http://127.0.0.1:8000/socket.io/; + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + } + + location / { + try_files \$uri \$uri/ /index.html; + } +} +EOF +ln -sf /etc/nginx/sites-available/excalidash /etc/nginx/sites-enabled/excalidash +rm -f /etc/nginx/sites-enabled/default +systemctl reload nginx +msg_ok "Configured Nginx" + +msg_info "Creating Service" +cat </etc/systemd/system/excalidash.service +[Unit] +Description=ExcaliDash Service +After=network.target postgresql.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/excalidash/backend +EnvironmentFile=/opt/excalidash/backend/.env +ExecStart=/usr/bin/node dist/index.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now excalidash +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc