如何在宝塔面板安装 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/
来源:代码部落中文站
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录