SoloRAN Operator Guide DEPLOYMENT + RUNTIME + xAPP
This page describes what the dashboard actually does now: personal-project deployment, shared RIC usage, RAN runtime startup order, and package execution on a RIC VM.

1. Scope Rules

Shared Project
  • Project: ORAN-Project
  • Use it as the common Near-RT RIC target.
  • Normal users should connect their RAN or xApps to this RIC by IP.
  • New VM deployment into this project is disabled from the dashboard unless an admin explicitly re-enables it.
Personal Project
  • Use your own OpenStack credentials and project name.
  • RAN deployment always belongs here.
  • You may also deploy a private RIC here if needed.
  • This is the default place for user-created infrastructure.

2. Sign In And Resource Loading

Open RAN Deployment, Near RT RIC Deployment, or xApp Deployment.
Enter your OpenStack username, password, and personal project name, then click Sign In.
The dashboard stores those credentials only in encrypted server-side session memory. They are not written into the package database.
After sign-in, the resource catalog loads flavors, images, networks, keypairs, and availability zones for that scope.
If the resource dropdowns show an error: - verify your project name - verify your OpenStack password - confirm your project is not ORAN-Project when you want personal deployment

3. Deploy A Personal RAN

Go to RAN Deployment and sign in with your personal project.
Create the VM from the provided srsRAN image in your own project, not in ORAN-Project.
Once the VM is up, fill these runtime fields:
Core VM IP
IP hosting Open5GS.
RAN/gNB/UE VM IP
IP hosting gNB and UE components.
Near-RT RIC VM IP
Use the shared RIC IP from ORAN-Project or your own private RIC IP.
gNB Bind IP
Usually the same as the RAN VM IP.
Start runtime in this order: Start Core → Start RIC → Start gNB → Start UE.
Wait until UE logs show PDU Session Establishment successful.
Then run Start Dataplane Ping and optionally Start iPerf.

4. Test A Personal RAN Against The Shared RIC

You do not need to deploy a new RIC to test your RAN.
Use the shared RIC already running in ORAN-Project.
Put that RIC address in the Near-RT RIC VM IP field on the RAN page.
Start Core, gNB, and UE in your own project, but point gNB E2 connectivity at the shared RIC.
Use Check E2 to confirm association if the gNB does not show up immediately.

5. Upload And Run An xApp Package

Go to xApp Deployment and sign in first so package ownership is tied to your OpenStack user.
Upload a ZIP or multiple files under + Upload New. For most cases, use General Python/ML Package.
Choose the RIC host IP where the package should run. This can be the shared RIC or a private RIC.
Click Install Requirements, then Run Package.
Logs stream in real time. Use Refresh Outputs to list artifacts written by the package.
Recommended package layout my_xapp/ ├── main.py ├── requirements.txt ├── model.keras / model.pkl / model.onnx ├── config.yaml ├── utils.py └── README.md
Remote package layout on the RIC VM /home/ubuntu/user_xapps/<username>/<xapp_id>/ ├── src/ ├── venv/ ├── logs/run.log ├── outputs/ └── run.pid

6. Write Outputs Correctly

Packages should write results into the output directory exposed by the dashboard.

import os, time out_dir = os.environ.get("XAPP_OUTPUT_DIR", "../outputs") os.makedirs(out_dir, exist_ok=True) with open(os.path.join(out_dir, "predictions.csv"), "a") as f: f.write(f"{time.time()},normal\\n") print("Prediction written", flush=True)

After the package runs, click Refresh Outputs and download files directly from the dashboard.

7. Runtime Environment Variables

XAPP_BASE_DIR=/home/ubuntu/user_xapps/<username>/<xapp_id> XAPP_SRC_DIR=/home/ubuntu/user_xapps/<username>/<xapp_id>/src XAPP_OUTPUT_DIR=/home/ubuntu/user_xapps/<username>/<xapp_id>/outputs XAPP_LOG_DIR=/home/ubuntu/user_xapps/<username>/<xapp_id>/logs RIC_DATA_DIR=/home/ubuntu/ric_data

8. Operational Notes

Do not click Cleanup All after UE attach unless you intentionally want to remove the UE namespace and stop traffic.
Terminal windows are pruned automatically. Long-running logs are intentionally bounded so the browser does not grow without limit.
If deployment into your project fails, verify quotas, image access, network selection, and keypair availability in your project.
If xApps are untrusted, do not run them this way in production. The current package runner is appropriate for controlled lab users, not hostile multitenant execution.