今天来写一下如何在CentOs7下搭建安装Mastodon实例。毕竟之前自己安装的时候也踩过不少坑...
前言
Mastodon(长毛象)是一款“去中心化”类Twitter应用。
什么,你说你没听说过?
著名插画网站 Pixiv
(P站)运营的 pawoo
就是一个Mastodon实例。
还是没听说过?
好吧,或许下面的这个视频可以帮助你理解什么是Mastodon~
简介
Mastodon是一个基于ActivityPub的免费开源社交网络服务器。关注朋友,发现新朋友。发布您想要的任何内容:链接,图片,文字,视频。其所有服务器都可以作为联合网络进行互操作,即一台服务器上的用户可以与另一台服务器上的用户无缝通信。这包括也实现ActivityPub的非Mastodon软件!
安装
安装要求:
一台内存大于或等于2GB的VPS
Root权限
一个解析好的顶级域名或子域名
更新系统并安装必要的软件包
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
安装宝塔面板(可选)
Centos安装命令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh
安装完成后登录面板并安装LNMP环境。
安装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
安装PostgreSQL数据库
更新源:
地址:https://yum.postgresql.org/repopackages.php
选择 Centos7-x86 64
后右键复制链接。
安装:
yum install 刚才复制的链接地址 -y
yum install postgresql10-contrib postgresql10-server -y
初始化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
安装Redis并设置开机启动
yum -y install redis
systemctl start redis
systemctl enable redis
systemctl status redis
查看运行状态,显示active则运行正常。
安装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版本更新频率很快,若显示 Error: Nothing to do
命令。
请到网站查看并更换成最新版本。
yum -y install 更换的ImageMagick-libs链接
yum -y install 更换的ImageMagick链接
安装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
安装Ruby
为Mastodon创建一个新用户并切换到新创建的用户:
sudo adduser mastodon
sudo passwd mastodon
sudo su - mastodon
使用 Ruby Version Manager
或 RVM
安装最新版本的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配置修改
Mastodon默认需要SSL证书
宝塔面板可以在面板申请
非面板用户可在文章末的补充处使用certbot申请
宝塔面板
上面安装了宝塔面板的小伙伴们请看这,登录宝塔面板,然后点击软件管理中的Nginx管理,先停止Nginx服务,然后点击配置修改
把user的 www
修改成 mastodon
,如上图所示。
然后添加站点,修改站点设置中的配置文件。
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;
}
非宝塔面板
从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
补充
本地发信
如果之前Mastodon配置时选择了本地发信,直接装个 sendmail
应该就可以成功发信了:
yum -y install sendmail
运行并设置开机启动:
systemctl start sendmail
systemctl enable sendmail
自动签发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实例就已经搭建完成了~
最后,本教程具有一定的时效性,若安装时出现错误,请自行谷歌解决问题(毕竟我自己也是这样做的)。
当然,个人还是建议依据官方安装文档来安装,这样肯定不会出错。
版权属于:Rintarou°
本文链接:https://www.rin404.com/archives/mastodon.html
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
8 comments
想想你的文章写的特别好https://www.237fa.com/
大佬,我卡在nginx那里了,我用宝塔的改怎么 调整配置文件啊,直接改要么没文件夹,要么没法保存,真是太难了
Blocked host: xxxx.top
To allow requests to xxxx.top, add the following to your environment configuration:
config.hosts << "xxxx.top"
好了但没完全好
您好,打扰了。
可能因为依赖源被删除的原因,有个步骤不论是您的教程还是官网的教程都遇到了问题……请问可以帮忙看看么?
官网安装依赖这一步:
[mastodony@VM-0-10-centos live]$ bundle install -j$(getconf _NPROCESSORS_ONLN)
Fetching gem metadata from https://rubygems.org/............
Your bundle is locked to mimemagic (0.3.5) from rubygems repository https://rubygems.org/ or installed locally,
but that version can no longer be found in that source. That means the author of mimemagic (0.3.5) has removed it.
You'll need to update your bundle to a version other than mimemagic (0.3.5) that hasn't been removed in order to
install.
您教程安装依赖这步:
[mastodony@VM-0-10-centos live]$ bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
[DEPRECATED] The
--deployment
flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please usebundle config set --local deployment 'true'
, and stop using this flag[DEPRECATED] The
--without
flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please usebundle config set --local without 'development test'
, and stop using this flagFetching gem metadata from https://rubygems.org/............
Your bundle is locked to mimemagic (0.3.5) from rubygems repository https://rubygems.org/ or installed locally,
but that version can no longer be found in that source. That means the author of mimemagic (0.3.5) has removed it.
You'll need to update your bundle to a version other than mimemagic (0.3.5) that hasn't been removed in order to
install.
请问可以指点一下我怎么解决这个问题么?
您好,您可以尝试一下 bundle update mimemagic 来试着解决问题。
感谢指点,但是很遗憾问题未能通过此方法解决……可能是我少做了什么步骤。
[mastodony@VM-0-10-centos live]$ bundle update mimemagic
Unable to find a spec satisfying mimemagic (~> 0.3.0) in the set. Perhaps the lockfile is corrupted?
今天在git找到了相关的问题,还找到了可能是造成这个问题的原因(新闻), 或许这个问题需要等待长毛象的更新?(小声:但我还是有点想早一点架设长毛象……)
https://github.com/tootsuite/mastodon/issues/16102
https://www.oschina.net/news/134862/mimemagic-liscense-problem
很抱歉没能帮上忙(ó﹏ò。),不过貌似已经有处理方法了。预祝早日搭建成功~
https://github.com/tootsuite/mastodon/issues/16228
好文啊好文!!!