本章节仅介绍从源代码安装的方式。
登录服务器 SSH
在电脑上安装一个 SSH 客户端,用于登录服务器命令行。
常见的 SSH 客户端有:
- PuTTY
- Termius
- Bitvise SSH Client
- Mac 自带 Terminal
- …
本教程中,我们使用 Termius 作为 SSH 客户端。
Termius 下载:
- MacOS: https://termius.com/mac-os
- Windows: https://termius.com/windows
安装并打开 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
它们将在开机启动时自动开始运行。
欢呼吧!你现在可以从浏览器中访问你的域名了!
本章节完。