<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Media Aggregation on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/media-aggregation/</link>
        <description>Recent content in Media Aggregation on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Mon, 07 Sep 2026 21:38:42 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/media-aggregation/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>LunaTV</title>
        <link>https://producthunt.programnotes.cn/en/p/lunatv/</link>
        <pubDate>Mon, 07 Sep 2026 21:38:42 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/lunatv/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1592893658769-5da16cb93236?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3ODg3ODgwOTl8&amp;ixlib=rb-4.1.0" alt="Featured image of post LunaTV" /&gt;&lt;h1 id=&#34;moontechlablunatv&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/MoonTechLab/LunaTV&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MoonTechLab/LunaTV&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;moontv&#34;&gt;MoonTV
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;public/logo.png&#34; alt=&#34;MoonTV Logo&#34; width=&#34;120&#34;&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;🎬 &lt;strong&gt;MoonTV&lt;/strong&gt; 是一个开箱即用的、跨平台的影视聚合播放器。它基于 &lt;strong&gt;Next.js 14&lt;/strong&gt; + &lt;strong&gt;Tailwind CSS&lt;/strong&gt; + &lt;strong&gt;TypeScript&lt;/strong&gt; 构建，支持多资源搜索、在线播放、收藏同步、播放记录、云端存储，让你可以随时随地畅享海量免费影视内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div align=&#34;center&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://img.shields.io/badge/Next.js-14-000?logo=nextdotjs&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Next.js&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/TailwindCSS-3-38bdf8?logo=tailwindcss&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;TailwindCSS&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/TypeScript-4.x-3178c6?logo=typescript&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;TypeScript&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/License-MIT-green&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License&#34;
	
	
&gt;
&lt;img src=&#34;https://img.shields.io/badge/Docker-ready-blue?logo=docker&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Docker Ready&#34;
	
	
&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-功能特性&#34;&gt;✨ 功能特性
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;🔍 &lt;strong&gt;多源聚合搜索&lt;/strong&gt;：一次搜索立刻返回全源结果。&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;丰富详情页&lt;/strong&gt;：支持剧集列表、演员、年份、简介等完整信息展示。&lt;/li&gt;
&lt;li&gt;▶️ &lt;strong&gt;流畅在线播放&lt;/strong&gt;：集成 HLS.js &amp;amp; ArtPlayer。&lt;/li&gt;
&lt;li&gt;❤️ &lt;strong&gt;收藏 + 继续观看&lt;/strong&gt;：支持 Kvrocks/Redis/Upstash 存储，多端同步进度。&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;PWA&lt;/strong&gt;：离线缓存、安装到桌面/主屏，移动端原生体验。&lt;/li&gt;
&lt;li&gt;🌗 &lt;strong&gt;响应式布局&lt;/strong&gt;：桌面侧边栏 + 移动底部导航，自适应各种屏幕尺寸。&lt;/li&gt;
&lt;li&gt;👿 &lt;strong&gt;智能去广告&lt;/strong&gt;：自动跳过视频中的切片广告（实验性）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;注意部署后项目为空壳项目无内置播放源和直播源需要自行收集&#34;&gt;注意：部署后项目为空壳项目，无内置播放源和直播源，需要自行收集
&lt;/h3&gt;&lt;details&gt;
  &lt;summary&gt;点击查看项目截图&lt;/summary&gt;
  &lt;img src=&#34;public/screenshot1.png&#34; alt=&#34;项目截图&#34; style=&#34;max-width:600px&#34;&gt;
  &lt;img src=&#34;public/screenshot2.png&#34; alt=&#34;项目截图&#34; style=&#34;max-width:600px&#34;&gt;
  &lt;img src=&#34;public/screenshot3.png&#34; alt=&#34;项目截图&#34; style=&#34;max-width:600px&#34;&gt;
&lt;/details&gt;
&lt;h3 id=&#34;请不要在-b站小红书微信公众号抖音今日头条或其他中国大陆社交平台发布视频或文章宣传本项目不授权任何科技周刊月刊类项目或站点收录本项目&#34;&gt;请不要在 B站、小红书、微信公众号、抖音、今日头条或其他中国大陆社交平台发布视频或文章宣传本项目，不授权任何“科技周刊/月刊”类项目或站点收录本项目。
&lt;/h3&gt;&lt;h2 id=&#34;-目录&#34;&gt;🗺 目录
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e6%8a%80%e6%9c%af%e6%a0%88&#34; &gt;技术栈&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e9%83%a8%e7%bd%b2&#34; &gt;部署&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#zeabur-%e4%b8%80%e9%94%ae%e9%83%a8%e7%bd%b2&#34; &gt;一键部署&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#Kvrocks-%e5%ad%98%e5%82%a8%e6%8e%a8%e8%8d%90&#34; &gt;Docker 部署&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; &gt;配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e8%ae%a2%e9%98%85&#34; &gt;订阅&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e8%87%aa%e5%8a%a8%e6%9b%b4%e6%96%b0&#34; &gt;自动更新&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f&#34; &gt;环境变量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e5%ae%a2%e6%88%b7%e7%ab%af&#34; &gt;客户端&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#AndroidTV-%e4%bd%bf%e7%94%a8&#34; &gt;AndroidTV 使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#roadmap&#34; &gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e5%ae%89%e5%85%a8%e4%b8%8e%e9%9a%90%e7%a7%81%e6%8f%90%e9%86%92&#34; &gt;安全与隐私提醒&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#license&#34; &gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#%e8%87%b4%e8%b0%a2&#34; &gt;致谢&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;技术栈&#34;&gt;技术栈
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;分类&lt;/th&gt;
					&lt;th&gt;主要依赖&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;前端框架&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://nextjs.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Next.js 14&lt;/a&gt; · App Router&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;UI &amp;amp; 样式&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://tailwindcss.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tailwind CSS 3&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;TypeScript 4&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;播放器&lt;/td&gt;
					&lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/zhw2590582/ArtPlayer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ArtPlayer&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://github.com/video-dev/hls.js/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HLS.js&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;代码质量&lt;/td&gt;
					&lt;td&gt;ESLint · Prettier · Jest&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;部署&lt;/td&gt;
					&lt;td&gt;Docker&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;部署&#34;&gt;部署
&lt;/h2&gt;&lt;p&gt;本项目&lt;strong&gt;仅支持 Docker 或其他基于 Docker 的平台&lt;/strong&gt; 部署。&lt;/p&gt;
&lt;h3 id=&#34;zeabur-一键部署&#34;&gt;zeabur 一键部署
&lt;/h3&gt;&lt;p&gt;点击下方按钮即可一键部署，自动配置 LunaTV + Kvrocks 数据库：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zeabur.com/templates/8MPTQU/deploy&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://zeabur.com/button.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Deploy on Zeabur&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ 无需配置，一键启动（自动部署完整环境）&lt;/li&gt;
&lt;li&gt;✅ 自动 HTTPS 和全球 CDN 加速&lt;/li&gt;
&lt;li&gt;✅ 持久化存储，数据永不丢失&lt;/li&gt;
&lt;li&gt;✅ 免费额度足够个人使用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;⚠️ 重要提示&lt;/strong&gt;：部署完成后，需要在 Zeabur 中为 LunaTV 服务设置访问域名（Domain）才能在浏览器中访问。详见下方 &lt;a class=&#34;link&#34; href=&#34;#5-%e8%ae%be%e7%bd%ae%e8%ae%bf%e9%97%ae%e5%9f%9f%e5%90%8d%e5%bf%85%e9%a1%bb&#34; &gt;设置访问域名&lt;/a&gt; 步骤。&lt;/p&gt;
&lt;h3 id=&#34;kvrocks-存储推荐&#34;&gt;Kvrocks 存储（推荐）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/moontechlab/lunatv:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;on&lt;/span&gt;-&lt;span class=&#34;l&#34;&gt;failure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;3000:3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;USERNAME=admin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PASSWORD=admin_password&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;NEXT_PUBLIC_STORAGE_TYPE=kvrocks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;KVROCKS_URL=redis://moontv-kvrocks:6666&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-kvrocks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-kvrocks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;apache/kvrocks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;moontv-kvrocks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;kvrocks-data:/var/lib/kvrocks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kvrocks-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;redis-存储有一定的丢数据风险&#34;&gt;Redis 存储（有一定的丢数据风险）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/moontechlab/lunatv:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;on&lt;/span&gt;-&lt;span class=&#34;l&#34;&gt;failure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;3000:3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;USERNAME=admin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PASSWORD=admin_password&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;NEXT_PUBLIC_STORAGE_TYPE=redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;REDIS_URL=redis://moontv-redis:6379&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-redis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;redis:alpine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;moontv-redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 请开启持久化，否则升级/重启后数据丢失&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./data:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;upstash-存储&#34;&gt;Upstash 存储
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在 &lt;a class=&#34;link&#34; href=&#34;https://upstash.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;upstash&lt;/a&gt; 注册账号并新建一个 Redis 实例，名称任意。&lt;/li&gt;
&lt;li&gt;复制新数据库的 &lt;strong&gt;HTTPS ENDPOINT 和 TOKEN&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;使用如下 docker compose&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/moontechlab/lunatv:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;moontv-core&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;on&lt;/span&gt;-&lt;span class=&#34;l&#34;&gt;failure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;3000:3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;USERNAME=admin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PASSWORD=admin_password&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;NEXT_PUBLIC_STORAGE_TYPE=upstash&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;UPSTASH_URL=上面 https 开头的 HTTPS ENDPOINT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;UPSTASH_TOKEN=上面的 TOKEN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-zeabur-部署推荐&#34;&gt;☁️ Zeabur 部署（推荐）
&lt;/h3&gt;&lt;p&gt;Thanks to @SzeMeng76&lt;/p&gt;
&lt;p&gt;Zeabur 是一站式云端部署平台，使用预构建的 Docker 镜像可以快速部署，无需等待构建。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部署步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加 KVRocks 服务&lt;/strong&gt;（先添加数据库）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击 &amp;ldquo;Add Service&amp;rdquo; &amp;gt; &amp;ldquo;Docker Images&amp;rdquo;&lt;/li&gt;
&lt;li&gt;输入镜像名称：&lt;code&gt;apache/kvrocks&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;配置端口：&lt;code&gt;6666&lt;/code&gt; (TCP)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记住服务名称&lt;/strong&gt;（通常是 &lt;code&gt;apachekvrocks&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置持久化卷（重要）&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;在服务设置中找到 &amp;ldquo;Volumes&amp;rdquo; 部分&lt;/li&gt;
&lt;li&gt;点击 &amp;ldquo;Add Volume&amp;rdquo; 添加新卷&lt;/li&gt;
&lt;li&gt;Volume ID: &lt;code&gt;kvrocks-data&lt;/code&gt;（可自定义，仅支持字母、数字、连字符）&lt;/li&gt;
&lt;li&gt;Path: &lt;code&gt;/var/lib/kvrocks/db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保存配置&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;重要提示&lt;/strong&gt;：持久化卷路径必须设置为 &lt;code&gt;/var/lib/kvrocks/db&lt;/code&gt;（KVRocks 数据目录），这样配置文件保留在容器内，数据库文件持久化，重启后数据不会丢失！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加 LunaTV 服务&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击 &amp;ldquo;Add Service&amp;rdquo; &amp;gt; &amp;ldquo;Docker Images&amp;rdquo;&lt;/li&gt;
&lt;li&gt;输入镜像名称：&lt;code&gt;ghcr.io/moontechlab/lunatv:latest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;配置端口：&lt;code&gt;3000&lt;/code&gt; (HTTP)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置环境变量&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 LunaTV 服务的环境变量中添加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 必填：管理员账号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;admin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_secure_password
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 必填：存储配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_STORAGE_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;kvrocks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;KVROCKS_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;redis://apachekvrocks:6666
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 可选：站点配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SITE_BASE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://your-domain.zeabur.app
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_SITE_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;LunaTV Enhanced
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANNOUNCEMENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;欢迎使用 LunaTV Enhanced Edition
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 可选：豆瓣代理配置（推荐）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_DOUBAN_PROXY_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cmliussss-cdn-tencent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cmliussss-cdn-tencent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用服务名称作为主机名：&lt;code&gt;redis://apachekvrocks:6666&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果服务名称不同，请替换为实际名称&lt;/li&gt;
&lt;li&gt;两个服务必须在同一个 Project 中&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;部署完成&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zeabur 会自动拉取镜像并启动服务&lt;/li&gt;
&lt;li&gt;等待服务就绪后，需要手动设置访问域名（见下一步）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;5-设置访问域名必须&#34;&gt;5. 设置访问域名（必须）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;在 LunaTV 服务页面，点击 &amp;ldquo;Networking&amp;rdquo; 或 &amp;ldquo;网络&amp;rdquo; 标签&lt;/li&gt;
&lt;li&gt;点击 &amp;ldquo;Generate Domain&amp;rdquo; 生成 Zeabur 提供的免费域名（如 &lt;code&gt;xxx.zeabur.app&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;或者绑定自定义域名：
&lt;ul&gt;
&lt;li&gt;点击 &amp;ldquo;Add Domain&amp;rdquo; 添加你的域名&lt;/li&gt;
&lt;li&gt;按照提示配置 DNS CNAME 记录指向 Zeabur 提供的目标地址&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;设置完域名后即可通过域名访问 LunaTV&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;strong&gt;绑定自定义域名（可选）&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;在服务设置中点击 &amp;ldquo;Domains&amp;rdquo;&lt;/li&gt;
&lt;li&gt;添加你的自定义域名&lt;/li&gt;
&lt;li&gt;配置 DNS CNAME 记录指向 Zeabur 提供的域名&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;-更新-docker-镜像&#34;&gt;🔄 更新 Docker 镜像
&lt;/h4&gt;&lt;p&gt;当 Docker 镜像有新版本发布时，Zeabur 不会自动更新。需要手动触发更新。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;进入服务页面&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击需要更新的服务（LunaTV 或 KVRocks）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重启服务&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击 &lt;strong&gt;&amp;ldquo;服务状态&amp;rdquo;&lt;/strong&gt; 页面，再点击 &lt;strong&gt;&amp;ldquo;重启当前版本&amp;rdquo;&lt;/strong&gt; 按钮&lt;/li&gt;
&lt;li&gt;Zeabur 会自动拉取最新的 &lt;code&gt;latest&lt;/code&gt; 镜像并重新部署&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;提示&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;latest&lt;/code&gt; 标签时，Restart 会自动拉取最新镜像&lt;/li&gt;
&lt;li&gt;生产环境推荐使用固定版本标签（如 &lt;code&gt;v5.5.6&lt;/code&gt;）避免意外更新&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;配置文件&#34;&gt;配置文件
&lt;/h2&gt;&lt;p&gt;完成部署后为空壳应用，无播放源，需要站长在管理后台的配置文件设置中填写配置文件（后续会支持订阅）&lt;/p&gt;
&lt;p&gt;配置文件示例如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;cache_time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;api_site&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;dyttzy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://xxx.com/api.php/provide/vod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;示例资源&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;detail&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://xxx.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// ...更多站点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;custom_category&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;华语&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;movie&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;华语&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cache_time&lt;/code&gt;：接口缓存时间（秒）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api_site&lt;/code&gt;：你可以增删或替换任何资源站，字段说明：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;key&lt;/code&gt;：唯一标识，保持小写字母/数字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api&lt;/code&gt;：资源站提供的 &lt;code&gt;vod&lt;/code&gt; JSON API 根地址。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;：在人机界面中展示的名称。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detail&lt;/code&gt;：（可选）部分无法通过 API 获取剧集详情的站点，需要提供网页详情根 URL，用于爬取。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;custom_category&lt;/code&gt;：自定义分类配置，用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;：分类显示名称（可选，如不提供则使用 query 作为显示名）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;：分类类型，支持 &lt;code&gt;movie&lt;/code&gt;（电影）或 &lt;code&gt;tv&lt;/code&gt;（电视剧）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;query&lt;/code&gt;：搜索关键词，用于在豆瓣 API 中搜索相关内容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;custom_category 支持的自定义分类已知如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;movie：热门、最新、经典、豆瓣高分、冷门佳片、华语、欧美、韩国、日本、动作、喜剧、爱情、科幻、悬疑、恐怖、治愈&lt;/li&gt;
&lt;li&gt;tv：热门、美剧、英剧、韩剧、日剧、国产剧、港剧、日本动画、综艺、纪录片&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也可输入如 &amp;ldquo;哈利波特&amp;rdquo; 效果等同于豆瓣搜索&lt;/p&gt;
&lt;p&gt;MoonTV 支持标准的苹果 CMS V10 API 格式。&lt;/p&gt;
&lt;h2 id=&#34;订阅&#34;&gt;订阅
&lt;/h2&gt;&lt;p&gt;将完整的配置文件 base58 编码后提供 http 服务即为订阅链接，可在 MoonTV 后台/Helios 中使用。&lt;/p&gt;
&lt;h2 id=&#34;自动更新&#34;&gt;自动更新
&lt;/h2&gt;&lt;p&gt;可借助 &lt;a class=&#34;link&#34; href=&#34;https://github.com/containrrr/watchtower&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;watchtower&lt;/a&gt; 自动更新镜像容器&lt;/p&gt;
&lt;p&gt;dockge/komodo 等 docker compose UI 也有自动更新功能&lt;/p&gt;
&lt;h2 id=&#34;环境变量&#34;&gt;环境变量
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;变量&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
					&lt;th&gt;可选值&lt;/th&gt;
					&lt;th&gt;默认值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;USERNAME&lt;/td&gt;
					&lt;td&gt;站长账号&lt;/td&gt;
					&lt;td&gt;任意字符串&lt;/td&gt;
					&lt;td&gt;无默认，必填字段&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;PASSWORD&lt;/td&gt;
					&lt;td&gt;站长密码&lt;/td&gt;
					&lt;td&gt;任意字符串&lt;/td&gt;
					&lt;td&gt;无默认，必填字段&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SITE_BASE&lt;/td&gt;
					&lt;td&gt;站点 url&lt;/td&gt;
					&lt;td&gt;形如 &lt;a class=&#34;link&#34; href=&#34;https://example.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://example.com&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;空&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_SITE_NAME&lt;/td&gt;
					&lt;td&gt;站点名称&lt;/td&gt;
					&lt;td&gt;任意字符串&lt;/td&gt;
					&lt;td&gt;MoonTV&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ANNOUNCEMENT&lt;/td&gt;
					&lt;td&gt;站点公告&lt;/td&gt;
					&lt;td&gt;任意字符串&lt;/td&gt;
					&lt;td&gt;本网站仅提供影视信息搜索服务，所有内容均来自第三方网站。本站不存储任何视频资源，不对任何内容的准确性、合法性、完整性负责。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_STORAGE_TYPE&lt;/td&gt;
					&lt;td&gt;播放记录/收藏的存储方式&lt;/td&gt;
					&lt;td&gt;redis、kvrocks、upstash&lt;/td&gt;
					&lt;td&gt;无默认，必填字段&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;KVROCKS_URL&lt;/td&gt;
					&lt;td&gt;kvrocks 连接 url&lt;/td&gt;
					&lt;td&gt;连接 url&lt;/td&gt;
					&lt;td&gt;空&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;REDIS_URL&lt;/td&gt;
					&lt;td&gt;redis 连接 url&lt;/td&gt;
					&lt;td&gt;连接 url&lt;/td&gt;
					&lt;td&gt;空&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;UPSTASH_URL&lt;/td&gt;
					&lt;td&gt;upstash redis 连接 url&lt;/td&gt;
					&lt;td&gt;连接 url&lt;/td&gt;
					&lt;td&gt;空&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;UPSTASH_TOKEN&lt;/td&gt;
					&lt;td&gt;upstash redis 连接 token&lt;/td&gt;
					&lt;td&gt;连接 token&lt;/td&gt;
					&lt;td&gt;空&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_SEARCH_MAX_PAGE&lt;/td&gt;
					&lt;td&gt;搜索接口可拉取的最大页数&lt;/td&gt;
					&lt;td&gt;1-50&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_DOUBAN_PROXY_TYPE&lt;/td&gt;
					&lt;td&gt;豆瓣数据源请求方式&lt;/td&gt;
					&lt;td&gt;见下方&lt;/td&gt;
					&lt;td&gt;direct&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_DOUBAN_PROXY&lt;/td&gt;
					&lt;td&gt;自定义豆瓣数据代理 URL&lt;/td&gt;
					&lt;td&gt;url prefix&lt;/td&gt;
					&lt;td&gt;(空)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE&lt;/td&gt;
					&lt;td&gt;豆瓣图片代理类型&lt;/td&gt;
					&lt;td&gt;见下方&lt;/td&gt;
					&lt;td&gt;direct&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_DOUBAN_IMAGE_PROXY&lt;/td&gt;
					&lt;td&gt;自定义豆瓣图片代理 URL&lt;/td&gt;
					&lt;td&gt;url prefix&lt;/td&gt;
					&lt;td&gt;(空)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_DISABLE_YELLOW_FILTER&lt;/td&gt;
					&lt;td&gt;关闭色情内容过滤&lt;/td&gt;
					&lt;td&gt;true/false&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NEXT_PUBLIC_FLUID_SEARCH&lt;/td&gt;
					&lt;td&gt;是否开启搜索接口流式输出&lt;/td&gt;
					&lt;td&gt;true/ false&lt;/td&gt;
					&lt;td&gt;true&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;NEXT_PUBLIC_DOUBAN_PROXY_TYPE 选项解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;direct: 由服务器直接请求豆瓣源站&lt;/li&gt;
&lt;li&gt;cors-proxy-zwei: 浏览器向 cors proxy 请求豆瓣数据，该 cors proxy 由 &lt;a class=&#34;link&#34; href=&#34;https://github.com/bestzwei&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Zwei&lt;/a&gt; 搭建&lt;/li&gt;
&lt;li&gt;cmliussss-cdn-tencent: 浏览器向豆瓣 CDN 请求数据，该 CDN 由 &lt;a class=&#34;link&#34; href=&#34;https://github.com/cmliu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CMLiussss&lt;/a&gt; 搭建，并由腾讯云 cdn 提供加速&lt;/li&gt;
&lt;li&gt;cmliussss-cdn-ali: 浏览器向豆瓣 CDN 请求数据，该 CDN 由 &lt;a class=&#34;link&#34; href=&#34;https://github.com/cmliu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CMLiussss&lt;/a&gt; 搭建，并由阿里云 cdn 提供加速&lt;/li&gt;
&lt;li&gt;custom: 用户自定义 proxy，由 NEXT_PUBLIC_DOUBAN_PROXY 定义&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE 选项解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;direct：由浏览器直接请求豆瓣分配的默认图片域名&lt;/li&gt;
&lt;li&gt;server：由服务器代理请求豆瓣分配的默认图片域名&lt;/li&gt;
&lt;li&gt;img3：由浏览器请求豆瓣官方的精品 cdn（阿里云）&lt;/li&gt;
&lt;li&gt;cmliussss-cdn-tencent：由浏览器请求豆瓣 CDN，该 CDN 由 &lt;a class=&#34;link&#34; href=&#34;https://github.com/cmliu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CMLiussss&lt;/a&gt; 搭建，并由腾讯云 cdn 提供加速&lt;/li&gt;
&lt;li&gt;cmliussss-cdn-ali：由浏览器请求豆瓣 CDN，该 CDN 由 &lt;a class=&#34;link&#34; href=&#34;https://github.com/cmliu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CMLiussss&lt;/a&gt; 搭建，并由阿里云 cdn 提供加速&lt;/li&gt;
&lt;li&gt;custom: 用户自定义 proxy，由 NEXT_PUBLIC_DOUBAN_IMAGE_PROXY 定义&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;客户端&#34;&gt;客户端
&lt;/h2&gt;&lt;p&gt;v100.0.0 以上版本可配合 &lt;a class=&#34;link&#34; href=&#34;https://github.com/MoonTechLab/Selene&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Selene&lt;/a&gt; 使用，移动端体验更加友好，数据完全同步&lt;/p&gt;
&lt;h2 id=&#34;androidtv-使用&#34;&gt;AndroidTV 使用
&lt;/h2&gt;&lt;p&gt;目前该项目可以配合 &lt;a class=&#34;link&#34; href=&#34;https://github.com/zimplexing/OrionTV&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OrionTV&lt;/a&gt; 在 Android TV 上使用，可以直接作为 OrionTV 后端&lt;/p&gt;
&lt;p&gt;已实现播放记录和网页端同步&lt;/p&gt;
&lt;h2 id=&#34;安全与隐私提醒&#34;&gt;安全与隐私提醒
&lt;/h2&gt;&lt;h3 id=&#34;请设置密码保护并关闭公网注册&#34;&gt;请设置密码保护并关闭公网注册
&lt;/h3&gt;&lt;p&gt;为了您的安全和避免潜在的法律风险，我们要求在部署时&lt;strong&gt;强烈建议关闭公网注册&lt;/strong&gt;：&lt;/p&gt;
&lt;h3 id=&#34;部署要求&#34;&gt;部署要求
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;设置环境变量 &lt;code&gt;PASSWORD&lt;/code&gt;&lt;/strong&gt;：为您的实例设置一个强密码&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;仅供个人使用&lt;/strong&gt;：请勿将您的实例链接公开分享或传播&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;遵守当地法律&lt;/strong&gt;：请确保您的使用行为符合当地法律法规&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;重要声明&#34;&gt;重要声明
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;本项目仅供学习和个人使用&lt;/li&gt;
&lt;li&gt;请勿将部署的实例用于商业用途或公开服务&lt;/li&gt;
&lt;li&gt;如因公开分享导致的任何法律问题，用户需自行承担责任&lt;/li&gt;
&lt;li&gt;项目开发者不对用户的使用行为承担任何法律责任&lt;/li&gt;
&lt;li&gt;本项目不在中国大陆地区提供服务。如有该项目在向中国大陆地区提供服务，属个人行为。在该地区使用所产生的法律风险及责任，属于用户个人行为，与本项目无关，须自行承担全部责任。特此声明&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;MIT&lt;/a&gt; © 2025 MoonTV &amp;amp; Contributors&lt;/p&gt;
&lt;h2 id=&#34;致谢&#34;&gt;致谢
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/theodorusclarence/ts-nextjs-tailwind-starter&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ts-nextjs-tailwind-starter&lt;/a&gt; — 项目最初基于该脚手架。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/LibreSpark/LibreTV&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LibreTV&lt;/a&gt; — 由此启发，站在巨人的肩膀上。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/zhw2590582/ArtPlayer&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ArtPlayer&lt;/a&gt; — 提供强大的网页视频播放器。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/video-dev/hls.js&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HLS.js&lt;/a&gt; — 实现 HLS 流媒体在浏览器中的播放支持。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/bestzwei&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Zwei&lt;/a&gt; — 提供获取豆瓣数据的 cors proxy&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/cmliu&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CMLiussss&lt;/a&gt; — 提供豆瓣 CDN 服务&lt;/li&gt;
&lt;li&gt;感谢所有提供免费影视接口的站点。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;star-history&#34;&gt;Star History
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.star-history.com/#MoonTechLab/LunaTV&amp;amp;Date&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=MoonTechLab/LunaTV&amp;amp;type=Date&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Star History Chart&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
