cosmoguard-bd/utils
2025-10-21 14:22:27 +02:00
..
changelog.py first commit: checkpoint per multi-device collab 2025-10-21 14:22:27 +02:00
create_user.py first commit: checkpoint per multi-device collab 2025-10-21 14:22:27 +02:00
docker-compose.yml first commit: checkpoint per multi-device collab 2025-10-21 14:22:27 +02:00
README.md first commit: checkpoint per multi-device collab 2025-10-21 14:22:27 +02:00

PIF Compiler - MongoDB Docker Setup

Quick Start

Start MongoDB and Mongo Express web interface:

cd utils
docker-compose up -d

Stop the services:

docker-compose down

Stop and remove all data:

docker-compose down -v

Services

MongoDB

  • Port: 27017
  • Database: toxinfo
  • Username: admin
  • Password: admin123
  • Connection String: mongodb://admin:admin123@localhost:27017/toxinfo?authSource=admin

Mongo Express (Web UI)

Usage in Python

Update your MongoDB connection in src/pif_compiler/functions/mongo_functions.py:

# For local development with Docker
db = connect(user="admin", password="admin123", database="toxinfo")

Or use the connection URI directly:

from pymongo import MongoClient

client = MongoClient("mongodb://admin:admin123@localhost:27017/toxinfo?authSource=admin")
db = client['toxinfo']

Data Persistence

Data is persisted in Docker volumes:

  • mongodb_data - Database files
  • mongodb_config - Configuration files

These volumes persist even when containers are stopped.

Creating Application User

It's recommended to create a dedicated user for your application instead of using the admin account.

Option 1: Using mongosh (MongoDB Shell)

# Access MongoDB shell
docker exec -it pif_mongodb mongosh -u admin -p admin123 --authenticationDatabase admin

# In the MongoDB shell, run:
use toxinfo

db.createUser({
  user: "pif_app",
  pwd: "pif_app_password",
  roles: [
    { role: "readWrite", db: "toxinfo" }
  ]
})

# Exit the shell
exit

Option 2: Using Mongo Express Web UI

  1. Go to http://localhost:8082
  2. Login with admin/admin123
  3. Select toxinfo database
  4. Click on "Users" tab
  5. Add new user with readWrite role

Option 3: Using Python Script

Create a file utils/create_user.py:

from pymongo import MongoClient

# Connect as admin
client = MongoClient("mongodb://admin:admin123@localhost:27017/?authSource=admin")
db = client['toxinfo']

# Create application user
db.command("createUser", "pif_app",
           pwd="pif_app_password",
           roles=[{"role": "readWrite", "db": "toxinfo"}])

print("User 'pif_app' created successfully!")
client.close()

Run it:

cd utils
uv run python create_user.py

Update Your Application

After creating the user, update your connection in src/pif_compiler/functions/mongo_functions.py:

# Use application user instead of admin
db = connect(user="pif_app", password="pif_app_password", database="toxinfo")

Or with connection URI:

client = MongoClient("mongodb://pif_app:pif_app_password@localhost:27017/toxinfo?authSource=toxinfo")

Available Roles

  • read: Read-only access to the database
  • readWrite: Read and write access (recommended for your app)
  • dbAdmin: Database administration (create indexes, etc.)
  • userAdmin: Manage users and roles

Security Notes

⚠️ WARNING: The default credentials are for local development only.

For production:

  1. Change all passwords in docker-compose.yml
  2. Use environment variables or secrets management
  3. Create dedicated users with minimal required permissions
  4. Configure firewall rules
  5. Enable SSL/TLS connections