sync public allowlist from private myoffice
This commit is contained in:
@@ -0,0 +1,490 @@
|
||||
#!/usr/bin/env bash
|
||||
# MyOffice Proxmox LXC installer (community-scripts style).
|
||||
# Run on the Proxmox host (public Gitea repo raw URL):
|
||||
# export GITEA_URL="https://gitea.example.com"
|
||||
# export GITEA_OWNER="org"
|
||||
# export GITEA_REPO="myoffice-public"
|
||||
# export REPO_RAW_BASE="${GITEA_URL}/${GITEA_OWNER}/${GITEA_REPO}/raw/branch/main"
|
||||
# bash -c "$(curl -fsSL ${REPO_RAW_BASE}/proxmox/myoffice.sh)"
|
||||
#
|
||||
# Creates one LXC with PostgreSQL + ASP.NET runtime + app from Gitea Release.
|
||||
# No Docker, no nginx, no git/SDK/Node in the CT (use your existing proxy LXC in front).
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
GITEA_URL="${GITEA_URL:-}"
|
||||
GITEA_OWNER="${GITEA_OWNER:-}"
|
||||
GITEA_REPO="${GITEA_REPO:-myoffice-public}"
|
||||
RELEASE_TAG="${RELEASE_TAG:-latest}"
|
||||
RELEASE_ASSET_URL="${RELEASE_ASSET_URL:-}"
|
||||
GITEA_TOKEN="${GITEA_TOKEN:-}"
|
||||
|
||||
if [[ -z "${REPO_RAW_BASE:-}" ]]; then
|
||||
if [[ -n "$GITEA_URL" && -n "$GITEA_OWNER" ]]; then
|
||||
REPO_RAW_BASE="${GITEA_URL%/}/${GITEA_OWNER}/${GITEA_REPO}/raw/branch/main"
|
||||
else
|
||||
REPO_RAW_BASE="https://gitea.example.com/OWNER/myoffice-public/raw/branch/main"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Derive GITEA_* from REPO_RAW_BASE when only raw base is set:
|
||||
# https://host/owner/repo/raw/branch/main
|
||||
if [[ -z "$GITEA_URL" || -z "$GITEA_OWNER" ]]; then
|
||||
if [[ "$REPO_RAW_BASE" =~ ^(https?://[^/]+)/([^/]+)/([^/]+)/raw/ ]]; then
|
||||
[[ -z "$GITEA_URL" ]] && GITEA_URL="${BASH_REMATCH[1]}"
|
||||
[[ -z "$GITEA_OWNER" ]] && GITEA_OWNER="${BASH_REMATCH[2]}"
|
||||
[[ "$GITEA_REPO" == "myoffice-public" ]] && GITEA_REPO="${BASH_REMATCH[3]}"
|
||||
fi
|
||||
fi
|
||||
|
||||
APP="MyOffice"
|
||||
APP_DIR="/opt/myoffice"
|
||||
|
||||
YW=$'\033[33m'
|
||||
BL=$'\033[36m'
|
||||
RD=$'\033[01;31m'
|
||||
BGN=$'\033[4;92m'
|
||||
GN=$'\033[1;92m'
|
||||
DGN=$'\033[32m'
|
||||
CL=$'\033[m'
|
||||
BOLD=$'\033[1m'
|
||||
BFR=$'\r\033[K'
|
||||
TAB=$' '
|
||||
|
||||
CM="${TAB}✔️${TAB}${CL}"
|
||||
CROSS="${TAB}✖️${TAB}${CL}"
|
||||
INFO="${TAB}💡${TAB}${CL}"
|
||||
OS="${TAB}🖥️${TAB}${CL}"
|
||||
CONTAINERTYPE="${TAB}📦${TAB}${CL}"
|
||||
DISKSIZE="${TAB}💾${TAB}${CL}"
|
||||
CPUCORE="${TAB}🧠${TAB}${CL}"
|
||||
RAMSIZE="${TAB}🛠️${TAB}${CL}"
|
||||
CONTAINERID="${TAB}🆔${TAB}${CL}"
|
||||
HOSTNAME="${TAB}🏠${TAB}${CL}"
|
||||
BRIDGE="${TAB}🌉${TAB}${CL}"
|
||||
GATEWAY="${TAB}🌐${TAB}${CL}"
|
||||
DEFAULT="${TAB}⚙️${TAB}${CL}"
|
||||
CREATING="${TAB}🚀${TAB}${CL}"
|
||||
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||
|
||||
header_info() {
|
||||
clear
|
||||
cat <<"EOF"
|
||||
__ ___ ____ ____________
|
||||
/ |/ /_ __/ __ \/ __/ __/ _/______
|
||||
/ /|_/ / / / / / / / /_/ /_ / // ___/ _ \
|
||||
/ / / / /_/ / /_/ / __/ __// // /__/ __/
|
||||
/_/ /_/\__, /\____/_/ /_/ /___/\___/\___/
|
||||
/____/ Proxmox LXC (Gitea release)
|
||||
EOF
|
||||
}
|
||||
|
||||
msg_info() { echo -ne "${TAB}${YW}${1}${CL}"; }
|
||||
msg_ok() { echo -e "${BFR}${CM}${GN}${1}${CL}"; }
|
||||
msg_error() { echo -e "${BFR}${CROSS}${RD}${1}${CL}"; }
|
||||
|
||||
error_handler() {
|
||||
local exit_code=$?
|
||||
local line_number=$1
|
||||
local command=$2
|
||||
echo -e "\n${RD}[ERROR]${CL} line ${RD}${line_number}${CL}: exit ${RD}${exit_code}${CL}: ${YW}${command}${CL}\n"
|
||||
if [[ -n "${CTID:-}" ]] && pct status "$CTID" &>/dev/null; then
|
||||
echo -e "${INFO}CT ${CTID} exists; destroy with: pct stop ${CTID}; pct destroy ${CTID}"
|
||||
fi
|
||||
exit "$exit_code"
|
||||
}
|
||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||
|
||||
exit_script() {
|
||||
clear
|
||||
echo -e "\n${CROSS}${RD}User exited script${CL}\n"
|
||||
exit 0
|
||||
}
|
||||
|
||||
check_root() {
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
msg_error "Please run this script as root on the Proxmox host."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
pve_check() {
|
||||
if ! command -v pveversion >/dev/null 2>&1; then
|
||||
msg_error "This script must run on a Proxmox VE host (pveversion not found)."
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v whiptail >/dev/null 2>&1; then
|
||||
msg_error "whiptail is required (apt install whiptail)."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
arch_check() {
|
||||
if [[ "$(dpkg --print-architecture)" != "amd64" ]]; then
|
||||
msg_error "Only amd64 is supported."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_valid_nextid() {
|
||||
local try_id
|
||||
try_id=$(pvesh get /cluster/nextid)
|
||||
while true; do
|
||||
if [[ -f "/etc/pve/qemu-server/${try_id}.conf" ]] || [[ -f "/etc/pve/lxc/${try_id}.conf" ]]; then
|
||||
try_id=$((try_id + 1))
|
||||
continue
|
||||
fi
|
||||
break
|
||||
done
|
||||
echo "$try_id"
|
||||
}
|
||||
|
||||
select_storage() {
|
||||
local STORAGE_MENU=()
|
||||
local MSG_MAX_LENGTH=0
|
||||
local line TAG TYPE FREE ITEM OFFSET VALID
|
||||
while read -r line; do
|
||||
TAG=$(echo "$line" | awk '{print $1}')
|
||||
TYPE=$(echo "$line" | awk '{printf "%-10s", $2}')
|
||||
FREE=$(echo "$line" | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f 2>/dev/null | awk '{printf("%9sB", $6)}' || echo "?")
|
||||
ITEM=" Type: $TYPE Free: $FREE "
|
||||
OFFSET=2
|
||||
if [[ $((${#ITEM} + OFFSET)) -gt ${MSG_MAX_LENGTH:-0} ]]; then
|
||||
MSG_MAX_LENGTH=$((${#ITEM} + OFFSET))
|
||||
fi
|
||||
STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
|
||||
done < <(pvesm status -content rootdir | awk 'NR>1')
|
||||
|
||||
VALID=$(pvesm status -content rootdir | awk 'NR>1')
|
||||
if [[ -z "$VALID" ]]; then
|
||||
msg_error "Unable to detect a valid storage location (rootdir)."
|
||||
exit 1
|
||||
elif [[ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]]; then
|
||||
STORAGE=${STORAGE_MENU[0]}
|
||||
else
|
||||
while [[ -z "${STORAGE:+x}" ]]; do
|
||||
STORAGE=$(whiptail --backtitle "MyOffice Proxmox" --title "Storage Pools" --radiolist \
|
||||
"Which storage pool for ${HN}?\n(Spacebar to select)\n" \
|
||||
16 $((MSG_MAX_LENGTH + 23)) 6 \
|
||||
"${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3) || exit_script
|
||||
done
|
||||
fi
|
||||
msg_ok "Using ${CL}${BL}${STORAGE}${CL}${GN} for storage."
|
||||
}
|
||||
|
||||
default_settings() {
|
||||
CTID=$(get_valid_nextid)
|
||||
HN="myoffice"
|
||||
CORE_COUNT="2"
|
||||
RAM_SIZE="4096"
|
||||
DISK_SIZE="20"
|
||||
BRG="vmbr0"
|
||||
NET="dhcp"
|
||||
GATEWAY_IP=""
|
||||
API_PORT="9100"
|
||||
PUBLIC_URL="" # filled after CT IP known
|
||||
START_CT="yes"
|
||||
METHOD="default"
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}${CTID}${CL}"
|
||||
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
|
||||
echo -e "${OS}${BOLD}${DGN}OS: ${BGN}Debian 12${CL}"
|
||||
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||
echo -e "${RAMSIZE}${BOLD}${DGN}RAM: ${BGN}${RAM_SIZE} MiB${CL}"
|
||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk: ${BGN}${DISK_SIZE}G${CL}"
|
||||
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}IP: ${BGN}DHCP${CL}"
|
||||
echo -e "${DEFAULT}${BOLD}${DGN}API listen: ${BGN}:${API_PORT}${CL} (SPA from release wwwroot)"
|
||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Stack: ${BGN}PostgreSQL + ASP.NET + Gitea release${CL}"
|
||||
echo -e "${CREATING}${BOLD}${DGN}Creating MyOffice LXC with default settings${CL}"
|
||||
}
|
||||
|
||||
advanced_settings() {
|
||||
METHOD="advanced"
|
||||
[[ -z "${CTID:-}" ]] && CTID=$(get_valid_nextid)
|
||||
|
||||
while true; do
|
||||
if CTID=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Set Container ID" 8 58 "$CTID" --title "CONTAINER ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$CTID" ]] && CTID=$(get_valid_nextid)
|
||||
if pct status "$CTID" &>/dev/null || qm status "$CTID" &>/dev/null; then
|
||||
echo -e "${CROSS}${RD}ID $CTID is already in use${CL}"
|
||||
sleep 2
|
||||
continue
|
||||
fi
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}${CTID}${CL}"
|
||||
break
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
if HN_IN=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Set Hostname" 8 58 myoffice --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
HN=$(echo "${HN_IN:-myoffice}" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9-' '-' | sed 's/^-//;s/-$//' || true)
|
||||
[[ -z "$HN" ]] && HN="myoffice"
|
||||
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
|
||||
while true; do
|
||||
if CORE_COUNT=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Allocate CPU Cores" 8 58 2 --title "CORE COUNT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$CORE_COUNT" ]] && CORE_COUNT="2"
|
||||
if [[ "$CORE_COUNT" =~ ^[1-9][0-9]*$ ]]; then
|
||||
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||
break
|
||||
fi
|
||||
whiptail --backtitle "MyOffice Proxmox" --title "INVALID" --msgbox "CPU cores must be a positive integer." 8 58
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
while true; do
|
||||
if RAM_SIZE=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Allocate RAM in MiB" 8 58 4096 --title "RAM" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$RAM_SIZE" ]] && RAM_SIZE="4096"
|
||||
if [[ "$RAM_SIZE" =~ ^[1-9][0-9]*$ ]]; then
|
||||
echo -e "${RAMSIZE}${BOLD}${DGN}RAM: ${BGN}${RAM_SIZE} MiB${CL}"
|
||||
break
|
||||
fi
|
||||
whiptail --backtitle "MyOffice Proxmox" --title "INVALID" --msgbox "RAM must be a positive integer (MiB)." 8 58
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
while true; do
|
||||
if DISK_SIZE=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Disk size in GiB" 8 58 20 --title "DISK" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
DISK_SIZE=$(echo "${DISK_SIZE:-20}" | tr -d ' Gg')
|
||||
if [[ "$DISK_SIZE" =~ ^[1-9][0-9]*$ ]]; then
|
||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk: ${BGN}${DISK_SIZE}G${CL}"
|
||||
break
|
||||
fi
|
||||
whiptail --backtitle "MyOffice Proxmox" --title "INVALID" --msgbox "Disk must be a positive integer (GiB)." 8 58
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
if BRG=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Bridge" 8 58 vmbr0 --title "BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$BRG" ]] && BRG="vmbr0"
|
||||
echo -e "${BRIDGE}${BOLD}${DGN}Bridge: ${BGN}${BRG}${CL}"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
|
||||
if whiptail --backtitle "MyOffice Proxmox" --title "NETWORK" --yesno "Use DHCP?" --yes-button DHCP --no-button Static 10 58; then
|
||||
NET="dhcp"
|
||||
GATEWAY_IP=""
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}IP: ${BGN}DHCP${CL}"
|
||||
else
|
||||
if NET=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Static IP CIDR (e.g. 192.168.1.120/24)" 8 58 --title "IP ADDRESS" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
:
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
if GATEWAY_IP=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Gateway (e.g. 192.168.1.1)" 8 58 --title "GATEWAY" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
:
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
echo -e "${GATEWAY}${BOLD}${DGN}IP: ${BGN}${NET} gw ${GATEWAY_IP}${CL}"
|
||||
fi
|
||||
|
||||
if API_PORT=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Kestrel listen port" 8 58 9100 --title "API PORT" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$API_PORT" ]] && API_PORT="9100"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
echo -e "${DEFAULT}${BOLD}${DGN}API listen: ${BGN}:${API_PORT}${CL}"
|
||||
|
||||
if PUBLIC_URL=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Browser public URL (empty = http://CT_IP:PORT). Use your nginx proxy URL if any." 10 70 "" --title "PUBLIC URL" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
PUBLIC_URL=$(echo "$PUBLIC_URL" | sed 's:/*$::')
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
|
||||
if RELEASE_TAG=$(whiptail --backtitle "MyOffice Proxmox" --inputbox "Gitea release tag (latest or v1.2.3)" 8 58 "${RELEASE_TAG}" --title "RELEASE TAG" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||
[[ -z "$RELEASE_TAG" ]] && RELEASE_TAG="latest"
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
echo -e "${DEFAULT}${BOLD}${DGN}Release: ${BGN}${RELEASE_TAG}${CL}"
|
||||
|
||||
if whiptail --backtitle "MyOffice Proxmox" --title "START CONTAINER" --yesno "Start CT when created?" 10 58; then
|
||||
START_CT="yes"
|
||||
else
|
||||
START_CT="no"
|
||||
fi
|
||||
|
||||
if whiptail --backtitle "MyOffice Proxmox" --title "ADVANCED SETTINGS" --yesno "Ready to create MyOffice LXC?" --no-button Do-Over 10 58; then
|
||||
echo -e "${CREATING}${BOLD}${DGN}Creating MyOffice LXC with advanced settings${CL}"
|
||||
else
|
||||
header_info
|
||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
|
||||
advanced_settings
|
||||
fi
|
||||
}
|
||||
|
||||
start_script() {
|
||||
if whiptail --backtitle "MyOffice Proxmox" --title "SETTINGS" --yesno "Use Default Settings?" --no-button Advanced 10 58; then
|
||||
header_info
|
||||
echo -e "${BL}Using Default Settings${CL}"
|
||||
default_settings
|
||||
else
|
||||
header_info
|
||||
echo -e "${RD}Using Advanced Settings${CL}"
|
||||
advanced_settings
|
||||
fi
|
||||
}
|
||||
|
||||
ensure_template() {
|
||||
local template="debian-12-standard"
|
||||
local store="local"
|
||||
msg_info "Ensuring Debian 12 LXC template..."
|
||||
if ! pveam list "$store" 2>/dev/null | grep -q "$template"; then
|
||||
pveam update >/dev/null
|
||||
local remote
|
||||
remote=$(pveam available -section system | awk '/debian-12-standard/ {print $2; exit}')
|
||||
if [[ -z "$remote" ]]; then
|
||||
msg_error "Could not find debian-12-standard template in pveam available."
|
||||
exit 1
|
||||
fi
|
||||
pveam download "$store" "$remote"
|
||||
fi
|
||||
TEMPLATE_REF=$(pveam list "$store" | awk '/debian-12-standard/ {print $1; exit}')
|
||||
if [[ -z "${TEMPLATE_REF:-}" ]]; then
|
||||
msg_error "Debian 12 template not found after download."
|
||||
exit 1
|
||||
fi
|
||||
msg_ok "Template ${CL}${BL}${TEMPLATE_REF}${CL}"
|
||||
}
|
||||
|
||||
create_container() {
|
||||
local net_cfg
|
||||
if [[ "$NET" == "dhcp" ]]; then
|
||||
net_cfg="name=eth0,bridge=${BRG},ip=dhcp"
|
||||
else
|
||||
net_cfg="name=eth0,bridge=${BRG},ip=${NET},gw=${GATEWAY_IP}"
|
||||
fi
|
||||
|
||||
msg_info "Creating LXC ${CTID} (${HN})..."
|
||||
pct create "$CTID" "$TEMPLATE_REF" \
|
||||
--hostname "$HN" \
|
||||
--cores "$CORE_COUNT" \
|
||||
--memory "$RAM_SIZE" \
|
||||
--swap 512 \
|
||||
--rootfs "${STORAGE}:${DISK_SIZE}" \
|
||||
--net0 "$net_cfg" \
|
||||
--unprivileged 1 \
|
||||
--ostype debian \
|
||||
--onboot 1 \
|
||||
--timezone host \
|
||||
--tags "myoffice" \
|
||||
--description "MyOffice: PostgreSQL + ASP.NET Core from Gitea release. Proxy via external nginx LXC."
|
||||
msg_ok "Created CT ${CL}${BL}${CTID}${CL}"
|
||||
|
||||
if [[ "$START_CT" == "yes" ]]; then
|
||||
msg_info "Starting CT ${CTID}..."
|
||||
pct start "$CTID"
|
||||
msg_ok "Started CT ${CTID}"
|
||||
else
|
||||
msg_error "CT created but not started (Start=no). Start with: pct start ${CTID}"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_network() {
|
||||
msg_info "Waiting for CT network..."
|
||||
local i ip
|
||||
for i in $(seq 1 60); do
|
||||
ip=$(pct exec "$CTID" -- bash -c "ip -4 -o addr show eth0 2>/dev/null | awk '{print \$4}' | cut -d/ -f1 | head -1" 2>/dev/null || true)
|
||||
if [[ -n "$ip" ]]; then
|
||||
CT_IP="$ip"
|
||||
msg_ok "CT IP ${CL}${BL}${CT_IP}${CL}"
|
||||
return 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
msg_error "Timed out waiting for CT IP."
|
||||
exit 1
|
||||
}
|
||||
|
||||
resolve_script_dir() {
|
||||
if [[ -n "${BASH_SOURCE[0]:-}" && -f "${BASH_SOURCE[0]}" ]]; then
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
else
|
||||
SCRIPT_DIR=""
|
||||
fi
|
||||
}
|
||||
|
||||
push_install_assets() {
|
||||
local dest_dir="/tmp/myoffice-proxmox"
|
||||
pct exec "$CTID" -- mkdir -p "$dest_dir"
|
||||
|
||||
if [[ -n "${SCRIPT_DIR}" && -f "${SCRIPT_DIR}/install-in-ct.sh" ]]; then
|
||||
for f in install-in-ct.sh fetch-release.sh myoffice-api.service update.sh; do
|
||||
pct push "$CTID" "${SCRIPT_DIR}/${f}" "${dest_dir}/${f}"
|
||||
done
|
||||
else
|
||||
msg_info "Downloading install assets from REPO_RAW_BASE..."
|
||||
for f in install-in-ct.sh fetch-release.sh myoffice-api.service update.sh; do
|
||||
curl -fsSL "${REPO_RAW_BASE}/proxmox/${f}" -o "/tmp/${f}"
|
||||
pct push "$CTID" "/tmp/${f}" "${dest_dir}/${f}"
|
||||
done
|
||||
msg_ok "Downloaded install assets"
|
||||
fi
|
||||
pct exec "$CTID" -- chmod +x "${dest_dir}/install-in-ct.sh" "${dest_dir}/fetch-release.sh" "${dest_dir}/update.sh"
|
||||
}
|
||||
|
||||
run_ct_install() {
|
||||
if [[ -z "${PUBLIC_URL}" ]]; then
|
||||
PUBLIC_URL="http://${CT_IP}:${API_PORT}"
|
||||
fi
|
||||
if [[ -z "${GITEA_URL}" || -z "${GITEA_OWNER}" ]] && [[ -z "${RELEASE_ASSET_URL}" ]]; then
|
||||
msg_error "Set GITEA_URL + GITEA_OWNER (and GITEA_REPO), or RELEASE_ASSET_URL, before install."
|
||||
exit 1
|
||||
fi
|
||||
msg_info "Installing PostgreSQL + ASP.NET runtime + Gitea release..."
|
||||
pct exec "$CTID" -- env \
|
||||
REPO_RAW_BASE="$REPO_RAW_BASE" \
|
||||
APP_DIR="$APP_DIR" \
|
||||
PUBLIC_URL="$PUBLIC_URL" \
|
||||
API_PORT="$API_PORT" \
|
||||
ASSETS_DIR="/tmp/myoffice-proxmox" \
|
||||
GITEA_URL="$GITEA_URL" \
|
||||
GITEA_OWNER="$GITEA_OWNER" \
|
||||
GITEA_REPO="$GITEA_REPO" \
|
||||
RELEASE_TAG="$RELEASE_TAG" \
|
||||
RELEASE_ASSET_URL="$RELEASE_ASSET_URL" \
|
||||
GITEA_TOKEN="$GITEA_TOKEN" \
|
||||
bash /tmp/myoffice-proxmox/install-in-ct.sh
|
||||
msg_ok "Stack installed"
|
||||
}
|
||||
|
||||
# --- main ---
|
||||
header_info
|
||||
echo -e "\n Loading..."
|
||||
check_root
|
||||
arch_check
|
||||
pve_check
|
||||
|
||||
if ! whiptail --backtitle "MyOffice Proxmox" --title "MyOffice LXC" --yesno \
|
||||
"This will create a new LXC with:\n\n • PostgreSQL\n • ASP.NET Core runtime\n • App from Gitea Release\n\nNo Docker, no nginx (point your proxy LXC at :9100).\n\nProceed?" 16 58; then
|
||||
exit_script
|
||||
fi
|
||||
|
||||
start_script
|
||||
select_storage
|
||||
ensure_template
|
||||
resolve_script_dir
|
||||
create_container
|
||||
wait_for_network
|
||||
push_install_assets
|
||||
run_ct_install
|
||||
|
||||
echo -e "\n${GN}${BOLD}Completed successfully!${CL}\n"
|
||||
echo -e "${INFO}${YW}Stack in CT ${CTID}:${CL} PostgreSQL + ASP.NET + release ${RELEASE_TAG}"
|
||||
echo -e "${GATEWAY}${BGN}Public URL ${PUBLIC_URL}${CL}"
|
||||
echo -e "${GATEWAY}${BGN}Upstream http://${CT_IP}:${API_PORT}${CL} (for your nginx proxy)"
|
||||
echo -e "${INFO}Demo login: user_UAH@user_UAH.userUAH / user_UAH"
|
||||
echo -e "${INFO}Update: pct enter ${CTID} then ${APP_DIR}/proxmox/update.sh"
|
||||
echo
|
||||
Reference in New Issue
Block a user