pleromaをherokuで立てる[2022年度版]
この前、#stackoverflowでelixirのphoenixが好きなフレームワーク1位に選ばれていました。
ref : https://www.publickey1.jp/blog/22/7itrustdbpostgresqlvscodeneovimstack_overflow_2022_developer_survey.html
正直、驚きました。しかも、好きな言語ランキングでも1位のrustに続いてelixirが2位でした。elixir、そんな人気だったん…?
そんなelixirのphoenixですが、mastodonに似たblog(sns)サービスであるpleromaがphoenixで書かれています。pleromaを触ってると、phoenixのことも自然にわかってくると思います。
ということで、今回は、herokuでpleromaを立ててみます。herokuのelixir, phoenix対応はstackやbuildpackの関係上、かなりつらい状況です。buildpackを自身で動くよう調整し公開する必要があるかもしれません。
したがって、dockerで立てたほうがいいでしょう。もしcontainerを利用しない場合、現在のelixir対応では運用が行き詰まる可能性があります。
https://github.com/angristan/docker-pleroma
基本的には、Dockerfile
のENTRYPOINTを削除して、heroku.ymlを書きます。
#ENTRYPOINT ["/pleroma/docker-entrypoint.sh"]
build:
docker:
web: Dockerfile
config:
MIX_ENV: prod
SECRET_KEY_BASE: $SECRET_KEY_BASE
DATABASE_URL: $DATABASE_URL
DB_NAME: $DB_NAME
DB_HOST: $DB_HOST
DB_USER: $DB_USER
DB_PASS: $DB_PASS
DOMAIN: $DOMAIN
ADMIN_EMAIL: $ADMIN_EMAIL
NOTIFY_EMAIL: $NOTIFY_EMAIL
run:
web: $HOME/bin/pleroma_ctl migrate && exec $HOME/bin/pleroma start
それぞれの環境変数は、以下のコマンドで入れていけばいいでしょう。
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku pg:credentials:url
$ heroku config:set DB_USER=xxx
.
.
.
次に、config.exs
を書きますが、herokuに対応した書き方が必要です。
config :pleroma, Pleroma.Web.Endpoint,
url: [scheme: "https", host: "xxx.herokuapp.com", port: {:system, "PORT"}],
http: [ip: {0, 0, 0, 0}, port: {:system, "PORT"}]
config :pleroma, :instance,
name: System.get_env("INSTANCE_NAME", "pleroma.syui.cf"),
email: System.get_env("ADMIN_EMAIL"),
notify_email: System.get_env("NOTIFY_EMAIL"),
limit: 5000,
registrations_open: false,
federating: true,
healthcheck: true
config :pleroma, :media_proxy,
enabled: false,
redirect_on_failure: true,
base_url: "https://cache.domain.tld"
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
#url: System.get_env("DATABASE_URL"),
username: System.get_env("DB_USER", "pleroma"),
password: System.fetch_env!("DB_PASS"),
database: System.get_env("DB_NAME", "pleroma"),
hostname: System.get_env("DB_HOST", "db"),
pool_size: 10,
ssl: true
インスタンスの新規登録を禁止するにはregistrations_open
をfalse
に変更します。
$ heroku stack:set container
$ git add .
$ git commit -m "first"
$ git push heroku main
ref : https://docs-develop.pleroma.social/backend/administration/CLI_tasks/user/#create-a-user