本文介绍如何在 Debian10 搭建 Mastodon 长毛象。
Mastodon 是什么
GitHub 开源地址:https://github.com/tootsuite/mastodon
官方文档:https://docs.joinmastodon.org/
Mastodon 维基百科(英文):https://en.wikipedia.org/wiki/Mastodon_(software)
感谢教程:https://pullopen.github.io/%E5%9F%BA%E7%A1%80%E6%90%AD%E5%BB%BA/2020/10/19/Mastodon-on-Docker.html
简单说,Mastodon 是一个分布式社交网络服务,能够提供类似 Twitter 的社交体验,同时拥有一个独特的功能。
其中最特别的,每个人都能够运行属于自己的实例(只要有足够的动手能力),不同实例之间是相通的,更详细的介绍,可以看这篇文章:
https://www.douban.com/group/topic/113168501/
准备工作
- 一个独立域名
- 一台至少2G的VPS,系统我选择 Debian 10
- 一个SMTP服务(可选,如果不开放注册则不需要)
购买域名看这篇文章:
购买服务器看这篇文章:
至于SMTP,我后续有空再介绍吧。
配置系统
密钥登录
为安全起见,Mastodon 推荐使用 SSH 密钥登录 VPS 服务器,并关闭密码登录,因此,我们首先配置密钥登录。
这里我以 Xsehll 为例。
- 在本地电脑上,生成私钥和公钥。如下图,Xshell
工具
-用户密钥管理者
:
点击
生成
:- 之后复制生成后的公钥。
然后到 VPS 上,运行如下命令:
mkdir -p ~/.ssh nano ~/.ssh/authorized_keys
将刚刚复制的公钥内容,粘贴到
.ssh/authorized_keys
中,保存退出。顺便修改 SSH Port:
echo "Port 2333" >> /etc/ssh/sshd_config
将
2333
修改为你自己想要的端口然后重启 sshd:
/etc/init.d/ssh restart
然后退出登录,在 Xshell 中修改端口,然后右键会话修改:
确保能够正常连接后,关闭密码登录:
nano /etc/ssh/sshd_config
键盘快捷键
Ctrl W
查找PasswordAuthentication
将其前面的 # 删掉(取消注释),在后面将 yes 改成 no
保存退出,再次重启 sshd
配置iptables
为确保重启后,iptables 规则生效,安装 iptables-persistent:
apt install -y iptables-persistent
编辑规则文件,这里以 /etc/iptables/rules.v4
为例:
nano /etc/iptables/rules.v4
在文件内添加以下规则:
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
注意放行你自己设置的 SSH 端口
保存规则:
iptables-restore < /etc/iptables/rules.v4
输入以下命令即可查看设置的 iptables 规则:
iptables-restore < /etc/iptables/rules.v4
安装常用命令
以下一键运行:
apt update && apt install wget python git curl nano git -y
安装Docker和Docker-compose
此处使用官方提供的一键脚本安装 docker 和 docker-compose:
bash <(curl -L https://get.docker.com/)
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
拉取Mastodon镜像
首先创建存放目录:
mkdir -p /home/mastodon/mastodon
cd /home/mastodon/mastodon
拉取镜像:
docker pull tootsuite/mastodon:latest #如果需要指定版本,请将latest改成v3.2.1等版本号
获取官方 docker-compose.yml
:
wget https://raw.githubusercontent.com/tootsuite/mastodon/master/docker-compose.yml
修改 docker-compose.yml
:
nano docker-compose.yml
修改 postgres 版本号:
如上图,修改红色框部分为以下内容:
image: postgres:12.5-alpine
接着依次找到 web
、streaming
、sidekiq
分类,在每一类的 image: tootsuite/mastodon
后添加:latest
或者你刚才拉取的版本号
变成image: tootsuite/mastodon:latest
或image: tootsuite/mastodon:v3.2.1
等等。
修改无误后,Ctrl X 保存退出。
配置PostgreSQL
运行如下命令,注意管理员密码最好不带特殊符号,否则可能出错:
docker run --name postgres12 -v /home/mastodon/mastodon/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=数据库管理员密码 --rm -d postgres:12.5-alpine
完成后,查看 /home/mastodon/mastodon/postgres
会看到 postgres
相关的多个文件。
之后运行:
docker exec -it postgres12 psql -U postgres
创建数据库用户及密码:
CREATE USER mastodon WITH PASSWORD '数据库密码(最好和数据库管理员密码不一样)' CREATEDB;
创建成功后,输入 \q
退出数据库。
最后,停止数据库:
docker stop postgres12
配置Mastodon
首先在 /home/mastodon/mastodon
目录下,创建配置文件:
touch .env.production
然后运行:
docker-compose run --rm web bundle exec rake mastodon:setup
然后按照提示进行输入:
- Domain name: 此处输入你的域名
- Do you want to enable single user mode? 是否开启单人单机模式
- Are you using Docker to run Mastodon? 是否使用docker运行mastodon,输入 Y
- 然后是数据库连接信息:
其中 Name of PostgreSQL user:
填写 mastodon
Password of PostgreSQL user
填写我们刚刚设置的数据库密码
- Redis 部分直接三个回车
- Do you want to store uploaded files on the cloud?媒体文件上传到云储存,没钱,先填N
- Do you want to send e-mails from localhost? 填N
- 然后是设置 SMTP邮件发送,这个这篇文章就不展开了。
- This configuration will be written to .env.production Save configuration? 填Y
完成之后,会出现 .env.production
配置,务必复制下来,保存在本地电脑,等下会再次用到
完成之后,会出现 .env.production
配置,务必复制下来,保存在本地电脑,等下会再次用到
完成之后,会出现 .env.production
配置,务必复制下来,保存在本地电脑,等下会再次用到
- Prepare the database now? 建立数据库 填Y
- Compile the assets now? 填Y
- Do you want to create an admin user straight away? 创建管理员账号,填Y
成功之后,马上重新编写 .env.production
nano .env.production
将刚刚复制下来配置粘贴到文件中
然后启动 Mastodon:
docker-compose up -d
设置文件权限:
chown 991:991 -R public
chown -R 70:70 postgres
停止 Mastodon:
docker-compose down
重新运行:
docker-compose up -d
配置Nginx
为方便管理使用,我选择 LNMP 一键脚本安装 Nginx
运行以下命令一键安装 Nginx:
apt install screen -y
screen -S lnmp
wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh nginx
新增站点:
lnmp vhost add
第一步输入域名,其他全部 n
回车即可
注意选择添加 SSL 证书:
Add SSL Certificate (y/n) y
1: Use your own SSL Certificate and Key
2: Use Let's Encrypt to create SSL Certificate and Key
Enter 1 or 2: 2
编写站点配置文件,我的示例域名:zarath.me
首先将刚刚通过 lnmp vhost add
生成的配置文件复制出来,保存到电脑上:
cat /usr/local/nginx/conf/vhost/zarath.me.conf
主要用到的是其中的证书部分:
然后,本地电脑浏览器打开 nginx模板,将其中的 example.com
替换成自己域名
将20和43行的/home/mastodon/live/public
改成/home/mastodon/mastodon/public
,
将 ssl 证书部分改为我们刚刚复制出来的内容
然后复制修改后的配置文件
清空原配置文件:
echo > zarath.me.conf
编辑配置文件:
nano zarath.me.conf
将我们修改的配置文件粘贴进去,保存退出
然后重启 nginx:
lnmp nginx restart
稍等一下,然后浏览器打开你的域名,属于你自己的 Mastodon 站点已经搭建成功!
开启全文搜索(可选)
接下来使用 elasticsearch 配置全文搜索(可选,不是必须的,不过建议设置)
执行:
cd /home/mastodon/mastodon
nano docker-compose.yml
编辑docker-compose.yml
,去掉 es
部分前所有的 # 号,并且去掉 web
部分中 es
前面的 # 号
然后再 nano .env.production
编辑 .env.production
文件,加上以下内容:
ES_ENABLED=true
ES_HOST=es
ES_PORT=9200
重启容器:
docker-compose down
docker-compose up -d
此时会拉取 elasticsearch 镜像,完成后,输入 ls
会看到文件夹内多出一个 elasticsearch
文件夹
设置权限:
chown 1000:1000 -R elasticsearch
再次重启容易:
docker-compose down
docker-compose up -d
然后生成索引:
docker-compose run --rm web bin/tootctl search deploy
设置完毕!
可能遇到的坑
如果你搭建完毕后,打开站点, Ctrl F5 强制刷新后,出现如下问题:
- 页面空白
- 页面排版错误
而 F12 也似乎没有发现问题,只有空白页处能看到提示:使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 Mastodon 应用
造成以上问题的原因,可能是由于你使用 CloudFlare 做 CDN,然后在将域名托管到 CF 时,默认选择了 Auto Minify
解决办法:
向下滑动,取消勾选如下三项:
然后再到 Caching
清除缓存:
之后再刷新应该就没有问题了。
后记
之所以搭建 Mastodon,源于10年前许下的承诺,要搭建一个网站作为生日礼物,送给我的另一半。
后续将会继续编写 Mastodon 相关教程。
One comment
最后一句太戳心了 我也给另一半搭过博客 然后。。就没有然后了