1
0
hugo/content/blog/2022-07-07-pleroma.md
2024-04-23 22:21:26 +09:00

101 lines
3.3 KiB
Markdown

+++
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.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`に変更します。
```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