Gregory-L's picture
fork mindXtrain from GitHub (Professor-Codephreak/mindXtrain@661bd41) as the mindX-specific line
dfb775d verified
Raw
History Blame Contribute Delete
3.41 kB
#!/usr/bin/env bash
# SPDX-License-Identifier: Apache-2.0
# (c) 2026 BANKON — all rights reserved.
#
# Install WordPress.agent on a VPS as a systemd service under a venv.
# Idempotent: safe to re-run.
#
# Usage (as root):
# sudo bash scripts/install.sh
#
# After install, edit /etc/wordpress-agent/wordpress-agent.env with real
# credentials, then: sudo systemctl restart wordpress-agent.service
set -euo pipefail
INSTALL_DIR="/opt/wordpress-agent"
ENV_DIR="/etc/wordpress-agent"
ENV_FILE="${ENV_DIR}/wordpress-agent.env"
SERVICE_USER="wpagent"
SERVICE_GROUP="wpagent"
PYTHON_BIN="${PYTHON_BIN:-python3.12}"
require_root() {
if [[ "${EUID}" -ne 0 ]]; then
echo "ERROR: this script must be run as root" >&2
exit 1
fi
}
ensure_user() {
if ! getent group "${SERVICE_GROUP}" >/dev/null; then
groupadd --system "${SERVICE_GROUP}"
fi
if ! id "${SERVICE_USER}" >/dev/null 2>&1; then
useradd --system --gid "${SERVICE_GROUP}" \
--home-dir "${INSTALL_DIR}" \
--shell /sbin/nologin \
"${SERVICE_USER}"
fi
}
ensure_python() {
if ! command -v "${PYTHON_BIN}" >/dev/null 2>&1; then
echo "ERROR: ${PYTHON_BIN} not found. Install Python 3.12+ first." >&2
exit 1
fi
}
ensure_directories() {
install -d -m 0755 -o "${SERVICE_USER}" -g "${SERVICE_GROUP}" "${INSTALL_DIR}"
install -d -m 0750 -o root -g "${SERVICE_GROUP}" "${ENV_DIR}"
}
copy_source() {
local src
src="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
rsync -a --delete \
--exclude '.venv' \
--exclude '__pycache__' \
--exclude '.pytest_cache' \
--exclude '.mypy_cache' \
--exclude '.ruff_cache' \
--exclude '.git' \
--exclude 'tests' \
--exclude '.env' \
"${src}/" "${INSTALL_DIR}/"
chown -R "${SERVICE_USER}:${SERVICE_GROUP}" "${INSTALL_DIR}"
}
create_venv() {
if [[ ! -d "${INSTALL_DIR}/.venv" ]]; then
sudo -u "${SERVICE_USER}" "${PYTHON_BIN}" -m venv "${INSTALL_DIR}/.venv"
fi
sudo -u "${SERVICE_USER}" "${INSTALL_DIR}/.venv/bin/pip" install --upgrade pip
sudo -u "${SERVICE_USER}" "${INSTALL_DIR}/.venv/bin/pip" install -e "${INSTALL_DIR}"
}
stage_env_file() {
if [[ ! -f "${ENV_FILE}" ]]; then
cp "${INSTALL_DIR}/.env.example" "${ENV_FILE}"
chmod 0640 "${ENV_FILE}"
chown root:"${SERVICE_GROUP}" "${ENV_FILE}"
echo
echo "Staged ${ENV_FILE} from .env.example"
echo "Edit it with real credentials before starting the service:"
echo " sudo \${EDITOR:-nano} ${ENV_FILE}"
else
echo "Env file already present at ${ENV_FILE} (left untouched)"
fi
}
install_systemd_unit() {
install -m 0644 \
"${INSTALL_DIR}/deploy/systemd/wordpress-agent.service" \
/etc/systemd/system/wordpress-agent.service
systemctl daemon-reload
systemctl enable wordpress-agent.service
echo
echo "Service installed. Start it with:"
echo " sudo systemctl start wordpress-agent.service"
echo " sudo systemctl status wordpress-agent.service"
echo " curl http://127.0.0.1:8765/healthz"
}
main() {
require_root
ensure_python
ensure_user
ensure_directories
copy_source
create_venv
stage_env_file
install_systemd_unit
echo
echo "WordPress.agent installation complete."
}
main "$@"