101 lines
3.3 KiB
Markdown
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
|