https://github.com/mrvi0/termux-pastebin
Self hosted analog of Pastebin
https://github.com/mrvi0/termux-pastebin
pastebin self-hosted termux
Last synced: about 2 months ago
JSON representation
Self hosted analog of Pastebin
- Host: GitHub
- URL: https://github.com/mrvi0/termux-pastebin
- Owner: mrvi0
- License: mit
- Created: 2025-04-26T23:44:58.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-24T19:16:16.000Z (about 1 year ago)
- Last Synced: 2025-06-24T20:27:42.668Z (about 1 year ago)
- Topics: pastebin, self-hosted, termux
- Language: Python
- Homepage: https://paste.b4dcat.ru
- Size: 2.34 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# Termux Pastebin
[](https://github.com/mrvi0/termux-pastebin/actions/workflows/deploy-termux.yml)
[](https://github.com/mrvi0/termux-pastebin/actions/workflows/lint.yml)
[](https://opensource.org/licenses/MIT)
Простой сервис для обмена текстовыми фрагментами (пастами), предназначенный для запуска на устройстве с Termux. Позволяет быстро создавать пасты и делиться ими по ссылке в локальной сети или через VPN (WireGuard).
## ✨ Основные возможности
* Создание **публичных** (доступных всем по ссылке) и **приватных** (доступных только автору) текстовых паст.
* **Шифрование** содержимого приватных паст в базе данных (AES-GCM).
* Авторизация через **Яндекс.OAuth** для создания паст и доступа к приватным.
* Просмотр **своих паст** (публичных и приватных) на отдельной странице.
* Генерация коротких, уникальных ссылок для каждой пасты.
* Просмотр публичных паст по ссылке без авторизации.
* Хранение паст и пользователей в локальной базе данных SQLite.
* Легковесность, оптимизация для запуска в Termux.
## 🚀 Установка (на Termux)
### Требования
* **Termux:** Среда Linux на Android.
* **Termux:Boot (Рекомендуется):** Для автозапуска сервиса (из F-Droid).
* **Python 3.10+:**
```bash
pkg update && pkg upgrade
pkg install python git ffmpeg libsndfile sqlite # Устанавливаем Python и нужные системные пакеты
pkg install rust # Нужно для Authlib, иначе не соберается колесо
```
* **pip:** Менеджер пакетов Python (обычно идет с Python).
### Установка приложения
1. **Клонируйте репозиторий (или скопируйте файлы):**
(Пока репозиторий приватный, будем считать, что код скопирован в `~/termux-pastebin`)
```bash
cd ~
# git clone ... # Если будет репозиторий
# Или просто убедитесь, что папка ~/termux-pastebin существует и содержит код
cd termux-pastebin
```
2. **Создайте и активируйте виртуальное окружение:**
```bash
python -m venv venv
source venv/bin/activate
```
3. **Установите зависимости:**
```bash
pip install --upgrade pip
pip install -r requirements.txt
```
4. **Создайте и настройте файл `.env`:**
Скопируйте `.env.example` в `.env` и **обязательно** установите свои значения.
```bash
cp .env.example .env
nano .env
```
* Установите надежный `FLASK_SECRET_KEY` (сгенерируйте: `python -c 'import secrets; print(secrets.token_hex(16))'`).
* Установите желаемые `BASIC_AUTH_USERNAME` и `BASIC_AUTH_PASSWORD`.
* При необходимости измените `PASTEBIN_HOST` или `PASTEBIN_PORT`.
* **ВАЖНО:** Защитите файл: `chmod 600 .env`
## ⚙️ Конфигурация
Приложение конфигурируется с помощью переменных окружения в файле `.env` в корневой директории проекта.
* `FLASK_SECRET_KEY`: **Обязательно.** Секретный ключ для Flask.
* `YANDEX_CLIENT_ID`: **Обязательно.** ID приложения Яндекс.OAuth.
* `YANDEX_CLIENT_SECRET`: **Обязательно.** Пароль приложения Яндекс.OAuth.
* `PASTE_ENCRYPTION_KEY`: **Обязательно.** Ключ для шифрования приватных паст (32 байта, кодированные в URL-safe Base64). Сгенерируйте с помощью `python -c 'import os, base64; print(base64.urlsafe_b64encode(os.urandom(32)).decode())'`.
* `PASTEBIN_HOST`: IP-адрес для сервера (по умолчанию `0.0.0.0`).
* `PASTEBIN_PORT`: Порт для сервера (по умолчанию `5005`).
## ⚡ Использование
### Запуск Сервера
Рекомендуется запускать через скрипт `run_prod.sh`, который использует Waitress:
```bash
# Убедитесь, что вы НЕ в venv (скрипт сам активирует)
deactivate # Если были в venv
# Запуск из корневой папки проекта
bash scripts/run_prod.sh
```
Сервер будет запущен на хосте и порту, указанных в .env (или по умолчанию на 0.0.0.0:5005). Нажмите Ctrl+C для остановки.
### Автозапуск (с Termux:Boot)
1. Установите приложение Termux:Boot из F-Droid.
2. Убедитесь, что для Termux отключена оптимизация батареи в настройках Android.
3. Создайте скрипт запуска в ~/.termux/boot/:
```
mkdir -p ~/.termux/boot
nano ~/.termux/boot/start-pastebin.sh
```
4. Скопируйте в него содержимое скрипта автозапуска (см. предыдущие шаги нашей переписки, убедитесь, что пути и ключ PASTEBIN_SECRET_KEY верны). Примерное содержимое:
```
#!/data/data/com.termux/files/usr/bin/bash
sleep 15 # Даем сети подняться
termux-wake-lock & # Держим телефон активным
PASTEBIN_DIR="/data/data/com.termux/files/home/termux-pastebin"
cd "$PASTEBIN_DIR" || exit 1
source "$PASTEBIN_DIR/venv/bin/activate" || exit 1
if [ -f ".env" ]; then
set -a; source ".env"; set +a
fi
if [ -z "$FLASK_SECRET_KEY" ]; then exit 1; fi
HOST=${PASTEBIN_HOST:-"0.0.0.0"}
PORT=${PASTEBIN_PORT:-"5005"}
nohup waitress-serve --host "$HOST" --port "$PORT" "src.app:app" >> "$PASTEBIN_DIR/pastebin-waitress.log" 2>&1 &
echo "$(date): Pastebin service start initiated (PID: $!)" >> "$PASTEBIN_DIR/pastebin-boot.log"
exit 0
```
5. Сделайте скрипт исполняемым:
```
chmod +x ~/.termux/boot/start-pastebin.sh
```
6. После перезагрузки телефона или перезапуска Termux сервис должен запуститься автоматически. Проверяйте логи в ~/termux-pastebin/pastebin-waitress.log и ~/termux-pastebin/pastebin-boot.log.
## Доступ к веб-интерфейсу
Откройте браузер на устройстве в той же сети (Wi-Fi/WireGuard), что и ваш телефон с Termux. Перейдите по адресу:
`http://:<Порт>`
(Например: `http://192.168.0.15:5005`)
* На главной странице вы увидите форму для создания пасты.
* Используйте чекбокс **"Сделать пасту публичной"**, чтобы контролировать доступ к создаваемой пасте. Если галочка снята, паста будет приватной.
* Для создания пасты и просмотра списка своих паст необходимо **войти через Яндекс**.
* Перейдите по ссылке **"Мои пасты"**, чтобы увидеть список ваших паст (публичных и приватных).
* Ссылки на **публичные** пасты (`http://:<Порт>/<ключ_пасты>`) доступны всем.
* Ссылки на **приватные** пасты доступны только вам после авторизации.
* Используйте кнопку **"Выйти"** для завершения сеанса.
## 🧪 Тестирование
(Раздел пока пуст, тесты не реализованы)
## 📜 Лицензия
Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE. (Не забудьте добавить файл LICENSE с текстом лицензии).
📞 Контакты
Создатель: [Mr Vi](https://t.me/B4DCAT) - [dev@b4dcat.ru]()
GitHub Issues: https://github.com/mrvi0/termux-pastebin/issues