长毛象 Mastodon 建站指南 | 第五章:安装长毛象服务器(从源代码安装)

本章节仅介绍从源代码安装的方式。

登录服务器 SSH

在电脑上安装一个 SSH 客户端,用于登录服务器命令行。

常见的 SSH 客户端有:

  • PuTTY
  • Termius
  • Bitvise SSH Client
  • Mac 自带 Terminal

本教程中,我们使用 Termius 作为 SSH 客户端。

Termius 下载:

安装并打开 Termius 后,出现以下页面,可以注册一个 Termius 账户,或者点击 Continue without account (下图红色箭头处)不注册账户直接使用。

点击 New Host 添加服务器,在 Address 处填写你的服务器 IP 地址。

接着继续填写服务器的登录名、密码。

  • 如果创建服务器时,选择了密码登录方式(没有生成填写 SSH Key),则只需要填写服务器登录密码(下图 2 处),不需要点击 Keys,直接点击右上角 Save 保存即可。
  • 如果创建服务器时,生成并填写了 SSH Key 则不要填写服务器登录密码,而是点击 Keys -> 添加登录私钥(下图 3 处)。

点击 Keys 后,在 Private Key 一栏填写创建服务器时生成的私钥,点击右上角 Save 保存:

(密码登录方式请忽略此步骤)

保存后,双击登录服务器 SSH:

出现如下提示,点击 YES

出现以下页面,代表 SSH 登录成功。

安装长毛象服务

**接下来的步骤将在 长毛象官方安装指南 的基础上,附上额外说明,进行详解。**建议阅读本文的同时,对照官方教程的英文页面 Installing from source 阅读,以免由于版本升级,而教程或 Mastodon 官网翻译未更新导致的安装配置错误。

本教程以 Ubuntu 18.04 操作系统为例。

如果你不是以 root 用户登录 SSH,请先切换到 root:

sudo -i

逐行复制 代码框内的命令,粘贴到 Termius 中,然后按回车执行每一条命令。

添加虚拟内存(SWAP)

为了保证安装时不崩溃,服务器稳定运行,需要添加虚拟内存,可以根据 这篇教程 手动添加虚拟内存。

更新系统

apt update && apt upgrade -y

软件仓库

Node.js

curl -sL <https://deb.nodesource.com/setup_12.x> | bash -

Yarn

curl -sS <https://dl.yarnpkg.com/debian/pubkey.gpg> | apt-key add -
*echo* "deb <https://dl.yarnpkg.com/debian/> stable main" | tee /etc/apt/sources.list.d/yarn.list

软件包

apt update
apt install -y \\
  imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \\
  g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \\
  bison build-essential libssl-dev libyaml-dev libreadline6-dev \\
  zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev \\
  nginx redis-server redis-tools postgresql postgresql-contrib \\
  certbot python-certbot-nginx yarn libidn11-dev libicu-dev libjemalloc-dev

安装 Ruby

因为使用 rbenv 可以更容易的获得正确的版本并在新版本发布后进行更新,我们将使用 rbenv 来管理Ruby版本。rbenv 必须安装在单个Linux用户中,因此,我们首先需要使用以下命令创建一个Mastodon用户:

adduser --disabled-login mastodon

出现该提示时,一路回车即可:

切换到mastodon用户:

su - mastodon

切换到 mastodon 用户后,命令行最开头(@前面)的用户名从 root变为了 mastodon,代表你正以 mastodon 用户的身份执行命令。

执行以下步骤安装 rbenv 和 rbenv-build:

git clone <https://github.com/rbenv/rbenv.git> ~/.rbenv
*cd* ~/.rbenv && src/configure && make -C src
*echo* 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
*echo* 'eval "$(rbenv init -)"' >> ~/.bashrc
*exec* bash
git clone <https://github.com/rbenv/ruby-build.git> ~/.rbenv/plugins/ruby-build

上述操作完成,我们便可以安装正确的 Ruby 版本:

注意:

  • 这个步骤会耗费较长时间,速度取决于服务器配置。如果中途出现错误,可能是因为服务器内存不够,或者没有配置虚拟内存。
  • 本教程以 Ruby v2.7.2 为例安装 Mastodon v3.3.0。请参考 Mastodon 的 Releases 页面检查最新版本 Mastodon 是否建议更高的 Ruby 版本。
*RUBY_CONFIGURE_OPTS*=--with-jemalloc rbenv install 2.7.2
rbenv global 2.7.2
gem install bundler --no-document

返回root用户:

*exit*

配置长毛象服务

配置 PostgreSQL

性能调优(可选)

为了优化性能,你可以使用 pgTune 生成一个合适的配置文件。

例如,2GB 内存的 VPS 服务器:

得到:

# DB Version: 10
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 2 GB
# CPUs num: 1
# Data Storage: ssd

max_connections = 200
shared_buffers = 512MB
effective_cache_size = 1536MB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 1310kB
min_wal_size = 1GB
max_wal_size = 4GB

编辑 /etc/postgresql/10/main/postgresql.conf 中的相应数值:

nano /etc/postgresql/10/main/postgresql.conf

替换 max_connections = 200

替换 shared_buffers = 512MB

在末尾加上剩余的配置:

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

并使用 systemctl restart postgresql 命令重启 PostgreSQL。

systemctl restart postgresql

创建帐户

你需创建一个供Mastodon使用的PostgreSQL帐户。创建一个使用“ident”认证方式的帐户是最容易的配置方法,即PostgreSQL帐户不需要独立的密码并由同名Linux用户使用。

打开控制台:

sudo -u postgres psql

在控制台中执行:

CREATE USER mastodon CREATEDB;
\\q

完成!

配置 Mastodon

现在该下载Mastodon代码了。切换至mastodon用户:

su - mastodon

检出代码

使用git下载最新稳定版Mastodon:

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)

安装依赖

现在,安装Ruby和JavaScript依赖:

bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile

两个bundle config命令仅仅第一次安装依赖时需要。如果你之后进行升级或重安装依赖,只需要bundle install就够了。

生成配置文件

运行交互式安装向导:

*RAILS_ENV*=production bundle *exec* rake mastodon:setup

它将:

  • 创建一个配置文件
  • 预编译静态文件
  • 创建数据库schema

配置文件被保存在.env.production。如果你愿意的话,你可以查看并编辑这个文件。请参阅配置文件的文档

以 SendGrid 为例,SendGrid 的 SMTP 信息为:

SMTP 服务器地址:smtp.sendgrid.net

SMTP 端口号:465(SSL)或 2525

SMTP 用户名:apikey

SMTP 密码:在之前的步骤中获得的一长串 API Key

你已经完成需使用mastodon用户进行的操作,请切换回root用户:

exit

更改默认语言为中文

Mastodon 默认为英文界面,如需改为中文,可以编辑 .env.production 文件:

nano /home/mastodon/live/.env.production

添加一行:

DEFAULT_LOCALE=zh-CN

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

配置 nginx

从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 为你自己的域名,你可以根据自己的需求做出其它的一些调整。

nano /etc/nginx/sites-available/mastodon

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

重载 nginx 以使变更生效:

service nginx reload

获取SSL证书

我们将使用 Let’s Encrypt 获取一个免费的SSL证书。

替换 example.com 为你自己的域名:

certbot --nginx -d example.com

现在你应该能够通过浏览器访问你的域名,然后看到一只大象锤击电脑屏幕的错误页面。这是因为我们还没有启动Mastodon进程。

如果出现错误,可以尝试改用 webroot 方式获取证书。替换 example.com 为你自己的域名,替换 admin@example.com 为你自己的邮箱:

certbot certonly --webroot --webroot-path /home/mastodon/live/public/ --renew-by-default --email admin@example.com --text --agree-tos -d example.com

如签发成功,会出现如下提示:

配置 systemd 服务

从Mastodon目录复制systemd服务模版:

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

最后,启动新systemd服务并将该服务设为开机自动激活:

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

它们将在开机启动时自动开始运行。

欢呼吧!你现在可以从浏览器中访问你的域名了!

本章节完。