Deployment Guide for cbmodels¶
Domain: models.nominate.ai API Port: 32411 App Port: 32410 (reserved for future frontend)
NGINX Configuration¶
# /etc/nginx/sites-available/models.nominate.ai
upstream cbmodels_api {
server 127.0.0.1:32411;
}
server {
listen 80;
server_name models.nominate.ai;
# API endpoints
location /api/ {
proxy_pass http://cbmodels_api;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# OpenAPI docs
location /docs {
proxy_pass http://cbmodels_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /openapi.json {
proxy_pass http://cbmodels_api;
proxy_set_header Host $host;
}
# Health check (no auth)
location = /health {
proxy_pass http://cbmodels_api/api/v1/health;
proxy_set_header Host $host;
}
# Future frontend (port 32410)
# location / {
# proxy_pass http://127.0.0.1:32410;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# }
}
Systemd Services¶
API Service¶
# /etc/systemd/system/cbmodels-api.service
[Unit]
Description=cbmodels Analysis API
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/cbmodels
Environment="PATH=/opt/cbmodels/.venv/bin"
ExecStart=/opt/cbmodels/.venv/bin/uvicorn cbmodels.api.app:app --host 0.0.0.0 --port 32411
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
App Service (Future Frontend)¶
# /etc/systemd/system/cbmodels-app.service
[Unit]
Description=cbmodels Frontend App
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/cbmodels
Environment="PATH=/opt/cbmodels/.venv/bin"
# ExecStart=/opt/cbmodels/.venv/bin/python -m cbmodels.app --host 0.0.0.0 --port 32410
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Deployment Steps¶
# 1. Clone and setup
cd /opt
git clone git@github.com:Nominate-AI/cbmodels.git
cd cbmodels
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
# 2. Copy database and build model
cp /path/to/pocket.db ./data/
cbmodels build ./data/pocket.db -o model.json
# 3. Enable and start services
sudo systemctl daemon-reload
sudo systemctl enable cbmodels-api
sudo systemctl start cbmodels-api
# 4. Enable NGINX site
sudo ln -s /etc/nginx/sites-available/models.nominate.ai /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Health Check¶
curl https://models.nominate.ai/health
# Expected: {"status":"healthy","model_loaded":true,"db_connected":true,"svid_field_configured":true}