Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,32 @@ This allows developers to deploy production agents that can scale beautifully to
}
```

## Quick Start with Docker Compose

Get Exosphere running locally in under 2 minutes:

```bash
# Option 1: With cloud MongoDB (recommended)
echo "MONGO_URI=your-mongodb-connection-string" > .env
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml
docker compose up -d

# Option 2: With local MongoDB (development)
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
docker compose -f docker-compose-with-mongodb.yml up -d
```
Comment thread
coderabbitai[bot] marked this conversation as resolved.

Access your services:
- **Dashboard**: http://localhost:3000
- **API**: http://localhost:8000

> **📝 Note**: This configuration is for **development and testing only**. For production deployments, environment variable customization, and advanced configuration options, please read the complete **[Docker Compose Setup Guide](https://docs.exosphere.host/docker-compose-setup)**.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

Comment on lines +97 to +124
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

⚠️ Potential issue

Great Quick Start; tweak .env phrasing and list spacing.

Compose loads .env from the working directory (where you run docker compose), not strictly “the same directory as your compose file.” Also add a blank line before the bullet list to satisfy MD032.

 **Environment Configuration:**
-- Docker Compose automatically loads `.env` files from the working directory
-- Create your `.env` file in the same directory as your docker-compose file
+ 
+- Docker Compose automatically loads a `.env` file from the working directory (where you run `docker compose`)
+- Create your `.env` file in the same directory where you execute `docker compose`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Quick Start with Docker Compose
Get Exosphere running locally in under 2 minutes:
```bash
# Option 1: With cloud MongoDB (recommended)
echo "MONGO_URI=your-mongodb-connection-string" > .env
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml
docker compose up -d
# Option 2: With local MongoDB (development)
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
docker compose -f docker-compose-with-mongodb.yml up -d
```
**Environment Configuration:**
- Docker Compose automatically loads `.env` files from the working directory
- Create your `.env` file in the same directory as your docker-compose file
> **⚠️ Security Note**: Variables prefixed with `NEXT_PUBLIC_` are embedded in client bundles and visible to browsers. Never store real secrets in `NEXT_PUBLIC_` variables - use server-side environment variables instead.
Access your services:
- **Dashboard**: `http://localhost:3000`
- **API**: `http://localhost:8000`
> **📝 Note**: This configuration is for **development and testing only**. For production deployments, environment variable customization, and advanced configuration options, please read the complete **[Docker Compose Setup Guide](https://docs.exosphere.host/docker-compose-setup)**.
**Environment Configuration:**
- Docker Compose automatically loads a `.env` file from the working directory (where you run `docker compose`)
- Create your `.env` file in the same directory where you execute `docker compose`
> **⚠️ Security Note**: Variables prefixed with `NEXT_PUBLIC_` are embedded in client bundles and visible to browsers. Never store real secrets in `NEXT_PUBLIC_` variables—use server-side environment variables instead.
🧰 Tools
🪛 LanguageTool

[grammar] ~97-~97: Use correct spacing
Context: ... ``` ## Quick Start with Docker Compose Get Exosphere running locally in under 2...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~99-~99: Use correct spacing
Context: ...here running locally in under 2 minutes: bash # Option 1: With cloud MongoDB (recommended) echo "MONGO_URI=your-mongodb-connection-string" > .env curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml docker compose up -d # Option 2: With local MongoDB (development) curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml docker compose -f docker-compose-with-mongodb.yml up -d Environment Configuration: - Docker Co...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~112-~112: There might be a mistake here.
Context: ... up -d ``` Environment Configuration: - Docker Compose automatically loads `.env...

(QB_NEW_EN)


[grammar] ~113-~113: There might be a mistake here.
Context: ... .env files from the working directory - Create your .env file in the same dire...

(QB_NEW_EN_OTHER)


[grammar] ~114-~114: There might be a mistake here.
Context: ...me directory as your docker-compose file > ⚠️ Security Note: Variables prefixed w...

(QB_NEW_EN_OTHER)


[typographical] ~116-~116: To join two clauses or set off examples, consider using an em dash.
Context: ...er store real secrets in NEXT_PUBLIC_ variables - use server-side environment variables inste...

(QB_NEW_EN_DASH_RULE_EM)


[grammar] ~116-~116: Use correct spacing
Context: ...rver-side environment variables instead. Access your services: - Dashboard: ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~118-~118: Use correct spacing
Context: ...ariables instead. Access your services: - Dashboard: http://localhost:3000 - *...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~120-~120: There might be a mistake here.
Context: ...Access your services: - Dashboard: http://localhost:3000 - API: http://localhost:8000 > **📝 N...

(QB_NEW_EN)


[grammar] ~121-~121: Use correct spacing
Context: ...d**: http://localhost:3000 - API: http://localhost:8000 > 📝 Note: This configuration is for **d...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~123-~123: Use correct spacing
Context: ....exosphere.host/docker-compose-setup)**. ## Documentation For comprehensive documen...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

113-113: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In README.md around lines 97 to 124, update the .env wording and spacing: change
the sentence that says "Create your `.env` file in the same directory as your
docker-compose file" to clarify that Docker Compose loads `.env` from the
working directory where you run `docker compose` (not necessarily the compose
file directory), and insert a single blank line before the "Environment
Configuration:" bullet list to satisfy MD032; keep the existing security note
and access URLs unchanged.

## Documentation

For comprehensive documentation and guides, check out:


- **[Docker Compose Setup](https://docs.exosphere.host/docker-compose-setup)**: Complete guide for running Exosphere locally with Docker Compose.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- **[Getting Started Guide](https://docs.exosphere.host/getting-started)**
- **[State Manager Setup Guide](https://docs.exosphere.host/exosphere/state-manager-setup)**: Step-by-step instructions for running the Exosphere backend locally or in production.
- **[Dashboard Guide](https://docs.exosphere.host/exosphere/dashboard)**: Learn how to set up and use the Exosphere web dashboard.
Expand Down
266 changes: 266 additions & 0 deletions docker-compose/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,266 @@
# Exosphere Docker Compose Quick Start

This guide helps you quickly start the Exosphere project locally using Docker Compose with a single command.

## 📥 Download Docker Compose Files

First, download the Docker Compose files from the GitHub repository:

### Option 1: Download Both Files

```bash
# Download docker-compose file for cloud MongoDB (recommended)
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml

# Download docker-compose file with local MongoDB included
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Pin raw downloads to a tag or commit for reproducibility

Fetching from main can break unexpectedly.

-curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml
+curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/<tag-or-commit>/docker-compose/docker-compose.yml
-curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
+curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/<tag-or-commit>/docker-compose/docker-compose-with-mongodb.yml

Mirror for wget. Replace with the release tag used in the README and root docs.

Also applies to: 23-27

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 13 to 17 (and also update lines 23 to
27), the curl/wget raw download URLs point to the main branch which is not
reproducible; change those URLs to reference a specific release tag or commit
SHA (replace "main" with the chosen <tag-or-commit> used in the README/root
docs) and update the wget mirror lines similarly so both curl and wget examples
fetch the exact same pinned version for reproducible builds.


### Option 2: Using wget

```bash
# Download docker-compose file for cloud MongoDB (recommended)
wget https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml

# Download docker-compose file with local MongoDB included
wget https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
```


## 🚀 Quick Start

We **recommend using a cloud MongoDB managed service** (MongoDB Atlas, AWS DocumentDB, etc.) for better performance, reliability, and security.

### Option 1: With Cloud MongoDB (Recommended)

1. Set up a cloud MongoDB instance (MongoDB Atlas, AWS DocumentDB, etc.)

2. Create a `.env` file with your MongoDB connection:
```bash
MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Add quoting guidance for MONGO_URI credentials

Passwords with special characters will break unquoted .env assignments.

-   MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/
+   # Quote if your password contains special characters
+   MONGO_URI="mongodb+srv://username:password@your-cluster.mongodb.net/"

Also consider documenting inclusion of a specific database and options, e.g., /exosphere?retryWrites=true&w=majority.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
1. Set up a cloud MongoDB instance (MongoDB Atlas, AWS DocumentDB, etc.)
2. Create a `.env` file with your MongoDB connection:
```bash
MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/
```
1. Set up a cloud MongoDB instance (MongoDB Atlas, AWS DocumentDB, etc.)
2. Create a `.env` file with your MongoDB connection:
🧰 Tools
🪛 LanguageTool

[grammar] ~36-~36: There might be a mistake here.
Context: ...ce (MongoDB Atlas, AWS DocumentDB, etc.) 2. Create a .env file with your MongoDB c...

(QB_NEW_EN_OTHER)


[grammar] ~38-~38: Use correct spacing
Context: ....env` file with your MongoDB connection: bash MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/ 3. Download and start the services: ```b...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

39-39: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 36 to 41, the example MONGO_URI
assignment can break when passwords contain special characters and lacks
guidance about specifying a target database and connection options; update the
docs to show that .env values should be quoted (e.g., wrap the entire URI in
single or double quotes so special characters are preserved) and provide an
example that includes a specific database and options (for example: include
/exosphere?retryWrites=true&w=majority at the end of the URI) so users know to
supply a complete connection string.


3. Download and start the services:
```bash
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml && docker compose -f docker-compose.yml up -d
```

This will start:
- Exosphere State Manager (port 8000)
- Exosphere Dashboard (port 3000)

### Option 2: With Local MongoDB (Development Only)

For quick local testing only:

```bash
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml && docker compose -f docker-compose-with-mongodb.yml up -d
```

This will start:
- MongoDB database (port 27017)
- Exosphere State Manager (port 8000)
- Exosphere Dashboard (port 3000)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Reduce duplication with Compose profiles

Consider one compose file with a mongo profile instead of maintaining two separate files.

Example:

services:
  mongo:
    image: mongo:7
    profiles: ["mongo"]
  exosphere-state-manager:
    depends_on:
      mongo:
        condition: service_healthy
    # ...

Usage:

  • Cloud Mongo: docker compose up -d
  • Local Mongo: docker compose --profile mongo up -d
🧰 Tools
🪛 LanguageTool

[grammar] ~30-~30: There might be a mistake here.
Context: ...with-mongodb.yml ``` ## 🚀 Quick Start We **recommend using a cloud MongoDB man...

(QB_NEW_EN)


[grammar] ~32-~32: Use correct spacing
Context: ... performance, reliability, and security. ### Option 1: With Cloud MongoDB (Recommende...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~34-~34: Use correct spacing
Context: ...tion 1: With Cloud MongoDB (Recommended) 1. Set up a cloud MongoDB instance (MongoDB...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~36-~36: There might be a mistake here.
Context: ...ce (MongoDB Atlas, AWS DocumentDB, etc.) 2. Create a .env file with your MongoDB c...

(QB_NEW_EN_OTHER)


[grammar] ~38-~38: Use correct spacing
Context: ....env` file with your MongoDB connection: bash MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/ 3. Download and start the services: ```b...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~43-~43: Use correct spacing
Context: ... 3. Download and start the services: bash curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml && docker compose -f docker-compose.yml up -d ``` This will start: - Exosphere State Manag...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~48-~48: There might be a mistake here.
Context: ...mpose.yml up -d ``` This will start: - Exosphere State Manager (port 8000) - ...

(QB_NEW_EN)


[grammar] ~49-~49: There might be a mistake here.
Context: ...t: - Exosphere State Manager (port 8000) - Exosphere Dashboard (port 3000) ### Opt...

(QB_NEW_EN)


[grammar] ~50-~50: Use correct spacing
Context: ...000) - Exosphere Dashboard (port 3000) ### Option 2: With Local MongoDB (Developmen...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~52-~52: Use correct spacing
Context: ...2: With Local MongoDB (Development Only) For quick local testing only: ```bash c...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~54-~54: Use correct spacing
Context: ...ent Only) For quick local testing only: bash curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml && docker compose -f docker-compose-with-mongodb.yml up -d This will start: - MongoDB database (por...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~60-~60: There might be a mistake here.
Context: ...-mongodb.yml up -d ``` This will start: - MongoDB database (port 27017) - Exospher...

(QB_NEW_EN)


[grammar] ~61-~61: There might be a mistake here.
Context: ...l start: - MongoDB database (port 27017) - Exosphere State Manager (port 8000) - ...

(QB_NEW_EN)


[grammar] ~62-~62: There might be a mistake here.
Context: ...7) - Exosphere State Manager (port 8000) - Exosphere Dashboard (port 3000) ## 🧪 B...

(QB_NEW_EN)


[grammar] ~63-~63: Use correct spacing
Context: ...000) - Exosphere Dashboard (port 3000) ## 🧪 Beta Version To run the latest beta ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

39-39: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


44-44: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


49-49: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


61-61: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

## 🧪 Beta Version

To run the latest beta version of Exosphere with the newest features, replace container tags with `beta-latest`:

### Quick Beta Setup with Cloud MongoDB
```bash
# Download and modify for beta with cloud MongoDB
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose.yml
sed -i 's/:latest/:beta-latest/g' docker-compose.yml
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
# Set your MONGO_URI in .env file, then:
docker compose -f docker-compose.yml up -d
```

### Quick Beta Setup with Local MongoDB
```bash
# Download and modify for beta with local MongoDB
curl -O https://raw.githubusercontent.com/exospherehost/exospherehost/main/docker-compose/docker-compose-with-mongodb.yml
sed -i 's/:latest/:beta-latest/g' docker-compose-with-mongodb.yml
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
docker compose -f docker-compose-with-mongodb.yml up -d
```
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Same issue in local-mongodb beta section

Mirror the safe, targeted replacement for docker-compose-with-mongodb.yml to avoid retagging the Mongo image.

- sed -i 's/:latest/:beta-latest/g' docker-compose-with-mongodb.yml
+ # Linux (GNU sed)
+ sed -E -i.bak 's#(ghcr.io/exospherehost/exosphere-(state-manager|dashboard)):[^"[:space:]]+#\1:beta-latest#g' docker-compose-with-mongodb.yml
+ # macOS (BSD sed)
+ # sed -E -i '' 's#(ghcr.io/exospherehost/exosphere-(state-manager|dashboard)):[^"[:space:]]+#\1:beta-latest#g' docker-compose-with-mongodb.yml
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

79-79: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 79 to 84, the provided sed command
blindly replaces all :latest tags (including the MongoDB image) when creating
the beta-local Mongo compose file; change the replacement to target only your
service images (for example match your registry/name pattern or service image
names) instead of a global ':latest' replacement so the Mongo image tag is left
unchanged — update the instructions to demonstrate a targeted sed/yq command
that only replaces exospherehost service image tags (or explicitly skips the
mongo service) before bringing the compose file up.


### Manual Beta Setup (Alternative)

1. Download the docker-compose file
2. Edit the file and change:
```yaml
# Change from:
image: ghcr.io/exospherehost/exosphere-state-manager:latest
image: ghcr.io/exospherehost/exosphere-dashboard:latest

# To:
image: ghcr.io/exospherehost/exosphere-state-manager:beta-latest
image: ghcr.io/exospherehost/exosphere-dashboard:beta-latest
```
3. Start the services with `docker compose up -d`

## 📋 Environment Variables

### Environment Variables for State Manager

| Variable | Description | Default Value | Required |
|----------|-------------|---------------|----------|
| `MONGO_URI` | MongoDB connection string | - | ✅ (for docker-compose.yml) |
| `STATE_MANAGER_SECRET` | API key for state manager authentication | `exosphere@123` | ⚙️ (has default) |
| `MONGO_DATABASE_NAME` | MongoDB database name | `exosphere` | ⚙️ (has default) |
| `SECRETS_ENCRYPTION_KEY` | Base64-encoded encryption key for secrets | `YTzpUlBGLSwm-3yKJRJTZnb0_aQuQQHyz64s8qAERVU=` | ⚙️ (has default) |

> **⚠️ Important**: The `SECRETS_ENCRYPTION_KEY` is used to encrypt secrets in the database. Changing this value will make existing encrypted secrets unreadable. Only change this key when setting up a new instance or if you're okay with losing access to existing encrypted data.

### Dashboard Environment Variables (All Optional)

| Variable | Description | Default Value |
|----------|-------------|---------------|
| `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL` | State manager API URL | `http://exosphere-state-manager:8000` |
| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `WhatPeopleWant` |
| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard | `exosphere@123` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Do not publish real-looking defaults for secrets; make them explicit placeholders and add a production warning

Hard-coded defaults for STATE_MANAGER_SECRET and SECRETS_ENCRYPTION_KEY are risky and will be reused inadvertently.

-| `STATE_MANAGER_SECRET` | API key for state manager authentication | `exosphere@123` | ⚙️ (has default) |
+| `STATE_MANAGER_SECRET` | API key for state manager authentication | (set a strong random value; no default) | ✅ |
-| `SECRETS_ENCRYPTION_KEY` | Base64-encoded encryption key for secrets | `YTzpUlBGLSwm-3yKJRJTZnb0_aQuQQHyz64s8qAERVU=` | ⚙️ (has default) |
+| `SECRETS_ENCRYPTION_KEY` | Base64-encoded encryption key for secrets | (generate; see "Generating a New Encryption Key") | ✅ |

Add a prominent note right below the table:

+> Never use example or default values for `STATE_MANAGER_SECRET` or `SECRETS_ENCRYPTION_KEY` in any environment beyond local throwaway demos. Rotate both if leaked or committed.

Also, the dashboard exposes NEXT_PUBLIC_DEFAULT_API_KEY to the browser. Clarify dev-only:

-| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard | `exosphere@123` |
+| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard (dev-only) | (leave blank; set explicitly in dev) |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| `STATE_MANAGER_SECRET` | API key for state manager authentication | `exosphere@123` | ⚙️ (has default) |
| `MONGO_DATABASE_NAME` | MongoDB database name | `exosphere` | ⚙️ (has default) |
| `SECRETS_ENCRYPTION_KEY` | Base64-encoded encryption key for secrets | `YTzpUlBGLSwm-3yKJRJTZnb0_aQuQQHyz64s8qAERVU=` | ⚙️ (has default) |
> **⚠️ Important**: The `SECRETS_ENCRYPTION_KEY` is used to encrypt secrets in the database. Changing this value will make existing encrypted secrets unreadable. Only change this key when setting up a new instance or if you're okay with losing access to existing encrypted data.
### Dashboard Environment Variables (All Optional)
| Variable | Description | Default Value |
|----------|-------------|---------------|
| `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL` | State manager API URL | `http://exosphere-state-manager:8000` |
| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `WhatPeopleWant` |
| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard | `exosphere@123` |
| `STATE_MANAGER_SECRET` | API key for state manager authentication | (set a strong random value; no default) ||
| `MONGO_DATABASE_NAME` | MongoDB database name | `exosphere` | ⚙️ (has default) |
| `SECRETS_ENCRYPTION_KEY` | Base64-encoded encryption key for secrets | (generate; see "Generating a New Encryption Key") ||
> Never use example or default values for `STATE_MANAGER_SECRET` or `SECRETS_ENCRYPTION_KEY` in any environment beyond local throwaway demos. Rotate both if leaked or committed.
> **⚠️ Important**: The `SECRETS_ENCRYPTION_KEY` is used to encrypt secrets in the database. Changing this value will make existing encrypted secrets unreadable. Only change this key when setting up a new instance or if you're okay with losing access to existing encrypted data.
### Dashboard Environment Variables (All Optional)
| Variable | Description | Default Value |
|---------------------------------------------|-------------------------------------------------------|----------------------------------------|
| `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL` | State manager API URL | `http://exosphere-state-manager:8000` |
| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `WhatPeopleWant` |
| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard (dev-only) | (leave blank; set explicitly in dev) |
🧰 Tools
🪛 LanguageTool

[grammar] ~108-~108: There might be a mistake here.
Context: ...n | exosphere@123 | ⚙️ (has default) | | MONGO_DATABASE_NAME | MongoDB databa...

(QB_NEW_EN)


[grammar] ~109-~109: There might be a mistake here.
Context: ... name | exosphere | ⚙️ (has default) | | SECRETS_ENCRYPTION_KEY | Base64-enco...

(QB_NEW_EN)


[grammar] ~110-~110: Use correct spacing
Context: ...QuQQHyz64s8qAERVU=| ⚙️ (has default) | > **⚠️ Important**: TheSECRETS_ENCRYPTION_...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~112-~112: Use correct spacing
Context: ...osing access to existing encrypted data. ### Dashboard Environment Variables (All Opt...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~114-~114: Use correct spacing
Context: ...ard Environment Variables (All Optional) | Variable | Description | Default Value...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~116-~116: There might be a mistake here.
Context: ...Variable | Description | Default Value | |----------|-------------|--------------...

(QB_NEW_EN)


[grammar] ~117-~117: There might be a mistake here.
Context: ...---------|-------------|---------------| | `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_U...

(QB_NEW_EN)


[grammar] ~118-~118: There might be a mistake here.
Context: ... http://exosphere-state-manager:8000 | | NEXT_PUBLIC_DEFAULT_NAMESPACE | Defa...

(QB_NEW_EN)


[grammar] ~119-~119: There might be a mistake here.
Context: ...space for workflows | WhatPeopleWant | | NEXT_PUBLIC_DEFAULT_API_KEY | Defaul...

(QB_NEW_EN)


[grammar] ~120-~120: Use correct spacing
Context: ...PI key for dashboard | exosphere@123 | ### MongoDB Local Setup Variables (for docke...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 108 to 121, the file currently shows
realistic-looking default secrets (STATE_MANAGER_SECRET, SECRETS_ENCRYPTION_KEY)
and an exposed NEXT_PUBLIC_DEFAULT_API_KEY without clarifying dev-only use;
replace those hard-coded secret values with explicit placeholders (e.g.
<REPLACE_WITH_SECRET>), add a prominent warning paragraph immediately below the
environment variables table stating that these are placeholders, must be
replaced in any deployment, and changing SECRETS_ENCRYPTION_KEY will render
existing encrypted data unreadable, and annotate NEXT_PUBLIC_DEFAULT_API_KEY
with a clear "development only — DO NOT USE IN PRODUCTION / public value exposed
to browser" warning and recommend setting it via server-side config or removing
it for production.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Default namespace value looks product-specific

“WhatPeopleWant” reads like an internal/demo value. Consider “default” to reduce cognitive load.

-| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `WhatPeopleWant` |
+| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `default` |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Variable | Description | Default Value |
|----------|-------------|---------------|
| `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL` | State manager API URL | `http://exosphere-state-manager:8000` |
| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `WhatPeopleWant` |
| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard | `exosphere@123` |
| Variable | Description | Default Value |
|------------------------------------------------|-----------------------------------|----------------------------------------------------|
| `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL` | State manager API URL | `http://exosphere-state-manager:8000` |
| `NEXT_PUBLIC_DEFAULT_NAMESPACE` | Default namespace for workflows | `default` |
| `NEXT_PUBLIC_DEFAULT_API_KEY` | Default API key for dashboard | `exosphere@123` |
🧰 Tools
🪛 LanguageTool

[grammar] ~116-~116: There might be a mistake here.
Context: ...Variable | Description | Default Value | |----------|-------------|--------------...

(QB_NEW_EN)


[grammar] ~117-~117: There might be a mistake here.
Context: ...---------|-------------|---------------| | `NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_U...

(QB_NEW_EN)


[grammar] ~118-~118: There might be a mistake here.
Context: ... http://exosphere-state-manager:8000 | | NEXT_PUBLIC_DEFAULT_NAMESPACE | Defa...

(QB_NEW_EN)


[grammar] ~119-~119: There might be a mistake here.
Context: ...space for workflows | WhatPeopleWant | | NEXT_PUBLIC_DEFAULT_API_KEY | Defaul...

(QB_NEW_EN)


[grammar] ~120-~120: Use correct spacing
Context: ...PI key for dashboard | exosphere@123 | ### MongoDB Local Setup Variables (for docke...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 116 to 121 the default
NEXT_PUBLIC_DEFAULT_NAMESPACE is set to the product-specific value
"WhatPeopleWant"; change it to a neutral value such as "default" (or another
generic placeholder) so the README shows a generic, non-demo namespace; update
the Default Value cell to `default` and keep surrounding formatting intact.

### MongoDB Local Setup Variables (for docker-compose-with-mongodb.yml only)

| Variable | Description | Default Value |
|----------|-------------|---------------|
| `MONGO_INITDB_ROOT_USERNAME` | MongoDB root username | `admin` |
| `MONGO_INITDB_ROOT_PASSWORD` | MongoDB root password | `password` |
| `MONGO_INITDB_DATABASE` | Initial MongoDB database | `exosphere` |

### SDK Environment Variables

To use the Exosphere Python SDK with your running instance, set these environment variables in your development environment:

| Variable | Description | Example Value |
|----------|-------------|---------------|
| `EXOSPHERE_STATE_MANAGER_URI` | URL where the state manager is running | `http://localhost:8000` |
| `EXOSPHERE_API_KEY` | API key for authentication (same as STATE_MANAGER_SECRET) | `exosphere@123` |

**Example SDK setup**:
```bash
# Set environment variables for SDK
export EXOSPHERE_STATE_MANAGER_URI=http://localhost:8000
export EXOSPHERE_API_KEY=exosphere@123

# Or add to your .env file for your Python project
echo "EXOSPHERE_STATE_MANAGER_URI=http://localhost:8000" >> .env
echo "EXOSPHERE_API_KEY=exosphere@123" >> .env
```

## 🔧 Custom Configuration

### Using Your Own Environment Variables

Create a `.env` file in the same directory as your docker-compose file:

```bash
# MongoDB Configuration (REQUIRED for docker-compose.yml)
MONGO_URI=mongodb+srv://username:password@your-cluster.mongodb.net/

# Optional Configuration (has defaults)
MONGO_DATABASE_NAME=exosphere
STATE_MANAGER_SECRET=your-custom-secret-key
SECRETS_ENCRYPTION_KEY=your-base64-encoded-encryption-key

# Dashboard Configuration (Optional)
NEXT_PUBLIC_DEFAULT_NAMESPACE=YourNamespace
NEXT_PUBLIC_DEFAULT_API_KEY=your-custom-secret-key

# For local MongoDB setup only (docker-compose-with-mongodb.yml)
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=password
MONGO_INITDB_DATABASE=exosphere
```

Then run with your custom configuration:
```bash
# For cloud MongoDB (recommended)
docker compose -f docker-compose.yml up -d

# For local MongoDB
docker compose -f docker-compose-with-mongodb.yml up -d
```

**Note**: The docker-compose files now automatically use `.env` files in the same directory and provide sensible defaults for all optional variables.

### Generating a New Encryption Key

To generate a secure encryption key for `SECRETS_ENCRYPTION_KEY`:

```bash
# Using Python
python -c "import base64; import os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())"

# Using OpenSSL
openssl rand -base64 32
```

## 🌐 Access Your Services

After running the Docker Compose command:

- **Exosphere Dashboard**: http://localhost:3000
- **State Manager API**: http://localhost:8000
- **MongoDB** (if using with-mongodb): http://localhost:27017
- **API Documentation**: http://localhost:8000/docs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

MongoDB is not HTTP; fix the connection example

Using http:// for MongoDB is incorrect and can mislead users.

-- **MongoDB** (if using with-mongodb): http://localhost:27017
+- **MongoDB** (if using with-mongodb): mongodb://localhost:27017 (driver/protocol URI; not an HTTP endpoint)

Optionally add:

+  # Example CLI connection:
+  # mongosh "mongodb://admin:password@localhost:27017/exosphere"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
After running the Docker Compose command:
- **Exosphere Dashboard**: http://localhost:3000
- **State Manager API**: http://localhost:8000
- **MongoDB** (if using with-mongodb): http://localhost:27017
- **API Documentation**: http://localhost:8000/docs
After running the Docker Compose command:
- **Exosphere Dashboard**: http://localhost:3000
- **State Manager API**: http://localhost:8000
- **MongoDB** (if using with-mongodb): mongodb://localhost:27017 (driver/protocol URI; not an HTTP endpoint)
# Example CLI connection:
# mongosh "mongodb://admin:password@localhost:27017/exosphere"
- **API Documentation**: http://localhost:8000/docs
🧰 Tools
🪛 LanguageTool

[grammar] ~200-~200: Use correct spacing
Context: ...fter running the Docker Compose command: - Exosphere Dashboard: http://localhost:...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~202-~202: There might be a mistake here.
Context: ...phere Dashboard**: http://localhost:3000 - State Manager API: http://localhost:80...

(QB_NEW_EN)


[grammar] ~203-~203: There might be a mistake here.
Context: ...ate Manager API**: http://localhost:8000 - MongoDB (if using with-mongodb): http:...

(QB_NEW_EN)


[grammar] ~204-~204: There might be a mistake here.
Context: ...ng with-mongodb): http://localhost:27017 - API Documentation: http://localhost:80...

(QB_NEW_EN)


[grammar] ~205-~205: Use correct spacing
Context: ...umentation**: http://localhost:8000/docs ## 🛠️ Development Commands ```bash # Star...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

202-202: Bare URL used

(MD034, no-bare-urls)


203-203: Bare URL used

(MD034, no-bare-urls)


204-204: Bare URL used

(MD034, no-bare-urls)


205-205: Bare URL used

(MD034, no-bare-urls)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 200 to 206, the MongoDB address is
listed with an http:// URL which is incorrect; update the README to show a
proper MongoDB connection string or clarifying text (e.g.
mongodb://localhost:27017) or replace the link with a note that MongoDB is not
an HTTP service and provide the correct URI format and/or instructions for
connecting with MongoDB clients like mongo or Compass.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Wrap bare URLs to satisfy markdownlint (MD034) and improve readability

Convert bare links to markdown links.

-- **Exosphere Dashboard**: http://localhost:3000
-- **State Manager API**: http://localhost:8000
-- **API Documentation**: http://localhost:8000/docs
+– **Exosphere Dashboard**: [http://localhost:3000](http://localhost:3000)
+– **State Manager API**: [http://localhost:8000](http://localhost:8000)
+– **API Documentation**: [http://localhost:8000/docs](http://localhost:8000/docs)
-1. Visit the dashboard at http://localhost:3000
-2. Check out the [official documentation](https://docs.exosphere.host) 
-3. Follow the [Getting Started Guide](https://docs.exosphere.host/getting-started) to create your first workflow
-4. Explore the [State Manager API](http://localhost:8000/docs) for advanced usage
+1. Visit the dashboard at [http://localhost:3000](http://localhost:3000)
+2. Check out the [official documentation](https://docs.exosphere.host)
+3. Follow the [Getting Started Guide](https://docs.exosphere.host/getting-started) to create your first workflow
+4. Explore the [State Manager API](http://localhost:8000/docs) for advanced usage

Also run markdownlint --fix to address blanks-around-fences (MD031), list spacing (MD032), and extra blank lines (MD012).

Also applies to: 257-261

🧰 Tools
🪛 LanguageTool

[grammar] ~202-~202: There might be a mistake here.
Context: ...phere Dashboard**: http://localhost:3000 - State Manager API: http://localhost:80...

(QB_NEW_EN)


[grammar] ~203-~203: There might be a mistake here.
Context: ...ate Manager API**: http://localhost:8000 - MongoDB (if using with-mongodb): http:...

(QB_NEW_EN)


[grammar] ~204-~204: There might be a mistake here.
Context: ...ng with-mongodb): http://localhost:27017 - API Documentation: http://localhost:80...

(QB_NEW_EN)


[grammar] ~205-~205: Use correct spacing
Context: ...umentation**: http://localhost:8000/docs ## 🛠️ Development Commands ```bash # Star...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

202-202: Bare URL used

(MD034, no-bare-urls)


203-203: Bare URL used

(MD034, no-bare-urls)


204-204: Bare URL used

(MD034, no-bare-urls)


205-205: Bare URL used

(MD034, no-bare-urls)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 202 to 206 (and also apply the same
change to 257-261), replace the bare URLs with markdown link syntax (e.g.
[Exosphere Dashboard](http://localhost:3000)) so MD034 is satisfied and
readability is improved, and then run markdownlint --fix to auto-correct related
issues such as blanks-around-fences (MD031), list spacing (MD032), and extra
blank lines (MD012).

## 🛠️ Development Commands

```bash
# Start services in background
docker compose -f docker-compose-with-mongodb.yml up -d

# View logs
docker compose -f docker-compose-with-mongodb.yml logs -f

# Stop services
docker compose -f docker-compose-with-mongodb.yml down

# Stop services and remove volumes (⚠️ This will delete your data)
docker compose -f docker-compose-with-mongodb.yml down -v

# Pull latest images
docker compose -f docker-compose-with-mongodb.yml pull

# Restart a specific service
docker compose -f docker-compose-with-mongodb.yml restart exosphere-state-manager
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Optional: mention docker-compose v1 alias

Some users still have docker-compose. A small note can reduce friction.

-# Start services in background
+# Start services in background (use `docker-compose` if your Docker installation doesn’t support `docker compose`)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Start services in background
docker compose -f docker-compose-with-mongodb.yml up -d
# View logs
docker compose -f docker-compose-with-mongodb.yml logs -f
# Stop services
docker compose -f docker-compose-with-mongodb.yml down
# Stop services and remove volumes (⚠️ This will delete your data)
docker compose -f docker-compose-with-mongodb.yml down -v
# Pull latest images
docker compose -f docker-compose-with-mongodb.yml pull
# Restart a specific service
docker compose -f docker-compose-with-mongodb.yml restart exosphere-state-manager
```
# Start services in background (use `docker-compose` if your Docker installation doesn’t support `docker compose`)
docker compose -f docker-compose-with-mongodb.yml up -d
# View logs
docker compose -f docker-compose-with-mongodb.yml logs -f
# Stop services
docker compose -f docker-compose-with-mongodb.yml down
# Stop services and remove volumes (⚠️ This will delete your data)
docker compose -f docker-compose-with-mongodb.yml down -v
# Pull latest images
docker compose -f docker-compose-with-mongodb.yml pull
# Restart a specific service
docker compose -f docker-compose-with-mongodb.yml restart exosphere-state-manager
🤖 Prompt for AI Agents
In docker-compose/README.md around lines 210 to 227, add an optional note
telling users that if they have the legacy docker-compose (v1) binary they can
use the alias "docker-compose" mapped to "docker compose" (or provide the
specific command example) so they can run the same commands without changing
habits; update the README by appending a short paragraph that mentions the alias
and the equivalent v1 command examples and any recommended steps to create a
shell alias or install the plugin.


## 🔍 Troubleshooting

### Check Service Health

```bash
# Check if all containers are running
docker compose -f docker-compose-with-mongodb.yml ps

# Check state manager health
curl http://localhost:8000/health

# View container logs
docker compose -f docker-compose-with-mongodb.yml logs exosphere-state-manager
```

### Common Issues

1. **Port already in use**: Change the port mappings in the docker-compose file if ports 3000, 8000, or 27017 are already in use.

2. **MongoDB connection issues**: Ensure MongoDB is fully started before the state manager. The `depends_on` configuration handles this automatically.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

depends_on doesn’t wait for service readiness; suggest healthchecks

“depends_on handles this automatically” is false. depends_on only orders start. Add healthchecks and condition: service_healthy.

-2. **MongoDB connection issues**: Ensure MongoDB is fully started before the state manager. The `depends_on` configuration handles this automatically.
+2. **MongoDB connection issues**: Ensure MongoDB is ready before the state manager. `depends_on` controls start order but does not wait for readiness. Use healthchecks and `condition: service_healthy`.

Example (to include in compose files):

services:
  mongo:
    image: mongo:7
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 5s
      timeout: 3s
      retries: 20
  exosphere-state-manager:
    depends_on:
      mongo:
        condition: service_healthy
🧰 Tools
🪛 LanguageTool

[grammar] ~246-~246: Use correct spacing
Context: ...3000, 8000, or 27017 are already in use. 2. MongoDB connection issues: Ensure Mong...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~248-~248: Use correct spacing
Context: ...onfiguration handles this automatically. 3. Authentication errors: Verify your `ST...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In docker-compose/README.md around lines 246 to 249, the note incorrectly claims
depends_on waits for readiness; update the guidance to instruct adding a Docker
healthcheck to the mongo service (e.g., use mongosh ping via a test command) and
then change the exosphere-state-manager depends_on entry to depend on mongo:
condition: service_healthy; include recommended healthcheck parameters to use
(interval ~5s, timeout ~3s, retries ~20) so the README explains explicitly how
to ensure MongoDB is healthy before starting the state manager.

3. **Authentication errors**: Verify your `STATE_MANAGER_SECRET` matches between the state manager and dashboard configuration.


## 📖 Next Steps

Once your Exosphere instance is running:

1. Visit the dashboard at http://localhost:3000
2. Check out the [official documentation](https://docs.exosphere.host)
3. Follow the [Getting Started Guide](https://docs.exosphere.host/getting-started) to create your first workflow
4. Explore the [State Manager API](http://localhost:8000/docs) for advanced usage

## 🤝 Support

- [Documentation](https://docs.exosphere.host)
- [Discord Community](https://discord.com/invite/zT92CAgvkj)
- [GitHub Issues](https://github.com/exospherehost/exospherehost/issues)
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
56 changes: 56 additions & 0 deletions docker-compose/docker-compose-with-mongodb.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
services:
mongodb:
image: mongo:7.0
container_name: mongodb
restart: unless-stopped
Comment thread
NiveditJain marked this conversation as resolved.
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD:-password}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE:-exosphere}
Comment thread
NiveditJain marked this conversation as resolved.
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
Comment on lines +12 to +13
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Consider not publishing MongoDB to the host (optional).

For local dev, you usually don’t need 27017 exposed; reduces attack surface.

-    ports:
-      - "27017:27017"
+    # ports:
+    #   - "27017:27017"  # Uncomment only if you need host access (e.g., MongoDB Compass)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ports:
- "27017:27017"
services:
mongodb:
image: mongo:7.0
container_name: exosphere-mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD:?Set MONGO_INITDB_ROOT_PASSWORD in .env}
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE:-exosphere}
volumes:
- mongodb_data:/data/db
- ports:
# ports:
# - "27017:27017" # Uncomment only if you need host access (e.g., MongoDB Compass)
healthcheck:
test: ["CMD-SHELL", "mongosh --quiet --eval \"db.adminCommand({ ping: 1 }).ok\" | grep 1"]
interval: 10s
timeout: 5s
retries: 8
networks:
- exosphere-network
🤖 Prompt for AI Agents
In docker-compose/docker-compose-with-mongodb.yml around lines 12 to 13 the
compose file publishes MongoDB's port 27017 to the host which is unnecessary for
local dev and increases attack surface; remove the ports mapping or comment it
out so MongoDB is only reachable by other services in the compose network, or
alternatively document/run with an environment flag to enable host binding when
explicitly needed (e.g., for external tooling), ensuring the default
configuration does not expose 27017 to the host.

networks:
- exosphere-network
Comment thread
coderabbitai[bot] marked this conversation as resolved.

Comment thread
NiveditJain marked this conversation as resolved.
exosphere-state-manager:
image: ghcr.io/exospherehost/exosphere-state-manager:latest
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
container_name: whatpeoplewant-state-manager
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
restart: unless-stopped
environment:
- MONGO_URI=${MONGO_URI:-mongodb://admin:password@mongodb:27017/exosphere?authSource=admin}
- STATE_MANAGER_SECRET=${STATE_MANAGER_SECRET:-exosphere@123}
- MONGO_DATABASE_NAME=${MONGO_DATABASE_NAME:-exosphere}
- SECRETS_ENCRYPTION_KEY=${SECRETS_ENCRYPTION_KEY:-YTzpUlBGLSwm-3yKJRJTZnb0_aQuQQHyz64s8qAERVU=}
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
depends_on:
- mongodb
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
ports:
- "8000:8000"
networks:
- exosphere-network
Comment thread
NiveditJain marked this conversation as resolved.

exosphere-dashboard:
image: ghcr.io/exospherehost/exosphere-dashboard:latest
container_name: whatpeoplewant-dashboard
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
restart: unless-stopped
environment:
- NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL=${NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL:-http://exosphere-state-manager:8000}
- NEXT_PUBLIC_DEFAULT_NAMESPACE=${NEXT_PUBLIC_DEFAULT_NAMESPACE:-WhatPeopleWant}
- NEXT_PUBLIC_DEFAULT_API_KEY=${NEXT_PUBLIC_DEFAULT_API_KEY:-exosphere@123}
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
depends_on:
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
- mongodb
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
- exosphere-state-manager
ports:
- "3000:3000"
networks:
- exosphere-network

volumes:
mongodb_data:
driver: local

networks:
exosphere-network:
driver: bridge
attachable: true
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
34 changes: 34 additions & 0 deletions docker-compose/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
services:
exosphere-state-manager:
image: ghcr.io/exospherehost/exosphere-state-manager:latest
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
container_name: whatpeoplewant-state-manager
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
restart: unless-stopped
environment:
- MONGO_URI=${MONGO_URI}
- STATE_MANAGER_SECRET=${STATE_MANAGER_SECRET:-exosphere@123}
- MONGO_DATABASE_NAME=${MONGO_DATABASE_NAME:-exosphere}
- SECRETS_ENCRYPTION_KEY=${SECRETS_ENCRYPTION_KEY:-YTzpUlBGLSwm-3yKJRJTZnb0_aQuQQHyz64s8qAERVU=}
Comment thread
NiveditJain marked this conversation as resolved.
ports:
- "8000:8000"
networks:
- exosphere-network

Comment thread
coderabbitai[bot] marked this conversation as resolved.
exosphere-dashboard:
image: ghcr.io/exospherehost/exosphere-dashboard:latest
container_name: whatpeoplewant-dashboard
restart: unless-stopped
environment:
- NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL=${NEXT_PUBLIC_EXOSPHERE_STATE_MANAGER_URL:-http://exosphere-state-manager:8000}
- NEXT_PUBLIC_DEFAULT_NAMESPACE=${NEXT_PUBLIC_DEFAULT_NAMESPACE:-WhatPeopleWant}
- NEXT_PUBLIC_DEFAULT_API_KEY=${NEXT_PUBLIC_DEFAULT_API_KEY:-exosphere@123}
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
depends_on:
- exosphere-state-manager
ports:
- "3000:3000"
networks:
- exosphere-network

Comment on lines +39 to +45
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Mirror healthcheck command style for the dashboard.

Consistency and clearer failures.

-    healthcheck:
-      test: ["CMD", "curl", "-f", "http://localhost:3000"]
+    healthcheck:
+      test: ["CMD-SHELL", "curl -fsS http://localhost:3000 >/dev/null || exit 1"]
       interval: 10s
       timeout: 5s
       retries: 5
       start_period: 30s
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://localhost:3000 >/dev/null || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
🤖 Prompt for AI Agents
In docker-compose/docker-compose.yml around lines 39 to 45, the service
healthcheck uses the array form ["CMD", "curl", "-f", "http://localhost:3000"]
which differs from the dashboard's healthcheck style; change the test to use the
same shell-style pattern (CMD-SHELL) and the same curl flags and failure
handling (e.g., use curl -fsS with an explicit failure exit) so the healthcheck
command style, flags, and behavior mirror the dashboard while leaving interval,
timeout, retries and start_period unchanged.

networks:
exosphere-network:
driver: bridge
attachable: true
Comment thread
NiveditJain marked this conversation as resolved.
Outdated
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
Loading