mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-11-15 07:43:14 +01:00
Add temporal (ct)
This commit is contained in:
1 parent
c9ba40bfdb
commit
bfe4e82137
2 files changed
+287
No files matched your search
@@ -0,0 +1,81 @@
|
|||||||
|
#!/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: Renan Bastos (renanbastos93)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/temporalio/temporal
|
||||||
|
|
||||||
|
APP="Temporal"
|
||||||
|
var_tags="${var_tags:-workflow;automation}"
|
||||||
|
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}" # unset = ask the user; server, UI and CLI all ship linux_arm64 assets, but not yet run on arm64
|
||||||
|
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/temporal ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "temporal" "temporalio/temporal"; then
|
||||||
|
msg_info "Stopping Temporal"
|
||||||
|
systemctl stop temporal-ui temporal
|
||||||
|
msg_ok "Stopped Temporal"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "temporal" "temporalio/temporal" "prebuild" "latest" "/opt/temporal" "temporal_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
|
||||||
|
msg_info "Migrating Temporal Database"
|
||||||
|
set -a && source /etc/temporal/temporal.env && set +a
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal update-schema --schema-name postgresql/v12/temporal
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal_visibility update-schema --schema-name postgresql/v12/visibility
|
||||||
|
msg_ok "Migrated Temporal Database"
|
||||||
|
|
||||||
|
msg_info "Starting Temporal"
|
||||||
|
systemctl start temporal temporal-ui
|
||||||
|
msg_ok "Started Temporal"
|
||||||
|
msg_ok "Updated Temporal successfully!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "temporal-ui" "temporalio/ui-server"; then
|
||||||
|
msg_info "Stopping Temporal UI"
|
||||||
|
systemctl stop temporal-ui
|
||||||
|
msg_ok "Stopped Temporal UI"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "temporal-ui" "temporalio/ui-server" "prebuild" "latest" "/opt/temporal-ui" "ui-server_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
|
||||||
|
msg_info "Starting Temporal UI"
|
||||||
|
systemctl start temporal-ui
|
||||||
|
msg_ok "Started Temporal UI"
|
||||||
|
msg_ok "Updated Temporal UI successfully!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "temporal-cli" "temporalio/cli"; then
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "temporal-cli" "temporalio/cli" "prebuild" "latest" "/opt/temporal-cli" "temporal_cli_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
msg_ok "Updated Temporal CLI 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}:8080${CL}"
|
||||||
|
echo -e "${INFO}${YW}gRPC endpoint for workers and SDKs: ${IP}:7233${CL}"
|
||||||
@@ -0,0 +1,206 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Renan Bastos (renanbastos93)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/temporalio/temporal
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PG_DB_NAME="temporal" PG_DB_USER="temporal" PG_DB_SCHEMA_PERMS="true" setup_postgresql_db
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "temporal" "temporalio/temporal" "prebuild" "latest" "/opt/temporal" "temporal_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "temporal-ui" "temporalio/ui-server" "prebuild" "latest" "/opt/temporal-ui" "ui-server_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
fetch_and_deploy_gh_release "temporal-cli" "temporalio/cli" "prebuild" "latest" "/opt/temporal-cli" "temporal_cli_*_linux_$(arch_resolve).tar.gz"
|
||||||
|
|
||||||
|
msg_info "Configuring Temporal"
|
||||||
|
mkdir -p /etc/temporal/config/dynamicconfig /etc/temporal/ui
|
||||||
|
ln -sf /opt/temporal-cli/temporal /usr/bin/temporal
|
||||||
|
cat <<EOF >/etc/temporal/temporal.env
|
||||||
|
SQL_PLUGIN=postgres12
|
||||||
|
SQL_HOST=127.0.0.1
|
||||||
|
SQL_PORT=5432
|
||||||
|
SQL_USER=temporal
|
||||||
|
SQL_PASSWORD=${PG_DB_PASS}
|
||||||
|
EOF
|
||||||
|
chmod 600 /etc/temporal/temporal.env
|
||||||
|
cat <<'EOF' >/etc/temporal/config/production.yaml
|
||||||
|
# enable-template
|
||||||
|
log:
|
||||||
|
stdout: true
|
||||||
|
level: info
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
defaultStore: postgres-default
|
||||||
|
visibilityStore: postgres-visibility
|
||||||
|
numHistoryShards: 4
|
||||||
|
datastores:
|
||||||
|
postgres-default:
|
||||||
|
sql:
|
||||||
|
pluginName: {{ env "SQL_PLUGIN" | quote }}
|
||||||
|
databaseName: "temporal"
|
||||||
|
connectAddr: {{ printf "%s:%s" (env "SQL_HOST") (env "SQL_PORT") | quote }}
|
||||||
|
connectProtocol: "tcp"
|
||||||
|
user: {{ env "SQL_USER" | quote }}
|
||||||
|
password: {{ env "SQL_PASSWORD" | quote }}
|
||||||
|
maxConns: 20
|
||||||
|
maxIdleConns: 20
|
||||||
|
maxConnLifetime: "1h"
|
||||||
|
postgres-visibility:
|
||||||
|
sql:
|
||||||
|
pluginName: {{ env "SQL_PLUGIN" | quote }}
|
||||||
|
databaseName: "temporal_visibility"
|
||||||
|
connectAddr: {{ printf "%s:%s" (env "SQL_HOST") (env "SQL_PORT") | quote }}
|
||||||
|
connectProtocol: "tcp"
|
||||||
|
user: {{ env "SQL_USER" | quote }}
|
||||||
|
password: {{ env "SQL_PASSWORD" | quote }}
|
||||||
|
maxConns: 10
|
||||||
|
maxIdleConns: 10
|
||||||
|
maxConnLifetime: "1h"
|
||||||
|
|
||||||
|
global:
|
||||||
|
membership:
|
||||||
|
maxJoinDuration: 30s
|
||||||
|
broadcastAddress: "127.0.0.1"
|
||||||
|
|
||||||
|
services:
|
||||||
|
frontend:
|
||||||
|
rpc:
|
||||||
|
grpcPort: 7233
|
||||||
|
membershipPort: 6933
|
||||||
|
bindOnIP: "0.0.0.0"
|
||||||
|
|
||||||
|
matching:
|
||||||
|
rpc:
|
||||||
|
grpcPort: 7235
|
||||||
|
membershipPort: 6935
|
||||||
|
bindOnLocalHost: true
|
||||||
|
|
||||||
|
history:
|
||||||
|
rpc:
|
||||||
|
grpcPort: 7234
|
||||||
|
membershipPort: 6934
|
||||||
|
bindOnLocalHost: true
|
||||||
|
|
||||||
|
worker:
|
||||||
|
rpc:
|
||||||
|
grpcPort: 7239
|
||||||
|
membershipPort: 6939
|
||||||
|
bindOnLocalHost: true
|
||||||
|
|
||||||
|
clusterMetadata:
|
||||||
|
enableGlobalNamespace: false
|
||||||
|
failoverVersionIncrement: 10
|
||||||
|
masterClusterName: "active"
|
||||||
|
currentClusterName: "active"
|
||||||
|
clusterInformation:
|
||||||
|
active:
|
||||||
|
enabled: true
|
||||||
|
initialFailoverVersion: 1
|
||||||
|
rpcName: "frontend"
|
||||||
|
rpcAddress: "127.0.0.1:7233"
|
||||||
|
|
||||||
|
dcRedirectionPolicy:
|
||||||
|
policy: "noop"
|
||||||
|
|
||||||
|
archival:
|
||||||
|
history:
|
||||||
|
state: "disabled"
|
||||||
|
visibility:
|
||||||
|
state: "disabled"
|
||||||
|
|
||||||
|
namespaceDefaults:
|
||||||
|
archival:
|
||||||
|
history:
|
||||||
|
state: "disabled"
|
||||||
|
visibility:
|
||||||
|
state: "disabled"
|
||||||
|
|
||||||
|
dynamicConfigClient:
|
||||||
|
filepath: "/etc/temporal/config/dynamicconfig/production.yaml"
|
||||||
|
pollInterval: "60s"
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/temporal/config/dynamicconfig/production.yaml
|
||||||
|
limit.maxIDLength:
|
||||||
|
- value: 255
|
||||||
|
constraints: {}
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/temporal/ui/production.yaml
|
||||||
|
temporalGrpcAddress: 127.0.0.1:7233
|
||||||
|
port: 8080
|
||||||
|
enableUi: true
|
||||||
|
defaultNamespace: default
|
||||||
|
cors:
|
||||||
|
cookieInsecure: true
|
||||||
|
allowOrigins:
|
||||||
|
- http://${LOCAL_IP}:8080
|
||||||
|
EOF
|
||||||
|
msg_ok "Configured Temporal"
|
||||||
|
|
||||||
|
msg_info "Initializing Temporal Database"
|
||||||
|
set -a && source /etc/temporal/temporal.env && set +a
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal_visibility create-database
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal setup-schema -v 0.0
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal update-schema --schema-name postgresql/v12/temporal
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal_visibility setup-schema -v 0.0
|
||||||
|
$STD /opt/temporal/temporal-sql-tool --db temporal_visibility update-schema --schema-name postgresql/v12/visibility
|
||||||
|
msg_ok "Initialized Temporal Database"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/temporal.service
|
||||||
|
[Unit]
|
||||||
|
Description=Temporal Server
|
||||||
|
After=network.target postgresql.service
|
||||||
|
Requires=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/temporal
|
||||||
|
EnvironmentFile=/etc/temporal/temporal.env
|
||||||
|
ExecStart=/opt/temporal/temporal-server --root /etc/temporal --env production --allow-no-auth start
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/temporal-ui.service
|
||||||
|
[Unit]
|
||||||
|
Description=Temporal UI
|
||||||
|
After=network.target temporal.service
|
||||||
|
Wants=temporal.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/opt/temporal-ui
|
||||||
|
ExecStart=/opt/temporal-ui/ui-server --root /etc/temporal --config ui --env production start
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now temporal temporal-ui
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
msg_info "Creating Default Namespace"
|
||||||
|
for _ in {1..60}; do
|
||||||
|
temporal operator cluster health &>/dev/null && break
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
$STD temporal operator namespace create --namespace default
|
||||||
|
msg_ok "Created Default Namespace"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
Reference in new issue
Block a user