تجربه واقعی ۲۰۲۵

از صفر تا فیلیمو
چطور یک پلتفرم VOD حرفه‌ای بسازیم؟

داستان تجربه من در ساخت یک پلتفرم فیلم و سریال مدرن — فراتر از وردپرس، با ساختاری قابل توسعه و سریع

6
تکنولوژی مدرن
10K+
فیلم قابل پردازش
100%
اوپن‌سورس
قابلیت توسعه

داستان این پروژه

درود به همه! 👋

این مقاله داستان تجربه من در سال ۲۰۲۵ هست، زمانی که تصمیم گرفتم یه پلتفرم فیلم و سریال حرفه‌ای و مدرن راه بندازم.

چرا؟ چون دیگه از دردسرهای همیشگی وردپرس خسته شده بودم... از افزونه‌های کند و ناسازگار، از محدودیت‌های بی‌پایان، از کدهای کثیف PHP که هر روز بدتر می‌شد.

"اگر می‌خوای یه چیز درست بسازی، باید از اول شروع کنی"

اینجا یاد می‌گیرید چطور مثل فیلیمو، فیلم‌نت یا ۳۰نما، یک VOD واقعی بسازید.

من از همون اول می‌دونستم که فقط ساخت یه وب‌سایت فیلم مدنظرم نیست. هدفم این بود که یه زیرساخت مستقل برای فیلم و سریال درست کنم، تا بعدش بتونم هرچندتا سایت فیلم که بخوام، روی این دیتا سوار کنم.

یکی از اصلی‌ترین مشکلات وردپرس این بود که برای هر پروژه جدید، باید از صفر شروع می‌کردم. ولی با این رویکرد، یه‌بار زیرساخت می‌سازم و می‌تونم برای مشتری‌هام VOD بسازم بدون نیاز به تکرار کد.

سیستم پشتی، اسکرایپر، پنل ادمین و همه‌چیز رو قابل‌توسعه نگه می‌دارم. این یعنی وقتی یه ویژگی جدید اضافه می‌کنم، همه پروژه‌هام از اون بهره‌مند می‌شن.

چشم‌انداز پروژه

یک بار بساز، همیشه استفاده کن

بانک فیلم مرکزی
یک بار اطلاعات جمع‌آوری کن، برای همیشه استفاده کن
Scraper هوشمند
اطلاعات فیلم‌ها رو خودکار از IMDb و TMDb بگیر
چند وبسایت، یک بانک
از یک پایگاه‌داده، چندین سایت فیلم راه بنداز
پلیر حرفه‌ای
پخش باکیفیت، زیرنویس، و کنترل کامل

🤖 جمع‌آوری هوشمند اطلاعات با Scraper

یکی از جذاب‌ترین قسمت‌های این مسیر، ساختن یک Scraper Bot بود. رباتی که از IMDb یا TMDB اطلاعات فیلم‌ها رو بگیره، و حتی بتونه لینک‌های download از سایت‌های مختلف رو جمع کنه.

چه اطلاعاتی جمع‌آوری می‌کنه؟

عنوان فیلم و سریال (فارسی و انگلیسی)
توضیحات و خلاصه داستان
پوستر و تصاویر با کیفیت
امتیاز IMDb و نظرات
بازیگران و کارگردان
ژانر و سال تولید

نه نیازی به نویسنده‌ست، نه به کپی‌پیست کردن. یک‌بار براش زحمت می‌کشی، همیشه برات کار می‌کنه. دقیقاً مثل یه دستیار هوشمند که هیچ‌وقت خسته نمیشه.

با استفاده از Playwright و Node.js، این ربات می‌تونه روزانه صدها فیلم رو پردازش کنه و اطلاعاتشون رو توی پایگاه‌داده ذخیره کنه. حتی می‌تونه به صورت خودکار فیلم‌های جدید رو شناسایی کنه و اضافه کنه.

تکنولوژی‌های استفاده شده

ابزارهای مدرن ۲۰۲۵ که واقعاً کار می‌کنن

Next.js 15

فریم‌ورک SSR برای ساخت سریع سایت

TypeScript

ایمنی در کد و توسعه بلندمدت

PostgreSQL

پایگاه‌داده قدرتمند و قابل اعتماد

Tailwind CSS

UI ساده، قابل توسعه و مدرن

Playwright

ربات هوشمند جمع‌آوری اطلاعات

React

کتابخانه UI مدرن و انعطاف‌پذیر

🧠 دیتابیس و ORM: قلب پروژه

برای دیتابیس، من همیشه طرفدار PostgreSQL بودم. چرا؟ چون قدرتمنده، مقیاس‌پذیره، و برای پروژه‌های بزرگ مناسبه. به خصوص وقتی صحبت از پلتفرم VOD میشه که ممکنه هزاران فیلم و کاربر داشته باشه.

و به جای Prisma، از DrizzleORM استفاده کردم. چون سبک‌تر، سریع‌تر و ساده‌تره، مخصوصاً برای پروژه‌هایی که بهینه بودن براشون مهمه. Plus اینکه TypeScript support عالی‌ای داره.

ساختار جداول اصلی:

Movies: اطلاعات کامل فیلم‌ها (عنوان، توضیحات، پوستر، امتیاز)
Users: کاربران و اطلاعات حساب‌شون
Subscriptions: انواع اشتراک و قیمت‌گذاری
Downloads: لینک‌های دانلود و کیفیت‌های مختلف
Categories: دسته‌بندی ژانرها و موضوعات

یکی از مزایای DrizzleORM اینه که Type Safety کاملی داره. یعنی اگه توی کوئری‌هات اشتباه کنی، قبل از اجرا خبرت می‌ده. این باعث میشه کد خیلی مطمئن‌تر و قابل اعتمادتر باشه.

مراحل پیاده‌سازی

از طراحی تا استقرار، قدم به قدم

طراحی معماری

ساختار Monorepo با TurboRepo و تفکیک پروژه‌ها

پایگاه‌داده

طراحی جداول فیلم، کاربر، اشتراک با Drizzle ORM

Scraper Bot

ربات جمع‌آوری اطلاعات فیلم از منابع معتبر

پلیر ویدیو

ساخت پلیر کاستوم با react-player و کنترل‌های پیشرفته

احراز هویت

سیستم عضویت، اشتراک، و کنترل دسترسی

استقرار

آپلود روی Vercel یا سرور اختصاصی

ساختار پروژه

معماری Monorepo با TurboRepo

apps/
  ├── vod-main/          # سایت اصلی پخش فیلم
  ├── vod-admin/         # پنل مدیریت
  └── vod-other/         # میتونید بیش از یک سایت راه بندازید

packages/
  ├── db/                # پایگاه‌داده و Schema
  ├── bots/grabber/      # ربات جمع‌آوری اطلاعات
  ├── actions/           # عملیات مشترک
  └── auth/              # احراز هویت

components/
  ├── player/            # پلیر ویدیو
  ├── ui/                # رابط کاربری
  └── forms/             # فرم‌های مشترک

📺 ساخت پلیر حرفه‌ای و پخش آنلاین

برای پخش آنلاین فیلم‌ها از react-player استفاده کردم. این کتابخانه فوق‌العاده راحت می‌تونه MP4 پخش کنه، زیرنویس SRT لود کنه، و توی همه دیوایس‌ها (موبایل، تبلت، دسکتاپ) بدرستی اجرا بشه.

ویژگی‌های پلیر:

پخش فرمت‌های مختلف (MP4, WebM, HLS)
زیرنویس فارسی و انگلیسی (SRT)
کنترل سرعت پخش
حالت تمام‌صفحه
کیفیت‌های مختلف (360p, 720p, 1080p)
responsive برای موبایل

نیاز نیست حتماً استریم کنی. برای شروع، ساده پخش کردن MP4 از یه هاست معمولی هم جواب می‌ده. ولی اگه خواستی حرفه‌ای‌تر بشی، می‌تونی با FFmpegویدیوها رو به فرمت HLS تبدیل کنی و استریم کنی.

یکی از چیزهایی که خیلی مهمه، کنترل دسترسی به ویدیوهاست. یعنی فقط کاربرایی که اشتراک دارن بتونن فیلم ببینن. این رو می‌تونی با JWT token و middleware پیاده‌سازی کنی.

💾 فایل‌های ویدیویی رو کجا نگه داریم؟

یکی از مهم‌ترین تصمیماتی که باید بگیری، اینه که فایل‌های ویدیو رو کجا نگه داری. من تجربه کردم و می‌تونم بگم که دو گزینه اصلی داری:

سرور اختصاصی

کنترل کامل روی فایل‌ها
امنیت بالا
هزینه‌بر (سرور + پهنای باند)
نیاز به مدیریت فنی

لینک‌های خارجی

هزینه کمتر
راه‌اندازی سریع
وابستگی به منبع خارجی
ریسک حذف فایل

برای شروع، توصیه‌ام استفاده از لینک‌های خارجی هست. می‌تونی از CDNهای رایگان مثل "uprola"، تلگرام، یا حتی سایت‌های فایل‌شرینگ استفاده کنی. بعداً که پروژه‌ت رشد کرد، می‌تونی به سرور اختصاصی مهاجرت کنی.

🔐 احراز هویت و مدیریت کاربران

بخش احراز هویت یکی از حساس‌ترین قسمت‌های هر VOD است. باید اطمینان داشته باشی که فقط کاربران مجاز می‌تونن به محتوای پولی دسترسی داشته باشن. من از NextAuth و JWT استفاده کردم.

سیستم احراز هویت:

مراحل ثبت‌نام:

1
ثبت ایمیل و رمز عبور
2
تایید ایمیل
3
ایجاد پروفایل کاربری

سطوح دسترسی:

مهمان (فیلم‌های رایگان)
عضو عادی (دسترسی محدود)
عضو VIP (دسترسی کامل)
ادمین (مدیریت سایت)

نکته مهم اینه که برای هر فیلم یه middleware بنویسی که چک کنه کاربر اجازه دیدن اون فیلم رو داره یا نه. این کار باعث می‌شه امنیت سایتت بالا بره و فیلم‌های پولی تو به صورت مستقیم قابل دسترسی نباشن.

همچنین یه سیستم گزارش‌گیری هم پیاده‌سازی کردم که نشون می‌ده هر کاربر چند تا فیلم دیده، چقدر وقت آنلاین بوده، و کدام فیلم‌ها رو بیشتر می‌بینه. این آمارها برای بهبود محتوا و درک رفتار کاربرا خیلی مفیده.

🚀 استقرار و راه‌اندازی نهایی

وقتی که کدنویسی تموم شد، نوبت میرسه به استقرار پروژه. برای چیزموو من از چند پلتفرم مختلف استفاده کردم و تجربه‌شون رو باهات به اشتراک می‌ذارم:

Vercel (فرانت‌اند)

deploy خودکار از GitHub
CDN سریع جهانی
SSL رایگان
محدودیت serverless

Railway (دیتابیس)

PostgreSQL مدیریت شده
بکاپ خودکار
اتصال آسان
محدودیت حجمی

نکات مهم deploy:

متغیرهای محیطی (Environment Variables) رو فراموش نکن
database migration رو قبل از deploy اجرا کن
performance monitoring راه‌اندازی کن
domain مناسب انتخاب کن و DNS تنظیم کن

در آخر، حتماً یه سیستم monitoring راه‌اندازی کن تا بدونی سایتت چطور کار می‌کنه. من از Google Analytics و Sentry استفاده کردم تا هم ترافیک رو رصد کنم و هم errorها رو بگیرم.

⚡ سئو و بهینه‌سازی سرعت

VOD پلتفرم موفق اونیه که تو گوگل پیدا بشه و سریع لود بشه. برای همین خیلی روی SEO و Performance کار کردم.

🔍 بهینه‌سازی SEO

Meta tags کامل برای هر فیلم
Structured Data (JSON-LD)
Sitemap.xml خودکار
URL های SEO-friendly
Open Graph برای شبکه‌های اجتماعی

⚡ بهینه‌سازی سرعت

Image Optimization (Next.js)
Lazy Loading برای ویدیوها
Code Splitting
Database Query Optimization
Caching (Redis)

نتایج بهینه‌سازی:

95
Performance Score
100
SEO Score
1.2s
Load Time
98
Accessibility

این نتایج باعث شد که چیزموو تو گوگل رتبه بالایی بگیره و کاربرا سریع تر بتونن فیلم‌ها رو ببینن. یادت باشه که تو دنیای VOD، سرعت لود و SEO خیلی مهمه چون رقابت شدیده.

چرا این پروژه رو ساختم؟

چون باور دارم که هر کسی باید بتونه رویای خودش رو محقق کنه. بدون محدودیت، بدون وابستگی، بدون دردسر.

این پروژه نه‌تنها یه راه‌حل فنی هست، بلکه یه رویکرد جدید به ساخت پلتفرم‌های مدرن. کدی که می‌فهمیش، تکنولوژی که بهش اعتماد داری، و نتیجه‌ای که براش ارزش داری.

آماده‌ای شروع کنی؟

اگه جاییش براتون پیچیده بود، یا خواستید کمک بگیرید، من اینجام.
بیاید با هم یه چیز واقعی بسازیم.