Files
chat_grid/deploy

Deployment Guide

Target example: AlmaLinux/cPanel host with files under /home/bestmidi.

1) Place project files

  • Repo root: /home/bestmidi/chgrid

2) Make deploy scripts executable (once)

cd /home/bestmidi/chgrid
chmod +x deploy/scripts/*.sh

3) Install server (uv)

Verify server files first:

ls -l /home/bestmidi/chgrid/server/pyproject.toml

Run install scripts from repo root (/home/bestmidi/chgrid), not from server/.

cd /home/bestmidi/chgrid
./deploy/scripts/install_server.sh /home/bestmidi/chgrid

Notes:

  • Script defaults to Python 3.13 (PYTHON_SPEC=3.13).
  • It reuses existing .venv instead of replacing it interactively.
  • If you need to force a fresh 3.13 env:
    • rm -rf /home/bestmidi/chgrid/server/.venv
    • rerun ./deploy/scripts/install_server.sh /home/bestmidi/chgrid

This creates:

  • /home/bestmidi/chgrid/server/.venv
  • /home/bestmidi/chgrid/server/config.toml (if missing)
  • /home/bestmidi/chgrid/server/.env with CHGRID_AUTH_SECRET (if missing)
  • /home/bestmidi/chgrid/server/run_server.sh (loads .env then starts server)
  • On first run only, if no admin exists, it prompts to create one immediately.

Edit /home/bestmidi/chgrid/server/config.toml:

  • server.bind_ip = "127.0.0.1"
  • server.port = 8765
  • network.allow_insecure_ws = true
  • tls.cert_file = ""
  • tls.key_file = ""
  • storage.state_file = "runtime/items.json"
  • auth.db_file = "runtime/chatgrid.db"

If you skip first-run admin creation, run later:

cd /home/bestmidi/chgrid/server
source .env
.venv/bin/python main.py --config config.toml --bootstrap-admin

4) Build and publish client

cd /home/bestmidi/chgrid
./deploy/scripts/deploy_client.sh /home/bestmidi/chgrid /home/bestmidi/public_html/chgrid /chgrid/

Notes:

  • Third arg is Vite base path for production assets.
  • For https://bestmidi.com/chgrid/, use /chgrid/.
  • For site root deploy (https://bestmidi.com/), use /.
  • Deploy script normalizes publish permissions to avoid shared-host PHP soft exceptions:
    • directories 755
    • files 644

Shortcut (client deploy + service restart):

cd /home/bestmidi/chgrid
./deploy/scripts/up.sh /home/bestmidi/chgrid /home/bestmidi/public_html/chgrid /chgrid/

5) Install/restart signaling service (systemd)

cd /home/bestmidi/chgrid
./deploy/scripts/install_service.sh /home/bestmidi/chgrid

Notes:

  • Service startup uses /home/bestmidi/chgrid/server/run_server.sh, which sources local /home/bestmidi/chgrid/server/.env before launching Python.

Logs:

journalctl -u chat-grid.service -f
tail -f /home/bestmidi/chgrid/server/runtime/server.log

If you previously used chgrid-signaling.service, migrate once:

sudo systemctl disable --now chgrid-signaling.service
sudo systemctl daemon-reload

6) Apache websocket proxy

Install using script:

cd /home/bestmidi/chgrid
./deploy/scripts/install_apache.sh \
  /home/bestmidi/chgrid \
  /etc/apache2/conf.d/userdata/ssl/2_4/bestmidi/yourdomain.com/chgrid.conf

Notes:

  • Replace yourdomain.com with your real domain.
  • Script copies deploy/apache/chgrid-vhost-snippet.conf, runs rebuildhttpdconf, then restarts Apache via WHM restart command.
  • Snippet now includes no-cache headers for /chgrid/ and /chgrid/index.html so client updates are not stuck on stale HTML.
  • deploy_client.sh also installs /chgrid/.htaccess from deploy/apache/chgrid-public-htaccess to force no-cache on index.html and version.js in shared-host setups.

7) Optional HTTPS relay for HTTP radio streams

If stream sources are plain HTTP (for example ports 8000, 8010, 8020, 8030), add relays in:

/etc/apache2/conf.d/userdata/ssl/2_4/bestmidi/bestmidi.com/chgrid.conf

Example:

ProxyPass        /listen/8000/  http://127.0.0.1:8000/
ProxyPassReverse /listen/8000/  http://127.0.0.1:8000/
ProxyPass        /listen/8010/  http://127.0.0.1:8010/
ProxyPassReverse /listen/8010/  http://127.0.0.1:8010/
ProxyPass        /listen/8020/  http://127.0.0.1:8020/
ProxyPassReverse /listen/8020/  http://127.0.0.1:8020/
ProxyPass        /listen/8030/  http://127.0.0.1:8030/
ProxyPassReverse /listen/8030/  http://127.0.0.1:8030/

Apply changes:

sudo /usr/local/cpanel/scripts/rebuildhttpdconf
sudo /usr/local/cpanel/scripts/restartsrv_httpd

Usage example in Chat Grid:

  • https://bestmidi.com/listen/8000/stream

8) PHP media proxy (Dropbox + HTTP stream passthrough)

deploy/php/media_proxy.php is a lightweight same-origin proxy for stream URLs.

It is auto-copied to your publish dir by deploy_client.sh (and up.sh), so after deploy it should be available at:

  • https://bestmidi.com/chgrid/media_proxy.php

Use in Chat Grid streamUrl:

https://bestmidi.com/chgrid/media_proxy.php?url=<urlencoded-upstream-url>

Examples:

  • Dropbox: https://bestmidi.com/chgrid/media_proxy.php?url=https%3A%2F%2Fwww.dropbox.com%2Fscl%2Ffi%2Fa7s3n15bgj043rr54k3n9%2FMario-Hold-Music.mp3%3Frlkey%3Ddfr3dybr7s7nndudag0k8xflc%26dl%3D1
  • HTTP stream: https://bestmidi.com/chgrid/media_proxy.php?url=http%3A%2F%2Fstream.rpgamers.net%3A8000%2Frpgn

Troubleshooting checks:

curl -I "https://bestmidi.com/chgrid/media_proxy.php?url=https%3A%2F%2Fwww.dropbox.com%2Fscl%2Ffi%2Fa7s3n15bgj043rr54k3n9%2FMario-Hold-Music.mp3%3Frlkey%3Ddfr3dybr7s7nndudag0k8xflc%26dl%3D1"
curl -I "https://bestmidi.com/chgrid/media_proxy.php?url=http%3A%2F%2Fstream.rpgamers.net%3A8000%2Frpgn"

Optional hardening:

  • Set env var CHGRID_MEDIA_PROXY_ALLOWLIST (comma-separated hosts/suffixes) in Apache/PHP-FPM.
    • Example: dropbox.com,dropboxusercontent.com,stream.rpgamers.net

9) GitHub-based update flow (bestmidi)

Initial clone (one time):

cd /home/bestmidi
git clone https://github.com/jage9/chat_grid.git chgrid

Update and redeploy:

cd /home/bestmidi/chgrid
git fetch origin
git switch main
git pull --ff-only origin main

# Rebuild/publish web client
./deploy/scripts/deploy_client.sh /home/bestmidi/chgrid /home/bestmidi/public_html/chgrid /chgrid/

# Reconcile server env/deps (safe to rerun on updates)
./deploy/scripts/install_server.sh /home/bestmidi/chgrid

# Restart signaling service
sudo systemctl restart chat-grid.service
journalctl -u chat-grid.service -n 50 --no-pager

Typical quick update:

cd /home/bestmidi/chgrid
./deploy/scripts/up.sh /home/bestmidi/chgrid /home/bestmidi/public_html/chgrid /chgrid/

Notes:

  • Run Apache install/reload steps again only if proxy config changed.
  • If your checkout has local changes, stash or commit before git pull.
  • For HTTPS GitHub auth, use your GitHub username plus a Personal Access Token (PAT) as the password.
  • SSH key passphrases are only used for git@github.com: remotes, not https:// remotes.

10) Save GitHub PAT for HTTPS pulls/pushes

Persistent storage (simple, plaintext in ~/.git-credentials):

git config --global credential.helper store

Memory cache only (not persisted across reboot):

git config --global credential.helper "cache --timeout=28800"

Then run one authenticated command and enter:

  • Username: jage9
  • Password: your GitHub PAT
cd /home/bestmidi/chgrid
git pull --ff-only origin main

If you saved the wrong token and need to re-enter it:

printf "protocol=https\nhost=github.com\n" | git credential reject