使用docker部署mastodon可以很大程度上简化部署流程,而且对服务器性能要求似乎会更低。
准备工作
- 一台服务器(我使用的是1核1G的服务器,建议不要学我)
- ssh客户端
- postgresql服务器(我使用的是Azure的学生版)
我为了方便迁移(删除实例)选择将数据库分开部署 - mailgun
具体流程
服务器配置(使用Ubuntu 20.04)
参照mastodon官方文档进行配置
1.编辑/etc/ssh/sshd_config并查找PasswordAuthentication. 确保它未注释并设置为no. 如果您进行了任何更改,请重新启动 sshd:
systemctl restart ssh.service
2.更新系统包
apt update && apt upgrade -y
3.安装 fail2ban
apt install fail2ban
编辑/etc/fail2ban/jail.local加入以下内容
[DEFAULT]
destemail = your@email.here
sendername = Fail2Ban
[sshd]
enabled = true
port = 22
[sshd-ddos]
enabled = true
port = 22
重启fail2ban
systemctl restart fail2ban
4.安装防火墙并仅将 SSH、HTTP 和 HTTPS 端口列入白名单
首先,安装iptables-persistent
。在安装过程中,它会询问您是否要保留当前规则,选择拒绝。
apt install -y iptables-persistent
编辑/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
手动加载配置
iptables-restore < /etc/iptables/rules.v4
5.安装常用命令
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
6.安装docker和docker-compose
bash <(curl -L https://get.docker.com/)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
部署mastodon
为了便于管理,你可以新建一个用户
adduser mastodon
进入该用户的文件夹
cd /home/mastodon
为mastodon新建一个文件夹并进入
mkdir mastodon & cd mastodon
拉取最新版镜像
docker pull tootsuite/mastodon:latest
wget https://raw.githubusercontent.com/tootsuite/mastodon/master/docker-compose.yml
修改docker-compose.yml
vim docker-compose.yml
! 找到web
、streaming
、sidekiq
分类,将其中的image: tootsuite/mastodon
全部改成image: tootsuite/mastodon:latest
(latest可以改成其他版本号,这取决于你拉取的镜像版本)
将elasticsearch版本改为7.10.2
保存退出
正式开始部署
在/home/mastodon/mastodon
文件夹中创建空白.env.production
touch .env.production
root用户中执行
docker-compose run --rm web bundle exec rake mastodon:setup
然后它会询问一系列问题:
- Domain name: (你的域名)
- Do you want to enable single user mode? No.(是否使用单人模式,选择“不”)
- Are you using Docker to run Mastodon? Yes
- PostgreSQL host: (这取决于你自己的postgresql地址)
- PostgreSQL port: 5432
- Name of PostgreSQL database: 这取决于你自己的postgresql数据库名称)
- Name of PostgreSQL user: (你的数据库账号)
- Password of PostgreSQL user: (你的数据库密码)
Redis host: mastodon_redis_1
(注意这里的mastodon,如果在上面你新建的文件夹为其他名字请改为你自己所取的名字)
- Redis port: 6379
- Redis password: (无密码直接回车)
- Do you want to store uploaded files on the cloud?
(是否使用对象储存,取决于个人需求,若不使用则媒体文件全部储存在本服务器,否则请配置对象储存,若使用对象储存请填写相关参数) - Do you want to send e-mails from localhost? No
(填写你的smtp发信资料,我使用了mailgun)
!然后会出现.env.production
配置,请先复制下来,进程完成后请编辑.env.production
,并加入复制的内容
然后它会问你是否你初始化数据库和创建管理员账户,均填yes
为相应文件夹赋权
chown 991:991 -R ./public
启动Mastodon
docker-compose down
docker-compose up -d
nginx配置
安装nginx
sudo apt install nginx -y
配置nginx
进入nginx配置文件目录
cd /etc/nginx/conf.d
下载官方配置文件
wget https://raw.githubusercontent.com/mastodon/mastodon/main/dist/nginx.conf & mv nginx.conf mastodon.conf
编辑配置文件
sudo vim mastodon.conf
将所有example.com改成你自己的域名
将/home/mastodon/live/public
改成/home/mastodon/mastodon/public
先将listen 443 ssl http2;
、listen [::]:443 ssl http2
以及所有ssl开头的项用#注释掉
保存退出
获取ssl证书(使用cerbot)
安装cerbot
apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
获取证书
sudo certbot certonly --nginx -d
重新编辑nginx配置文件,将之前的注释内容取消注释
将ssl_certificate
和ssl_certificate_key
也取消注释
使用nginx -t
检查配置是否有误
无误后使用ngnix -s reload
重载配置
然后你用你的域名应该就可以打开mastodon了(当然,前提是你设置好了dns)