Mastodon 原生安装步骤

第一次因为改变域名,数据全部失效,重来用了几个月;第二次因为 VPS 故障,丢失 1 周数据,这还不算什么,但是配置文件我忽略没给自动备份,里的密码找不到,无法恢复实例;
累了,毁灭吧。
现在使用 memos 记录自己的简单日记了,因此 Mastodon 相关的文章都不会再更新,如果有失效的内容可以联系我,也许有空会更正。

本文重在 Mastodon 的原生安装步骤,介绍和具体使用方法请到:Mastodon 个人发布网络 – 技焉洲 (vfly2.com),AhFei 使用的域名是 social.vfly2.com 。

如果你按照本文部署,那一定不能错过相应的维护文章: Mastodon 备份、更新和迁移的全面指南 – 技焉洲 (vfly2.com)

适用系统:Debian 11/12,Ubuntu 按流程稍改命令也可。其他发行版不确定。

走通预计时间:40 分钟,CPU 性能差的话会更久。


安装 Mastodon

官网教程: Installing from source – Mastodon documentation (joinmastodon.org)

中文版本的教程可能不会及时更新,推荐看英文的。

前置条件

以 root 运行: sudo -i

先安装一些工具

apt update && \
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

导入 Node.js GPG 密钥,添加相应的 deb 软件包源,方便 apt 安装。其官方的安装教程: nodesource/distributions: NodeSource Node.js Binary Distributions (github.com)

先选择 Node 安装的版本

NODE_MAJOR=20
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg   # 导入 Nodesource GPG key
# Create deb repository
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

PostgreSQL 添加 deb 软件包源

wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.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 libgdbm-dev \
  nginx redis-server redis-tools postgresql postgresql-contrib \
  certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

安装 Yarn,一个 Node.js 包管理器。

corepack enable
yarn set version classic

安装 Ruby

使用 rbenv 来管理 Ruby 版本。 它必须为单个 Linux 用户安装,因此,先创建 mastodon 用户:

useradd -m -s /bin/bash mastodon

设置强密码

passwd mastodon

切换到 mastodon 用户:

su - 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 版本:(有需要,可以修改后面的版本号 3.2.2 )

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.2

设置默认的 Ruby 版本

rbenv global 3.2.2

还需要安装 Ruby 依赖管理器 bundler:

gem install bundler --no-document

按 CTRL + D 返回 root 用户

优化 PostgreSQL

本节可选 。为了获得最佳性能,可以使用 pgTune 生成适当的配置,打开网站: PGTune – calculate configuration for PostgreSQL based on the maximum performance for a given hardware configuration (leopard.in.ua)

查看 DB version

psql --version

在网站上得到配置后,编辑 /etc/postgresql/16/main/postgresql.conf 中对应的值,

vim /etc/postgresql/16/main/postgresql.conf
# lc10 内存选的 6g
# DB Version: 16
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 6 GB
# CPUs num: 4
# Connections num: 1000
# Data Storage: ssd

max_connections = 1000
shared_buffers = 1536MB
effective_cache_size = 4608MB
maintenance_work_mem = 384MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 786kB
huge_pages = off
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
max_parallel_maintenance_workers = 2

最后重新启动 PostgreSQL

systemctl restart postgresql
sleep 3
systemctl status postgresql

设置 PostgreSQL

创建 Mastodon 的 PostgreSQL 用户。

最简单的方法是使用“ident”身份验证,这种方法,PostgreSQL 用户没有单独的密码,可以由相同用户名的 Linux 用户使用。

sudo -u postgres psql

在提示符下执行:(创建用户 mastodon,CREATEDB 是授予该用户创建数据库的权限)

CREATE USER mastodon CREATEDB;

退出

\q

参考

# 显示出所有已经创建的数据库 list
\l
# 删除某个数据库
DROP DATABASE [数据库名称];

安装 Mastodon

切换到mastodon用户:

su - mastodon

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

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

注意,此时目录为 /home/mastodon/live ,以后涉及 mastodon 的操作,比如更新,都需要在这个目录下运行命令。

现在安装 Ruby 和 JavaScript 依赖项:

# 仅在第一次安装依赖项时才需要这两个 bundle config 命令
bundle config deployment 'true'
bundle config without 'development test'
# 更新或重新安装依赖项,只需 bundle install 就足够了
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile

生成 Mastodon 配置

如果是迁移,这里就可以暂停了,去复制文件吧

运行交互式设置向导,这会:创建配置文件,运行预编译,创建数据库架构

RAILS_ENV=production bundle exec rake mastodon:setup

配置文件保存为 .env.production 。相关配置的文档 documentation on configuration.


用以参考,该怎么填:

mastodon@vfly2.com:~/live$ RAILS_ENV=production bundle exec rake mastodon:setup

Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: social.vfly2.com

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? No

Are you using Docker to run Mastodon? no

# PostgreSQL 和 Redis 都是默认即可的
PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon_production
Name of PostgreSQL user: mastodon
# 按 `Enter` 即可,因为上面 ident 身份验证的缘故
Password of PostgreSQL user: 
Database configuration works! 🎆

Redis host: localhost
Redis port: 6379
# 按 `Enter` 即可,因为Redis没有密码
Redis password: 
Redis configuration works! 🎆

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? No
SMTP server: smtp.gmail.com
SMTP port: 587
SMTP username: vfly2.com@gmail.com   # 并不是我的
SMTP password: 
SMTP authentication: plain
SMTP OpenSSL verify mode: client_once
Enable STARTTLS: auto
E-mail address to send e-mails "from": Mastodon <notifications@social.vfly2.com>
Send a test e-mail with this configuration right now? Yes
Send test e-mail to: blog@vfly2.com

Do you want Mastodon to periodically check for important updates and notify you? (Recommended) Yes

This configuration will be written to .env.production
Save configuration? Yes

Now that configuration is saved, the database schema must be loaded.
If the database already exists, this will erase its contents.
Prepare the database now? Yes
Running `RAILS_ENV=production rails db:setup` ...
……

最后还会让创建管理员用户,用于稍后登录网站进行配置。

Do you want to create an admin user straight away? Yes
Username: vfly2Mastodon
E-mail: blog@vfly2.com
You can login with the password: a3b316xxxxxxxb6b5xxxx

按 CTRL + D 返回 root 用户

设置 Nginx

先获取证书,记得修改命令中的域名。以 root 用户运行。

创建放证书的目录

mkdir -p /etc/letsencrypt/live/social.vfly2.com/

申请证书(certbot 在前置准备里装上了,Nginx 也是)

certbot --nginx -d social.vfly2.com

需要输入邮箱,以及填两个 Yes。

申请的证书会自动更新,位置在:

  • Certificate is saved at: /etc/letsencrypt/live/social.vfly2.com/fullchain.pem
  • Key is saved at: /etc/letsencrypt/live/social.vfly2.com/privkey.pem

不启用 default 配置文件,因为上面证书申请后,会自动加入到 default 中

rm /etc/nginx/sites-enabled/default

复制 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

编辑

vim /etc/nginx/sites-available/mastodon
  1. 替换 example.com 为你的域名,
  2. 取消注释 ssl_certificate 和 ssl_certificate_key,并修改后面的路径,记得路径后要有分号 ;

检查配置

nginx -t

重启生效

systemctl reload nginx

Systemd 守护进程

复制 mastodon 示例 Systemd 配置文件

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

检查用户名和路径是否正确

# 若按照流程则一定正确,无须此步
vim /etc/systemd/system/mastodon-*.service

启动 mastodon

systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

可以看到,mastodon 由三部分组成,mastodon-web、mastodon-sidekiq、mastodon-streaming


方便读者使用

systemctl status mastodon-web mastodon-sidekiq mastodon-streaming
systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming
systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming

到此全部安装完毕,访问域名使用 Mastodon 吧!


原文链接: https://technique.vfly2.com/2023/11/mastodon-native-installation-process/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (technique.vfly2.com)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,或在支持 ActivityPub 的平台关注 @vfly2tech@technique.vfly2.com 接收新文章的推送,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇