Rintarou°

Mastodon丨Centos7(宝塔面板)下搭建Mastodon实例
今天来写一下如何在Centos7(宝塔面板)下搭建Mastodon实例。毕竟之前自己安装的时候也踩过不少坑...
扫描右侧二维码阅读全文
07
2019/01

Mastodon丨Centos7(宝塔面板)下搭建Mastodon实例


今天来写一下如何在Centos7(宝塔面板)下搭建Mastodon实例。毕竟之前自己安装的时候也踩过不少坑...

Ⅰ、前言

Mastodon(长毛象)是一款“去中心化”类Twitter应用。

什么,你说你没听说过?

著名插画网站Pixiv(P站)运营的pawoo就是一个Mastodon实例,还是没听说过?

好吧,希望以下文章可以给你一些帮助,让你更好的认识Mastodon

Ⅱ、简介

anikore.xin - 404 not found.png

Mastodon是一个基于ActivityPub的免费开源社交网络服务器。关注朋友,发现新朋友。发布您想要的任何内容:链接,图片,文字,视频。

Mastodon的所有服务器都可以作为联合网络进行互操作,即一台服务器上的用户可以与另一台服务器上的用户无缝通信。这包括也实现ActivityPub的非Mastodon软件!

Ⅲ、安装

安装要求

  1. 一台内存大于或等于2GB的VPS
  2. Root权限
  3. 一个解析好的顶级域名或子域名

1.更新系统并安装必要的软件包


yum -y update

安装开发工具包:

yum -y groupinstall "Development Tools"

安装项目所需依赖:

yum -y install wget curl git openssl-devel readline-devel libicu-devel libidn-devel postgresql-devel protobuf-devel libxml2-devel libxslt-devel ncurses-devel sqlite-devel gdbm-devel zlib-devel libffi-devel libyaml-devel

2.安装宝塔面板(可选)


使用 SSH 连接工具,如宝塔远程桌面助手连接到您的 Linux 服务器后,挂载磁盘,根据系统执行相应命令开始安装(大约2分钟完成面板安装):

Centos安装命令

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh

安装完成后登录面板并安装LNMP环境。

3.安装Node.js和Yarn


我们将从NodeSource存储库安装Node.js v8 LTS,这取决于启用的EPEL存储库

安装EPEL源:

yum -y install epel-release

安装NodeJS 8.x:

curl -sL https://rpm.nodesource.com/setup_8.x | bash -
yum -y install nodejs

安装Yarn包管理器:

curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
yum -y install yarn

4.安装PostgreSQL数据库


yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
yum -y install postgresql10 postgresql10-server postgresql10-contrib postgresql10-devel

初始化PostgreSQL数据库数据:

/usr/pgsql-10/bin/postgresql-10-setup initdb

更改PostgreSQL的配置文件:

vi /var/lib/pgsql/10/data/pg_hba.conf

找到以下行并将peer更改为trust并将其更改为md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

更新后,配置应如下所示。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

启动PostgreSQL以及设置开机启动:

systemctl enable postgresql-10
systemctl start postgresql-10


systemctl status postgresql-10查看运行状态
显示active则运行正常

登录PostgreSQL用户:

su postgres

创建一个数据库用户:

createuser mastodon

PostgreSQL提供了psql shell来对数据库运行查询,通过运行切换到PostgreSQL shell

psql

为Mastodon数据库的新创建的用户设置密码,并提供添加新数据库的权限:

ALTER USER mastodon WITH ENCRYPTED password 'DBPassword' CREATEDB;

用强密码替换DBPassword,从psql shell退出:

\q

返回root用户:

exit

5.安装Redis并设置开机启动


yum -y install redis
systemctl start redis
systemctl enable redis


systemctl status redis查看运行状态
显示active则运行正常

6.安装imagemagick和FFMPEG


yum -y install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.8-23.x86_64.rpm
yum -y install https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.8-23.x86_64.rpm


imagemagickge版本更新频率很快,若上诉命令无效。
请到网站查看更换并更换成最新版本。

安装FFMPEG(可选):

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
sudo yum install ffmpeg ffmpeg-devel -y

7.安装Ruby


Mastodon创建一个新用户并切换到新创建的用户:

sudo adduser mastodon
sudo su - mastodon

我们将使用Ruby Version ManagerRVM安装最新版本的Ruby,它将用于安装和管理多个版本的Ruby

访问rvm.io并导入所需GPG密钥:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

安装RVM:

curl -sSL https://get.rvm.io | bash -s stable
source /home/mastodon/.rvm/scripts/rvm

获取Ruby的可用版本列表:

rvm list known

现在从列表中安装最新版本的Ruby:

rvm install 2.5.3

完成之后设置使用的版本:

rvm use 2.5.3


注意:尽量安装最新版本的Ruby来使用Mastodon。

切换回Mastodon用户并从Github拉取最新项目文件:

git clone https://github.com/tootsuite/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

安装bundler(Ruby应用程序的依赖项管理器)和ruby依赖:

gem install bundler
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test

安装Node.js依赖:

yarn install --pure-lockfile

Ⅳ、配置Mastodon

以下命令作为mastodon用户运行,切换到Mastodon安装目录并运行以下命令以启动安装程序:

cd ~/live
RAILS_ENV=production bundle exec rake mastodon:setup

在这个向导中,你应该按照如下配置来填写:

Q:Domain name:
A:填写你的域名地址,不要带www

Q:Do you want to enable single user mode? 
A:N

Q:Are you using Docker to run Mastodon? 
A:n

Q:PostgreSQL host: /var/run/postgresql
A:回车

Q:PostgreSQL port: 5432
A:回车

Q:Name of PostgreSQL database: mastodon_production
A:回车

Q:Name of PostgreSQL user: mastodon
A:回车

Q:Password of PostgreSQL user:
A:你之前设置的PostgreSQL数据库密码

Q:Redis host: localhost
A:回车

Q:Redis port: 6379
A:回车

Q:Redis password:
A:回车

Q:Do you want to send e-mails from localhost?
A:y(可以选no,选用smtp邮件服务器)

Q:Send a test e-mail with this configuration right now?
A:n

Q:Save configuration?
A:y

Q:Prepare the database now?
A:y

Q:Compile the assets now?
A:y

Q:Do you want to create an admin user straight away?
A:y

Ⅴ、创建Mastodon系统服务

以root用户或sudo用户运行,从Mastodon目录复制systemd服务模板

su root
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

然后编辑文件以确保用户名和路径正确:

/etc/systemd/system/mastodon-web.service
/etc/systemd/system/mastodon-sidekiq.service
/etc/systemd/system/mastodon-streaming.service

最后,启动并启用新的systemd服务:

systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
systemctl enable mastodon-*

检查它们是否正常运行:

systemctl status mastodon-web.service
systemctl status mastodon-sidekiq.service
systemctl mastodon-streaming.service

Ⅵ、Nginx配置修改

  1. Mastodon默认需要SSL证书
  2. 宝塔面板可以在面板申请
  3. 非面板用户可在文章末的补充处使用certbot申请

1.宝塔面板


上面安装了宝塔面板的小伙伴们请看这,登录宝塔面板,然后点击软件管理中的Nginx管理,先停止Nginx服务,然后点击配置修改

Snipaste_2019-01-08_01-43-57.png

把user的www修改成mastodon,如上图所示。


然后添加站点,修改站点设置中的配置文件

Snipaste_2019-01-08_01-47-28.png

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name 你的域名;
  root /home/mastodon/live/public;
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name 你的域名;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/你的域名/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/mastodon/live/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;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

2.非宝塔面板


从Mastodon目录复制nginx的配置模板:

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

然后编辑/etc/nginx/sites-available/mastodon以替换example.com为你自己的域名,并进行你可能需要的任何其他调整。

重新加载nginx以使更改生效:

systemctl reload nginx

Ⅶ、补充

1.本地发信


如果之前Mastodon配置时选择了本地发信,直接装个sendmail应该就可以成功发信了:

yum -y install sendmail

运行并设置开机启动:

systemctl start sendmail
systemctl enable sendmail

2.自动签发Let’s Encrypt证书:


安装了宝塔面板的小伙伴们可以跳过。

安装Certbot:

yum -y install certbot

给你的域名签发证书(example.com替换成你的域名):

certbot certonly --standalone -d example.com

证书如果签发成功,那么证书的存储路径应该是:

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

配置Certbot自动续约证书:

crontab -e

写入:

0 0 * * * /usr/bin/certbot renew --quiet

配置好了后,certbot会在每天的0点检查证书是否过期,如果过期就自动续约证书。

修改完成后,打开你的域名。不出意外的话,属于你的Mastodon实例就已经搭建完成了~

404 not found.png

最后,本教程具有一定的时效性,若安装时出现错误,请多尝试几次或自行谷歌解决问题(毕竟我自己也是这样做的)

当然,有能力的话,个人还是建议依据官方安装文档来安装,这样肯定不会出错。

Last modification:September 22nd, 2019 at 10:54 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

11 comments

  1. 激荡

    Installing required packages: rubymastodon password required for 'yum install -y ruby': ...|
    mastodon password required for 'yum install -y ruby':

    这个是啥?一直卡这里过不去,emmmmm

  2. 某亚瑟

    Mastodon导师就是你了

    1. Rintarou°
  3. 某亚瑟

    Mastodon导师就是你了

  4. 胡德龙

    卡在【登录PostgreSQL用户:】这一步骤了,发送“su postgres”,提示“bash-4.2$ ^C”

    1. Rintarou°
      @胡德龙

      试试sudo su - postgres

  5. 舒服舒服

    求帮助这个问题呢?

  6. 舒服舒服

    搭建完成 启动长毛象出现 We're sorry, but something went wrong on our end.

    1. Rintarou°
      @舒服舒服

      这个很难说明是什么问题,因为出错都是这个界面,你先检测看看所有的服务是否正常启动吧

      1. HHY
        @Rintarou°

        教程里要是有如何让长毛象使用对象存储就更好了~(/ω\)

        1. qwq
          @HHY

          输入RAILS_ENV=production bundle exec rake mastodon:setup这个命令的时候显示-bash: bundle: 未找到命令
          ,咋办

召唤看板娘