Files
www_mycelium_society/docs/ops/current/deployment.md

3.6 KiB

Deployment Guide for Mycelium Society Website

This guide provides a deployment approach for the Mycelium Society website, adapted from the ThreeFold Marketplace setup. This is a React + Vite frontend application that builds to static files served via Caddy.

Note: For automated deployment, consider integrating with CI/CD pipelines.

We show steps for the main branch; for development, adjust accordingly (e.g., use development branch and dev-specific paths).

Prerequisites

  • Linux server with:
    • Git installed
    • Node.js (version 18+) and npm installed
    • Caddy web server installed
    • zinit service manager installed (optional, for automation)
    • Root or sudo access

Step 1: Clone the Repository

Create the directory structure and clone the repository:

# Create directory structure
mkdir -p /root/code/git.ourworld.tf/mycelium/
cd /root/code/git.ourworld.tf/mycelium/

# Clone the repository
git clone https://git.ourworld.tf/mycelium/www_mycelium_society
cd www_mycelium_society
git checkout main

Step 2: Build the Application

Install dependencies and build the production version:

# Install Node.js dependencies
npm install

# Build for production
npm run build

This generates optimized static files in the dist/ folder.

Step 3: Create a zinit Service (Optional for Build Automation)

For automated builds and updates, create a zinit service:

  1. Create the service script:
mkdir -p /etc/zinit/cmds
nano /etc/zinit/cmds/mycelium-society.sh

Add the following content (adjust branch as needed):

#!/bin/bash
cd /root/code/git.ourworld.tf/mycelium/www_mycelium_society
git checkout main
npm install
npm run build
# Static files are ready; Caddy serves them

Make the script executable:

chmod +x /etc/zinit/cmds/mycelium-society.sh
  1. Create the zinit service definition:
nano /etc/zinit/mycelium-society.yaml

Add:

exec: "/bin/bash -c /etc/zinit/cmds/mycelium-society.sh"

Step 4: Configure Caddy

Update your Caddyfile to serve the static files:

# Edit the Caddyfile (adjust path to your Caddyfile location)
nano /root/code/github/despiegk/env_web/ourworld/ovh1_web_current/caddy/Caddyfile

Add or update:

import society.mycelium.caddy

Create society.mycelium.caddy:

society.mycelium.tf {
    root * /root/code/git.ourworld.tf/mycelium/www_mycelium_society/dist
    try_files {path} {path}/ /index.html
    file_server
}

For a development environment (separate setup):

dev.society.mycelium.tf {
    root * /root/code/git.ourworld.tf/mycelium/dev/www_mycelium_society/dist
    try_files {path} {path}/ /index.html
    file_server
}

Step 5: Start Services

# If using zinit for build automation
zinit monitor mycelium-society
zinit start mycelium-society

# Restart Caddy to load configuration
zinit restart caddy

Environment Separation (Dev/Prod)

For clean separation:

  • Prod: /root/code/git.ourworld.tf/mycelium/prod/www_mycelium_society/
  • Dev: /root/code/git.ourworld.tf/mycelium/dev/www_mycelium_society/

Clone and build separately for each.

Updating the Application

To update after changes:

cd /root/code/git.ourworld.tf/mycelium/www_mycelium_society
git pull
npm install
npm run build
# Reload Caddy
zinit restart caddy

Monitoring

  • Check Caddy status: zinit list
  • View logs: zinit log caddy
  • Access the site at http://your-domain (ensure DNS points to VM public IP)

Local Development

For local builds:

  • npm install
  • npm run dev (development server)
  • npm run build (production build)