154 lines
6.0 KiB
Bash
154 lines
6.0 KiB
Bash
#!/bin/bash
|
|
|
|
# --- Configuration ---
|
|
SERVICE_NAME="well-svc-alert"
|
|
SERVICE_USER="wellsvc" # Recommended: Dedicated user
|
|
SERVICE_GROUP="wellsvc" # Recommended: Dedicated group
|
|
APP_DIR="/opt/well_service/alert" # Directory for this specific service
|
|
ENV_FILE_PATH="/etc/default/${SERVICE_NAME}" # Path for credentials file
|
|
SCRIPT_SOURCE="./well-svc-alert.py" # Source script
|
|
SERVICE_FILE_SOURCE="./well-svc-alert.service" # Source systemd unit file
|
|
|
|
# --- Safety Check ---
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "This script must be run as root (sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Starting Well Service Alert Setup..."
|
|
|
|
# --- Dependency Installation ---
|
|
echo "Updating package list..."
|
|
apt-get update
|
|
|
|
echo "Installing Python3, Pip, PostgreSQL client dev headers, Redis server & Python clients..."
|
|
# Install system packages where possible
|
|
# build-essential & python3-dev often needed for pip installs compiling C extensions
|
|
apt-get install -y python3 python3-pip python3-dev libpq-dev \
|
|
redis-server python3-redis python3-psycopg2 \
|
|
build-essential
|
|
|
|
# Verify Redis Python client install method if system package isn't preferred
|
|
# apt-get install -y python3 python3-pip python3-dev libpq-dev redis-server build-essential
|
|
# pip3 install redis psycopg2-binary
|
|
|
|
# Ensure Redis is enabled and started (optional, Systemd `Requires` handles it for the service)
|
|
# systemctl enable redis-server.service
|
|
# systemctl start redis-server.service
|
|
|
|
# --- Create Service User ---
|
|
echo "Checking/Creating service user '$SERVICE_USER' and group '$SERVICE_GROUP'..."
|
|
if ! getent group "$SERVICE_GROUP" > /dev/null; then
|
|
groupadd --system "$SERVICE_GROUP"
|
|
echo "Group '$SERVICE_GROUP' created."
|
|
fi
|
|
if ! id "$SERVICE_USER" > /dev/null; then
|
|
useradd --system --gid "$SERVICE_GROUP" --home "$(dirname $APP_DIR)" --no-create-home --shell /bin/false "$SERVICE_USER"
|
|
echo "System user '$SERVICE_USER' created and added to group '$SERVICE_GROUP'."
|
|
else
|
|
echo "User '$SERVICE_USER' already exists."
|
|
# Optionally add existing user to group if not already member
|
|
# usermod -a -G "$SERVICE_GROUP" "$SERVICE_USER"
|
|
fi
|
|
|
|
# --- Create Application Directory ---
|
|
echo "Creating application directory '$APP_DIR'..."
|
|
mkdir -p "$APP_DIR"
|
|
if [ ! -d "$APP_DIR" ]; then
|
|
echo "ERROR: Failed to create directory $APP_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# --- Copy Application Files ---
|
|
echo "Copying service script..."
|
|
cp "$SCRIPT_SOURCE" "$APP_DIR/well-svc-alert.py"
|
|
if [ $? -ne 0 ]; then echo "ERROR: Failed to copy script."; exit 1; fi
|
|
|
|
# --- Set Permissions ---
|
|
echo "Setting permissions for '$APP_DIR'..."
|
|
chown -R "$SERVICE_USER":"$SERVICE_GROUP" "$APP_DIR"
|
|
# Owner: rwx, Group: rx, Other: ---
|
|
chmod -R 750 "$APP_DIR"
|
|
chmod +x "$APP_DIR/well-svc-alert.py"
|
|
|
|
# --- Create Environment File ---
|
|
echo "Creating environment file at '$ENV_FILE_PATH'..."
|
|
if [ -f "$ENV_FILE_PATH" ]; then
|
|
echo "WARN: Environment file '$ENV_FILE_PATH' already exists. Backing up to ${ENV_FILE_PATH}.bak"
|
|
cp "$ENV_FILE_PATH" "${ENV_FILE_PATH}.bak"
|
|
fi
|
|
cat > "$ENV_FILE_PATH" << EOF
|
|
# Environment variables for the ${SERVICE_NAME} service
|
|
# --- PLEASE FILL IN YOUR ACTUAL DATABASE CREDENTIALS ---
|
|
DB_NAME=your_database_name
|
|
DB_USER=your_database_user
|
|
DB_PASSWORD=your_secret_password
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
|
|
# --- Optional Redis Configuration (Defaults are usually fine) ---
|
|
# REDIS_HOST=localhost
|
|
# REDIS_PORT=6379
|
|
# REDIS_DB=0
|
|
# REDIS_PASSWORD=your_redis_password_if_any
|
|
EOF
|
|
if [ $? -ne 0 ]; then echo "ERROR: Failed to create environment file."; exit 1; fi
|
|
|
|
# --- Set Environment File Permissions ---
|
|
echo "Setting permissions for '$ENV_FILE_PATH' (readable by root and $SERVICE_GROUP only)"
|
|
chown root:"$SERVICE_GROUP" "$ENV_FILE_PATH"
|
|
chmod 640 "$ENV_FILE_PATH" # Owner(root): rw, Group(wellsvc): r, Other: ---
|
|
|
|
# --- Install Systemd Service ---
|
|
echo "Copying Systemd service file..."
|
|
cp "$SERVICE_FILE_SOURCE" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
if [ $? -ne 0 ]; then echo "ERROR: Failed to copy systemd file."; exit 1; fi
|
|
|
|
# --- Update Paths/User in Systemd File ---
|
|
echo "Updating configuration in /etc/systemd/system/${SERVICE_NAME}.service ..."
|
|
ESCAPED_APP_DIR=$(printf '%s\n' "$APP_DIR" | sed 's:/:\\/:g')
|
|
# Use placeholders like {{USER}}, {{GROUP}}, {{WORKDIR}}, {{EXECSTART}}, {{ENVFILE}} in the source .service file
|
|
# Or use the sed commands carefully like below:
|
|
sed -i "s/^User=.*/User=$SERVICE_USER/" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
sed -i "s/^Group=.*/Group=$SERVICE_GROUP/" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
sed -i "s:^WorkingDirectory=.*:WorkingDirectory=$ESCAPED_APP_DIR:" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
sed -i "s:^ExecStart=.*:ExecStart=/usr/bin/python3 $ESCAPED_APP_DIR/well-svc-alert.py:" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
sed -i "s:^EnvironmentFile=.*:EnvironmentFile=$ENV_FILE_PATH:" "/etc/systemd/system/${SERVICE_NAME}.service"
|
|
|
|
|
|
# --- Configure Systemd ---
|
|
echo "Reloading Systemd daemon..."
|
|
systemctl daemon-reload
|
|
|
|
echo "Enabling service '$SERVICE_NAME' to start on boot..."
|
|
systemctl enable "${SERVICE_NAME}.service"
|
|
|
|
# Don't start immediately - user needs to edit the ENV_FILE_PATH first!
|
|
# systemctl start "${SERVICE_NAME}.service"
|
|
|
|
# --- Final Instructions ---
|
|
echo "Setup presque terminé!"
|
|
echo ""
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo "!! ACTION REQUISE : Modifiez le fichier d'environnement !!"
|
|
echo "!! avec vos informations d'identification de base de données:"
|
|
echo "!! sudo nano ${ENV_FILE_PATH}"
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo ""
|
|
echo "Après avoir modifié le fichier, démarrez le service avec :"
|
|
echo "sudo systemctl start ${SERVICE_NAME}.service"
|
|
echo ""
|
|
echo "Pour vérifier l'état du service:"
|
|
echo "sudo systemctl status ${SERVICE_NAME}.service --no-pager"
|
|
echo ""
|
|
echo "Pour consulter les journaux:"
|
|
echo "sudo journalctl -u ${SERVICE_NAME}.service -f"
|
|
echo ""
|
|
echo "Pour arrêter le service:"
|
|
echo "sudo systemctl stop ${SERVICE_NAME}.service"
|
|
echo ""
|
|
echo "Pour désactiver le démarrage automatique:"
|
|
echo "sudo systemctl disable ${SERVICE_NAME}.service"
|
|
echo "---"
|
|
|
|
exit 0 |