Files
my_openplace/DOCKER_PLUGINS_SETUP.md
T
2025-10-05 00:58:08 -07:00

146 lines
4.4 KiB
Markdown

# Docker Plugin Setup - Summary of Changes
This document summarizes the changes made to ensure the plugin system works correctly in Docker.
## Changes Made
### 1. Backend Route (`src/routes/plugins.ts`)
**Problem**: The route was hardcoded to use `frontend-backup` directory, which doesn't exist in Docker when `USE_FRONTEND_BACKUP=false`.
**Solution**: Updated to respect the `USE_FRONTEND_BACKUP` environment variable:
```typescript
// Determine which frontend directory to use (matches index.ts logic)
const frontendDir = process.env['USE_FRONTEND_BACKUP'] === 'true' ? 'frontend-backup' : 'frontend';
```
### 2. Dockerfile
**Problem**: The plugins directory might not be created when building from source.
**Solution**: Updated the build step to ensure the plugins directory exists:
```dockerfile
RUN if [ "$USE_FRONTEND_BACKUP" = "true" ]; then \
rm -rf /app/frontend && mkdir -p /app/frontend && cp -R /app/frontend-backup/. /app/frontend/; \
else \
cd frontend-src && npm install && npm run build && \
mkdir -p /app/frontend/plugins && \
echo "Plugins directory created for frontend build"; \
fi
```
### 3. Git Configuration
Created `.gitignore` in `frontend-backup/plugins/` to:
- Keep the example plugin in version control
- Prevent user plugins from being committed
- Keep the README documentation
## Testing in Docker
### Option 1: Using Frontend Backup (Recommended for Development)
```bash
# Build with frontend-backup (includes SDK and example plugin)
docker build --build-arg USE_FRONTEND_BACKUP=true -t furryplace .
# Run
docker run -p 3000:3000 -e USE_FRONTEND_BACKUP=true furryplace
```
### Option 2: Building from Source
```bash
# Build from source (requires frontend-src directory)
docker build --build-arg USE_FRONTEND_BACKUP=false -t furryplace .
# Run
docker run -p 3000:3000 -e USE_FRONTEND_BACKUP=false furryplace
```
### Option 3: Runtime Plugin Mounting
```bash
# Mount plugins directory at runtime
docker run -d \
-p 3000:3000 \
-v ./my-plugins:/app/frontend/plugins \
-e USE_FRONTEND_BACKUP=false \
furryplace
```
## Verification Steps
1. **Build the image**: `docker build --build-arg USE_FRONTEND_BACKUP=true -t furryplace .`
2. **Run the container**: `docker run -p 3000:3000 -e USE_FRONTEND_BACKUP=true furryplace`
3. **Open browser**: Navigate to `http://localhost:3000`
4. **Check console**: Should see:
```
[FurryPlace SDK] Loaded v1.0.0
[FurryPlace SDK] Auto-discovering plugins...
[FurryPlace SDK] Found 1 plugin(s): ['example-button.js']
[FurryPlace SDK] Loaded plugin: example-button.js
```
5. **Test API**: `curl http://localhost:3000/api/plugins`
```json
{
"plugins": [
{
"name": "example-button.js",
"path": "/plugins/example-button.js",
"size": 12345,
"modified": "2025-10-04T..."
}
]
}
```
## File Structure in Container
When `USE_FRONTEND_BACKUP=true`:
```
/app/
├── dist/ # Compiled backend
├── frontend/ # Frontend files (copied from frontend-backup)
│ ├── furryplace-sdk.js # SDK file
│ ├── plugins/ # Plugins directory
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── example-button.js
│ ├── index.html # (with SDK script tag injected)
│ └── ...
└── node_modules/
```
## Environment Variables
| Variable | Value | Effect |
|----------|-------|--------|
| `USE_FRONTEND_BACKUP` | `true` | Uses `frontend-backup/` directory (includes SDK) |
| `USE_FRONTEND_BACKUP` | `false` | Uses `frontend/` directory (built from source) |
## Troubleshooting
**Plugins not loading?**
- Check that the plugins directory exists: `docker exec <container> ls -la /app/frontend/plugins`
- Check API response: `curl http://localhost:3000/api/plugins`
- Check container logs: `docker logs <container>`
**SDK not found?**
- Verify SDK was injected: `docker exec <container> grep furryplace-sdk.js /app/frontend/index.html`
- Check if file exists: `docker exec <container> ls -la /app/frontend/furryplace-sdk.js`
**Wrong frontend directory?**
- Verify environment variable: `docker exec <container> env | grep USE_FRONTEND_BACKUP`
- Check which directory is being used in logs
## Next Steps
After verifying the setup works:
1. Add your custom plugins to `frontend-backup/plugins/`
2. Rebuild the Docker image
3. Deploy to production
4. Users will see the new buttons automatically!