From d03698683261bd1a55637055015f293a841734f1 Mon Sep 17 00:00:00 2001
From: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Date: Wed, 30 Oct 2024 09:17:53 +0100
Subject: [PATCH] Add new LXC: Memos

---
 ct/memos.sh              | 88 ++++++++++++++++++++++++++++++++++++++
 install/memos-install.sh | 91 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 179 insertions(+)
 create mode 100644 ct/memos.sh
 create mode 100644 install/memos-install.sh

diff --git a/ct/memos.sh b/ct/memos.sh
new file mode 100644
index 00000000..ceb1fd91
--- /dev/null
+++ b/ct/memos.sh
@@ -0,0 +1,88 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+# Copyright (c) 2021-2024 tteck
+# Author: tteck
+# Co-Author: MickLesk (Canbiz)
+# License: MIT
+# https://github.com/tteck/Proxmox/raw/main/LICENSE
+
+function header_info {
+clear
+cat <<"EOF"
+    __  ___                         
+   /  |/  /__  ____ ___  ____  _____
+  / /|_/ / _ \/ __ `__ \/ __ \/ ___/
+ / /  / /  __/ / / / / / /_/ (__  ) 
+/_/  /_/\___/_/ /_/ /_/\____/____/  
+                                    
+EOF
+}
+header_info
+echo -e "Loading..."
+APP="Memos"
+var_disk="7"
+var_cpu="2"
+var_ram="2048"
+var_os="debian"
+var_version="12"
+variables
+color
+catch_errors
+
+function default_settings() {
+  CT_TYPE="1"
+  PW=""
+  CT_ID=$NEXTID
+  HN=$NSAPP
+  DISK_SIZE="$var_disk"
+  CORE_COUNT="$var_cpu"
+  RAM_SIZE="$var_ram"
+  BRG="vmbr0"
+  NET="dhcp"
+  GATE=""
+  APT_CACHER=""
+  APT_CACHER_IP=""
+  DISABLEIP6="no"
+  MTU=""
+  SD=""
+  NS=""
+  MAC=""
+  VLAN=""
+  SSH="no"
+  VERB="no"
+  echo_default
+}
+
+function update_script() {
+header_info
+if [[ ! -d /opt/memos ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+msg_info "Updating $APP (Patience)"
+cd /opt/memos
+output=$(git pull --no-rebase)
+if echo "$output" | grep -q "Already up to date."
+then
+  msg_ok "$APP is already up to date."
+  exit
+fi
+systemctl stop memos
+cd /opt/memos/web 
+pnpm i --frozen-lockfile &>/dev/null
+pnpm build &>/dev/null
+cd /opt/memos
+mkdir -p /opt/memos/server/dist
+cp -r web/dist/* /opt/memos/server/dist/
+cp -r web/dist/* /opt/memos/server/router/frontend/dist/ 
+go build -o /opt/memos/memos -tags=embed bin/memos/main.go &>/dev/null
+systemctl start memos
+msg_ok "Updated $APP"
+exit
+}
+
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${APP} should be reachable by going to the following URL.
+         ${BL}http://${IP}:9030${CL} \n"
diff --git a/install/memos-install.sh b/install/memos-install.sh
new file mode 100644
index 00000000..f41d6f27
--- /dev/null
+++ b/install/memos-install.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2021-2024 tteck
+# Author: tteck
+# Co-Author: MickLesk (Canbiz)
+# License: MIT
+# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Source: https://github.com/usememos/memos
+
+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 \
+  build-essential \
+  git \
+  curl \
+  sudo \
+  tzdata \
+  mc
+msg_ok "Installed Dependencies"
+
+msg_info "Setting up Node.js Repository"
+mkdir -p /etc/apt/keyrings
+curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
+echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
+msg_ok "Set up Node.js Repository"
+
+msg_info "Installing Node.js"
+$STD apt-get update
+$STD apt-get install -y nodejs
+msg_ok "Installed Node.js"
+
+msg_info "Installing pnpm"
+$STD npm install -g pnpm
+msg_ok "Installed pnpm"
+
+msg_info "Installing Golang"
+set +o pipefail
+GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
+wget -q https://golang.org/dl/$GOLANG
+tar -xzf $GOLANG -C /usr/local
+ln -s /usr/local/go/bin/go /usr/local/bin/go
+set -o pipefail
+msg_ok "Installed Golang"
+
+msg_info "Installing Memos (Patience)"
+mkdir -p /opt/memos_data
+$STD sudo git clone https://github.com/usememos/memos.git /opt/memos
+cd /opt/memos/web 
+$STD pnpm i --frozen-lockfile
+$STD pnpm build
+cd /opt/memos
+mkdir -p /opt/memos/server/dist
+cp -r web/dist/* /opt/memos/server/dist/
+cp -r web/dist/* /opt/memos/server/router/frontend/dist/
+$STD go build -o /opt/memos/memos -tags=embed bin/memos/main.go
+msg_ok "Installed Memos"
+
+msg_info "Creating Service"
+cat <<EOF >/etc/systemd/system/memos.service
+[Unit]
+Description=Memos Server
+After=network.target
+
+[Service]
+ExecStart=/opt/memos/memos
+Environment="MEMOS_MODE=prod"
+Environment="MEMOS_PORT=9030"
+Environment="MEMOS_DATA=/opt/memos_data"
+WorkingDirectory=/opt/memos
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+EOF
+systemctl enable -q --now memos.service
+msg_ok "Created Service"
+
+motd_ssh
+customize
+
+msg_info "Cleaning up"
+$STD apt-get -y autoremove
+$STD apt-get -y autoclean
+msg_ok "Cleaned"