轻博客Plume的搭建

什么是 Plume ?
Plume是一个基于ActivityPub的联合博客引擎。它是用Rust编写的,带有Rocket框架,以及Diesel与数据库交互。前端使用Ructe模板、WASM和SCSS。
反向代理
假设我们实际访问地址为: https://plume.laosu.ml:444
| 域名 | 局域网地址 | 备注 |
|---|---|---|
plume.laosu.ml | http://192.168.0.197:7879 | plume 的访问地址 |
在 npm 中的设置

SSL 都勾选了

命令行安装
.env.txt 文件
将下面的内容保存为 .env.txt 文件
基于官方 https://docs.joinplu.me/docker.sample.env 修改
BASE_URL=plume.laosu.ml:444
USE_HTTPS=1# generate one with openssl rand -base64 32
ROCKET_SECRET_KEY=9gpVFbpgyvkzq/Miz1euBAze8CeRzxzmYoYD5XBA2k8=
ROCKET_ADDRESS=0.0.0.0
ROCKET_PORT=7878# Mail settings
MAIL_SERVER=smtp.88.com
MAIL_PORT=465
MAIL_USER=wbsu2003@88.com
MAIL_PASSWORD=<第三方邮件客户端专用密码>
MAIL_HELO_NAME=laosu
MAIL_ADDRESS=wbsu2003@88.com# DATABASE SETUP
POSTGRES_PASSWORD=passw0rd
POSTGRES_USER=plume
POSTGRES_DB=plume# you can safely leave those defaults
DATABASE_URL=postgres://plume:passw0rd@postgres:5432/plume
MIGRATION_DIRECTORY=migrations/postgres
BASE_URL:如果用npm反代,这里填局域网IP+
端口也可以,例如:192.168.0.197:7879,但是访问不能用IP,否则登录会报错;USE_HTTPS:如果上一步使用局域网IP,这里改为0
# 使用 IP 的示例
BASE_URL=192.168.0.197:7879
USE_HTTPS=0
ROCKET_SECRET_KEY:执行penssl rand -base64 32可以生成;MAIL_部分请根据自己的情况填写,有两种情况下会用到发邮件;- 忘记密码:网页上需要重置密码时发送邮件;
- 注册策略:设为
email时,表示注册时,Plume需要邮件确认;
如果邮件设置没问题,忘记密码可以通过邮件进行重置

POSTGRES_PASSWORD:可以改复杂一些;DATABASE_URL:如果POSTGRES_PASSWORD修改了,这里也要跟着变化;
其他的保持默认就可以,想了解更多的变量,请阅读官方文档:https://docs.joinplu.me/environment/
docker-compose.yml 文件
将下面的内容保存为 docker-compose.yml 文件
基于官方 https://docs.joinplu.me/docker-compose.sample.yml 修改
version: '3'services:postgres:image: postgres:14container_name: plume-dbenv_file: .env.txtrestart: unless-stoppedvolumes:- "./data:/var/lib/postgresql/data"plume:image: plumeorg/plume:0.7.2container_name: plume-webenv_file: .env.txtrestart: unless-stoppedvolumes:- "./media:/app/static/media"- "./.env.txt:/app/.env"- "./search_index:/app/search_index"ports:- "7879:7878"depends_on:- postgres
以上工作都完成之后,可以依次执行下面的命令
# 新建文件夹 plume 和 子目录
mkdir -p /volume2/docker/plume/{data,media,search_index}# 进入 plume 目录
cd /volume2/docker/plume# 运行数据库容器
docker-compose up -d postgres# 等待 postgres 初始化完成(用 docker-compose logs 看 postgres 的日志输出)
# 数据库设置,第一次迁移运行
docker-compose run --rm plume plm migration run

接下来进行实例设置,并创建管理员账号
# 重建搜索引擎
docker-compose run --rm plume plm search init# 创建你的实例
docker-compose run --rm plume plm instance new -d 'plume.laosu.ml:444' -n 'laosu test blog' -l 'default licence'
【重要】:
-d后面一定要填写完整的域名和端口,否则你上传的图片不能被正确的打开
# 创建管理员账号
docker-compose run --rm plume plm users new -n 'admin' -N 'laosu' -b 'laosu' -e 'wbsu2003@hotmail.com' -p '123456' --admin
这些设置,有些可以在 管理 中再修改,但是有些是不能的

现在可以一键启动了
# 一键启动
docker-compose up -d

运行
在浏览器中输入 https://plume.laosu.ml:444 就可以看到主界面了
界面默认显示的是繁体中文,老苏并没找到设置语言的地方;

不管你
BASE_URL设置了域名还是IP,只要用IP访问,登录账号或者创建账号都会显示下面的错误

登录后,进入 Dashboard 就可以创建博客了

起个标题
似乎不能使用中文,会报
Invalid name错误

现在可以开始写博客了

新增文章

发布

填写标签等,因为尚未上传照片,封面先选无

上传图片

上传成功后,能在图片集中看到

编辑文章,选择封面

回到首页看看效果,感觉图片的比例可能不符合要求,显示不全

小结
- 环境变量文件中,
BASE_URL用域名还是IP都是可以的,但是访问时一定要用域名,否则登录和注册会报错;既然如此,老苏建议还是用域名吧; - 用命令行创建实例时,域名一定要正确,否则上传的图片会打不开;
参考文档
Plume-org/Plume: Federated blogging application, thanks to ActivityPub (now on https://git.joinplu.me/ — this is just a mirror)
地址:https://github.com/Plume-org/Plume
Installing with Docker ⋅ Plume documentation
地址:https://docs.joinplu.me/installation/with/docker/
Plume: a federated blogging application
地址:https://joinplu.me/
相关文章:
轻博客Plume的搭建
什么是 Plume ? Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的,带有 Rocket 框架,以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为: https://plume.laosu.ml…...
机器人关节电机PWM
脉冲宽度调制(Pulse width modulation,PWM)技术。一种模拟控制方式 机器人关节电机的控制通常使用PWM(脉冲宽度调制)技术。PWM是一种用于控制电子设备的技术,通过控制高电平和低电平之间的时间比例,实现对电子设备的控制。在机器人关节电机中,PWM信号可以控制电机的…...
MPU6050详解(含源码)
前言:MPU6050是一款强大的六轴传感器,需要理解MPU6050首先得有IIC的基础,MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,内部有硬件算法支持. 1…...
Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法
目录: Vue入门学习笔记:TodoList(一):HelloWorld Vue入门学习笔记:TodoList(二):挂载点、模板、实例 Vue入门学习笔记:TodoList(三)&a…...
怎么找到引发回流的JavaScript代码?
要找到引发回流的JavaScript代码,可以使用浏览器的开发者工具中的性能分析器。不同的浏览器有不同的名称和位置,例如Google Chrome的开发者工具中的性能分析器被称为Performance,Firefox的开发者工具中的性能分析器被称为Profiler。 以下是在…...
未来广告策划,转型还是淘汰?
在广告行业呆了十来年了,最近我越来越感觉到广告行业真的是一个需要与时俱进,并且应用场景非常广泛的一个专业。 而且由于这是一个需要创意能力的行业,所以对比于重复性容易被机器以及人工智能所代替的岗位行业来说,广告的可替代…...
【vscode远程开发】使用SSH远程连接服务器 「内网穿透」
文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…...
七天从零实现Web框架Gee - 扩展
到这里前七天的任务已经完成,但我们可以对Gee框架进行一些扩展 补充HTTP请求方法 原作者只实现了 GET, POST 路由添加,其他的 PUT, DELETE 等标准 HTTP 方法未实现,实现方法也很简单,只需在gee.go中增加如下代码 // PUT define…...
什么是土壤水分传感器
土壤水分传感器又称土壤湿度传感器由不锈钢探针和防水探头构成,可长期埋设于土壤和堤坝内使用,对表层和深层土壤进行墒情的定点监测和在线测量。与数据采集器配合使用,可作为水分定点监测或移动测量的工具(即农田墒情检测仪&#…...
月薪17k需要什么水平?98年测试员的面试全过程…
我的情况 大概介绍一下个人情况,男,本科,三年多测试工作经验,懂python,会写脚本,会selenium,会性能,然而到今天都没有收到一份offer!从年后就开始准备简历,年…...
知了汇智:坚持发展产教融合,做好高校、人才与企业之间的桥梁
6月将正式迎来高校毕业季,大学生就业是聚焦全社会关注的头等大事。5月9日,成都知了汇智科技有限公司(以下简称“知了汇智”)组织开展“深化产教融合、聚焦人才培养”的主题座谈会议,联动高校与合作企业参加,…...
MyBatis缓存-一级缓存--二级缓存的非常详细的介绍
目录 MyBatis-缓存-提高检索效率的利器 缓存-官方文档 一级缓存 基本说明 一级缓存原理图 代码演示 修改MonsterMapperTest.java, 增加测试方法 结果 debug 一级缓存执行流程 一级缓存失效分析 关闭sqlSession会话后 , 一级缓存失效 如果执行sqlSession.clearCache(…...
macOS Ventura 13.4 RC2(22F63)发布
系统介绍 根据黑果魏叔官网提供:5 月 12 日消息,苹果今天面向开发人员,发布了 macOS Ventura 13.4 的第 2 个候选 RC 版本(内部版本号 22F63),距离上个候选版本相隔数天时间。 macOS Ventura 带来了台前调…...
【为什么可以相信一个HTTPS网站】
解决信用,仅仅有加密和解密是不够的。加密解密解决的只是传输链路的安全问题,相当于两个人说话不被窃听。可以类比成你现在生活 的世界——货币的信用,是由政府在背后支撑的;购房贷款的信用,是由银行在背后支撑的&…...
4.进阶篇
目录 一、按照测试对象划分 1.界面测试(UI测试) 界面测试的常见错误: 2.可靠性测试 3.容错性测试 4.文档测试 5.兼容性测试 6.易用性 7.安装卸载测试 8.安全性测试 9.性能测试 10.内存泄漏 二、按照是否查看代码 1.黑盒测试 2.…...
conda init
在输入conda activate 的时候出现报错: 解决: "需要使用 conda init 进行初始化" 的错误通常是由于你的系统环境缺少 conda 的初始化脚本所致。当你尝试在终端中执行 conda activate 命令时,会出现此错误提示。 要解决这个问题,可以通过以下步骤进行操作: 打…...
Elasticsearch(二)
Clasticsearch(二) DSL查询语法 文档 文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 常见查询类型包括: 查询所有:查询出所有数据,一般测试用。如:…...
工业视觉检测的8个技术优势
工业4.0时代,自动化生产线成为了这个时代的主旋律,而工业视觉检测技术也成为其中亮眼的表现,其机器视觉技术为设备提供了智慧的双眼,让自动化的脚步得以加速! 在实际的生产应用中,视觉技术方案往往先被着手…...
16 KVM虚拟机配置-其他常见配置项
文章目录 16 KVM虚拟机配置-其他常见配置项16.1 概述16.2 元素介绍16.3 配置示例 16 KVM虚拟机配置-其他常见配置项 16.1 概述 除系统资源和虚拟设备外,XML配置文件还需要配置一些其他元素,本节介绍这些元素的配置方法。 16.2 元素介绍 iothreads&…...
(转载)从0开始学matlab(第1天)—变量和数组
MATLAB 程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合,并且拥有一个数组名。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据所对应行标和列标。标量在 MATLAB 中也被当作数组来处理——…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
