Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Dependencies
node_modules
pnpm-lock.yaml

# Build outputs
build
.svelte-kit
dist

# Development
.env
.env.*
!.env.example

# Git
.git
.gitignore

# IDE
.vscode
.idea
*.swp
*.swo
*~

# Logs
logs
*.log
npm-debug.log*

# OS
.DS_Store
Thumbs.db

# Misc
.claude
svelte-docs.txt
docs
README.md
DEPLOYMENT.md
64 changes: 64 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Stage 1: Build the SvelteKit application
FROM node:20-alpine AS builder

WORKDIR /app

# Copy package files for dependency installation
COPY package*.json ./

# Install dependencies (use ci for clean, reproducible builds)
RUN npm ci

# Copy application source code
COPY . .

# Build arguments with placeholder values for runtime injection
# Server host/port are empty to enable nginx proxy with relative URLs
ARG VITE_COLONIES_SERVER_HOST=
ARG VITE_COLONIES_SERVER_PORT=
ARG VITE_COLONIES_SERVER_TLS=false
ARG VITE_COLONIES_SERVER_PRVKEY=__VITE_COLONIES_SERVER_PRVKEY__
ARG VITE_COLONIES_COLONY_NAME=__VITE_COLONIES_COLONY_NAME__
ARG VITE_COLONIES_COLONY_PRVKEY=__VITE_COLONIES_COLONY_PRVKEY__
ARG VITE_COLONIES_PRVKEY=__VITE_COLONIES_PRVKEY__
ARG VITE_AWS_S3_ENDPOINT=__VITE_AWS_S3_ENDPOINT__
ARG VITE_AWS_S3_ACCESSKEY=__VITE_AWS_S3_ACCESSKEY__
ARG VITE_AWS_S3_SECRETKEY=__VITE_AWS_S3_SECRETKEY__
ARG VITE_AWS_S3_REGION=__VITE_AWS_S3_REGION__
ARG VITE_AWS_S3_BUCKET=__VITE_AWS_S3_BUCKET__
ARG VITE_AWS_S3_TLS=__VITE_AWS_S3_TLS__
ARG VITE_AWS_S3_SKIPVERIFY=__VITE_AWS_S3_SKIPVERIFY__

# Build the application with placeholder environment variables
ENV VITE_COLONIES_SERVER_HOST=$VITE_COLONIES_SERVER_HOST \
VITE_COLONIES_SERVER_PORT=$VITE_COLONIES_SERVER_PORT \
VITE_COLONIES_SERVER_TLS=$VITE_COLONIES_SERVER_TLS \
VITE_COLONIES_SERVER_PRVKEY=$VITE_COLONIES_SERVER_PRVKEY \
VITE_COLONIES_COLONY_NAME=$VITE_COLONIES_COLONY_NAME \
VITE_COLONIES_COLONY_PRVKEY=$VITE_COLONIES_COLONY_PRVKEY \
VITE_COLONIES_PRVKEY=$VITE_COLONIES_PRVKEY \
VITE_AWS_S3_ENDPOINT=$VITE_AWS_S3_ENDPOINT \
VITE_AWS_S3_ACCESSKEY=$VITE_AWS_S3_ACCESSKEY \
VITE_AWS_S3_SECRETKEY=$VITE_AWS_S3_SECRETKEY \
VITE_AWS_S3_REGION=$VITE_AWS_S3_REGION \
VITE_AWS_S3_BUCKET=$VITE_AWS_S3_BUCKET \
VITE_AWS_S3_TLS=$VITE_AWS_S3_TLS \
VITE_AWS_S3_SKIPVERIFY=$VITE_AWS_S3_SKIPVERIFY

RUN npm run build

# Stage 2: Serve with nginx
FROM nginx:alpine

# Copy built assets from builder stage
COPY --from=builder /app/build /usr/share/nginx/html

# Copy entrypoint script and make it executable
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh

# Expose port 80
EXPOSE 80

# Use custom entrypoint for runtime env var injection and nginx proxy configuration
ENTRYPOINT ["/docker-entrypoint.sh"]
74 changes: 74 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
.PHONY: help container run stop clean logs

# Default target
help:
@echo "Colony Dashboard - Docker Build Targets"
@echo ""
@echo "Available targets:"
@echo " make container - Build the Docker image"
@echo " make run - Run the container (requires env vars)"
@echo " make stop - Stop and remove the container"
@echo " make logs - Show container logs"
@echo " make clean - Remove container and image"
@echo ""
@echo "Required environment variables for 'make run':"
@echo " COLONY_BACKEND_HOST - Colony server hostname (for NGINX proxy)"
@echo " COLONY_BACKEND_PORT - Colony server port (default: 50080)"
@echo " COLONY_BACKEND_TLS - Use HTTPS for backend (default: false)"
@echo " COLONIES_COLONY_NAME - Colony name"
@echo " COLONIES_SERVER_PRVKEY - Server private key"
@echo " COLONIES_COLONY_PRVKEY - Colony private key"
@echo " COLONIES_PRVKEY - User private key"
@echo ""
@echo "Optional S3 variables (for file browser feature):"
@echo " AWS_S3_ENDPOINT - S3 endpoint URL"
@echo " AWS_S3_ACCESSKEY - S3 access key"
@echo " AWS_S3_SECRETKEY - S3 secret key"
@echo " AWS_S3_REGION - S3 region"
@echo " AWS_S3_BUCKET - S3 bucket name"
@echo " AWS_S3_TLS - Use TLS for S3"
@echo " AWS_S3_SKIPVERIFY - Skip TLS verification"
@echo ""
@echo "Example usage:"
@echo " make container"
@echo " COLONY_BACKEND_HOST=localhost COLONIES_COLONY_NAME=dev ... make run"

# Build Docker image
container:
docker build -t colony-dashboard .

# Run container (requires environment variables to be set)
run:
docker run -d \
--name colony-dashboard \
--add-host=host.docker.internal:host-gateway \
-p 80:80 \
-e COLONY_BACKEND_HOST=host.docker.internal \
-e COLONY_BACKEND_PORT=$(or $(COLONY_BACKEND_PORT),50080) \
-e COLONY_BACKEND_TLS=$(or $(COLONY_BACKEND_TLS),false) \
-e COLONIES_COLONY_NAME=$(COLONIES_COLONY_NAME) \
-e COLONIES_SERVER_PRVKEY=$(COLONIES_SERVER_PRVKEY) \
-e COLONIES_COLONY_PRVKEY=$(COLONIES_COLONY_PRVKEY) \
-e COLONIES_PRVKEY=$(COLONIES_PRVKEY) \
$(if $(AWS_S3_ENDPOINT),-e AWS_S3_ENDPOINT=$(AWS_S3_ENDPOINT),) \
$(if $(AWS_S3_ACCESSKEY),-e AWS_S3_ACCESSKEY=$(AWS_S3_ACCESSKEY),) \
$(if $(AWS_S3_SECRETKEY),-e AWS_S3_SECRETKEY=$(AWS_S3_SECRETKEY),) \
$(if $(AWS_S3_REGION),-e AWS_S3_REGION=$(AWS_S3_REGION),) \
$(if $(AWS_S3_BUCKET),-e AWS_S3_BUCKET=$(AWS_S3_BUCKET),) \
$(if $(AWS_S3_TLS),-e AWS_S3_TLS=$(AWS_S3_TLS),) \
$(if $(AWS_S3_SKIPVERIFY),-e AWS_S3_SKIPVERIFY=$(AWS_S3_SKIPVERIFY),) \
colony-dashboard
@echo "Access at http://localhost"

# Stop and remove container
stop:
@docker stop colony-dashboard 2>/dev/null || true
@docker rm colony-dashboard 2>/dev/null || true

# Show logs
logs:
docker logs -f colony-dashboard

# Clean up everything
clean: stop
@docker rmi colony-dashboard 2>/dev/null || true
104 changes: 33 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,6 @@

The goal is to provide a web interface for a colony with some control of resources.

When ready it's intended to run as a container that is managed by the colonies CLI. If you want to run it now you have to start a dev server locally.

Every RPC call is logged in the browser console along with the time it took to get a response.

```console
🔐 RPC Request
Key type: colony
Body: {
"msgtype": "getexecutorsmsg",
"colonyname": "cop-pilot",
"count": 100
}
✅ RPC Response received in 857.00ms
🔐 RPC Request
Key type: colony
Body: {
"msgtype": "getprocessesmsg",
"colonyname": "cop-pilot",
"count": 100,
"state": 1
} colony.ts:72:17
✅ RPC Response received in 864.00ms
🔐 RPC Request
Key type: colony
Body: {
"msgtype": "getprocessesmsg",
"colonyname": "cop-pilot",
"count": 100,
"state": 0
}
```
This was created with Claude code

## Images
Expand All @@ -50,49 +19,42 @@ This was created with Claude code

## Running

### Prerequisites

- Node.js (v18 or later)
- npm, pnpm, or yarn

### Development

1. **Install dependencies:**

```bash
npm install
```
### Docker container

2. **Configure environment variables:**
Create a `.env` file with your Colony server configuration. **Note:** All environment variables must be prefixed with `VITE_` to be accessible in the client-side code:
Build container image with

```env
# Colony Server
VITE_COLONIES_SERVER_HOST=colony-hostname
VITE_COLONIES_SERVER_PORT=443
VITE_COLONIES_SERVER_TLS=true
VITE_COLONIES_SERVER_PRVKEY=server-private-key

VITE_COLONIES_COLONY_NAME=colony-name
VITE_COLONIES_COLONY_PRVKEY=colony-private-key

VITE_COLONIES_PRVKEY=user-private-key
```bash
make container
```

# Optional: S3 Configuration
VITE_AWS_S3_ENDPOINT=s3-endpoint
VITE_AWS_S3_ACCESSKEY=access-key
VITE_AWS_S3_SECRETKEY=secret-key
VITE_AWS_S3_REGION=
VITE_AWS_S3_BUCKET=bucket-name
VITE_AWS_S3_TLS=true
VITE_AWS_S3_SKIPVERIFY=false
```
Source the required env vars

``` bash
# Backend Configuration
COLONY_BACKEND_HOST=host.docker.internal
COLONY_BACKEND_PORT=50080
COLONY_BACKEND_TLS=false

# Colonies Configuration
COLONIES_COLONY_NAME=your-colony-name
COLONIES_SERVER_PRVKEY=your-server-private-key
COLONIES_COLONY_PRVKEY=your-colony-private-key
COLONIES_PRVKEY=your-user-private-key

# S3 Configuration (Optional)
AWS_S3_ENDPOINT=https://s3.amazonaws.com
AWS_S3_ACCESSKEY=your-access-key
AWS_S3_SECRETKEY=your-secret-key
AWS_S3_REGION=us-east-1
AWS_S3_BUCKET=your-bucket-name
AWS_S3_TLS=true
AWS_S3_SKIPVERIFY=false
```

3. **Start the development server:**
Start the container with the compose file

```bash
npm run dev
```
```bash
docker compose up -d
```

4. **Access the dashboard:**
Open [http://localhost:5173](http://localhost:5173) in your browser
Now you can browse to localhost and you should see the dashboard.
Loading