7.1 KiB
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
.venvinstead 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/.envwithCHGRID_AUTH_SECRET(if missing)- 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 = 8765network.allow_insecure_ws = truetls.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
- directories
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
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.comwith your real domain. - Script copies
deploy/apache/chgrid-vhost-snippet.conf, runsrebuildhttpdconf, then restarts Apache via WHM restart command. - Snippet now includes no-cache headers for
/chgrid/and/chgrid/index.htmlso client updates are not stuck on stale HTML. deploy_client.shalso installs/chgrid/.htaccessfromdeploy/apache/chgrid-public-htaccessto force no-cache onindex.htmlandversion.jsin 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
- Example:
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, nothttps://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