wiki: add alternatives section with SearXNG, FreshRSS, and Gitea
Add three new articles to 03-opensource/alternatives/: - SearXNG: private metasearch, Open WebUI integration - FreshRSS: self-hosted RSS, mobile app sync, OPML portability - Gitea: lightweight GitHub alternative, webhook pipeline Article count: 33 → 36. Open source section: 6 → 9. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
89
03-opensource/alternatives/freshrss.md
Normal file
89
03-opensource/alternatives/freshrss.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# FreshRSS — Self-Hosted RSS Reader
|
||||
|
||||
## Problem
|
||||
|
||||
RSS is the best way to follow websites, blogs, and podcasts without algorithmic feeds, engagement bait, or data harvesting. But hosted RSS services like Feedly gate features behind subscriptions and still have access to your reading habits. Google killed Google Reader in 2013 and has been trying to kill RSS ever since.
|
||||
|
||||
## Solution
|
||||
|
||||
[FreshRSS](https://freshrss.org) is a self-hosted RSS aggregator. It fetches and stores your feeds on your own server, presents a clean reading interface, and syncs with mobile apps via standard APIs (Fever, Google Reader, Nextcloud News). No subscription, no tracking, no feed limits.
|
||||
|
||||
---
|
||||
|
||||
## Deployment (Docker)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
freshrss:
|
||||
image: freshrss/freshrss:latest
|
||||
container_name: freshrss
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8086:80"
|
||||
volumes:
|
||||
- ./freshrss/data:/var/www/FreshRSS/data
|
||||
- ./freshrss/extensions:/var/www/FreshRSS/extensions
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
- CRON_MIN=*/15 # fetch feeds every 15 minutes
|
||||
```
|
||||
|
||||
### Caddy reverse proxy
|
||||
|
||||
```
|
||||
rss.yourdomain.com {
|
||||
reverse_proxy localhost:8086
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Initial Setup
|
||||
|
||||
1. Browse to your FreshRSS URL and run through the setup wizard
|
||||
2. Create an admin account
|
||||
3. Go to **Settings → Authentication** — enable API access if you want mobile app sync
|
||||
4. Start adding feeds under **Subscriptions → Add a feed**
|
||||
|
||||
---
|
||||
|
||||
## Mobile App Sync
|
||||
|
||||
FreshRSS exposes a Google Reader-compatible API that most RSS apps support:
|
||||
|
||||
| App | Platform | Protocol |
|
||||
|---|---|---|
|
||||
| NetNewsWire | iOS / macOS | Fever or GReader |
|
||||
| Reeder | iOS / macOS | GReader |
|
||||
| ReadYou | Android | GReader |
|
||||
| FeedMe | Android | GReader / Fever |
|
||||
|
||||
**API URL format:** `https://rss.yourdomain.com/api/greader.php`
|
||||
|
||||
Enable the API in FreshRSS: **Settings → Authentication → Allow API access**
|
||||
|
||||
---
|
||||
|
||||
## Feed Auto-Refresh
|
||||
|
||||
The `CRON_MIN=*/15` environment variable runs feed fetching every 15 minutes inside the container. For more control, add a host-level cron job:
|
||||
|
||||
```bash
|
||||
# Fetch all feeds every 10 minutes
|
||||
*/10 * * * * docker exec freshrss php /var/www/FreshRSS/app/actualize_script.php
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Why RSS Over Social Media
|
||||
|
||||
- **You control the feed** — no algorithm decides what you see or in what order
|
||||
- **No engagement optimization** — content ranked by publish date, not outrage potential
|
||||
- **Portable** — OPML export lets you move your subscriptions to any reader
|
||||
- **Works forever** — RSS has been around since 1999 and isn't going anywhere
|
||||
|
||||
---
|
||||
|
||||
## Tags
|
||||
|
||||
#freshrss #rss #self-hosting #docker #linux #alternatives #privacy
|
||||
95
03-opensource/alternatives/gitea.md
Normal file
95
03-opensource/alternatives/gitea.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# Gitea — Self-Hosted Git
|
||||
|
||||
## Problem
|
||||
|
||||
GitHub is the default home for code, but it's a Microsoft-owned centralized service. Your repositories, commit history, issues, and CI/CD pipelines are all under someone else's control. For personal projects and private infrastructure, there's no reason to depend on it.
|
||||
|
||||
## Solution
|
||||
|
||||
[Gitea](https://gitea.com) is a lightweight, self-hosted Git service. It provides the full GitHub-style workflow — repositories, branches, pull requests, webhooks, and a web UI — in a single binary or Docker container that runs comfortably on low-spec hardware.
|
||||
|
||||
---
|
||||
|
||||
## Deployment (Docker)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
image: docker.gitea.com/gitea:latest
|
||||
container_name: gitea
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3002:3000"
|
||||
- "222:22" # SSH git access
|
||||
volumes:
|
||||
- ./gitea:/data
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=sqlite3
|
||||
```
|
||||
|
||||
SQLite is fine for personal use. For team use, swap in PostgreSQL or MySQL.
|
||||
|
||||
### Caddy reverse proxy
|
||||
|
||||
```
|
||||
git.yourdomain.com {
|
||||
reverse_proxy localhost:3002
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Initial Setup
|
||||
|
||||
1. Browse to your Gitea URL — the first-run wizard handles configuration
|
||||
2. Set the server URL to your public domain
|
||||
3. Create an admin account
|
||||
4. Configure SSH access if you want `git@git.yourdomain.com` cloning
|
||||
|
||||
---
|
||||
|
||||
## Webhooks
|
||||
|
||||
Gitea's webhook system is how automated pipelines get triggered on push. Example use case — auto-deploy a MkDocs wiki on every push:
|
||||
|
||||
1. Go to repo → **Settings → Webhooks → Add Webhook**
|
||||
2. Set the payload URL to your webhook endpoint (e.g. `https://notes.yourdomain.com/webhook`)
|
||||
3. Set content type to `application/json`
|
||||
4. Select **Push events**
|
||||
|
||||
The webhook fires on every `git push`, allowing the receiving server to pull and rebuild automatically. See [MajorWiki Setup & Pipeline](../../05-troubleshooting/majwiki-setup-and-pipeline.md) for a complete example.
|
||||
|
||||
---
|
||||
|
||||
## Migrating from GitHub
|
||||
|
||||
Gitea can mirror GitHub repos and import them directly:
|
||||
|
||||
```bash
|
||||
# Clone from GitHub, push to Gitea
|
||||
git clone --mirror https://github.com/user/repo.git
|
||||
cd repo.git
|
||||
git remote set-url origin https://git.yourdomain.com/user/repo.git
|
||||
git push --mirror
|
||||
```
|
||||
|
||||
Or use the Gitea web UI: **+ → New Migration → GitHub**
|
||||
|
||||
---
|
||||
|
||||
## Why Not Just Use GitHub?
|
||||
|
||||
For public open source — GitHub is fine, the network effects are real. For private infrastructure code, personal projects, and anything you'd rather not hand to Microsoft:
|
||||
|
||||
- Full control over your data and access
|
||||
- No rate limits, no storage quotas on your own hardware
|
||||
- Webhooks and integrations without paying for GitHub Actions minutes
|
||||
- Works entirely over Tailscale — no public exposure required
|
||||
|
||||
---
|
||||
|
||||
## Tags
|
||||
|
||||
#gitea #git #self-hosting #docker #linux #alternatives #vcs
|
||||
88
03-opensource/alternatives/searxng.md
Normal file
88
03-opensource/alternatives/searxng.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# SearXNG — Private Self-Hosted Search
|
||||
|
||||
## Problem
|
||||
|
||||
Every search query sent to Google, Bing, or DuckDuckGo is logged, profiled, and used to build an advertising model of you. Even "private" search engines are still third-party services with their own data retention policies.
|
||||
|
||||
## Solution
|
||||
|
||||
[SearXNG](https://github.com/searxng/searxng) is a self-hosted metasearch engine. It queries multiple search engines simultaneously on your behalf — without sending any identifying information — and aggregates the results. The search engines see a request from your server, not from you.
|
||||
|
||||
Your queries stay on your infrastructure.
|
||||
|
||||
---
|
||||
|
||||
## Deployment (Docker)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
searxng:
|
||||
image: searxng/searxng:latest
|
||||
container_name: searxng
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8090:8080"
|
||||
volumes:
|
||||
- ./searxng:/etc/searxng
|
||||
environment:
|
||||
- SEARXNG_BASE_URL=https://search.yourdomain.com/
|
||||
```
|
||||
|
||||
SearXNG requires a `settings.yml` in the mounted config directory. Generate one from the default:
|
||||
|
||||
```bash
|
||||
docker run --rm searxng/searxng cat /etc/searxng/settings.yml > ./searxng/settings.yml
|
||||
```
|
||||
|
||||
Key settings to configure in `settings.yml`:
|
||||
|
||||
```yaml
|
||||
server:
|
||||
secret_key: "generate-a-random-string-here"
|
||||
bind_address: "0.0.0.0"
|
||||
|
||||
search:
|
||||
safe_search: 0
|
||||
default_lang: "en"
|
||||
|
||||
engines:
|
||||
# Enable/disable specific engines here
|
||||
```
|
||||
|
||||
### Caddy reverse proxy
|
||||
|
||||
```
|
||||
search.yourdomain.com {
|
||||
reverse_proxy localhost:8090
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Using SearXNG as an AI Search Backend
|
||||
|
||||
SearXNG integrates directly with Open WebUI as a web search provider, giving your local AI access to current web results without any third-party API keys:
|
||||
|
||||
**Open WebUI → Settings → Web Search:**
|
||||
- Enable web search
|
||||
- Set provider to `searxng`
|
||||
- Set URL to `http://searxng:8080` (internal Docker network) or your Tailscale/local address
|
||||
|
||||
This is how MajorTwin gets current web context — queries go through SearXNG, not Google.
|
||||
|
||||
---
|
||||
|
||||
## Why Not DuckDuckGo?
|
||||
|
||||
DDG is better than Google for privacy, but it's still a centralized third-party service. SearXNG:
|
||||
|
||||
- Runs on your own hardware
|
||||
- Has no account, no cookies, no session tracking
|
||||
- Lets you choose which upstream engines to use and weight
|
||||
- Can be kept entirely off the public internet (Tailscale-only)
|
||||
|
||||
---
|
||||
|
||||
## Tags
|
||||
|
||||
#searxng #search #privacy #self-hosting #docker #linux #alternatives
|
||||
@@ -2,6 +2,11 @@
|
||||
|
||||
A curated collection of my favorite open-source tools and privacy-respecting alternatives to mainstream software.
|
||||
|
||||
## 🔄 Alternatives
|
||||
- [SearXNG: Private Self-Hosted Search](alternatives/searxng.md)
|
||||
- [FreshRSS: Self-Hosted RSS Reader](alternatives/freshrss.md)
|
||||
- [Gitea: Self-Hosted Git](alternatives/gitea.md)
|
||||
|
||||
## 🚀 Productivity
|
||||
- [rmlint: Duplicate File Scanning](productivity/rmlint-duplicate-scanning.md)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user