ساخت پلتفرم Podcast شخصی با Castopod؛ میزبانی اپیزود، RSS و انتشار پادکست روی VPS
برای انتشار Podcast الزاماً نباید فایلهای صوتی، RSS Feed و آمار شنوندگان را به یک سرویس خارجی بسپارید. میتوانید روی VPS خودتان یک پلتفرم Podcast شخصی راهاندازی کنید، اپیزودها را روی سرور خودتان نگه دارید و RSS اختصاصی داشته باشید.
در این آموزش از Castopod 1.15.5 استفاده میکنیم؛ یک پلتفرم متنباز و Self-hosted برای میزبانی Podcast که RSS Feed، Player، Episode Management، Analytics، Transcript، Chapter، انتشار زمانبندیشده و امکانات Podcasting 2.0 را یکجا در اختیار شما میگذارد.
📌 در پایان چه چیزی خواهیم داشت؟
🔹 سایت اختصاصی پادکست
🔹 RSS Feed استاندارد
🔹 Upload و مدیریت اپیزود
🔹 انتشار زمانبندیشده
🔹 Player قابل Embed
🔹 Analytics داخلی
🔹 Transcript و Chapter
🔹 Import پادکست قدیمی از RSS
🔹 امکان چند Podcast روی یک سرور
🔹 اتصال Media به S3-Compatible Storage در معماری بزرگتر
Castopod چیست؟
Castopod نرمافزار مدیریت و میزبانی Podcast است. تمرکز آن فقط روی قرار دادن فایل MP3 روی وب نیست؛ Metadata، RSS Feed، Episode Page، Podcast Artwork، Analytics، Social Features و استانداردهای جدید Podcast نیز مدیریت میشوند.
نسخه Stable فعلی در زمان نگارش این مقاله Castopod 1.15.5 است که در ۲۴ فوریه ۲۰۲۶ منتشر شده است.
چرا برای Podcast یک پلتفرم اختصاصی بسازیم؟
میتوان Podcast را با WordPress هم منتشر کرد، اما Castopod از ابتدا برای Podcast طراحی شده است.
| قابلیت | Castopod |
|---|---|
| RSS Podcast | داخلی و خودکار |
| Analytics | داخلی |
| Podcasting 2.0 | پشتیبانی از قابلیتهای متعدد |
| Transcript | قابل اضافه شدن به اپیزود |
| Chapter | پشتیبانی میشود |
| Fediverse / ActivityPub | داخلی |
پلتفرم Podcast شخصی چگونه کار میکند؟
Audio Episode
|
v
Castopod
|
+----> Podcast Website
|
+----> RSS Feed
|
+----> Web Player
|
+----> Podcast Apps
|
+----> Analytics
نکته مهم این است که اپلیکیشنهای Podcast معمولاً فایلهای شما را از طریق RSS Feed کشف میکنند. Feed شامل عنوان، توضیحات، Artwork و آدرس Media هر Episode است.
مزیت Self-host کردن Podcast چیست؟
مهمترین مزیت، کنترل مستقیم روی فایلها، Domain و Feed است.
اگر آدرس Podcast شما روی Domain خودتان باشد، مهاجرت آینده نیز سادهتر خواهد شد. همچنین Analytics و Media Library تحت کنترل زیرساخت خودتان قرار میگیرند.
برای Castopod چه VPSای نیاز داریم؟
مصرف Application خیلی سنگین نیست؛ فضای Storage و Traffic فایلهای صوتی معمولاً مهمتر هستند.
| سناریو | پیشنهاد شروع |
|---|---|
| یک Podcast سبک | ۲ vCPU و ۲GB RAM |
| چند Podcast | ۲ تا ۴ vCPU و ۴GB RAM |
| آرشیو بزرگ | Storage و Traffic بیشتر یا Object Storage |
میزبانی Podcast روی سرور مجازی ایران
اگر مخاطبان اصلی Podcast داخل ایران هستند، میتوانید Castopod و فایلهای صوتی را روی VPS ایران قرار دهید. برای آرشیو بزرگ، حجم Disk و ترافیک ماهانه را متناسب با تعداد دانلود اپیزودها انتخاب کنید.
📌 تماس با پشتیبانی:
021-91302460
| ایرانیکاسرور
مرحله اول: نصب Docker روی Ubuntu
برای اینکه Dependencyهای PHP، Database و Cache راحتتر مدیریت شوند، Castopod را با Docker اجرا میکنیم.
Docker Engine و Compose Plugin را از Repository رسمی Docker نصب کنید. بعد از نصب:
docker --version docker compose version
مرحله دوم: ساخت پوشه پروژه
sudo mkdir -p /opt/castopod cd /opt/castopod
مرحله سوم: ساخت Passwordهای تصادفی
برای MariaDB، Redis و Analytics Salt از مقادیر تصادفی استفاده کنید:
openssl rand -hex 32 openssl rand -hex 32 openssl rand -hex 32 openssl rand -hex 32
مرحله چهارم: Docker Compose برای Castopod 1.15.5
برای Production بهتر است Version مشخص را Pin کنید و از latest استفاده نکنید.
services:
castopod:
image: castopod/castopod:1.15.5
container_name: castopod
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: CHANGE_DB_PASSWORD
CP_BASEURL: "https://podcast.example.com"
CP_ANALYTICS_SALT: CHANGE_ANALYTICS_SALT
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
CP_REDIS_PASSWORD: CHANGE_REDIS_PASSWORD
ports:
- "127.0.0.1:8000:8000"
networks:
- castopod-app
- castopod-db
depends_on:
- mariadb
- redis
restart: unless-stopped
mariadb:
image: mariadb:11.4
container_name: castopod-mariadb
environment:
MYSQL_ROOT_PASSWORD: CHANGE_ROOT_PASSWORD
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: CHANGE_DB_PASSWORD
volumes:
- castopod-db:/var/lib/mysql
networks:
- castopod-db
restart: unless-stopped
redis:
image: redis:7.4-alpine
container_name: castopod-redis
command:
- redis-server
- --requirepass
- CHANGE_REDIS_PASSWORD
volumes:
- castopod-cache:/data
networks:
- castopod-app
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
castopod-cache:
networks:
castopod-app:
castopod-db:
internal: true
مقادیر CHANGE را با Passwordهای واقعی جایگزین کنید. Password Database در سرویس Castopod و MariaDB باید دقیقاً یکسان باشد.
⚠️ نکته نسخه: Castopod 1.15.5 نسخه Stable فعلی است. مستندات شاخه توسعه در حال آمادهسازی نسل بعدی هستند؛ برای Production از Image نسخه مشخص 1.15.5 استفاده میکنیم.
مرحله پنجم: اجرای Castopod
sudo docker compose up -d
وضعیت Containerها:
sudo docker compose ps
مشاهده Log:
sudo docker compose logs -f castopod
مرحله ششم: قرار دادن Nginx جلوی Castopod
یک Domain مثل podcast.example.com را به VPS متصل کنید و Nginx را به Port داخلی Castopod Reverse Proxy کنید.
server {
listen 80;
server_name podcast.example.com;
client_max_body_size 512m;
location / {
proxy_pass http://127.0.0.1:8000;
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;
proxy_read_timeout 300s;
}
}
مرحله هفتم: فعال کردن HTTPS
HTTPS فقط برای Passwordها مهم نیست؛ قابلیتهای Federation و ActivityPub Castopod نیز به TLS نیاز دارند.
با Certbot میتوانید Certificate دریافت کنید:
sudo certbot --nginx \ -d podcast.example.com
مرحله هشتم: تکمیل نصب از مرورگر
بعد از بالا آمدن سرویس وارد آدرس زیر شوید:
https://podcast.example.com/cp-install
Install Wizard تنظیمات اولیه را تکمیل میکند و حساب Administrator را میسازید.
مرحله نهم: ساخت اولین Podcast
در Dashboard گزینه افزودن Podcast را انتخاب کنید.
اطلاعات اصلی شامل موارد زیر است:
🔹 عنوان Podcast
🔹 توضیحات
🔹 زبان
🔹 Category
🔹 Podcast Type
🔹 Cover Artwork
🔹 Handle
ابعاد تصویر کاور Podcast
مستندات Castopod برای Cover اصلی Podcast تصویر JPG یا PNG مربع با حداقل ۱۴۰۰×۱۴۰۰ و حداکثر ۳۰۰۰×۳۰۰۰ پیکسل را مشخص میکنند.
بهتر است Artwork ساده، خوانا و مناسب نمایش در اندازه کوچک طراحی شود؛ چون در بسیاری از Podcast Appها تصویر به شکل Thumbnail دیده میشود.
مرحله دهم: انتشار اولین Episode
از Podcast Dashboard گزینه Add an Episode را بزنید.
Castopod برای Episode فایل صوتی MP3 یا M4A را میپذیرد و طبق مستندات نسخه فعلی، سقف پیشفرض Upload برای Episode تا ۵۱۲MB است.
اطلاعات مهم Episode:
🔹 عنوان
🔹 توضیحات
🔹 فایل صوتی
🔹 Cover اختیاری
🔹 شماره Season و Episode
🔹 Transcript
🔹 Chapters
انتشار زمانبندیشده اپیزود
لازم نیست دقیقاً در زمان انتشار وارد پنل شوید. Episode را Draft کنید و Publication Date را روی روز و ساعت مورد نظر قرار دهید.
بعد از Publish، RSS Feed بهصورت خودکار با Episode جدید بهروزرسانی میشود.
RSS Feed پادکست چیست؟
RSS قلب توزیع Podcast است.
فایل Feed اطلاعات Podcast و Episodeها را در اختیار Podcast Directoryها و Playerها قرار میدهد.
Your Castopod
|
v
RSS Feed
|
+----> Apple Podcasts
+----> Podcast Apps
+----> Aggregators
+----> RSS Readers
مزیت مهم Self-hosting این است که آدرس Feed زیر Domain خودتان قرار میگیرد.
آیا Castopod اپیزود را خودش به Spotify و Apple Podcasts میفرستد؟
در معماری Podcast معمولاً RSS Feed شما به Directoryها معرفی میشود. بعد از ثبت Feed، انتشار Episode جدید از طریق تغییر RSS تشخیص داده میشود.
بنابراین فایل را جداگانه برای هر Podcast Player آپلود نمیکنید؛ Castopod Feed مرجع شما است.
Transcript چرا برای Podcast مهم است؟
Transcript فقط برای Accessibility نیست. متن اپیزود باعث میشود محتوای صوتی شما به شکل قابل جستوجو نیز در دسترس باشد.
Castopod میتواند Transcript را همراه Episode نگه دارد و برخی Podcast Appهای جدید نیز آن را نمایش میدهند.
برای SEO بهتر است علاوه بر Transcript، یک خلاصه طبیعی و اختصاصی برای هر Episode نیز داشته باشید.
Chapter در Podcast چیست؟
اگر اپیزود یک ساعت طول دارد، Chapter به کاربر اجازه میدهد مستقیماً به بخش مشخصی برود.
مثلاً:
00:00 Introduction 04:35 Main Topic 22:10 Interview 48:00 Questions 56:30 Conclusion
قرار دادن Podcast Player در سایت دیگر
Castopod Player قابل Embed دارد. بنابراین اگر وبسایت اصلی شما WordPress، Laravel یا هر سیستم دیگری است، لازم نیست فایل Audio را دوباره روی همان سایت Upload کنید.
Episode روی Castopod باقی میماند و Player را داخل سایت اصلی Embed میکنید.
آمار Podcast چگونه ثبت میشود؟
چون فایل Audio از زیرساخت شما Download میشود، Castopod میتواند Statistics مربوط به Listenها و Episodeها را جمعآوری کند.
این یکی از مزیتهای اصلی Self-hosting است؛ برای اطلاعات پایه Podcast وابسته کامل به Analytics یک سرویس خارجی نیستید.
مهاجرت Podcast موجود به Castopod
اگر قبلاً Podcast دارید لازم نیست Episodeها را یکییکی دوباره بسازید.
Castopod امکان Import از RSS Feed را دارد. Feed فعلی را وارد میکنید و Import در Queue قرار میگیرد.
قبل از مهاجرت نهایی حتماً Ownership، Redirect Feed قبلی و تمام Media URLها را بررسی کنید تا Subscriberها از دست نروند.
Background Taskها را فراموش نکنید
در نصبهای Manual، Castopod برای برخی قابلیتها به Task Runner نیاز دارد؛ از جمله Import Podcast، WebSub و برخی پردازشهای جانبی.
در معماری Docker رسمی، Container باید براساس نسخه و مستندات همان Release تنظیم شود؛ اگر نصب Manual انجام میدهید، Cron رسمی Castopod را حتماً اضافه کنید.
اگر آرشیو Podcast خیلی بزرگ شد چه کنیم؟
فایلهای صوتی بخش اصلی Storage را مصرف میکنند. اگر صدها یا هزاران Episode دارید، نگهداشتن همه Media روی Disk همان VPS ممکن است مناسب نباشد.
Castopod متغیرهای مربوط به S3-Compatible Media Storage دارد و در معماری بزرگتر میتوانید Application و Database را روی VPS نگه دارید ولی فایلهای Media را به Object Storage منتقل کنید.
آیا برای Podcast به CDN نیاز داریم؟
برای Podcast کوچک خیر. اما وقتی یک Episode چند صد مگابایتی همزمان توسط هزاران Listener Download شود، CDN میتواند بار Origin را کاهش دهد.
در این حالت معماری میتواند به شکل زیر باشد:
Castopod | v Media Storage | v CDN | +----> Listener 1 +----> Listener 2 +----> Listener 3
برای این معماری میتوانید از مقاله ساخت CDN شخصی با Nginx هم استفاده کنید.
ترکیب رادیوی اینترنتی و Podcast
موضوع ۶۰۱ و ۶۰۲ مکمل هم هستند.
مثلاً یک برنامه ساعت ۲۰ بهصورت Live روی AzuraCast اجرا میشود، Broadcast ضبط میشود و پس از ویرایش میتوانید فایل نهایی را بهعنوان Episode روی Castopod منتشر کنید.
Live Radio | v Recording | v Audio Edit | v Castopod Episode | v RSS Podcast
Backup پلتفرم Podcast
سه بخش اصلی را Backup کنید:
🔹 MariaDB
🔹 Volume فایلهای Media
🔹 Docker Compose و Secretهای Environment
Backup باید خارج از همان VPS نیز نگهداری شود. Snapshot همان سرور جای Backup مستقل را نمیگیرد.
امنیت Castopod
✅ Containerها را با نسخه مشخص اجرا کنید.
✅ Passwordهای Database و Redis را طولانی انتخاب کنید.
✅ Port Database را روی اینترنت Publish نکنید.
✅ HTTPS را اجباری کنید.
✅ Docker و Castopod را بهروز نگه دارید.
✅ از Media و Database Backup بگیرید.
✅ دسترسی SSH را محدود کنید.
✅ در صورت امکان احراز هویت دومرحلهای را فعال کنید.
خطاهای رایج Castopod
صفحه cp-install باز نمیشود
وضعیت Container، Nginx Proxy و Log Castopod را بررسی کنید.
sudo docker compose ps sudo docker compose logs -f castopod
Database Connection Error
MYSQL_DATABASE، MYSQL_USER و MYSQL_PASSWORD را در سرویس Castopod و MariaDB مقایسه کنید.
Upload فایل Podcast خطای 413 میدهد
client_max_body_size در Nginx و محدودیت Upload داخل Container/PHP را بررسی کنید.
RSS بعد از انتشار Episode تغییر نکرده
وضعیت انتشار Episode، Cache و Background Taskها را بررسی کنید.
برای نصب Castopod یا انتخاب Storage مناسب مشکل دارید؟
اگر در نصب Docker، MariaDB، Redis، Nginx، SSL یا انتخاب فضای مناسب برای آرشیو Podcast مشکل دارید، میتوانید درخواست بررسی و کانفیگ سرور ثبت کنید.
📌 تماس با پشتیبانی:
021-91302460
| ایرانیکاسرور
سؤالات متداول
Castopod چیست؟
Castopod یک پلتفرم متنباز برای Self-host کردن Podcast، مدیریت Episode، RSS Feed، Analytics و Player است.
آخرین نسخه Castopod چیست؟
در زمان نگارش این مقاله نسخه Stable فعلی Castopod 1.15.5 است که در ۲۴ فوریه ۲۰۲۶ منتشر شده است.
آیا میتوان چند Podcast روی یک Castopod ساخت؟
بله. Castopod از چند Podcast و چند کاربر پشتیبانی میکند.
آیا Castopod RSS Feed میسازد؟
بله. Feed بهصورت خودکار براساس Podcast و Episodeهای منتشرشده تولید و بهروزرسانی میشود.
آیا Podcast قدیمی را میتوان وارد Castopod کرد؟
بله. امکان Import Podcast از RSS Feed وجود دارد.
آیا Castopod روی VPS نصب میشود؟
بله. میتوانید Castopod را روی VPS لینوکس با Docker اجرا کنید و فایلهای Media را روی همان سرور یا Storage خارجی نگه دارید.
جمعبندی
اگر میخواهید Podcast شما روی Domain و زیرساخت خودتان قرار داشته باشد، Castopod بخش زیادی از پیچیدگی ساخت RSS، Player، Episode Management و Analytics را آماده در اختیارتان قرار میدهد.
برای Podcast کوچک، یک VPS با منابع متوسط کافی است. وقتی آرشیو و تعداد Listenerها رشد کرد، Media را میتوان به Object Storage منتقل کرد و CDN را جلوی فایلهای صوتی قرار داد.
این معماری در کنار AzuraCast یک زیرساخت صوتی کامل میسازد: برنامه زنده را روی رادیوی اینترنتی پخش کنید و نسخه ضبطشده را بعداً بهعنوان Podcast منتشر کنید.
منابع رسمی
📌 تماس با پشتیبانی:
021-91302460
| ایرانیکاسرور






دیدگاهها (۰)