150 lines
3.3 KiB
Markdown
150 lines
3.3 KiB
Markdown
# ai.log Deployment Guide
|
|
|
|
## 🌐 Cloudflare Tunnel Setup
|
|
|
|
ATProto OAuth requires HTTPS for proper CORS handling. Use Cloudflare Tunnel for secure deployment.
|
|
|
|
### Prerequisites
|
|
|
|
1. **Install cloudflared**:
|
|
```bash
|
|
brew install cloudflared
|
|
```
|
|
|
|
2. **Login and create tunnel** (if not already done):
|
|
```bash
|
|
cloudflared tunnel login
|
|
cloudflared tunnel create ailog
|
|
```
|
|
|
|
3. **Configure DNS**:
|
|
- Add a CNAME record: `log.syui.ai` → `[tunnel-id].cfargotunnel.com`
|
|
|
|
### Configuration Files
|
|
|
|
#### `cloudflared-config.yml`
|
|
```yaml
|
|
tunnel: a6813327-f880-485d-a9d1-376e6e3df8ad
|
|
credentials-file: /Users/syui/.cloudflared/a6813327-f880-485d-a9d1-376e6e3df8ad.json
|
|
|
|
ingress:
|
|
- hostname: log.syui.ai
|
|
service: http://localhost:8080
|
|
originRequest:
|
|
noHappyEyeballs: true
|
|
- service: http_status:404
|
|
```
|
|
|
|
#### Production Client Metadata
|
|
`static/client-metadata-prod.json`:
|
|
```json
|
|
{
|
|
"client_id": "https://log.syui.ai/client-metadata.json",
|
|
"client_name": "ai.log Blog Comment System",
|
|
"client_uri": "https://log.syui.ai",
|
|
"redirect_uris": ["https://log.syui.ai/"],
|
|
"grant_types": ["authorization_code"],
|
|
"response_types": ["code"],
|
|
"token_endpoint_auth_method": "none",
|
|
"application_type": "web"
|
|
}
|
|
```
|
|
|
|
### Deployment Commands
|
|
|
|
#### Quick Start
|
|
```bash
|
|
# All-in-one deployment
|
|
./scripts/tunnel.sh
|
|
```
|
|
|
|
#### Manual Steps
|
|
```bash
|
|
# 1. Build for production
|
|
PRODUCTION=true cargo run -- build
|
|
|
|
# 2. Start local server
|
|
cargo run -- serve --port 8080 &
|
|
|
|
# 3. Start tunnel
|
|
cloudflared tunnel --config cloudflared-config.yml run
|
|
```
|
|
|
|
### Environment Detection
|
|
|
|
The system automatically detects environment:
|
|
|
|
- **Development** (`localhost:8080`): Uses local client-metadata.json
|
|
- **Production** (`log.syui.ai`): Uses HTTPS client-metadata.json
|
|
|
|
### CORS Resolution
|
|
|
|
✅ **With Cloudflare Tunnel**:
|
|
- HTTPS domain: `https://log.syui.ai`
|
|
- Valid SSL certificate
|
|
- Proper CORS headers
|
|
- ATProto OAuth works correctly
|
|
|
|
❌ **With localhost**:
|
|
- HTTP only: `http://localhost:8080`
|
|
- CORS restrictions
|
|
- ATProto OAuth may fail
|
|
|
|
### Troubleshooting
|
|
|
|
#### ATProto OAuth Errors
|
|
```javascript
|
|
// Check client metadata URL in browser console
|
|
console.log('Environment:', window.location.hostname);
|
|
console.log('Client ID:', clientId);
|
|
```
|
|
|
|
#### Tunnel Connection Issues
|
|
```bash
|
|
# Check tunnel status
|
|
cloudflared tunnel info ailog
|
|
|
|
# Test local server
|
|
curl http://localhost:8080/client-metadata.json
|
|
```
|
|
|
|
#### DNS Propagation
|
|
```bash
|
|
# Check DNS resolution
|
|
dig log.syui.ai
|
|
nslookup log.syui.ai
|
|
```
|
|
|
|
### Security Notes
|
|
|
|
- **Client metadata** is publicly accessible (required by ATProto)
|
|
- **Credentials file** contains tunnel secrets (keep secure)
|
|
- **HTTPS only** for production OAuth
|
|
- **Domain validation** by ATProto servers
|
|
|
|
### Integration with ai.ai Ecosystem
|
|
|
|
This deployment enables:
|
|
- **ai.log**: Comment system with ATProto authentication
|
|
- **ai.card**: Shared OAuth widget
|
|
- **ai.gpt**: Memory synchronization via ATProto
|
|
- **ai.verse**: Future 3D world integration
|
|
|
|
### Monitoring
|
|
|
|
```bash
|
|
# Monitor tunnel logs
|
|
cloudflared tunnel --config cloudflared-config.yml run --loglevel debug
|
|
|
|
# Monitor blog server
|
|
tail -f /path/to/blog/logs
|
|
|
|
# Check ATProto connectivity
|
|
curl -I https://log.syui.ai/client-metadata.json
|
|
```
|
|
|
|
---
|
|
|
|
**🔗 Live URL**: https://log.syui.ai
|
|
**📊 Status**: Production Ready
|
|
**🌐 ATProto**: OAuth Enabled |