Mastodon 建站笔记
Prerequisites
参考蓝盒子站长的教程 ,一直进行到把 docker 和 docker-compose 装好。
Checklist:
- ssh-key设置并关闭密码登录
- 开启防火墙
- 域名映射到服务器ip
- 安装成功 docker 和 docker-compose
Postgres database
Update 2022.2.19:
这一步我已经找到原因了,是因为在原教程中,写的是:
刚才docker-compose.yml文件中,数据库(db)部分的地址为./postgres:/var/lib/postgresql/data,因此你的数据库绝对地址为/home/mastodon/mastodon/postgres。
然后我发现我wget最新的docker-compose配置,这边已经变成了:
1 | volumes: |
所以我当时按照教程运行:
1 | docker run --name postgres12 -v /home/mastodon/mastodon/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=设置数据库管理员密码 --rm -d postgres:12.5-alpine |
实际上是在./postgres
里操作,但我应该在./postgres14
里操作才能真的把数据写进docker。所以这里应该把命令改为:
1 | docker run --name postgres12 -v /home/mastodon/mastodon/postgres14:/var/lib/postgresql/data -e POSTGRES_PASSWORD=设置数据库管理员密码 --rm -d postgres:12.5-alpine |
或者把docker-compose中的
1 | volumes: |
改回
1 | volumes: |
总之目的都是让我们能真的实际操作到postgres的数据并让docker能访问到。
这里因为我还是按照之前的路径操作,后来直接进入mastodon_db_1
才真正写到了./postgres14
里,所以我的./postgres
实际上是没有用的,我就把整个文件夹删掉了。
原文:
在设置mastodon的时候,运行:
1 | sudo docker-compose run --rm web bundle exec rake mastodon:setup |
我在这个地方卡住了非常久,在postgres那里尝试了各种版本教程的排列组合最后的结果都是:
1 | Database connection could not be established with this configuration, try again. |
后来我认真看了一下这一步,它的输出是:
1 | Starting mastodon_db_1 ... done |
查看docker container也是这两个docker在跑:
1 | $ docker container list -a |
于是我尝试把教程中4. 初始化PostgreSQL的这句话:
1 | docker exec -it postgres12 psql -U postgres |
改成
1 | docker exec -it mastodon_db_1 psql -U postgres |
之后再添加mastodon用户:
1 | > CREATE USER mastodon WITH PASSWORD 'your_password' CREATEDB; |
完整操作看起来是这样的:
1 | $ sudo docker exec -it mastodon_db_1 psql -U postgres |
这时候再运行:
1 | sudo docker-compose run --rm web bundle exec rake mastodon:setup |
按照下列输出就可以通过验证了:
1 | Domain name: example.com |
把接下来的部分一直到
1 | It is also saved within this container so you can proceed with this wizard. |
两行绿字中间的所有内容都复制下来。
接下来依然按照蓝盒子教程走,两个问题选yes,输入管理员账号。
配置nginx
这边又出了问题,按照教程走下来在这一步报错:
1 | $ sudo systemctl reload nginx |
查看报错信息:
1 | $ sudo nginx -t |
原来是证书没有设置好。这边我把soft link先取消了(否则会报错),运行
1 | sudo rm /etc/nginx/sites-enabled/example.com.conf |
(这边一定要加 certonly 这个参数!我因为这一步debug了一整天)
然后把example.com.conf 里这两行取消注释(#删掉)
1 | # Uncomment these lines once you acquire a certificate: |
记得上面的example.com实际上应该是你的域名。
要确保你的nginx -t
没有任何问题,我遇到了warning结果最后真的是那个warning导致的错误,不要忽略warning!
最后可以通过
1 | certbot renew --dry-run |
测试证书的自动更新是否起效,--dry_run
就是仅打印信息,不实际执行。
这一步很多教程会教你设置定期任务来更新,但实际上certbot是会自动更新的(参考这篇文章 )。
参考资料:
https://pullopen.github.io/%E5%9F%BA%E7%A1%80%E6%90%AD%E5%BB%BA/2020/10/19/Mastodon-on-Docker.html
https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4
https://peterbabic.dev/blog/running-mastodon-with-docker-compose/
https://www.howtoforge.com/how-to-install-mastodon-social-network-with-docker-on-ubuntu-1804/
https://www.alibabacloud.com/blog/how-to-install-mastodon-using-docker-on-alibaba-cloud-ecs_595049
https://www.linode.com/docs/guides/install-mastodon-on-ubuntu-2004/
https://www.notion.so/Mastodon-042a05ee29a048df8b2c1afd49e4c49b