Documentation
This commit is contained in:
764
.devcontainer/README.md
Normal file
764
.devcontainer/README.md
Normal file
@@ -0,0 +1,764 @@
|
||||
# Looking - DevContainer Configuration
|
||||
|
||||
> **VS Code Development Container setup for the Looking monorepo**
|
||||
|
||||
This directory contains the complete Docker-based development environment configuration for the Looking project. The DevContainer provides a consistent, isolated development environment with all necessary tools and dependencies pre-installed.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Table of Contents
|
||||
|
||||
- [Overview](#overview)
|
||||
- [What's Included](#whats-included)
|
||||
- [Architecture](#architecture)
|
||||
- [Services](#services)
|
||||
- [Port Mappings](#port-mappings)
|
||||
- [Volume Mounts](#volume-mounts)
|
||||
- [Installation Process](#installation-process)
|
||||
- [VS Code Integration](#vs-code-integration)
|
||||
- [Environment Variables](#environment-variables)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Overview
|
||||
|
||||
The DevContainer setup provides:
|
||||
|
||||
- **Consistent Environment**: Same Node 14, Python 2.7, and build tools across all developers
|
||||
- **Isolated Dependencies**: No conflicts with your local system packages
|
||||
- **Auto-Configuration**: Automatic dependency installation and VS Code extensions
|
||||
- **Multi-Service Stack**: Frontend, backend, database, and admin UI all running together
|
||||
- **Volume Optimization**: Fast performance with node_modules isolation
|
||||
|
||||
**Technologies**: Docker Compose, VS Code Remote - Containers, Node 14, MongoDB 4.4
|
||||
|
||||
---
|
||||
|
||||
## 📦 What's Included
|
||||
|
||||
### Base Container
|
||||
|
||||
**Image**: Custom Dockerfile based on `node:14-bullseye`
|
||||
|
||||
**System Packages**:
|
||||
|
||||
- Git (version control)
|
||||
- curl & wget (HTTP clients)
|
||||
- vim (text editor)
|
||||
- **Python 2.7** (required for legacy node-sass)
|
||||
- build-essential (C++ compiler for native modules)
|
||||
|
||||
**Global NPM Packages**:
|
||||
|
||||
- `@ionic/cli` - Ionic framework CLI
|
||||
- `@angular/cli` - Angular CLI (though project uses ionic-app-scripts)
|
||||
- `nodemon` - Auto-restart development server
|
||||
- `concurrently` - Run multiple commands in parallel
|
||||
- `eslint` - JavaScript linting
|
||||
- `prettier` - Code formatting
|
||||
|
||||
### VS Code Extensions (Auto-Installed)
|
||||
|
||||
| Extension | Purpose |
|
||||
| -------------------------------------- | --------------------------- |
|
||||
| **ms-vscode.vscode-json** | JSON language support |
|
||||
| **bradlc.vscode-tailwindcss** | Tailwind CSS IntelliSense |
|
||||
| **esbenp.prettier-vscode** | Code formatting |
|
||||
| **dbaeumer.vscode-eslint** | JavaScript linting |
|
||||
| **ms-vscode.vscode-typescript-next** | TypeScript support |
|
||||
| **formulahendry.auto-rename-tag** | HTML/XML tag rename |
|
||||
| **christian-kohler.path-intellisense** | Autocomplete file paths |
|
||||
| **mongodb.mongodb-vscode** | MongoDB database management |
|
||||
|
||||
### Editor Settings (Auto-Configured)
|
||||
|
||||
- **Format on Save**: Enabled
|
||||
- **Default Formatter**: Prettier
|
||||
- **ESLint Auto-Fix**: Runs on save
|
||||
- **Emmet**: Enabled for JavaScript (React/JSX)
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ DevContainer Stack │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ App Container (node:14-bullseye) │ │
|
||||
│ │ - VS Code Remote Server │ │
|
||||
│ │ - Node.js 14.x + npm │ │
|
||||
│ │ - Python 2.7 (for node-sass) │ │
|
||||
│ │ - Ionic/Angular Dev Server (port 8100) │ │
|
||||
│ │ - Express API Server (port 3069) │ │
|
||||
│ │ - Development tools (nodemon, eslint, prettier) │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
│ ↓↑ │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ MongoDB 4.4 (mongo:4.4) │ │
|
||||
│ │ - Database: urge │ │
|
||||
│ │ - Port: 27017 │ │
|
||||
│ │ - Credentials: admin/password │ │
|
||||
│ │ - Health Check: ping command every 30s │ │
|
||||
│ │ - Seed Data: /docker-entrypoint-initdb.d │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
│ ↓↑ │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ Mongo Express (mongo-express:latest) │ │
|
||||
│ │ - Web-based MongoDB admin UI │ │
|
||||
│ │ - Port: 8081 │ │
|
||||
│ │ - Login: admin/password │ │
|
||||
│ │ - Browse collections, run queries │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Network: dev-network (bridge driver) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↓ ↓ ↓
|
||||
Port 8100 Port 3069 Port 27017
|
||||
(Frontend Dev) (Backend API) (MongoDB)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Services
|
||||
|
||||
### 1. App Service (Development Container)
|
||||
|
||||
**File**: [docker-compose.yml](docker-compose.yml)
|
||||
|
||||
**Configuration**:
|
||||
|
||||
```yaml
|
||||
service: app
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: .devcontainer/Dockerfile
|
||||
command: sleep infinity
|
||||
volumes:
|
||||
- ../..:/workspaces:cached
|
||||
- /workspaces/PfosiLooking-monorepo/app/node_modules
|
||||
- /workspaces/PfosiLooking-monorepo/backend/node_modules
|
||||
depends_on:
|
||||
mongo:
|
||||
condition: service_healthy
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Main development container where you write code
|
||||
- Runs VS Code Remote Server
|
||||
- Hosts Ionic dev server (port 8100) and Express API (port 3069)
|
||||
- Waits for MongoDB health check before starting
|
||||
|
||||
**Command**: `sleep infinity` keeps container running indefinitely
|
||||
|
||||
**Node Modules Isolation**:
|
||||
|
||||
- Anonymous volumes for `app/node_modules` and `backend/node_modules`
|
||||
- Prevents host filesystem performance issues (especially on Mac/Windows)
|
||||
- Each workspace has its own isolated dependencies
|
||||
|
||||
---
|
||||
|
||||
### 2. MongoDB Service
|
||||
|
||||
**Configuration**:
|
||||
|
||||
```yaml
|
||||
service: mongo
|
||||
image: mongo:4.4
|
||||
environment:
|
||||
- MONGO_INITDB_DATABASE=urge
|
||||
- MONGO_INITDB_ROOT_USERNAME=admin
|
||||
- MONGO_INITDB_ROOT_PASSWORD=password
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongo_data:/data/db
|
||||
- ../backend/data:/docker-entrypoint-initdb.d:ro
|
||||
healthcheck:
|
||||
test: echo 'db.runCommand("ping").ok' | mongo localhost:27017/urge --quiet
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- NoSQL database for profiles, users, and messages
|
||||
- Persistent storage via `mongo_data` volume
|
||||
- Auto-loads seed data from `backend/data/` on first run
|
||||
|
||||
**Credentials**:
|
||||
|
||||
- **Admin User**: `admin`
|
||||
- **Admin Password**: `password`
|
||||
- **Database**: `urge`
|
||||
|
||||
**Health Check**:
|
||||
|
||||
- Runs every 30 seconds
|
||||
- Pings database to verify it's responsive
|
||||
- App container waits for healthy status before starting
|
||||
|
||||
**Seed Data**:
|
||||
|
||||
- Files in `backend/data/` are mounted to `/docker-entrypoint-initdb.d`
|
||||
- MongoDB automatically executes `.js` and `.sh` files in that directory
|
||||
- Used for initial database population (if scripts exist)
|
||||
|
||||
---
|
||||
|
||||
### 3. Mongo Express Service
|
||||
|
||||
**Configuration**:
|
||||
|
||||
```yaml
|
||||
service: mongo-express
|
||||
image: mongo-express:latest
|
||||
environment:
|
||||
- ME_CONFIG_MONGODB_SERVER=mongo
|
||||
- ME_CONFIG_MONGODB_PORT=27017
|
||||
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
|
||||
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
|
||||
- ME_CONFIG_BASICAUTH_USERNAME=admin
|
||||
- ME_CONFIG_BASICAUTH_PASSWORD=password
|
||||
ports:
|
||||
- "8081:8081"
|
||||
depends_on:
|
||||
- mongo
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Web-based database administration tool
|
||||
- View/edit collections without command-line mongo shell
|
||||
- Useful for debugging data issues
|
||||
|
||||
**Access**: http://localhost:8081
|
||||
|
||||
- **Login**: admin / password
|
||||
|
||||
**Features**:
|
||||
|
||||
- Browse collections visually
|
||||
- Run MongoDB queries
|
||||
- Create/edit/delete documents
|
||||
- View indexes and stats
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Port Mappings
|
||||
|
||||
| Port | Service | Purpose | Access |
|
||||
| --------- | ---------------- | -------------------- | ------------------------- |
|
||||
| **8100** | Ionic Dev Server | Frontend application | http://localhost:8100 |
|
||||
| **3069** | Express API | Backend REST API | http://localhost:3069 |
|
||||
| **27017** | MongoDB | Database server | mongodb://localhost:27017 |
|
||||
| **8081** | Mongo Express | Database admin UI | http://localhost:8081 |
|
||||
|
||||
### Port Forwarding Configuration
|
||||
|
||||
**File**: [devcontainer.json](devcontainer.json)
|
||||
|
||||
```json
|
||||
"forwardPorts": [8100, 3069, 27017, 8081],
|
||||
"portsAttributes": {
|
||||
"8100": {
|
||||
"label": "Frontend (Ionic)",
|
||||
"onAutoForward": "notify"
|
||||
},
|
||||
"3069": {
|
||||
"label": "Backend API",
|
||||
"onAutoForward": "notify"
|
||||
},
|
||||
"27017": {
|
||||
"label": "MongoDB",
|
||||
"onAutoForward": "silent"
|
||||
},
|
||||
"8081": {
|
||||
"label": "Mongo Express",
|
||||
"onAutoForward": "notify"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Notifications**:
|
||||
|
||||
- **notify**: VS Code shows notification when port is forwarded
|
||||
- **silent**: No notification (database port)
|
||||
|
||||
---
|
||||
|
||||
## 💾 Volume Mounts
|
||||
|
||||
### Workspace Volume
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- ../..:/workspaces:cached
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Mounts parent directory (entire monorepo) into container
|
||||
- `:cached` flag optimizes for read-heavy operations
|
||||
- Enables live code changes to reflect immediately
|
||||
|
||||
**Path Inside Container**: `/workspaces/PfosiLooking-monorepo/`
|
||||
|
||||
---
|
||||
|
||||
### Node Modules Isolation
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- /workspaces/PfosiLooking-monorepo/app/node_modules
|
||||
- /workspaces/PfosiLooking-monorepo/backend/node_modules
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Creates anonymous Docker volumes for node_modules directories
|
||||
- Isolates dependencies from host filesystem
|
||||
- **Solves performance issues** on Mac/Windows (Docker Desktop)
|
||||
|
||||
**Why?**:
|
||||
|
||||
- node_modules can have 100,000+ files
|
||||
- Host filesystem sync is slow for that many files
|
||||
- Volume isolation provides native container filesystem performance
|
||||
|
||||
---
|
||||
|
||||
### MongoDB Data Volume
|
||||
|
||||
```yaml
|
||||
volumes: mongo_data:/data/db
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Persistent storage for MongoDB data
|
||||
- Survives container restarts
|
||||
- Named volume managed by Docker
|
||||
|
||||
**Location**: Docker volume `mongo_data` (not visible in project directory)
|
||||
|
||||
---
|
||||
|
||||
### Seed Data Volume
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- ../backend/data:/docker-entrypoint-initdb.d:ro
|
||||
```
|
||||
|
||||
**Purpose**:
|
||||
|
||||
- Mounts seed data directory into MongoDB initialization location
|
||||
- `:ro` = read-only (MongoDB can't modify host files)
|
||||
- Scripts run automatically on first database creation
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Installation Process
|
||||
|
||||
### Automatic Setup (postCreateCommand)
|
||||
|
||||
**File**: [postCreateCommand.sh](postCreateCommand.sh)
|
||||
|
||||
The script runs automatically after the container is created:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e # Exit on any error
|
||||
|
||||
# 1. Install root dependencies
|
||||
npm install
|
||||
|
||||
# 2. Install backend dependencies
|
||||
cd backend && npm install
|
||||
|
||||
# 3. Install app dependencies with legacy support
|
||||
cd app && npm install --legacy-peer-deps
|
||||
```
|
||||
|
||||
**Execution Time**: 5-10 minutes (first time only)
|
||||
|
||||
**What Happens**:
|
||||
|
||||
1. **Root workspace** (`package.json`):
|
||||
- Installs `concurrently`, `npm-run-all`
|
||||
- Enables `npm run dev:all` script
|
||||
2. **Backend** (`backend/package.json`):
|
||||
- Installs Express, Mongoose, JWT, etc.
|
||||
- Standard npm install (no special flags)
|
||||
3. **Frontend** (`app/package.json`):
|
||||
- Installs Ionic 3, Angular 5, TypeScript 2.4
|
||||
- **Uses `--legacy-peer-deps`** flag
|
||||
- Required for old Ionic 3 packages with npm 7+
|
||||
- Falls back to `--force` if legacy deps fail
|
||||
|
||||
**Progress Visibility**:
|
||||
|
||||
- VS Code shows "Running postCreateCommand" notification
|
||||
- View detailed output: Terminal → "postCreateCommand" tab
|
||||
|
||||
---
|
||||
|
||||
### Manual Installation
|
||||
|
||||
If automatic setup fails:
|
||||
|
||||
```bash
|
||||
# 1. Open VS Code terminal inside DevContainer
|
||||
# Terminal → New Terminal (or Ctrl + `)
|
||||
|
||||
# 2. Install dependencies manually
|
||||
npm install
|
||||
cd backend && npm install && cd ..
|
||||
cd app && npm install --legacy-peer-deps && cd ..
|
||||
|
||||
# 3. Verify installation
|
||||
npm run dev:all
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 VS Code Integration
|
||||
|
||||
### DevContainer Configuration
|
||||
|
||||
**File**: [devcontainer.json](devcontainer.json)
|
||||
|
||||
**Key Settings**:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "PfosiLooking Full Stack",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "app",
|
||||
"workspaceFolder": "/workspaces/PfosiLooking-monorepo",
|
||||
"shutdownAction": "stopCompose"
|
||||
}
|
||||
```
|
||||
|
||||
**Shutdown Behavior**:
|
||||
|
||||
- `"stopCompose"` - Stops all services when closing VS Code
|
||||
- Preserves data in volumes (MongoDB data, node_modules)
|
||||
- Fast restart on next open (no rebuild needed)
|
||||
|
||||
---
|
||||
|
||||
### Features
|
||||
|
||||
**Auto-Installed**:
|
||||
|
||||
```json
|
||||
{
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": "14"
|
||||
},
|
||||
"ghcr.io/devcontainers/features/git:1": {},
|
||||
"ghcr.io/devcontainers/features/github-cli:1": {}
|
||||
}
|
||||
```
|
||||
|
||||
**Provides**:
|
||||
|
||||
- Node.js 14.x (managed version)
|
||||
- Git (latest stable)
|
||||
- GitHub CLI (`gh` command)
|
||||
|
||||
---
|
||||
|
||||
### Post-Start Message
|
||||
|
||||
```json
|
||||
"postStartCommand": "echo 'DevContainer ready! Run npm run dev:all to start development.'"
|
||||
```
|
||||
|
||||
Displays helpful message after container starts.
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Environment Variables
|
||||
|
||||
### Development Environment File
|
||||
|
||||
**File**: [dev.env](dev.env)
|
||||
|
||||
**Contains** (example values):
|
||||
|
||||
```bash
|
||||
NODE_ENV=development
|
||||
MONGODB_URI=mongodb://mongo:27017/urge
|
||||
REACT_APP_API_URL=http://localhost:3069
|
||||
PORT=3069
|
||||
IONIC_PORT=8100
|
||||
JWT_SECRET=dev-secret-change-in-production
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
|
||||
```yaml
|
||||
env_file:
|
||||
- dev.env
|
||||
```
|
||||
|
||||
⚠️ **Security Note**:
|
||||
|
||||
- `dev.env` may contain secrets
|
||||
- DO NOT commit real credentials
|
||||
- Use `dev.env.example` for templates
|
||||
- Add `dev.env` to `.gitignore`
|
||||
|
||||
---
|
||||
|
||||
### Inline Environment Variables
|
||||
|
||||
**In docker-compose.yml**:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- MONGODB_URI=mongodb://mongo:27017/urge
|
||||
- PORT=3069
|
||||
```
|
||||
|
||||
These override values from `dev.env` if both are present.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Troubleshooting
|
||||
|
||||
### Container Won't Start
|
||||
|
||||
**Problem**: DevContainer fails to start or build
|
||||
|
||||
**Solutions**:
|
||||
|
||||
1. **Rebuild without cache**:
|
||||
|
||||
```
|
||||
F1 → "Dev Containers: Rebuild Container Without Cache"
|
||||
```
|
||||
|
||||
2. **Check Docker Desktop is running**:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
|
||||
3. **Free up disk space**:
|
||||
|
||||
```bash
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
4. **View build logs**:
|
||||
```
|
||||
F1 → "Dev Containers: Show Container Log"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Python 2.7 Errors
|
||||
|
||||
**Problem**: `node-sass` or `node-gyp` errors about Python
|
||||
|
||||
**Check Python symlinks**:
|
||||
|
||||
```bash
|
||||
# Inside container
|
||||
which python
|
||||
python --version # Should show Python 2.7.x
|
||||
```
|
||||
|
||||
**Dockerfile installs**:
|
||||
|
||||
```dockerfile
|
||||
RUN apt-get install -y python2.7 python2.7-dev \
|
||||
&& ln -sf /usr/bin/python2.7 /usr/bin/python
|
||||
```
|
||||
|
||||
**Why?**: node-sass (used by Ionic 3) requires Python 2.7 to build native modules.
|
||||
|
||||
---
|
||||
|
||||
### MongoDB Connection Failed
|
||||
|
||||
**Problem**: Backend can't connect to MongoDB
|
||||
|
||||
**1. Check MongoDB is healthy**:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
# Look for "healthy" status on mongo container
|
||||
```
|
||||
|
||||
**2. Test connection manually**:
|
||||
|
||||
```bash
|
||||
docker exec -it <mongo-container-id> mongo --eval "db.runCommand('ping')"
|
||||
```
|
||||
|
||||
**3. Verify connection string**:
|
||||
|
||||
```bash
|
||||
echo $MONGODB_URI
|
||||
# Should be: mongodb://mongo:27017/urge
|
||||
```
|
||||
|
||||
**4. Wait for health check**:
|
||||
|
||||
- Health check runs every 30s
|
||||
- Container may need 40s start period
|
||||
- App service waits for `service_healthy` condition
|
||||
|
||||
---
|
||||
|
||||
### Port Already in Use
|
||||
|
||||
**Problem**: Port 8100, 3069, or 27017 already in use on host
|
||||
|
||||
**Find conflicting process**:
|
||||
|
||||
```bash
|
||||
# Mac/Linux
|
||||
lsof -i :8100
|
||||
lsof -i :3069
|
||||
lsof -i :27017
|
||||
|
||||
# Kill process
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
**Or change ports** in [docker-compose.yml](docker-compose.yml):
|
||||
|
||||
```yaml
|
||||
ports:
|
||||
- "8101:8100" # Changed from 8100
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Node Modules Issues
|
||||
|
||||
**Problem**: Module not found, peer dependency warnings, or version conflicts
|
||||
|
||||
**Solution 1 - Reinstall**:
|
||||
|
||||
```bash
|
||||
# Remove all node_modules
|
||||
rm -rf node_modules app/node_modules backend/node_modules
|
||||
|
||||
# Reinstall
|
||||
npm run install:all
|
||||
```
|
||||
|
||||
**Solution 2 - Clear volume**:
|
||||
|
||||
```bash
|
||||
# Exit container, then from host
|
||||
docker-compose -f .devcontainer/docker-compose.yml down -v
|
||||
# This deletes ALL volumes including node_modules and MongoDB data
|
||||
|
||||
# Rebuild container
|
||||
F1 → "Dev Containers: Rebuild Container"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Slow Performance
|
||||
|
||||
**Problem**: File watching or compilation is slow
|
||||
|
||||
**Causes**:
|
||||
|
||||
- Docker Desktop on Mac/Windows has filesystem sync overhead
|
||||
- Large node_modules directories
|
||||
|
||||
**Solutions**:
|
||||
|
||||
1. **Verify node_modules isolation**:
|
||||
|
||||
```yaml
|
||||
# These volumes should exist in docker-compose.yml
|
||||
- /workspaces/PfosiLooking-monorepo/app/node_modules
|
||||
- /workspaces/PfosiLooking-monorepo/backend/node_modules
|
||||
```
|
||||
|
||||
2. **Increase Docker resources**:
|
||||
|
||||
- Docker Desktop → Settings → Resources
|
||||
- Increase CPU: 4+ cores
|
||||
- Increase Memory: 8+ GB
|
||||
|
||||
3. **Use `:cached` mount flag** (already configured):
|
||||
```yaml
|
||||
- ../..:/workspaces:cached
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Database Permissions
|
||||
|
||||
**Problem**: Can't write to MongoDB or access Mongo Express
|
||||
|
||||
**Check credentials**:
|
||||
|
||||
```yaml
|
||||
# MongoDB
|
||||
MONGO_INITDB_ROOT_USERNAME=admin
|
||||
MONGO_INITDB_ROOT_PASSWORD=password
|
||||
|
||||
# Mongo Express
|
||||
ME_CONFIG_MONGODB_ADMINUSERNAME=admin
|
||||
ME_CONFIG_MONGODB_ADMINPASSWORD=password
|
||||
ME_CONFIG_BASICAUTH_USERNAME=admin
|
||||
ME_CONFIG_BASICAUTH_PASSWORD=password
|
||||
```
|
||||
|
||||
**Access Mongo Express**:
|
||||
|
||||
- URL: http://localhost:8081
|
||||
- Login: admin / password (HTTP Basic Auth)
|
||||
|
||||
---
|
||||
|
||||
### VS Code Extensions Not Installing
|
||||
|
||||
**Problem**: Extensions listed in devcontainer.json don't install
|
||||
|
||||
**Manual install**:
|
||||
|
||||
```
|
||||
F1 → "Extensions: Install Extensions"
|
||||
Search for extension ID (e.g., "esbenp.prettier-vscode")
|
||||
```
|
||||
|
||||
**Rebuild to retry auto-install**:
|
||||
|
||||
```
|
||||
F1 → "Dev Containers: Rebuild Container"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Related Documentation
|
||||
|
||||
- **[Root README](../README.md)** - Project overview and quick start
|
||||
- **[Backend README](../backend/README.md)** - API server setup
|
||||
- **[Frontend README](../app/README.md)** - Ionic app setup
|
||||
- **[Deployment Guide](../DEPLOYMENT.md)** - Production deployment
|
||||
|
||||
---
|
||||
|
||||
**Need Help?** Check the [root troubleshooting section](../README.md#troubleshooting) for additional solutions.
|
||||
Reference in New Issue
Block a user