第一次因为改变域名,数据全部失效,重来用了几个月;第二次因为 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
- 替换
example.com
为你的域名, - 取消注释
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 交流依文章步骤遇到的问题。