ghost-mcp/README-DOCKER.md

161 lines
No EOL
4.1 KiB
Markdown

# Ghost MCP - Docker Development Setup
This guide helps you set up a Ghost instance for Ghost MCP development and API investigation.
## Quick Start
1. **Copy environment file**:
```bash
cp .env.example .env
```
2. **Start Ghost and MySQL**:
```bash
docker compose up -d
```
3. **Access Ghost**:
- Ghost Admin: http://localhost:2368/ghost
- Ghost Site: http://localhost:2368
- phpMyAdmin (optional): http://localhost:8080
## Services
### Ghost (Main Service)
- **Image**: `ghost:5-alpine`
- **Port**: 2368
- **URL**: http://localhost:2368
- **Admin**: http://localhost:2368/ghost
### MySQL Database
- **Image**: `mysql:8.0`
- **Database**: `ghost_dev` (configurable via .env)
- **User**: `ghost` (configurable via .env)
### phpMyAdmin (Optional Debug Tool)
- **Image**: `phpmyadmin/phpmyadmin:latest`
- **Port**: 8080
- **Access**: http://localhost:8080
To start with phpMyAdmin for database debugging:
```bash
docker compose --profile debug up -d
```
## Initial Setup
### 1. First-time Ghost Setup
1. Start the services: `docker compose up -d`
2. Wait for Ghost to initialize (check logs: `docker compose logs ghost`)
3. Visit http://localhost:2368/ghost
4. Create your admin account
5. Complete the Ghost setup wizard
### 2. Obtain API Keys
1. In Ghost Admin, go to Settings → Integrations
2. Click "Add custom integration"
3. Give it a name (e.g., "MCP Development")
4. Copy both API keys:
- **Content API Key**: For read-only operations
- **Admin API Key**: For read/write operations
### 3. Update Environment (Optional)
Add the API keys to your `.env` file:
```bash
GHOST_CONTENT_API_KEY=your_content_api_key_here
GHOST_ADMIN_API_KEY=your_admin_api_key_here
```
## API Testing
### Content API (Read-only)
Test the Content API with curl:
```bash
# Get all posts
curl "http://localhost:2368/ghost/api/content/posts/?key=YOUR_CONTENT_API_KEY"
# Get site settings
curl "http://localhost:2368/ghost/api/content/settings/?key=YOUR_CONTENT_API_KEY"
```
### Admin API (Read/Write)
The Admin API requires JWT authentication. You'll need to generate a JWT token using your Admin API key.
## Management Commands
### Start services
```bash
docker compose up -d
```
### Stop services
```bash
docker compose down
```
### View logs
```bash
# All services
docker compose logs
# Ghost only
docker compose logs ghost
# Follow logs
docker compose logs -f ghost
```
### Reset everything (⚠️ Destroys all data)
```bash
docker compose down -v
docker volume rm ghost_mcp_content ghost_mcp_mysql
```
### Backup data
```bash
# Create backup of Ghost content
docker run --rm -v ghost_mcp_content:/data -v $(pwd):/backup alpine tar czf /backup/ghost-content-backup.tar.gz -C /data .
# Create backup of MySQL data
docker run --rm -v ghost_mcp_mysql:/data -v $(pwd):/backup alpine tar czf /backup/mysql-backup.tar.gz -C /data .
```
## Troubleshooting
### Ghost won't start
1. Check if MySQL is healthy: `docker compose ps`
2. Check Ghost logs: `docker compose logs ghost`
3. Verify environment variables in `.env`
### Can't access Ghost admin
1. Ensure Ghost is running: `docker compose ps`
2. Check if port 2368 is available: `netstat -an | grep 2368`
3. Try accessing directly: http://localhost:2368/ghost
### Database connection issues
1. Check MySQL health: `docker compose logs ghost-db`
2. Verify database credentials in `.env`
3. Ensure database has started before Ghost
### API requests failing
1. Verify API keys are correct
2. Check Content API: should work with query parameter
3. Check Admin API: requires proper JWT token generation
## Development Notes
- Ghost data persists in named Docker volumes
- Database is accessible via phpMyAdmin at localhost:8080
- All Ghost content (themes, images, etc.) is stored in the `ghost_content` volume
- MySQL data is stored in the `ghost_mysql` volume
- Environment variables are loaded from `.env` file
## Next Steps
Once Ghost is running, you can:
1. Create test content (posts, pages, tags)
2. Test API endpoints
3. Begin MCP server development
4. Investigate Ghost API authentication flows
For MCP development, see the main project documentation.