- Python 65.2%
- Svelte 15.2%
- HTML 9.7%
- JavaScript 3.5%
- TypeScript 2.3%
- Other 4.1%
| .vscode | ||
| bin | ||
| caddy | ||
| data | ||
| database-lib | ||
| docker-compose | ||
| freedium-library | ||
| medium-parser | ||
| new-web | ||
| plausible/clickhouse | ||
| proxy-balancer | ||
| rl_string_helper | ||
| scripts | ||
| sitemap-generator | ||
| test_lab | ||
| tests | ||
| web | ||
| wgcf | ||
| .dockerignore | ||
| .env_template | ||
| .gitignore | ||
| backup_db.sh | ||
| Dockerfile | ||
| mypy.ini | ||
| README.md | ||
Freedium: Your paywall breakthrough for Medium!
Stack:
- Backend:
- language: Python 3.9+
- framework: Unicorn, FastAPI
- Frontend:
- framework: Tailwinds CSS v3, Jinja2
- monitoring: Sentry
- Database:
- PostgreSQL, Dragonfly (Redis and Memcached compatible key-value database)
- Utils:
- Caddy, Docker, Docker Compose, Cloudflare WARP proxy (wgcf)
Project configuration:
There is three (3) docker-compose profiles:
min- without 2 Cluster of Cloudflare WARP proxy, HAProxy proxy balancer, Plausible, Grafana.local- based onmin, but withfreedium.localexposed hostname, both 80 and 443 ports are exposed, with self-signed TLS certificate.prod- with all services for production.
Requirements:
- Docker, Docker Compose, last version is preferred.
- Linux, preferably rolling release. We can't guarantee that Freedium instance will work on other OS. Tested on Ubuntu 22.04 and Fedora 39.
- git
- Preferably, fresh and clean brain.
Local run:
To configure your Freedium instance, follow these steps:
-
Clone the repository:
git clone https://codeberg.org/Freedium-cfd/web/ ./freedium-web --depth 1 cd ./freedium-web -
Create and configure the environment file:
cp .env_template .envOpen the
.envfile and adjust the values as needed for your setup. -
Set up the Docker network:
sudo docker network create caddy_net -
(Optional) Change your hosts file:
sudo nano /etc/hosts # or vim /etc/hosts # and when you are closed vim, type `:w !sudo tee %` to save file without executing vim in root modeAdd the following line:
127.0.0.1 freedium.local -
Start the Freedium services (
minprofile):sudo docker compose --profile local -f ./docker-compose/docker-compose.yml upStopping the services:
sudo docker compose --profile local -f ./docker-compose/docker-compose.yml down
And now you can access local instance of Freedium by opening browser and type https://freedium.local or http://localhost:6752 if you ignored 4th step. There is would be a warning about insecure connection, because we use self-signed TLS certificate. Ignore it.
Production run:
All production services are running on prod profile. If you use Dockerized reverse proxy, you can specify network caddy_freedium_net with external: true option in networks section of your reverse proxy container. Specify caddy_freedium hostname with port 6752 (or 6753 for Plausible) in your reverse proxy configuration.
As alternative, you can directly change docker-compose configurations to use your reverse proxy. See docker-compose and caddy folders for more details.
Roadmap
- Speed up parser logic
- Parse articles directly to Markdown
- Add more services than just a Medium
- Rewrite frontend to Svelte
- Integrate Grafana/Prometheus/Plausible to monitor our services
- Translate posts to different languages using
translatepylibrary - AI-powered summary of posts