From d45dc138dc70638106da4593b81a82203dbc461b Mon Sep 17 00:00:00 2001 From: Krish Moodbidri <krish94@uab.edu> Date: Mon, 5 May 2025 09:29:01 -0500 Subject: [PATCH] added initial instructions to setup and configure rabbitmq on a standalone vm (alma9) on openstack --- README.md | 193 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 118 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 0be06ff..5110881 100644 --- a/README.md +++ b/README.md @@ -49,112 +49,155 @@ This project automates user registration workflows at UAB using **RabbitMQ** to ### Prerequisites -- macOS - -- Homebrew - -- Python 3.x +* Launch an alma9 instance on openstack, ssh into it and run the following commands + +*Before proceeding, set these environment variables:* +``` +export RABBITMQ_USER="reggie" # RabbitMQ admin username +export RABBITMQ_PASSWORD="secure_password" # RabbitMQ admin password +export CELERY_VHOST="adduser" # Celery-dedicated vhost +export CELERY_USER="celery_user" # Celery service username +export CELERY_PASSWORD="celery_pass" # Celery service password +``` + +### 1.1 Configure Package Repositories -### Install and Setup RabbitMQ +# Import security keys +sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc +sudo rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey +sudo rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey -```bash -brew update -brew install rabbitmq +# Erlang Repository (AlmaLinux 8) +``` +sudo tee /etc/yum.repos.d/rabbitmq_erlang.repo <<'EOL' +[rabbitmq_erlang] +name=RabbitMQ Erlang +baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/$basearch +gpgcheck=1 +gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey + https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc +enabled=1 +EOL ``` -For CentOS, refer to: -- [RabbitMQ Role Configuration](https://github.com/jprorama/CRI_XCBC/blob/dev/roles/ohpc_rabbitmq/tasks/main.yaml) - -- [VHost Configuration](https://github.com/jprorama/CRI_XCBC/blob/dev/roles/ohpc_add_rabbitmq_agents/tasks/main.yaml) +# RabbitMQ Server Repository +``` +sudo tee /etc/yum.repos.d/rabbitmq_server.repo <<'EOL' +[rabbitmq_server] +name=RabbitMQ Server +baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/$basearch +gpgcheck=1 +gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey +enabled=1 +EOL +``` -### Add RabbitMQ to Your PATH +### 1.2 Install Packages ``` -echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc -source ~/.zshrc # Reload your shell to apply changes +sudo yum install -y socat logrotate +sudo yum install -y erlang-25.3.2 rabbitmq-server-3.12.6 +sudo systemctl enable --now rabbitmq-server ``` -### install centos steps -https://github.com/jprorama/CRI_XCBC/blob/dev/roles/ohpc_rabbitmq/tasks/main.yaml -and the 2 vhosts -https://github.com/jprorama/CRI_XCBC/blob/dev/roles/ohpc_add_rabbitmq_agents/tasks/main.yaml -### Start RabbitMQ + + +## 2. RabbitMQ Configuration +### 2.1 Create Admin User & Permissions + ``` -brew services start rabbitmq +sudo rabbitmqctl add_user $RABBITMQ_USER $RABBITMQ_PASSWORD +sudo rabbitmqctl set_user_tags $RABBITMQ_USER administrator +sudo rabbitmqctl set_permissions -p / $RABBITMQ_USER ".*" ".*" ".*" ``` -### Check RabbitMQ Status + +### 2.2 Configure Celery Environment + ``` -rabbitmqctl status +sudo rabbitmqctl add_vhost $CELERY_VHOST +sudo rabbitmqctl add_user $CELERY_USER $CELERY_PASSWORD +sudo rabbitmqctl set_permissions -p $CELERY_VHOST $CELERY_USER ".*" ".*" ".*" ``` -### Create Config File + +## 3. Agent Service Setup + +### 3.1 Deploy Agent Codebase + ``` -echo '[{rabbit, [{loopback_users, []}]}].' | sudo tee /etc/rabbitmq/rabbitmq.config -sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config -sudo chmod 644 /etc/rabbitmq/rabbitmq.config +AGENT_DIR="/cm/shared/rabbitmq_agents" +sudo git clone https://gitlab.rc.uab.edu/rc/rabbitmq_agents.git $AGENT_DIR +cd $AGENT_DIR +sudo git checkout main # Or specific commit/tag ``` -### Restart Service + +### 3.2 Configure Python Environment + ``` -sudo systemctl restart rabbitmq-server +sudo python3 -m venv $AGENT_DIR/venv +sudo $AGENT_DIR/venv/bin/pip install -r $AGENT_DIR/requirements.txt ``` -### Access the Management UI +### 3.3 Create Agent Configuration -- **URL**: [http://localhost:15672](http://localhost:15672/) - -- **Credentials**: - - - Username: `guest` - - - Password: `guest` +Create `$AGENT_DIR/rabbit_config.py` with: + +``` +# rabbit_config.py +host = 'localhost' # Or your cluster host +port = 5672 +vhost = '$CELERY_VHOST' # Use actual vhost name +user = '$CELERY_USER' # Celery username +password = '$CELERY_PASSWORD' +``` -### Add Vhost in **rabbit_config.py** +### 3.4 Systemd Service Setup ``` -RABBITMQ = { - 'HOST': 'localhost', - 'PORT': 5672, - 'VHOST': 'adduser', - 'USER': 'reggie', - 'PASSWORD': 'reggie' -} +sudo tee /etc/systemd/system/ood_account_agent.service <<'EOL' +[Unit] +Description=User Account Agent +After=rabbitmq-server.service + +[Service] +Type=simple +User=root +WorkingDirectory=/cm/shared/rabbitmq_agents +ExecStart=/cm/shared/rabbitmq_agents/venv/bin/python agent_main.py +Restart=on-failure +Environment="PYTHONUNBUFFERED=1" + +[Install] +WantedBy=multi-user.target +EOL + +sudo systemctl daemon-reload +sudo systemctl enable --now ood_account_agent ``` -### Add Celery Vhost +## 4. Network Configuration +### Disable Firewall (Testing Only) ``` -rabbitmqctl add_vhost adduser -rabbitmqctl add_user reggie reggie -rabbitmqctl set_permissions -p adduser reggie ".*" ".*" ".*" +sudo systemctl stop firewalld +sudo systemctl disable firewalld ``` -### WIP Configuration Steps +## 5. Validation & Testing + +``` +# Verify Services +systemctl is-active rabbitmq-server ood_account_agent + +# Check RabbitMQ Users +sudo rabbitmqctl list_users + +# Inspect Agent Logs +journalctl -u ood_account_agent -f --since "5m ago" + +``` -1. **Bind Queues to `RegUsr` Exchange**: - Use these routing keys: - - - `request<queuename>` - - - `completed<queuename>` - - - `verify<queuename>` - _(Replace `<queuename>` with your queue’s name, e.g., `request_user_reg`)_ - -2. **Deploy Agents**: - - - Run the Web UI (`self_reg_app`) for user submissions. - - - Execute `create_account.py` to process tasks (e.g., UID assignment). - -3. **Monitor Queues**: - Use RabbitMQ’s management UI or CLI tools to check: - - - `task_manager` for workflow progress. - - - `notify user` for delivery status of emails/SMS. - ----------- ## Error Handling -- GitLab