146 lines
4.4 KiB
Markdown
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!
|