diff --git a/ops/server-deployment.md b/ops/server-deployment.md index 7017084..fc8b652 100644 --- a/ops/server-deployment.md +++ b/ops/server-deployment.md @@ -83,6 +83,11 @@ Add the following content: ```bash #!/bin/bash + +# Load nvm (Node Version Manager) +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + cd /root/code/git.ourworld.tf/tfgrid/tfgrid-economics # Pull latest changes @@ -98,6 +103,11 @@ npm run build exec npx serve -s build -l 9997 ``` +**Note**: This script loads nvm before running npm commands. If you're not using nvm, replace the nvm lines with: +```bash +export PATH="/usr/local/bin:/usr/bin:/bin:$PATH" +``` + Make the script executable: ```bash @@ -118,48 +128,54 @@ exec: "/bin/bash -c /etc/zinit/cmds/tfgrid-economics.sh" ## Step 4: Configure Caddy -Navigate to your Caddy configuration directory: +Navigate to your Caddy configuration directory (location may vary based on your setup). -### 4.1 Add Import to Main Caddyfile +### 4.1 Find the Existing threefold.info Configuration -Edit the main Caddyfile and add the import statement: +First, locate which file contains the `threefold.info` domain block: ```bash -nano Caddyfile +grep -l "threefold.info" *.caddy ``` -Add this line: -``` -import economics.caddy -``` +In this setup, it's in `info.caddy`. -### 4.2 Create Economics Caddy Config +### 4.2 Add Economics Route to Existing Configuration -Create the dedicated configuration file: +Edit the file containing the `threefold.info` block: ```bash -nano economics.caddy +# Backup first +cp info.caddy info.caddy.backup + +# Edit the file +nano info.caddy ``` -Add the following content: +Add the `handle_path` block **at the beginning** of the `threefold.info` block (before `root` and `file_server`): ``` -# TFGrid Economics -threefold.info { +info.ourworld.tf threefold.info info.i.threefold.me { + # TFGrid Economics - MUST come before file_server handle_path /economics* { reverse_proxy localhost:9997 { header_up Host {host} header_up X-Real-IP {remote} - header_up X-Forwarded-Proto {scheme} } } + + # Default file server for other content + root * /root/hero/www/info + encode gzip + file_server } ``` -**Notes:** +**Important Notes:** +- The `handle_path` must come **before** `file_server` to take priority - The `handle_path` directive strips `/economics` from the path before forwarding to port 9997 -- If you already have other services using `threefold.info`, add the `handle_path` block to the existing configuration -- Multiple `handle_path` blocks can coexist in the same domain config +- Don't create a separate file with another `threefold.info` block - Caddy will try to provision SSL certs for invalid hostnames +- This approach works when `threefold.info` is already defined in an existing file ## Step 5: Start Services with zinit @@ -236,6 +252,34 @@ Check for errors in the application logs: zinit log tfgrid-economics ``` +### npm/npx Command Not Found + +If zinit can't find npm, you need to add Node.js to the PATH in the script. + +First, find where Node.js is installed: + +```bash +which node +which npm +which npx +``` + +Common locations: +- `/usr/local/bin/` (standard install) +- `/usr/bin/` (system package manager) +- `~/.nvm/` (nvm installation) + +Then update `/etc/zinit/cmds/tfgrid-economics.sh` with the correct PATH: + +```bash +# For standard installation +export PATH="/usr/local/bin:/usr/bin:/bin:$PATH" + +# For nvm installation +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +``` + ### Build Failures Check if Node.js and dependencies are properly installed: @@ -273,7 +317,7 @@ Verify Caddy configuration: ```bash # Test Caddy configuration -caddy validate --config /root/code/github/despiegk/env_web/ourworld/ovh1_web_current/caddy/Caddyfile +caddy validate --config Caddyfile # Check Caddy logs zinit log caddy @@ -282,6 +326,23 @@ zinit log caddy zinit restart caddy ``` +### Caddy SSL Certificate Errors for "handle_path" + +If you see errors like `Cannot issue for "handle_path": Domain name contains an invalid character`, you've likely created a separate `.caddy` file with a domain block that should be merged into an existing file instead. + +**Problem:** Creating a standalone file like: +``` +threefold.info { + handle_path /economics* { + ... + } +} +``` + +When `threefold.info` is already defined elsewhere, this causes Caddy to try provisioning certs incorrectly. + +**Solution:** Add the `handle_path` block to the existing file that contains the `threefold.info` domain block. + ### Git Authentication Issues If the repository requires authentication: @@ -300,17 +361,24 @@ git checkout main ## Alternative: Direct Caddy File Server -Instead of using `npx serve`, you can configure Caddy to serve the static files directly. +Instead of using `npx serve` with zinit, you can configure Caddy to serve the static files directly. + +**Edit the file containing `threefold.info` (e.g., `info.caddy`):** -**Edit `economics.caddy`:** ``` -threefold.info { +info.ourworld.tf threefold.info info.i.threefold.me { + # TFGrid Economics - Direct file serving handle_path /economics* { root * /root/code/git.ourworld.tf/tfgrid/tfgrid-economics/build - file_server try_files {path} {path}/ /index.html encode gzip + file_server } + + # Default file server for other content + root * /root/hero/www/info + encode gzip + file_server } ```