什么是 Castopod ?
Castopod
是一种免费的开源播客托管解决方案,专为希望与观众互动的播客而设计。Castopod
目前处于测试阶段,但已经相当稳定并被世界各地的播客使用!
命令行安装
安装并不复杂,但是容器比较多,其中官方的镜像就有 3
个:
castopod/app
:包含所有Castopod
依赖项的应用程序包;castopod/web-server
:Castopod
的Nginx
配置;castopod/video-clipper
:一个可选的基于ffmpeg
构建的视频剪辑镜像包;
此外,Castopod
需要一个与 MySQL
兼容的数据库。还可以添加 Redis
数据库作为缓存处理程序
前期准备
先要准备好域名 ,因为老苏发现用 http://群晖IP:8782
访问会被强制转为 https://群晖IP:8782
,然后返回错误:ERR_SSL_PROTOCOL_ERROR
域名 | 局域网地址 | 备注 |
---|---|---|
https://cp.laosu.ml |
http://192.168.0.197:8782 |
Castopod 的访问地址 |
用 Nginx Proxy Manager
做反代处理;实际访问时,因为老苏没有备案,所以是 https://cp.laosu.ml:444
其中:
192.168.0.197
为群晖的IP
8772
是准备分配给Castopod
的端口
SSL
设置里一般没啥问题的话都是全部勾选
docker-compose 安装
基于以上,所以在群晖上还是继续采用 docker-compose
安装,请将下面的内容保存为 docker-compose.yml
文件
官方原始的
docker-compose.yml
和变量说明可以在: https://docs.castopod.org/getting-started/docker.html 找到,老苏做了细微的调整;如果你要在portainer
中直接运行,还需要把卷改为绝对路径;
version: "3.7"services:app:image: castopod/app:1.1.2container_name: "castopod-app"restart: unless-stoppedvolumes:- ./media:/opt/castopod/public/mediaenvironment:MYSQL_DATABASE: castopodMYSQL_USER: castopodMYSQL_PASSWORD: ERDZQi6Lfg8SCP_BASEURL: "https://cp.laosu.ml:444"CP_ANALYTICS_SALT: changemeCP_CACHE_HANDLER: redisCP_REDIS_HOST: redisweb-server:image: castopod/web-server:1.1.2container_name: "castopod-web-server"restart: unless-stoppedports:- 8782:80volumes:- ./media:/var/www/html/mediamariadb:image: mariadb:10.6container_name: "castopod-mariadb"restart: unless-stoppedvolumes:- ./data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: C8NuQ38js3DsMYSQL_DATABASE: castopodMYSQL_USER: castopodMYSQL_PASSWORD: ERDZQi6Lfg8Sredis:image: rediscontainer_name: "castopod-redis"volumes:- ./cache:/data# this container is optional# add this if you want to use the videoclips featurevideo-clipper:image: castopod/video-clipper:1.1.2container_name: "castopod-video-clipper"volumes:- ./media:/opt/castopod/public/mediaenvironment:MYSQL_DATABASE: castopodMYSQL_USER: castopodMYSQL_PASSWORD: ERDZQi6Lfg8Srestart: unless-stopped
环境变量
这里只列出了老苏用到的环境变量,没用到的可以去看官网的文档说明:https://docs.castopod.org/getting-started/docker.html#environment-variables
mariadb:10.6
可变 | 值 |
---|---|
MYSQL_ROOT_PASSWORD |
root 用户的密码,需要修改为你自己的 |
MYSQL_DATABASE |
数据库库名, 设为了 castopod |
MYSQL_USER |
数据库用户,设为了 castopod |
MYSQL_PASSWORD |
数据库用户 castopod 对应的密码, 需要修改为你自己的 |
castopod/video-clipper:1.1.2
需保持和
mariadb:10.6
的设置一致;
可变 | 值 |
---|---|
MYSQL_DATABASE |
数据库库名 |
MYSQL_USER |
数据库用户 |
MYSQL_PASSWORD |
数据库用户 castopod 对应的密码 |
castopod/app:1.1.2
需保持和
mariadb:10.6
的设置一致;
可变 | 值 |
---|---|
MYSQL_DATABASE |
数据库库名 |
MYSQL_USER |
数据库用户 |
MYSQL_PASSWORD |
数据库用户 castopod 对应的密码 |
CP_BASEURL |
应用的 web 地址,需要改成你自己的地址,有端口也要带上 |
CP_ANALYTICS_SALT |
买搞明白是啥,感觉像是个密码类型的 |
CP_CACHE_HANDLER |
可选 file 和 redis ,设为 redis |
CP_REDIS_HOST |
redis 数据库主机名,设为 redis |
开始启动
然后执行下面的命令
# 新建文件夹 castopod 和 子目录
mkdir -p /volume2/docker/castopod/{cache,data,media}# 进入 castopod 目录
cd /volume2/docker/castopod# 修改 media 目录权限
chmod 777 media# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d
/media
文件夹必须是可读可写的,否则你在创建新的博客上会遇到mkdir(): Permission denied
错误
运行
在浏览器中输入 https://cp.laosu.ml:444
程序默认支持中文,不需要另外设置;
如果没有自动跳转的话,就手动打开 https://cp.laosu.ml:444/cp-install
设置管理员账号
登录成功之后的主界面
可以创建一个新的播客
**注意:**博客封面必须是方形的图片,而且要超过
1400px
创建成功
还要发布播客
发布成功后,Castopod
会为你创建一个社交页面
你的播客将拥有自己的页面,其中包含许多可以自定义的设置
最后看看版本信息
参考文档
ad-aures/castopod: Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience. Synchronized read-only mirror of https://code.castopod.org/adaures/castopod
地址:https://github.com/ad-aures/castopod
Official Docker images | Castopod documentation
地址:https://docs.castopod.org/getting-started/docker.html
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2166814.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
互动播客方案Castopod的安装
什么是 Castopod ? Castopod 是一种免费的开源播客托管解决方案,专为希望与观众互动的播客而设计。Castopod 目前处于测试阶段,但已经相当稳定并被世界各地的播客使用! 命令行安装
安装并不复杂,但是容器比较多&#……
旁路电容0.1uF是怎么来的
旁路电容在数字电路系统中所起的基本且重要作用,即储能与为高频噪声电流提供低阻抗路径,尽管还并未给旁路电容的这些功能概括一个“高大上”的名字,然而旁路电容所起的终极作用就是为了电源完整性(Power Integrity, PI)……
索马里ECTN/BESC/CTN证书
索马里ECTN/BESC/CTN证书 从2023年2月1日起,所有到索马里清关必须提供ECTN/CTN证书。 根据索马里法令凡是发货到索马里都必须申请电子货物跟踪单ECTN/BESC,如果没有申请将视为触犯索马里的条例,并在目的港自动受到惩罚。所有出口到索马里的货物必须在船抵……
STL02_map之插入注意事项
Map容器:每个元素都是键值-实值成对存储,自动根据键值排序,键值不能重复,不能被修改。
map如图所示,键值和实值是一一对应的。map的键值和实值类型可以是其他类型,图中键值类型设置为int类型,实……
「SQL面试题库」 No_25 统计各专业学生人数
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰……
研究生阶段应该如何度过?
本文档主要用于对新来的研究生进行培训,有不合适的地方欢迎讨论,勿喷,谢谢!
1 身心健康第一重要,学业第二
吃好早餐:要想身体好,早餐要吃好;规律生活:早睡早起……
【玩转client-go】解析 Kubernetes 资源的 YAML 数据的 Go 函数实现
背景
Kubernetes 是一款流行的容器编排系统,它可以自动化地部署、扩展和管理容器化的应用程序。在 Kubernetes 中,所有的资源都以 YAML 文件的形式进行定义和配置。在某些情况下,我们需要将已经创建的 Kubernetes 资源的 YAML 数据提取出来&……
python的组合和继承
python的组合和继承
一。继承 当子类继承父类时,用super().某某()可以直接调用父类的行为class a:def work(self):print("zhe")
class b(a):def work1(self):super().work()#self.work()
db()
d.work1()二。组合
clas……
python的异常和读的结合
这是一个用异常来实现的写入,encodingutf-8’是一个编码形式我们的文本默认的GBK
try:wopen(rb.txt,w,encodingutf-8)w.write(你好python)
except BaseException as e:print(e)
finally:w.close()with open(rb.txt,r,encodingutf-8) as f:print(f.read())…
python GUI编程
这是我的第一个GUI
from tkinter import *
from tkinter import messagebox
rootTk()
btno1Button(root)
btno1[text]点我就送花btno1.pack()def songhua(e):#e就是事件对象messagebox.showinfo("Message",送你一朵玫瑰花)print(送你99朵玫瑰花)
btno1.bind(<But……
Pandas入门实践2 -数据处理
为了准备数据进行分析,我们需要执行数据处理。在本节中,我们将学习如何清理和重新格式化数据(例如,重命名列和修复数据类型不匹配)、对其进行重构/整形,以及对其进行丰富(例如,离散化……
一、lua基础知识1
一、lua 的数据类型
–类型 a1; –number print(type(a)) –number b"HelloWorld"; print(type(b)) –string 两种数据类型 ctrue; print(type(c)) –boolean true 或者 false d print; d("HelloWorld"); print(type(d)); –function类型 ……
二、lua语言基础2
1.lua的类型有哪些?答:lua的数据类型有:number,string,nil function,table,thread,userdata(用户自定义的类型),boolean(布尔类型) 2.什么是尾调用,尾调用有什么优点尾调用:在一个函数的最后一步开始调用另……
quick-cocos2dx-luaUI控件讲解
–MyApp部分 require("config") require("cocos.init") require("framework.init") local MyApp class("MyApp", cc.mvc.AppBase) function MyApp:ctor() MyApp.super.ctor(self) end function MyApp:run() cc.FileUti……
quick-cocos2dx lua语言讲解 (动作,定时器,触摸事件,工程的类的讲解)
–MainScene部分
— display.newScene 创建一个场景 — 在quick里面我们的控件、精灵 一般是加载到场景上的 local MainScene class("MainScene", function() return display.newScene("MainScene") end) function MainScene:ctor() –创……
使用quick-cocos2dx-lua 实现的小游戏(包含碰撞检测,触屏发子弹)
–主界面local MainScene class("MainScene", function()return display.newScene("MainScene")end)ON true;function MainScene:ctor()local bg cc.Sprite:create("main_background.png");bg:setScale(2);bg:setPosition(display.cx,display……
cocos2d-js 中scrollview详解
/****
开头的一些废话:
1、多思考,善于思考
2、懂得变通
3、多多查询API首先复制一段 API中的源码:(UIScrollView.js)这段代码可以看出 scrollview
中的容器是一个node,并且他的位置是:代码最后……
cocos2d-js中的回调函数中世界坐标系和节点坐标系的相互转换
世界坐标系和节点坐标系都是OPENGL 坐标系 1、世界坐标系原点就是屏幕的左下角; 2、节点坐标系的原点就是一个节点的左下角; 3、两个坐标系可以通过已经写好的cocosAPI进行想换转换; 4、所有的节点需要转为一个节点上或者是统一的世界坐标系……
通过JavaScript实现漂浮
<html>
<head><meta http-equiv"Content-Type" content"text/html"; charset"gb2312" /><title>漂浮广告</title><style type"text/css">div{position:absolute;}</style>
</head>
&……
序列动画和图片内存问题
一、帧动画问题 /*** 帧动画总结:* 1、如果精灵进行新建时,加载了纹理,那么setRestoreOriginalFrame可以设置为false或者true* 2、如果精灵新建时,没有加载纹理的话,那么setRestoreOriginalFrame需要设置为false&#……
编程日记2023/4/16 15:01:22