nexy7574
be73449353
* migrated to using PeeWee ORM for increased reliability * now allow rendering images as actual previews (videos next) * Improved documentation
63 lines
5 KiB
Markdown
63 lines
5 KiB
Markdown
# Drop In URL previews server
|
|
|
|
*aka DIP / Drop in previews*
|
|
|
|
A simple python server that handles /_matrix/media/*/preview_url requests, for servers like Dendrite.
|
|
|
|
You may also want to replace your homeserver's URL preview generator with this one (in case this offers more features).
|
|
|
|
## Features
|
|
|
|
DIP is complete with the following features:
|
|
|
|
* **Full** [`OG/OpenGraph`](https://ogp.me/) tag support
|
|
* Partial [`Twitter`](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup) card support
|
|
* Supports rendering previews for image files
|
|
* Proxying requests through a HTTP/HTTPS/SOCKS4/SOCKS5 proxy
|
|
* Custom user agent for requests
|
|
* Caching previews to prevent repeated lookups
|
|
* Built-in media duplication prevention
|
|
|
|
## Installation
|
|
Just use docker.
|
|
|
|
Or you can run it yourself, but that's your choice.
|
|
```bash
|
|
pip install -r requirements.txt
|
|
PREVIEW_HOMESERVER=https://example.com python3 server.py
|
|
```
|
|
|
|
### Example docker-compose.yml
|
|
```yaml
|
|
version: "3"
|
|
services:
|
|
url_previews:
|
|
environment:
|
|
- "PREVIEW_HOMESERVER=https://matrix.nexy7574.co.uk"
|
|
- "FORWARDED_ALLOW_IPS=*"
|
|
ports:
|
|
- "2226:2226/tcp"
|
|
restart: "unless-stopped"
|
|
container_name: "dendrite-url-previews"
|
|
volumes:
|
|
- url_previews:/app/data/
|
|
build: . # there's no pre-built image
|
|
|
|
volumes:
|
|
url_previews:
|
|
```
|
|
|
|
## Configuration
|
|
|
|
| Environment Variable | Description | Example | Default |
|
|
|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------------------------------|
|
|
| `PREVIEW_HOMESERVER` | The homeserver to use for the previews. | `https://matrix.nexy7574.co.uk` | The host name of the request URL. |
|
|
| `PREVIEW_HOST` | The host IP/Name to listen to. | `192.168.0.2` | `0.0.0.0` |
|
|
| `PREVIEW_PORT` | The port to listen to. | `8080` | `2226` |
|
|
| `PREVIEW_PROXY` | A HTTP/HTTPS/SOCKS4/SOCKS5 proxy to use for all network requests. | `http://localhost:1080` | null |
|
|
| `PREVIEW_USER_AGENT` | The user agent to use for all network requests. Must be one of `google`, `bing`, `duckduckgo`, `firefox`, `chrome`, `twitter`, `facebook`, `honest` (uses a unique user agent) | `firefox` | `google` |
|
|
| `PREVIEW_MAX_MEDIA_MB` | The maximum size of media to proxy in megabytes. Media larger than this downloaded from sites will not be re-uploaded to the homeserver's media repo, and as such cannot be used in the preview response. | `10` | `50` |
|
|
| `PREVIEW_DATABASE_URL` | The sqlite://, postgres://, or mysql:// URL to use for the database. | `postgres://user:pass@localhost:5432/dip` | `sqlite:///app/data/db.sqltie3` |
|
|
| `FORWARDED_ALLOW_IPS` | The list of reverse proxy IPs to trust. See [Uvicorn docs](https://www.uvicorn.org/settings/#http) | * | `127.0.0.1` |
|
|
| `LOG_LEVEL` | The log level to use. One of `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. | `INFO` | `INFO` |
|
|
| `LOG_DEBUG_TIDY` | When `LOG_LEVEL` is `DEBUG`, silences some really noisy loggers (like HTTP request loggers) to help you debug this program, not a dependency). | `true` | `false` |
|