Создание платного веб-архива на базе ArchiveBox с интеграцией платежных систем

Превратите ArchiveBox в источник дохода! Инструкция по созданию платного веб-архива: от настройки сервера до интеграции платежей и первых продаж.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Создание платного веб‑архива позволяет пользователям сохранять важные онлайн‑ресурсы, а владельцу сервиса получать доход․ Ниже описан процесс построения такого решения на основе открытого инструмента ArchiveBox и интеграции платёжных систем․

Выбор и подготовка технологической базы

  • ArchiveBox – открытый self‑hosted веб‑архиватор, поддерживающий CLI, веб‑интерфейс и простой формат хранения на диске․
  • Сервер (VPS или выделенный) с ОС Linux (Ubuntu 22․04 LTS рекомендуется)․
  • База данных SQLite (по умолчанию) либо PostgreSQL для больших нагрузок․
  • Объектное хранилище для больших файлов (например, AWS S3, Wasabi или локальный /var/archivebox)․
  • Платёжный шлюз – Stripe, PayPal или ЮMoney (для российского рынка)․
  • Веб‑фреймворк для личного кабинета (можно использовать простой Flask/Django или готовый панель‑админ ArchiveBox)․

Установка ArchiveBox

# Обновляем систему
sudo apt update && sudo apt upgrade -y


sudo apt install -y python3-pip python3-venv git curl

git clone https://github․com/ArchiveBox/ArchiveBox․git
cd ArchiveBox

python3 -m venv venv
source venv/bin/activate

pip install -r requirements․txt

archivebox init --setup

После инициализации в каталоге появится файл archivebox․conf – его можно отредактировать, указав путь к хранилищу и включив режим SINGLE_USER_MODE=false для многопользовательского доступа․

Организация доступа и аутентификации

Для платного сервиса необходима регистрация пользователей и проверка оплаты․ Самый простой путь – использовать встроенную поддержку Django admin (ArchiveBox основан на Django)․

  1. Запустите миграции: archivebox manage migrate
  2. Создайте суперпользователя: archivebox manage createsuperuser
  3. В админ‑панели (/admin) добавьте группы free и premium․
  4. Настройте middleware, который будет проверять статус подписки перед допуском к функции archivebox add․

Интеграция платёжного шлюза

Ниже пример интеграции Stripe через простой веб‑хук․

Установка библиотеки Stripe

pip install stripe

Создание эндпоинта для создания сеанса оплаты

# views․py (добавьте в ваш Django‑проект ArchiveBox)
import stripe, json
from django․conf import settings
from django․http import JsonResponse
from django․views․decorators․csrf import csrf_exempt

stripe․api_key = settings․STRIPE_SECRET_KEY

@csrf_exempt
def create_checkout_session(request):
 if request․method == 'POST':
 data = json․loads(request․body)
 plan = data․get('plan') # например, 'monthly' или 'yearly'
 price_id = settings․STRIPE_PRICES․get(plan)
 session = stripe․checkout․Session․create(
 payment_method_types=['card'],
 line_items=[{'price': price_id, 'quantity': 1}],
 mode='subscription',
 success_url='https://yourdomain․com/success?session_id={CHECKOUT_SESSION_ID}',
 cancel_url='https://yourdomain․com/cancel',
 ) return JsonResponse({'id': session․id})

Обработка веб‑хука Stripe

@csrf_exempt
def stripe_webhook(request):
 payload = request․body
 sig_header = request․META['HTTP_STRIPE_SIGNATURE']
 event = None

 try:
 event = stripe․Webhook․construct_event(
 payload, sig_header, settings․STRIPE_WEBHOOK_SECRET
 )
 except ValueError as e:
 return HttpResponse(status=400)
 except stripe․error․SignatureVerificationError as e:
 return HttpResponse(status=400)

 # Обработка события успешной оплаты
 if event['type'] == 'checkout․session․completed':
 session = event['data']['object']
 user_id = session['metadata']['user_id']
 plan = session['metadata']['plan']
 # Здесь обновляем статус пользователя в БД (премиум на месяц/год)
 # Например: User․objects․filter(id=user_id)․update(is_premium=True, plan=plan, expires_at=․․․)

 return HttpResponse(status=200)

Не забудьте добавить URL‑маршруты для create_checkout_session и stripe_webhook в urls․py и указать переменные окружения STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET и словарь STRIPE_PRICES с ID цен из вашего Stripe‑дашборда․

Автоматизация архивации по запросу пользователя

После успешной оплаты пользователь может отправлять URL для архивации через веб‑форму или API․

Простая форма добавления

<form id="archive-form">
 <label>URL для архивации:</label><br>
 <input type="url" name="url" required><br>
 <button type="submit">Архивировать</button>
</form>

<script>
document․getElementById('archive-form')․addEventListener('submit', function(e){
 e․preventDefault;
 const url = this․elements․url․value;
 fetch('/api/archive/', {
 method: 'POST',
 headers: {'Content-Type': 'application/json', 'X-CSRFToken': getCookie('csrftoken')},
 body: JSON․stringify({url: url})
 })․then(r => r․json)․then(data => {
 alert('Архивация запущена: ' + data․task_id);
 });
});
</script>

API‑эндпоинт, вызывающий ArchiveBox

# views․py
from django․http import JsonResponse
from django․views․decorators․http import require_POST
from django․contrib․auth․decorators import login_required
import subprocess, json, os

@login_required
@require_POST
def api_archive(request):
 data = json․loads(request․body)
 url = data․get('url')
 if not url:
 return JsonResponse({'error': 'URL required'}, status=400)

 # Проверяем подписку
 if not request․user․is_premium:
 return JsonResponse({'error': 'Subscription required'}, status=403)
 # Запускаем archivebox add в фоне
 cmd = ['archivebox', 'add', url, '--depth', '0']
 subprocess․Popen(cmd, cwd=settings․ARCHIVEBOX_DIR)

 return JsonResponse({'task_id': os․path․getmtime(settings․ARCHIVEBOX_DIR)})

Для продакшена лучше использовать очередь задач (Celery + Redis/RabbitMQ), чтобы не блокировать веб‑процесс․

Хранение и резервное копирование

  • Архивы хранятся в каталоге ARCHIVEBOX_DIR (по умолчанию ~/ArchiveBox)․
  • Настройте синхронизацию с объектным хранилищем (например, rclone sync ~/ArchiveBox s3://my-archive-bucket) ежедневно через cron․
  • Включите версионирование в бакете S3, чтобы защититься от случайного удаления․
  • Регулярно делайте дамп базы данных: pg_dump archivebox > archivebox_$(date +%F)․sql․

Ценообразование и монетизация

Примерная модель:

  1. Бесплатный тариф – 5 URL в месяц, ограниченная глубина архивации (0‑1 уровень)․
  2. Премиум – месячный – $4․99 за неограниченное количество URL, глубина до 3 уровней, доступ к PDF‑ и медиа‑файлам․
  3. Премиум – годовой – $49;99 (экономия ~17 %)․
  4. Дополнительные услуги: индивидуальное S3‑хранилище (+$0․023/ГБ/мес), API‑доступ (+$9․99/мес)․

Расчёт стоимости за байт можно выполнить, зная средний размер архивированной страницы (≈ 150 КБ) и ежемесячный трафик․ При 10 000 страниц/мес → ~1,5 ГБ данных․ Стоимость хранения в S3 ≈ $0․023/ГБ → ~$0․035/мес, что делает основную часть дохода формирующейся от подписки, а не от хранения․

Юридические аспекты

  • Убедитесь, что у вас есть право архивировать указанные URL (соблюдайте robots․txt и условия использования сайтов)․
  • Включите в пользовательское соглашение пункт о запрете архивирования контента, защищённого авторским правом без разрешения правообладателя․
  • При работе с персональными данными (например, архивация форм с ПИД) соблюдайте GDPR/ФЗ‑152․
  • Храните логи платежей и доступа минимум 6 месяцев для возможных аудитов․

Тестирование и запуск

  1. Запустите ArchiveBox в режиме отладки: archivebox server --debug --bind 0․0․0․0:8000․
  2. Проверьте регистрацию, оплату через тестовый режим Stripe (sk_test_…)․
  3. Загрузите несколько тестовых URL, убедитесь, что архивы появляются в каталоге и доступны через веб‑интерфейс․
  4. Переведите продакшен‑ключи, включите HTTPS (Let’s Encrypt) и настройте автоматический перезапуск через systemd или Docker․

Создание платного веб‑архива на базе ArchiveBox, реализуемая задача, которая сочетает открытый архиватор, гибкую систему подписок и надёжное хранение данных․ Следуя представленным шагам, вы получите сервис, позволяющий пользователям сохранять важные онлайн‑ресурсы, а вам — стабильный источник дохода․

Удачной реализации!