Mastodon 装修笔记:建站后还可以做什么
参考
本文主要参考的教程:
[1] 如何装饰你的站点:自定义CSS、中继站和自定义表情
[2] 进阶魔改:修改字数上限、媒体上限、投票上限、添加自定义主题、界面用语、非登陆用户有限显示、优化中文搜索,附阻止本站嘟文流入某站点方法
装修升级命令
如果使用 DockerHub 建立镜像辅助搭建、修改实例,则每次装修可电脑上修改完成后,push 到 GitHub,GitHub 自动编译完成且推送到 DockerHub后,在服务器端直接使用命令:
1 | cd /home/mastodon/mastodon |
教程:如何利用Docker搭建Mastodon实例(二):进阶魔改篇
利用脚本缩写 tootctl 命令
根据官方文档:使用管理命令行,每次需要运行的命令行很长,使用脚本可以将命令缩写。
打开 mastodon 的目录,并写入脚本:
1 | cd /home/mastodon/mastodon |
脚本内容为:
1 |
|
保存并退出后,执行命令:
1 | chmod +x /home/mastodon/mastodon/tootctl.sh |
之后使用管理命令就可以直接使用 tootctl
。
待处理的数据库迁移
这个一般出现在经历较大的站点升级或较多魔改之后 (我的站点初始搭建之后就出现了这行提醒),在管理员账号的管理面板会出现的一个提醒:有待处理的数据库迁移。请运行它们以确保应用程序正常运行。
找了很多 docker 搭建教程都没有提到这一步,由于对 docker 不熟悉,也不知道从何改起,直到看到Mastodon | 记录大型魔改过程。此时需要数据库迁移:
1 | docker-compose run --rm web rails db:migrate |
另外,还需要运行命令 tootctl cache clear
以避免出现与站外通信延迟较高的问题。成功执行后,运行命令重启服务器,否则数据库迁移不生效。
1 | docker-compose down |
自定义 CSS
参考来自:如何装饰你的站点:自定义CSS、中继站和自定义表情
所有更改在 管理—网站设置-自定义css
进行。
表情包鼠标悬停放大
1 | /* START mastodon emoji scaling by @eh5@eh5.me */ |
长图补丁
使具体图片铺满整个页面:
1 | .image-loader { |
Tag高亮显示(蓝色)
颜色可以通过修改background-color和border-color修改。
1 | /*hashtag style blue by slashine 071320*/ |
自定义表情
网页端:管理员界面
管理员账号的 首选项 - 管理 - 自定义表情 - 上传新表情
,可上传大小不超过 50kb 的 png 或 gif 格式的图作为表情包。
偷别站表情可通过 首选项 - 管理 - 自定义表情 - 远程
,选择想要的表情包,复制后即可在本站看到并管理该表情。
服务器端:偷表情神器
使用 emojidownloader 直接从他站复制一个或多个分类下的表情。
在项目的 releases 界面找到 emoji_downloader_linux_x86_64
,右键复制链接。在服务器合适的目录下:
1 | wget https://github.com/Starainrt/emojidownloader/releases/download/v0.1.0/emoji_downloader_linux_x86_64 # 复制的链接,可能有变化 |
运行 ./emoji_downloader_linux_x86_64
,根据提示一步步操作即可。此处具体步骤可参考:Mastodon | 记录大型魔改过程 #从他站爬取自定义表情包
表情包下载至服务器后需要拷贝到容器中,并导入数据库:
1 | # 以 neodb 的星星表情为例 |
定期清理外站存储
参考此方的教程:Mastodon 媒体存储和数据库备份,直接启动容器执行tootctl命令。
通过 crontab -e
设置定时任务:
1 | 30 2 * * * docker exec mastodon_web_1 tootctl media remove --days=14 >> /home/mastodon/log/mastodon/all.log 2>&1 |
修改实例字数上限
参考 commit 在相应位置进行修改。修改后 precompile 和重启。
蓝盒子站长提示:3.3.0 版本后,app/javascript/mastodon/features/compose/components/compose_form.js
修改会发生变化,请先接受官方文件,然后在该文件中将所有 500 改成你的字数上限,一共2处。
修改投票上限
参考 Commit 在相应位置进行修改。修改后 precompile 和重启。
添加自定义主题
直接从他站拷贝主题:
- 进入他站代码库的
app/javascript
文件夹,在 fonts、images 和 styles 文件夹内选择想要添加的主题,将相关文件复制入代码库。- 蓝盒子站代码库:pullopen
- 蓝盒子站长提示:Win95 主题还需要在
config/webpacker.yml
中加一行- .gif
才可编译。
- 修改
config/themes.yml
- 根据格式
witches-town: styles/witches-town.scss
将添加的主题都写入文件
- 根据格式
- (可选) 修改
config/locales/en.yml
和config/locale/zh-CN.yml
的themes
部分,给主题起英文名和中文名。注意这里需要按照原名的字母顺序排列。 - precompile 和重启。
自己写主题则将主题文件放在相应的位置,修改配置文件,precompile 和重启即可。
修改界面用语
修改中文界面用语,可通过修改 app/javascript/mastodon/locales/zh-CN.json
实现。
如开启 “注册时需要批准” 功能,可在 “你为什么想要加入?” 下加入一段注册提示语。 在 mastodon/config/locales/simple_form.zh-CN.yml
找到 invite_request
项,修改 text
。
主页对非登陆用户只显示10条嘟文
根据 Commit 修改相应文件。
Docker 安装优化中文搜索
参考 进阶魔改:修改字数上限、媒体上限、投票上限、添加自定义主题、界面用语、非登陆用户有限显示、优化中文搜索,附阻止本站嘟文流入某站点方法 的 “Docker 安装优化中文搜索(2022-04-25新增)” 部分。
阻止本站嘟文流入某站
在服务器修改 nginx 配置:
1 | nano /etc/nginx/sites-available/musain.cafe # 以本站为例,一般为实例名 |
在
1 | server { |
后添加
1 | if ($http_user_agent ~* "对方域名不带前后缀") { |
保存并退出。使用命令 systemctl reload nginx
重启 nginx。
屏蔽国内浏览器及搜索爬虫
蓝盒子站长提示:此方法有一定机率误伤使用国内手机的用户,请务必全面通知后再使用!
使用 Cloudflare 可在防火墙规则中添加:如果
1 | (http.host eq "【站点地址】" and not lower(http.user_agent) contains "feedly" and not lower(http.user_agent) contains "pleroma") and ((lower(http.user_agent) contains "2345") or (lower(http.user_agent) contains "360") or (lower(http.user_agent) contains "ali-") or (lower(http.user_agent) contains "alipay") or (lower(http.user_agent) contains "baidu") or (lower(http.user_agent) contains "bingbot") or (lower(http.user_agent) contains "bytespider") or (lower(http.user_agent) contains "coolnovo") or (lower(http.user_agent) contains "duckduckgo") or (lower(http.user_agent) contains "easou") or (lower(http.user_agent) contains "facebook") or (lower(http.user_agent) contains "google") or (lower(http.user_agent) contains "huaweibrowser") or (lower(http.user_agent) contains "iaskspider") or (lower(http.user_agent) contains "iqiyi") or (lower(http.user_agent) contains "jike") or (lower(http.user_agent) contains "lbbrowser") or (lower(http.user_agent) contains "liebao") or (lower(http.user_agent) contains "maxthon") or (lower(http.user_agent) contains "meizu") or (lower(http.user_agent) contains "metasr") or (lower(http.user_agent) contains "micromessenger") or (lower(http.user_agent) contains "miui") or (lower(http.user_agent) contains "miuibrowser") or (lower(http.user_agent) contains "msnbot") or (lower(http.user_agent) contains "oneplus") or (lower(http.user_agent) contains "oppo") or (lower(http.user_agent) contains "qihoo") or (lower(http.user_agent) contains "qiyu") or (lower(http.user_agent) contains "qq") or (lower(http.user_agent) contains "saayaa") or (lower(http.user_agent) contains "se 1.x") or (lower(http.user_agent) contains "se 2.x") or (lower(http.user_agent) contains "sina") or (lower(http.user_agent) contains "sogou") or (lower(http.user_agent) contains "soso") or (lower(http.user_agent) contains "taobao") or (lower(http.user_agent) contains "taobrowser") or (lower(http.user_agent) contains "tencent") or (lower(http.user_agent) contains "teoma") or (lower(http.user_agent) contains "the world") or (lower(http.user_agent) contains "twitter") or (lower(http.user_agent) contains "ucweb") or (lower(http.user_agent) contains "vivo") or (lower(http.user_agent) contains "wechat") or (lower(http.user_agent) contains "weibo") or (lower(http.user_agent) contains "xiaomi") or (lower(http.user_agent) contains "yahoo") or (lower(http.user_agent) contains "yandexbot") or (lower(http.user_agent) contains "yisou") or (lower(http.user_agent) contains "yodao") or (lower(http.user_agent) contains "youdao") or (lower(http.user_agent) contains "zte")) |
则阻止。
不使用 Cloudflare 可在 nginx 的配置文件的 server { } 括号中添加:
1 | if ($http_user_agent ~* (2345|360|ali-|alipay|archive|baidu|bingbot|bytespider|coolnovo|duckduckgo|easou|facebook|google|huaweibrowser|iaskspider|iqiyi|jike|lbbrowser|liebao|maxthon|meizu|metasr|micromessenger|miui|miuibrowser|msnbot|oneplus|oppo|qihoo|qiyu|qq|saayaa|se\ 1.x|se\ 2.x|sina|sogou|soso|taobao|taobrowser|tencent|teoma|the\ world|twitter|ucweb|vivo|wechat|weibo|xiaomi|yahoo|yandexbot|yisou|yodao|youdao|zte)) { |
为站点添加 local-only
参考此方的教程:Mastodon | 以 local-only 代码合并为例浅谈如何合并特定 commit,具体步骤不再赘述。
增加 sidekiq 线程
参考 mastodon 增加 sidekiq 线程 修改相应内容。
修改昵称字数上限
参考 Commit 修改相应内容。