在fly.io部署Gotosocial

关于 Gotosocial

GoToSocial 是一个十分轻量（轻量到甚至没有用户界面，需要使用第三方程序登录、兼容 Mastodon 应用进行使用）的 ActivityPub 联邦社交网络程序，自建 GoToSocial 可以避免您的信息因为所在实例倒闭、不可抗力等原因化为乌有。

准备

注册 Fly.io 账号，并绑卡（避免滥用）；

注册 Cloudflare 并启用 R2，启用 R2 需要绑卡。新建一个储存桶并创建一个 API 令牌。

注册 render.com 并新建一个 POSTGRESQL 数据库，并记录下数据库密码等信息

安装 flyctl

Linux

Copy
curl -L https://fly.io/install.sh | sh

macOS

Copy
curl -L https://fly.io/install.sh | sh

Windows，需要开启 RemoteSigned: 管理员运行

Copy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Copy
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"

登录

Copy
flyctl auth login

# 若登录失败使用
# flyctl auth login -i
# 输入账号密码进行登录

创建 APP

YOURAPPNAME更改为自己希望设置的名称

Copy
flyctl launch --name YOURAPPNAME --image=superseriousbusiness/gotosocial:latest --region hkg --no-deploy

创建储存卷

Copy
flyctl volumes create social_data --region hkg --size 1

编辑配置

编辑根目录下的 fly.toml 配置文件，参考下方

Copy
app = "gotos" ## 自定义名称
primary_region = "hkg" ##服务器节点,当前为香港

[experimental]
vm = true

[build]
image = "superseriousbusiness/gotosocial:latest"

[env]
GTS_DB_ADDRESS = "#数据库地址"
GTS_DB_DATABASE = "#数据库名称"
GTS_DB_PORT = "5432"
GTS_DB_TLS_MODE = "enable"
GTS_DB_TYPE = "postgres"
GTS_DB_USER = "数据库用户名"
GTS_HOST = "GTS的域名"
GTS_LETSENCRYPT_ENABLED = "false"
GTS_STORAGE_BACKEND = "s3"
GTS_STORAGE_S3_BUCKET = "BUCKET名称"
GTS_STORAGE_S3_ENDPOINT = "#S3 API"
GTS_STORAGE_S3_ACCESS_KEY = "#api-tokens"
GTS_STORAGE_S3_SECRET_KEY = "#api-tokens"
GTS_STORAGE_S3_PROXY = "true"

[[mounts]]
source = "social_data"
destination = "/gotosocial/storage"

[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = false
auto_start_machines = true
min_machines_running = 1
processes = ["app"]

以上配置中GTS_STORAGE_S3_ENDPOINT不需要带https:和最后的/BUCKET名称

部署

Copy
flyctl deploy

启动成功后会显示一个 URL, 能成功访问则代表部署成功。

创建用户和管理员

在 fly.toml 文件目录执行

Copy
flyctl ssh console

创建用户

Copy
/gotosocial/gotosocial admin account create --username YOUR_USERNAME --email YOUR@EMAIL.COM --password 'SOME_VERY_GOOD_PASSWD'

YOUR_USERNAME为用户名
YOUR@EMAIL.COM为邮箱
SOME_VERY_GOOD_PASSWD为密码，需设置足够复杂，太简单会提示密码不够安全，需重新设置

设置管理员

Copy
/gotosocial/gotosocial admin account promote --username YOUR_USERNAME

演示

https://m.ima.cm

https://m.ima.cm/@jkjoy

下载数据库

在 fly.toml 文件目录执行

Copy
flyctl sftp get /gotosocial/storage/sqlite.db