【玩转Lighthouse】便于自己魔改的mastodon搭建方式

2022-04-22 16:53:01 浏览数 (1)

!看了下网上几乎都是用docker的方式去搭建mastodon,方便是方便但是对于想自己做些修改的人还是略显不便,我也是个喜欢折腾的人,就用腾讯轻量送的那台4H4G80G试一下,配置是足够多人实例的运行的。

一、安装之前的准备工作

官方给出了几个建议,1,不要使用密码验证的方式登录SSH,2,使用fail2ban保护系统,屏蔽非法登录者,3,安装防火墙。应该说这几点可以很方便的在lighthouse面板上通过设置密钥和防火墙的方式很直观的进行操作,就不详述了;

先决条件

  • 运行 Ubuntu 20.04Debian 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

代码语言:javascript复制
*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

代码语言:javascript复制
[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

它们现在将自动在启动时启动。

哼!搞定!

0 人点赞