Установка Teddit на Linux

Содержание
- Предварительные условия
- Установка Teddit
- Настройка веб‑сервера (Nginx) и SSL
- Создание Reddit API‑ключа
- Автоматизация запуска и управление процессом
- Отладка и часто возникающие проблемы
- Безопасность и конфиденциальность
- Плейбук развертывания и чеклисты
- Критерии приёмки и тесты
- Краткое резюме
Предварительные условия
Коротко: актуальная Ubuntu (или совместимый дистрибутив), доступ по SSH, домен (или тестовый localhost), права sudo.
Определения в одну строку:
- Teddit — минималистичный фронтенд для Reddit, ориентированный на приватность и отсутствие JavaScript.
- Reverse proxy — прокси‑сервер (например, Nginx), который перенаправляет внешние запросы на внутренний процесс.
Требования к серверу:
- Порты: 22 (SSH), 80 (HTTP), 443 (HTTPS).
- Компоненты: Node.js, Redis, ffmpeg (если нужны медиа), Nginx, certbot.
Совет: работайте с резервной копией config.js и храните секреты вне репозитория.
Установка Teddit
Эти шаги основаны на Ubuntu. Замените yetanotherteddit.xyz вашим доменом или используйте localhost для тестирования.
- Обновите индекс пакетов и установите зависимости:
sudo apt update && sudo apt install -y nodejs redis-server ffmpeg git iptables-persistent nginx npm certbot python3-certbot-nginx
Примечание: при необходимости используйте официальный репозиторий NodeSource для конкретной версии Node.js.
- Скопируйте репозиторий Teddit и перейдите в каталог проекта:
git clone https://codeberg.org/teddit/teddit
cd teddit
- Установите зависимости npm (заметьте пробел перед флагом):
npm install --no-optional
- Создайте локальную конфигурацию из шаблона:
cp config.js.template config.js- Быстрая проверка запуска приложения:
npm startПосле этого Teddit будет слушать на локальном порту (по умолчанию 8080). Проверьте в браузере http://127.0.0.1:8080 если вы работаете локально.

Важно: убедитесь, что Redis запущен: sudo systemctl status redis.
Настройка веб‑сервера (Nginx) и SSL
Мы рекомендуем использовать Nginx как обратный прокси перед Teddit — это упрощает включение HTTPS и добавляет уровень безопасности.
- Разрешите входящие соединения только на нужных портах:
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
Совет: на сервере с UFW используйте ufw allow вместо iptables.
- Создайте файл конфигурации Nginx:
sudo nano /etc/nginx/sites-available/tedditВставьте конфигурацию сервера (пример простого reverse proxy):
server {
listen 80;
listen [::]:80;
server_name yetanotherteddit.xyz www.yetanotherteddit.xyz;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Файл можно адаптировать для домена или для использования Unix socket, если вы захотите.
- Включите конфигурацию и перезагрузите Nginx:
sudo ln -s /etc/nginx/sites-available/teddit /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx- Подключите бесплатный сертификат Let’s Encrypt через Certbot:
sudo certbot --nginx -d yetanotherteddit.xyz -d www.yetanotherteddit.xyzПосле успешного получения сертификата все соединения к вашему домену будут защищены HTTPS.
Подсказка: изучите заголовки безопасности (Content-Security-Policy, X-Frame-Options и т. п.) для дополнительного hardening.
Создание Reddit API‑ключа для Teddit
Teddit использует Reddit API для получения страниц и историй. Без ключа доступ к некоторым частям Reddit будет ограничен.
Войдите в свой аккаунт Reddit и откройте страницу “Приложения” (Application Preferences).
Нажмите “Create an App…” и заполните форму:
- Имя приложения: что угодно (например, TedditInstance)
- Тип приложения: выберите “installed app”
- About URL: укажите адрес вашего экземпляра (например, https://yetanotherteddit.xyz)
- Redirect URL: укажите http://localhost:8080

- Нажмите “create app” и скопируйте App ID (Client ID) из карточки приложения.

- На сервере откройте файл config.js и найдите параметр
reddit_app_id. Вставьте туда скопированную строку.

Сохраните и перезапустите приложение (или используйте менеджер процессов, см. раздел ниже).
Подсказка: Teddit не поддерживает логин пользователей — это только просмотр контента.
Автоматизация запуска и управление процессом
Для стабильной работы на сервере рекомендуем один из двух подходов:
Вариант A — pm2 (прост в использовании для Node.js):
npm install pm2 -g
pm2 start app.js --name teddit
pm2 save
pm2 startupВариант B — systemd unit (более традиционный для Linux):
Создайте /etc/systemd/system/teddit.service с содержимым:
[Unit]
Description=Teddit service
After=network.target redis-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/teddit
ExecStart=/usr/bin/npm start
Restart=on-failure
[Install]
WantedBy=multi-user.targetЗатем:
sudo systemctl daemon-reload
sudo systemctl enable --now teddit.serviceСовет: запускайте сервис под непользовательским (unprivileged) аккаунтом — например, www-data.
Отладка и часто возникающие проблемы
- Приложение стартует, но Nginx возвращает 502.
- Проверьте, что Teddit слушает на 127.0.0.1:8080 (
ss -tlnp | grep 8080). - Проверьте логи systemd / pm2 и stdout приложения.
- Не видно более первой страницы сабреддита.
- Скорее всего, неверный или отсутствующий reddit_app_id в config.js. Проверьте значение.
- Временно можно отключить OAuth:
use_reddit_oauth = falseв config.js (ограниченная функциональность).
- Ошибки npm install.
- Убедитесь в достаточном объёме свободной памяти и диска.
- Перезапустите
npm cache clean --forceи повторите.
- Невозможность скачивать видео.
- Teddit по умолчанию не скачивает медиа. Для скачивания видео используйте внешние инструменты (yt-dlp и т. п.) и настройте прокси/скрипт для интеграции.
Безопасность и конфиденциальность
Важные рекомендации:
- Ограничьте доступ по SSH ключами и запретите root‑логин.
- Обновляйте систему и зависимости (
sudo apt upgradeиnpm audit). - Включите Fail2ban для защиты SSH и Nginx.
- Минимизируйте логи: если вы запускаете публичный экземпляр, подумайте о ротации логов и правилах хранения персональных данных.
Примечание о приватности: Teddit стремится не отслеживать пользователей, но ваш собственный сервер может вести журналы (доступ по IP). Опубликуйте политику конфиденциальности для пользователей вашего инстанса.
Плейбук развертывания — пошаговый чеклист
Перед развертыванием (оператор):
- Резервная копия конфигураций и данных
- Доступ к доменным настройкам (A/AAAA записи)
- Установлен certbot и Nginx
Развёртывание:
- Установить зависимости (apt)
- Клонировать teddit и выполнить npm install
- Создать config.js и вставить reddit_app_id
- Настроить Nginx, получить сертификат
- Настроить pm2/systemd и включить автозапуск
- Протестировать доступ по HTTPS
Резерв и мониторинг:
- Настроить логирование и ротацию логов
- Настроить мониторинг процесса и алерты (uptime / systemd)
Критерии приёмки
Минимальный набор для успешной приёмки системы:
- Teddit отвечает по HTTPS на домене и возвращает страницы субреддита.
- Reddit API‑ключ корректно настроен и работает (страницы пролистываются дальше 1‑й).
- Сервис автоматически запускается после reboot.
- SSL сертификат корректен и автоматически обновляется certbot.
Тесты принятия:
- Открыть 3 разных сабреддита и убедиться, что контент загружается.
- Проверить страницу ошибки/404 и убедиться, что Nginx отдает пользовательскую страницу ошибки.
- Имитировать отказ процесса Teddit и убедиться, что systemd/pm2 его рестартует.
Ментальные модели и альтернативы
Модель: Teddit = статический, быстрый фронтенд + динамический бэкенд (Node.js) + обратный прокси (Nginx) + кеш/буфер (Redis).
Альтернативы:
- Запуск в Docker-контейнере (удобно для изоляции и миграций).
- Использовать другие фронтенды (например, альтернативные проекты с похожей философией).
Когда не подходит Teddit:
- Нужна полноценная интерактивность с логином/комментированием — Teddit не для этого.
Резюме
- Teddit — хороший выбор для приватного, быстого просмотра Reddit.
- Следуйте чеклистам: зависимости, Nginx+SSL, Reddit App ID, автозапуск.
- Обратите внимание на безопасность, логирование и политику конфиденциальности при публичном запуске.
Краткие советы:
- Для продакшн‑развёртывания рассмотрите Docker и систему CI/CD.
- Храните секреты (App ID) вне публичных репозиториев.
Image credit: Unsplash. Все изменения и скриншоты — Ramces Red.
Похожие материалы
Быстрое переключение пользователей Windows 10: включить и отключить
Временно отключить уведомления на Android
Покупка восстановленной и открытой техники на Black Friday
Отображение XML в браузере с помощью XSLT