Mastodon 笔记

mastodon安装elasticsearch后,重启服务器,elasticsearch不会自动启动

● elasticsearch.service - Elasticsearch
     Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
     Active: failed (Result: timeout) since Sat 2022-06-18 07:13:40 BST; 9min ago
       Docs: https://www.elastic.co
    Process: 513 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=143)
   Main PID: 513 (code=exited, status=143)

Jun 18 07:12:26  systemd[1]: Starting Elasticsearch...
Jun 18 07:13:39  systemd[1]: elasticsearch.service: start operation timed out. Terminating.
Jun 18 07:13:40  systemd[1]: elasticsearch.service: Failed with result 'timeout'.
Jun 18 07:13:40  systemd[1]: Failed to start Elasticsearch.

经过排查

sudo systemctl show elasticsearch | grep ^TimeoutStartUSec

发现默认只有75秒时间。

TimeoutStartUSec=1min 15s

从上面的错误日志也可以看到,从启动到报错也是75秒,不够用的,所以要延长启动时间

新建一个配置文件

sudo mkdir /etc/systemd/system/elasticsearch.service.d

修改为180秒

echo -e "[Service]\nTimeoutStartUSec=180" | sudo tee /etc/systemd/system/elasticsearch.service.d/startup-timeout.conf

重新载入

sudo systemctl daemon-reload

检查一下

sudo systemctl show elasticsearch | grep ^TimeoutStartUSec

时间修改过来了

TimeoutStartUSec=3min

重启服务器,会发现elasticsearch可以正常启动了。

原因估计是服务器配置低的原因,处理器是E5,且只有1核,硬盘还是普通HDD的。

调整下elasticsearch使用的内存

cd /etc/elasticsearch/jvm.options.d
nano mem.options

加入

-Xms1g
-Xmx1g

1g代表分配1g内存,根据你服务器内存使用情况分配,我的是4G,给了1g。
然后重启elasticsearch,可以看到内存占用少了

systemctl restart elasticsearch

清理mastodon空间

su - mastodon
RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove --days=5 --dry-run

--dryrun 是演示,实际删除要删除

定期清理:
su - mastodon

cd /home/mastodon/live

#计算被mastodon占用的空间
RAILS_ENV=production bin/tootctl media usage

#移除本地缓存的其它实例媒体附件
RAILS_ENV=production bin/tootctl media remove --days=7

#清除缓存存储
RAILS_ENV=production bin/tootctl cache clear

#从数据库中删除未被引用的嘟文
RAILS_ENV=production bin/tootctl statuses remove

#移除本地预览卡片缩略图
RAILS_ENV=production bin/tootctl preview_cards remove

#扫描出不属于任何媒体附件的文件并移除他们
RAILS_ENV=production bin/tootctl media remove-orphans

定期备份:
准备工作: apt install lrzsz

1. PostgreSQL 数据库
su - mastodon pg_dump mastodon_production > dump.sql sz dump.sql rm dump.sql
2. .env.production 文件或等效文件中的应用密钥
cd /home/mastodon/live ls -a sz .env.production
(应用密钥是最容易备份的,因为它们是不变的。你只需要将 .env.production 存储在安全的地方就可以了。)
3. 用户上传的文件
su - mastodon cd live/public tar -zcvf system.tar.gz system sz system.tar.gz rm system.tar.gz
如果你使用本地文件存储,复制体积巨大的 public/system 目录(默认存储上传文件的地方)
4. Redis 数据库
root cd /var/lib/redis sz dump.rdb
备份Redis是很容易的。Redis会定期将数据写入/var/lib/redis/dump.rdb文件,你只需要复制这个文件就可以了。

PS: 发送文件rz

1.在新的服务器上重新安装mastodon, 到“生成配置文件”之前结束。(也就是在执行RAILS_ENV=production bundle exec rake mastodon:setup之前)
2.停止旧服务器上的Mastodon(systemctl stop ‘mastodon-*.service’)
3. 导出并导入Postgres数据库
<旧的VPS>
su - mastodon

pg_dump -Fc mastodon_production -f backup.dump
sz backup.dump

<新的VPS>
apt install lrzsz
su - mastodon
rz
createdb -T template0 mastodon_production
pg_restore -U mastodon -n public --no-owner --role=mastodon -d mastodon_production backup.dump
4. 复制 system/ 目录下文件
<旧的VPS>
使用 root 权限进入到 system 这个文件夹的上一个目录
cd /home/mastodon/live/public
然后,使用 tar 命令将 system 目录传输到新服务器上:
tar czf - system | ssh root@IP -p 端口 tar xzf - -C /home/mastodon/live/public
上面的命令执行后,会提示你输入新服务器的 SSH 连接密码,输入完毕之后,整个 SSH 窗口可能不会返回有效信息,等待一段时间,让服务器之间传输完成,直至你再次看到 SSH 窗口可以输入新执行命令时,就可以去新服务器上看看是不是传输完成了。
5. 复制 .env.production 文件
<旧的VPS>
cd /home/mastodon/live sz .env.production
<新的VPS>
cd /home/mastodon/live rz
6. 编译mastodon
su - mastodon cd /home/mastodon/live RAILS_ENV=production bundle exec rails assets:precompile RAILS_ENV=production ./bin/tootctl feeds build
exit
7. 从官网“配置 nginx”处继续安装