+++ date = "2022-07-07" tags = ["pleroma","heroku", "docker"] title = "pleromaをherokuで立てる[2022年度版]" slug = "pleroma" +++ この前、[#stackoverflow](https://twitter.com/StackOverflow/status/1539608579291971584)で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](https://git.pleroma.social/pleroma/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"] ``` ```yml:heroku.yml 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 ``` それぞれの環境変数は、以下のコマンドで入れていけばいいでしょう。 ```sh $ heroku addons:create heroku-postgresql:hobby-dev $ heroku pg:credentials:url $ heroku config:set DB_USER=xxx . . . ``` 次に、`config.exs`を書きますが、herokuに対応した書き方が必要です。 ```erlang 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.ai"), 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`に変更します。 ```sh $ 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