!看了下网上几乎都是用docker的方式去搭建mastodon,方便是方便但是对于想自己做些修改的人还是略显不便,我也是个喜欢折腾的人,就用腾讯轻量送的那台4H4G80G试一下,配置是足够多人实例的运行的。
一、安装之前的准备工作
官方给出了几个建议,1,不要使用密码验证的方式登录SSH,2,使用fail2ban保护系统,屏蔽非法登录者,3,安装防火墙。应该说这几点可以很方便的在lighthouse面板上通过设置密钥和防火墙的方式很直观的进行操作,就不详述了;
先决条件
- 运行 Ubuntu 20.04 或 Debian 11 的机器,您有 root 用户访问权限
- Mastodon 服务器的域名(或子域),例如
example.com
- 电子邮件传递服务或其他 SMTP 服务器
您将以 root 用户身份运行命令。如果您还不是 root 用户,请切换到 root 用户:我这里选择的是腾讯云提供的centos10镜像,然后硬盘安装为Debian11,这样系统更加干净一点,个人洁癖,看官可以自己决定。
安装防火墙,仅将 SSH、HTTP 和 HTTPS 端口列入白名单
首先,安装 iptables-persistent。在安装过程中,它会询问您是否要保留当前规则 - 拒绝。
代码语言:javascript复制apt install -y iptables-persistent
编辑并放入其中:/etc/iptables/rules.v4
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
使用 iptables-persistent,该配置将在引导时加载。但是由于我们现在没有重新启动,因此我们需要首次手动加载它:
代码语言:javascript复制iptables-restore < /etc/iptables/rules.v4
安装 fail2ban,以便阻止重复登录尝试
编辑并放入其中:/etc/fail2ban/jail.local
[DEFAULT]
destemail = your@email.here
sendername = Fail2Ban
[sshd]
enabled = true
port = 22
[sshd-ddos]
enabled = true
port = 22
最后重新启动 fail2ban:
代码语言:javascript复制systemctl restart fail2ban
二、更新系统软件包
代码语言:javascript复制apt update && apt upgrade -y
首先安装 curl、wget、gnupg、apt-transport-https、lsb-release 和 ca 证书:
代码语言:javascript复制apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
安装node.js
代码语言:javascript复制curl -sL https://deb.nodesource.com/setup_16.x | bash -
安装PostgreSQL
代码语言:javascript复制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
安装系统依赖
代码语言:javascript复制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
代码语言:javascript复制corepack enable
yarn set version stable
安装 Ruby
我们将使用rbenv来管理Ruby版本,因为更容易获得正确的版本,并在新版本发布后进行更新。rbenv必须为单个Linux用户安装,因此,首先我们必须创建Mastodon将运行的用户为:
代码语言:javascript复制adduser --disabled-login mastodon
然后,我们可以切换到mastodon用户:
代码语言:javascript复制su - mastodon
然后继续安装 rbenv 和 rbenv-build:
代码语言:javascript复制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 版本:
代码语言:javascript复制RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.3
rbenv global 3.0.3
安装bundler:
代码语言:javascript复制gem install bundler --no-document
返回到root:
代码语言:javascript复制exit
设置
设置 PostgreSQL
性能配置(可选)
为了获得最佳性能,您可以使用pgTune生成适当的配置并编辑值,然后再重新启动PostgreSQL/etc/postgresql/14/main/postgresql.confsystemctl restart postgresql
创建用户
您将需要创建一个Mastodon可以使用的PostgreSQL用户。在简单的设置中使用“ident”身份验证是最容易的,即PostgreSQL用户没有单独的密码,并且可以由具有相同用户名的Linux用户使用。
进入postgres
代码语言:javascript复制sudo -u postgres psql
创建数据库并退出:
代码语言:javascript复制CREATE USER mastodon CREATEDB;
q
设置乳齿象
是时候下载乳齿象代码了。切换到乳齿象用户:
代码语言:javascript复制su - mastodon
使用 git 下载 Mastodon 的最新稳定版本:
代码语言:javascript复制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 依赖项:
代码语言:javascript复制bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
只有在首次安装依赖项时才需要这两个命令。如果以后要更新或重新安装依赖项,就足够了。bundle configbundle install
生成配置
运行交互式安装向导:
代码语言:javascript复制RAILS_ENV=production bundle exec rake mastodon:setup
这将:
- 创建配置文件
- 运行资产预编译
- 创建数据库架构
配置文件另存为 。您可以根据自己的喜好查看和编辑它。请参阅有关配置的文档。.env.production
您现在已经完成了乳齿象用户,因此请切换回root:
代码语言:javascript复制exit
设置 nginx
从Mastodon目录中复制nginx的配置模板:
代码语言:javascript复制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/mastodonexample.com
重新加载nginx以使更改生效:
获取 SSL 证书
我们将使用Let's Encrypt来获取免费的SSL证书:
代码语言:javascript复制certbot --nginx -d example.com
这将获取证书,自动更新以使用新证书,并重新加载nginx以使更改生效。/etc/nginx/sites-available/mastodon
此时,您应该能够在浏览器中访问您的域名,并看到大象击中计算机屏幕错误页面。因为服务还没有启动。
设置 systemd 服务
从 Mastodon 目录中复制 systemd 服务模板:
代码语言:javascript复制cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
如果您在任何时候偏离了默认值,请检查用户名和路径是否正确:
代码语言:javascript复制$EDITOR /etc/systemd/system/mastodon-*.service
最后,启动并启用新的 systemd 服务:
代码语言:javascript复制systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
它们现在将自动在启动时启动。
嗯哼!搞定!