diff --git a/ct/emdash.sh b/ct/emdash.sh new file mode 100644 index 000000000..10cae90e7 --- /dev/null +++ b/ct/emdash.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/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/emdash-cms/emdash + +APP="EmDash" +var_tags="${var_tags:-cms;blog}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-3072}" +var_disk="${var_disk:-6}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_arm64="${var_arm64:-yes}" +var_unprivileged="${var_unprivileged:-1}" + +export var_emdash_url="${var_emdash_url:-}" +export var_emdash_template="${var_emdash_template:-}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -d /opt/emdash ]]; then + msg_error "No EmDash Installation Found!" + exit + fi + + if check_for_gh_release "emdash" "emdash-cms/emdash" "" "" "emdash@"; then + msg_info "Stopping EmDash" + systemctl stop emdash + msg_ok "Stopped EmDash" + + NODE_VERSION="24" NODE_MODULE="pnpm@11" setup_nodejs + + msg_info "Updating EmDash" + cd /opt/emdash + set -a && source /opt/emdash_data/.env && set +a + $STD pnpm add "${CHECK_UPDATE_RELEASE}" + $STD pnpm build + $STD pnpm store prune + cat <~/.emdash +${CHECK_UPDATE_RELEASE} +EOF + msg_ok "Updated EmDash" + + msg_info "Starting EmDash" + systemctl start emdash + msg_ok "Started EmDash" + 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 "${GATEWAY}${BGN}http://${IP}:4321${CL}" +echo -e "${INFO}${YW}The admin at /_emdash/admin signs in with passkeys only, and browsers allow those on HTTPS with a domain or on localhost, never on an IP address.${CL}" +echo -e "${INFO}${YW}Put EmDash behind a reverse proxy with a trusted certificate, set EMDASH_SITE_URL in /opt/emdash_data/.env to that address and rebuild (see the notes), then create the admin there.${CL}" diff --git a/install/emdash-install.sh b/install/emdash-install.sh new file mode 100644 index 000000000..186eddd36 --- /dev/null +++ b/install/emdash-install.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +# 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/emdash-cms/emdash + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +NODE_VERSION="24" NODE_MODULE="pnpm@11" setup_nodejs + +msg_info "Creating EmDash Site" +cd /opt +$STD pnpm dlx create-emdash@latest emdash --platform node --template "${var_emdash_template:-blog}" --pm pnpm --no-install --yes +mkdir -p /opt/emdash_data/uploads +mv /opt/emdash/.env /opt/emdash_data/.env +sed -i -e 's|file:./data.db|file:/opt/emdash_data/data.db|' -e 's|"./uploads"|"/opt/emdash_data/uploads"|' /opt/emdash/astro.config.mjs +cat <>/opt/emdash_data/.env +HOST=0.0.0.0 +PORT=4321 +# The address in the browser bar. Passkeys are bound to its hostname, and the build bakes it in for image optimization: +# after a change run cd /opt/emdash && set -a && . /opt/emdash_data/.env && set +a && pnpm build && systemctl restart emdash +EMDASH_SITE_URL=${var_emdash_url:-http://${LOCAL_IP}:4321} +EOF +chmod 600 /opt/emdash_data/.env +msg_ok "Created EmDash Site" + +msg_info "Building EmDash" +cd /opt/emdash +# pnpm keeps Astro's sharp out of the site's reach, and every /_image request then fails with MissingSharp +$STD pnpm add sharp +set -a && source /opt/emdash_data/.env && set +a +$STD pnpm build +cat <~/.emdash +emdash@$(node -p 'require("/opt/emdash/node_modules/emdash/package.json").version') +EOF +msg_ok "Built EmDash" + +msg_info "Creating EmDash Service" +cat </etc/systemd/system/emdash.service +[Unit] +Description=EmDash +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/emdash +EnvironmentFile=/opt/emdash_data/.env +Environment=NODE_ENV=production +ExecStart=/usr/bin/node /opt/emdash/dist/server/entry.mjs +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now emdash +msg_ok "Created EmDash Service" + +motd_ssh +customize +cleanup_lxc