128 lines
3.3 KiB
Markdown
128 lines
3.3 KiB
Markdown
# FFR (Feed to Fediverse Router)
|
|
|
|
A Laravel-based application for routing RSS/Atom feeds to Fediverse platforms like Lemmy. Built with Laravel, Livewire, and FrankenPHP for a modern, single-container deployment.
|
|
|
|
## Features
|
|
|
|
- **Feed aggregation** - Fetch articles from multiple RSS/Atom feeds
|
|
- **Fediverse publishing** - Automatically post to Lemmy communities
|
|
- **Route configuration** - Map feeds to specific channels with keywords
|
|
- **Approval workflow** - Optional manual approval before publishing
|
|
- **Queue processing** - Background job handling with Laravel Horizon
|
|
- **Single container deployment** - Simplified hosting with FrankenPHP
|
|
|
|
## Self-hosting
|
|
|
|
The production image is available at `codeberg.org/lvl0/ffr:latest`.
|
|
|
|
### docker-compose.yml
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: codeberg.org/lvl0/ffr:latest
|
|
container_name: ffr_app
|
|
restart: always
|
|
ports:
|
|
- "8000:8000"
|
|
environment:
|
|
APP_KEY: "${APP_KEY}"
|
|
APP_URL: "${APP_URL}"
|
|
DB_DATABASE: "${DB_DATABASE}"
|
|
DB_USERNAME: "${DB_USERNAME}"
|
|
DB_PASSWORD: "${DB_PASSWORD}"
|
|
REDIS_HOST: redis
|
|
REDIS_PORT: 6379
|
|
volumes:
|
|
- app_storage:/app/storage
|
|
depends_on:
|
|
- db
|
|
- redis
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/up"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
|
|
db:
|
|
image: mariadb:11
|
|
container_name: ffr_db
|
|
restart: always
|
|
environment:
|
|
MYSQL_DATABASE: "${DB_DATABASE}"
|
|
MYSQL_USER: "${DB_USERNAME}"
|
|
MYSQL_PASSWORD: "${DB_PASSWORD}"
|
|
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: ffr_redis
|
|
restart: always
|
|
volumes:
|
|
- redis_data:/data
|
|
|
|
volumes:
|
|
db_data:
|
|
redis_data:
|
|
app_storage:
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Required | Description |
|
|
|----------|----------|-------------|
|
|
| `APP_KEY` | Yes | Encryption key. Generate with: `echo "base64:$(openssl rand -base64 32)"` |
|
|
| `APP_URL` | Yes | Your domain (e.g., `https://ffr.example.com`) |
|
|
| `DB_DATABASE` | Yes | Database name |
|
|
| `DB_USERNAME` | Yes | Database user |
|
|
| `DB_PASSWORD` | Yes | Database password |
|
|
| `DB_ROOT_PASSWORD` | Yes | MariaDB root password |
|
|
|
|
## Development
|
|
|
|
### NixOS / Nix
|
|
|
|
```bash
|
|
git clone https://codeberg.org/lvl0/ffr.git
|
|
cd ffr
|
|
nix-shell
|
|
```
|
|
|
|
The shell will display available commands and optionally start the containers for you.
|
|
|
|
#### Available Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `dev-up` | Start development environment |
|
|
| `dev-down` | Stop development environment |
|
|
| `dev-restart` | Restart containers |
|
|
| `dev-logs` | Follow app logs |
|
|
| `dev-logs-db` | Follow database logs |
|
|
| `dev-shell` | Enter app container |
|
|
| `dev-artisan <cmd>` | Run artisan commands |
|
|
| `prod-build [tag]` | Build and push prod image (default: latest) |
|
|
|
|
#### Services
|
|
|
|
| Service | URL |
|
|
|---------|-----|
|
|
| App | http://localhost:8000 |
|
|
| Vite | http://localhost:5173 |
|
|
| MariaDB | localhost:3307 |
|
|
| Redis | localhost:6380 |
|
|
|
|
### Other Platforms
|
|
|
|
Contributions welcome for development setup instructions on other platforms.
|
|
|
|
## License
|
|
|
|
This project is open-source software licensed under the [AGPL-3.0 license](LICENSE).
|
|
|
|
## Support
|
|
|
|
For issues and questions, please use [Codeberg Issues](https://codeberg.org/lvl0/ffr/issues).
|