如何在宝塔面板安装 Mastodon
坑,是踩出来的! 在安装 Mastodon 时也遇到不少问题,开始时也总各种失败, 好不容易找到了一条能直通大殿的路, 不敢独享,特此分享出来!
OK,先让我们来介绍一下什么是宝塔面板吧!
1. 宝塔面板
这篇文章只适合有自己 VPS(当然,对于土豪级的朋友,拥有一台实体服务器也是可以的) 的朋友, 因为宝塔面板是一款流行的服务器管理软件,它以可视化界面俗称 “一键” 管理服务,使得服务器的部署和管理变得更加简单高效。无论是网站的部署、数据库的管理、或是安全设置,宝塔面板都能提供直观且强大的操作界面。对于不熟悉命令行操作的用户来说,宝塔面板无疑降低了服务器管理的门槛。
本人也是尝试了多款流行的服务器管理软件(系统)后,才发现这个宝塔面板真是很不错,也非常适合国人使用(你懂的 (¬‿¬)✧)。
2. Mastodon
至于 Mastodon
,则是一个开源的分布式社交网络平台,设计上类似于推特(Twitter),但它采用了分布式的网络结构。在 Mastodon
中,任何人都可以搭建一个服务器节点(即“实例
”),这些独立的服务器节点可以互相连接,形成广泛的社交网络。Mastodon
强调隐私保护和社区自治,用户可以自由选择加入不同的实例,根据自己的兴趣深入参与或构建社区。
好了,懂的人都懂,所以只对以上2者做了个简单的介绍,现在我们来正题了!
3. 安装 Mastodon
根据官方文档说明,其安装步骤还真有些麻烦,其中涉及要安装的服务也不少,因此我建议直接使用 Docker 版本,使用 Docker 的好处是不管其内部系统有多复杂,要用到的服务有多少,我只需要一个 Docker 文件就可以搞定,完全不会影响到我的主操作系统上的相关配置,因为要装的服务多,很多时候就会不小心导致主系统的一些服务有冲突,当执行完一些命令后才发现不知哪里出了问题,到时要修复可就更难搞了~
由于宝塔面板的方便性,我们可直接建立一个网站,然后将 Mastodon
安装到此网站目录下。
OK,我们现在宝塔面板里创建一个网站,然后指定一个域名,当然你可以使用子域名,如我这里演示用的就是 mastodon.coderblog.cc
,如下图:
之后我们使用更加安全直接的方式安装,就是 Docker Compose 方式。之所以建议使用这方式,是因为我希望对自己服务器情况能都能尽量了解,这种安装方式可以让我能清楚知道相关配置会放在哪,生成的文件会在哪,以便日后维护
3.1 获取 Docker Compose
可以直接使用宝塔面板里的终端,进入刚建立的网站文件夹 /www/wwwroot/mastodon.coderblog.cc
,执行以下命令拉取 mastodon
的 docker
docker pull mashirozx/mastodon
3.2 开始安装 Mastodon
创建一个空的 .env.production
文件
touch .env.production
执行以下命令获取 docker-compose.yml 配置文件(此文件是我整理后的)
wget https://www.coderblog.cc/files/docker-compose.yml
然后执行以下命令,会让你一步步输入相关信息
docker-compose run --rm web bundle exec rake mastodon:setup
以下是相关信息的说明:
Your instance is identified by its domain name. Changing it afterward will break things.
**这里输入你的 mastodon 域名
Domain name: mastodon.coderblog.cc
Single user mode disables registrations and redirects the landing page to your public profile.
** 是否使用单用户模式,除非你只想自己玩,否则就直接 N 吧
Do you want to enable single user mode? No
** 是否在 Docker 里运行,当然是 Y 了
Are you using Docker to run Mastodon? Yes
** 以下是数据库的设置,全部直接回车用默认值即可
PostgreSQL host: db
PostgreSQL port: 5432
Name of PostgreSQL database: postgres
Name of PostgreSQL user: postgres
Password of PostgreSQL user:
Database configuration works! 🎆
Redis host: redis
Redis port: 6379
Redis password:
Redis configuration works! 🎆
Do you want to store uploaded files on the cloud? No
** 这里是配置你的 SMTP 服务器
Do you want to send e-mails from localhost? No
SMTP server: 你的 SMTP 服务器名
SMTP port: 587
SMTP username: 你的 email 登录名
SMTP password: 密码
SMTP authentication: plain
SMTP OpenSSL verify mode: none
Enable STARTTLS: auto
** 最后问是否要发送测试邮件
E-mail address to send e-mails "from": Mastodon <notifications@mastodon.coderblog.cc>
Send a test e-mail with this configuration right now? no
** 要不要自动检测更新,当然也是 Y 了
Do you want Mastodon to periodically check for important updates and notify you? (Recommended) Yes
This configuration will be written to .env.production
** 然后是要不要保存到 .env.production 文件里,不用说,直接保存吧
Save configuration? Yes
然后会显示上面配置信息全部内容,这时你要将这些信息复制到 .env.production
文件里
之后会问是否创建管理员,但当你输入完后会发现有错误信息,这里先不需理会,我们等下再来设置
接着执行以下命令启动相关 mastodon
服务
docker-compose up -d
当服务启动后,到宝塔的 Docker 管理页面,会看到有5个容器被启动了
我们找到一个包含有 web
的容器,如我的例子中就是: mastodoncoderblogcc-web-1
然后修改我们的 mastodon
管理员密码
docker exec mastodoncoderblogcc-web-1 tootctl accounts modify admin --reset-password
如要查看更多相关管理命令,可到官网 查看
这时记住此密码,登录名就是之前一串提示问题时设置的邮箱。
现在我们的 mastodon
就已安装完成了,接下来要配置相关的网站来访问
4. 配置网站
当使用 docker 安装完 mastodon
后,在当前的网站目录里,会生成一个 public
的目录,此时我们需要修改网站配置,将默认网站目录改到 public
下:
然后点 SSL
,在 Let's Encrypt 里免费申请 SSL 证书
最后选择 配置文件
,将以下代码复制上去,不过记得将里面本站的域名部分修改成你自己的
map http_upgradeconnection_upgrade {
default upgrade;
'' close;
}
upstream coderblogcc_backend {
server 127.0.0.1:3000 fail_timeout=0;
}
upstream coderblogcc_streaming {
server 127.0.0.1:4000 fail_timeout=0;
}
proxy_cache_path /var/cache/coderblogcc_nginx levels=1:2 keys_zone=CODERBLOGCCCACHE:10m inactive=7d max_size=1g;
server {
listen 80;
listen [::]:80;
server_name mastodon.coderblog.cc;
root /www/wwwroot/mastodon.coderblog.cc/public/;
location /.well-known/acme-challenge/ { allow all; }
location / { return 301 https://hostrequest_uri; }
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mastodon.coderblog.cc;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Uncomment these lines once you acquire a certificate:
ssl_certificate /www/server/panel/vhost/cert/mastodon.coderblog.cc/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/mastodon.coderblog.cc/privkey.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;
root /www/wwwroot/mastodon.coderblog.cc/public/;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
try_files uri @proxy;
}
location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Strict-Transport-Security "max-age=31536000" always;
try_filesuri @proxy;
}
location /sw.js {
add_header Cache-Control "public, max-age=0";
add_header Strict-Transport-Security "max-age=31536000" always;
try_files uri @proxy;
}
location @proxy {
proxy_set_header Hosthost;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto scheme;
proxy_set_header Proxy "";
proxy_pass_header Server;
proxy_pass http://coderblogcc_backend;
proxy_buffering on;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgradehttp_upgrade;
proxy_set_header Connection connection_upgrade;
proxy_cache CACHE;
proxy_cache_valid 200 7d;
proxy_cache_valid 410 24h;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cachedupstream_cache_status;
add_header Strict-Transport-Security "max-age=31536000" always;
tcp_nodelay on;
}
location /api/v1/streaming {
proxy_set_header Host host;
proxy_set_header X-Real-IPremote_addr;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protoscheme;
proxy_set_header Proxy "";
proxy_pass http://coderblogcc_streaming;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade http_upgrade;
proxy_set_header Connectionconnection_upgrade;
tcp_nodelay on;
}
error_page 500 501 502 503 504 /500.html;
}
以上配置中,要特别注意的是2个端口的设置:
upstream coderblogcc_backend {
server 127.0.0.1:3000 fail_timeout=0;
}
upstream coderblogcc_streaming {
server 127.0.0.1:4000 fail_timeout=0;
}
这里的 coderblogcc_backend
就是 mastodon web
服务的端口,对应的是 docker-compose.yml
文件里的以下设置
web:
image: ghcr.io/mastodon/mastodon:v4.2.1
restart: always
env_file: .env.production
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
networks:
- web-network
healthcheck:
# prettier-ignore
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
ports:
- '3000:3000'
...
而另一个 coderblogcc_streaming
则是对应 streaming
服务的端口
streaming:
image: ghcr.io/mastodon/mastodon:v4.2.1
restart: always
env_file: .env.production
command: node ./streaming
networks:
- web-network
healthcheck:
# prettier-ignore
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
ports:
- '4000:4000'
...
如果与你现有服务有冲突,可以自行修改。
好了,现在你就可以直接访问你的域名,然后尝试登录啦!
5. 升级
最后说一下如何升级。由于我们直接使用 docker-compose.yml
文件进行安装和管理,所以要升级是非常简单的,只需修改此文件中对应的 3 个 mastodon
相关容器的版本就可以了
修改完后,直接停掉再重启
docker-compose down
docker-compose up -d
这样就完成了!
好了,如果大家在安装中遇到什么问题,也欢迎提出一起讨论哦!
版权声明:
作者:winson
链接:https://www.coderblog.cc/2024/06/how-to-install-mastodon-in-baota-panel/
来源:代码部落中文站
文章版权归作者所有,未经允许请勿转载。