基于Ubuntu20.04+Docker+Docker-compose+Mastodon部署类微博站点

头图参数:

parameters:
(cowboy shot:1.1), (public:1.331), (city:1.331), silver hair, yellow eyes, (sleepy:1.1), nun, solo, 1girl, teen, (masterpiece:1.2), best quality, masterpiece, highres, original, extremely detailed wallpaper, perfect lighting, (extremely detremely detailed CG:1.2),
Negative prompt: (large breasts,huge breasts:1.4), (mutation, poorly drawn :1.2), (long body :1.3), (mutation, poorly drawn :1.2) , liquid body, long neck, uncoordinated body,fused ears, (ugly:1.4), lowres, one hand with more than 5 fingers, one hand with less than 5 fingers, (worst quality, low quality:1.4)
Steps: 20, Sampler: Euler a, CFG scale: 5, Seed: 686017611, Size: 960x540, Model hash: a1535d0a42, Model: AnythingV5Ink_v32Ink
— 随机引文图生成自使用fortunes-zh包的new bing(Sydney)

本文默认使用以下环境及镜像:

  • Ubuntu 20.04 LTS
  • Nginx 1.18.0
  • Docker 23.0.3, build 3e7cbfd
  • Docker-compose v2.17.2
  • PostgreSQL:alpine3.17
  • redis:7.2-rc1-alpine3.17
  • tootsuite/mastodon:v4.1

0. Docker-compose获取的一点小插曲

docker-compose是一个便于部署docker容器(组)的工具,一般来说可以在GitHub相关项目里获取到下载地址,部分网络教学如runoob提供了一种便于直接使用系统参数获取对应版本的方式如下:

curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

本次部署原本也是图方便按照这个配置来安装,但无论如何识别不了docker的版本。检查后发现系统uname -s命令返回了Linux而非linux(L大写),导致获取了一个奇怪版本的docker-compose。之后部署docker-compose时可以使用下面的命令来避免这个问题:

curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose<code>-`uname -s | | tr [:upper:] [:lower:]`-`uname -</code>m` > /usr/local/bin/docker-compose

1. 准备工作

部署Mastodon需要:

  • 一台服务器,内存至少1G,推荐2G,最好4G或更多,有外网IP,有一个域名
  • Linux系统,本案例使用了Ubuntu 20.04 LTS,但能跑Docker应该都可以
  • 一个SMTP服务——第三方或本地,我用了第三方
  • 创建一个mastodon用户,指定ID为991,禁止登录(关闭shell),只能从其它用户su -s mastodon过去:adduser -u 991 --disabled-login --disabled-password mastodon
  • 拉取Postgresql镜像docker pull postgres:alpine3.17,版本可以用自己喜欢的,尽量高一点,比如13或更高
  • 拉取Redis镜像docker pull redis:7.2-rc1-alpine3.17,版本也尽量新一点
  • 拉取mastodon镜像:docker pull tootsuite/mastodon:v4.2,可以选择更新的版本
  • 下载docker-compose.yml

2. 配置

修改docker-compose.yml文件:

  • 各镜像加上tag,保持与之前拉取的一致,避免用latest
  • 为你的redis加上验证流程
  • volumes改为实际的路径,可以保持与直接安装放在同样的路径下,比如/var/lib/xxx
  • mastodon的三个服务需要修改env_file的路径到/home/mastodon/.env.production,以及public路径到/home/mastodon/public,以便统一管理及权限控制,su mastodon后使用touch ~/.env.production命令创建环境文件,以便docker-compose检测

然后启动Postgresql和Redis:

docker-compose up -d db
docker-compose up -d redis

配置数据库创建用户:

docker exec -it mastodon-db-1 psql -U postgres
postgres=# CREATE USER mastodon WITH PASSWORD '数据库用户密码' CREATEDB;

生成mastodon配置:

docker-compose run --rm web bundle exec rake mastodon:setup

这个步骤比较麻烦,还好大部分选项都有默认值。几个需要注意的项目是:

  • 域名填你的域名
  • Docker模式选“是”
  • 数据库名和用户名填mastodon
  • 是否上传云存储先填否,如果有可以后面再配
  • 发送邮件的信息填前面准备的SMTP服务器信息,这里我使用的iRedMail部署的邮箱服务,需要使用plain验证模式。填完可以给自己发个邮件测试一下,不成功可以返回重填(当然,全部参数重填也是很麻烦,所以最好先测试好SMTP再创建配置,尽量一次成功)。

之后就是建数据库和创建管理员账号,记得把管理员密码记录下来。

最后把配置保存到/home/mastodon/.env.production文件中。

3. 启动服务

在docker-compose.yml文件位置启动服务,需要注意由于文件归属问题需要以下方命令来将地址归属权交给mastodon用户,否则将无法修改public路径下的文件,如你的头像和背景图。

docker-compose up -d
docker-compose run --user=root --rm web chown -R mastodon /opt/mastodon/public/

这会启动三个服务:web, stremming, sidekiq,看一下状态是否都正常,如果出错则看一下日志。

4. 配置Nginx

还是使用Certbot获取一个免费的Let’s encrypt证书吧,具体的操作流程可以看这篇文章的第四、五两节。

获取证书后,下载mastodon的默认配置模板,将其放置于nginx的配置文件目录,然后根据这个文件里的要求修改配置即可。主要要注意的有以下几点:

  • 需要将配置中的域名修改为你自己的域名
  • 将使用ssl证书地址的注释去掉,如果使用certbot管理的let’s encrypt证书,路径也不需要改,否则将路径改到你证书的地址
  • 由于本次安装使用容器化部署,需要将文中的try_files $uri =404;修改为try_files $uri @proxy;全文替换即可
  • (可选)配置access_log与error_log位置来监控接入状态

完成配置后,使用nginx -s reload命令重新读取配置即可通过域名访问主页面。

5. 开始使用

每个人对于世界的理解不同,做出的选择也不一样。我并非是什么社交动物,最多只是在基因的强迫下进行最低限度的社交与社会暴露。所以我并不需要全文搜索或类似的功能,如果您需要相关的功能,可以移步本文原参考文章的“增加全文搜索”章节。

如果您选择低限度的接入,可以访问Mastodon项目维护的joinmastodon.org来加入推荐的服务提供者。

6. 日常运维

由于平时使用中会同步很多联邦宇宙中的内容过来,导致服务器硬盘使用增加很快,为了节约空间,建议定期清除:

清除过期媒体

docker-compose run --rm web bin/tootctl media remove --days=14

清除孤立媒体(未被嘟文引用的媒体)

docker-compose run --rm web bin/tootctl media remove-orphans

清除无用嘟文(未被引用的或本地用户已不再关注的等)

docker-compose run --rm web bin/tootctl statuses remove

其中最占硬盘的就是媒体内容。这个清除语句可以放在crontab里定期执行。

7. 参考文献

8. 追加附属

不出意外的,平时不玩SNS的人不玩SNS肯定是有理由的。
这里有另一款可选的类似服务Misskey教程非常完善。


已发布

分类

, ,

来自

标签: