LoginSignup
1
1

More than 5 years have passed since last update.

PleromaをHerokuにたててみた

Last updated at Posted at 2018-09-03

introduction

色々な分散snsを触ってみる一環として、pleromaも触ってみました。

順番的には、mastodon -> pleroma -> gnu-socialという順です。

deploy pleroma on heroku

pleromaは、elixirのphoenix(phx)というweb frameworkで書かれています。

個人的には、phxで書かれたappは、非常に軽量で扱いやすいという印象です。

ただし、pleromaは、phx-exampleにあるようなディレクトリ構造とは少し違うので、使用するheroku buildpacksも違ってきます。

具体的には、https://github.com/gjaldon/heroku-buildpack-phoenix-static.gitは、assets/package.jsonnpm iするのですが、pleromaは、heroku deployする際に、npm(node)が必要ありません。

ということで、buildpacksはelixirのやつだけでOKです。

$ heroku create $APP_NAME

$ git clone https://git.pleroma.social/pleroma/pleroma
$ cd !$:t
$ rm -rf .git

$ heroku git:remote -a $APP_NAME 

$ cat elixir_buildpack.config
erlang_version=20.1
elixir_version=1.6.0
always_rebuild=false
runtime_path=/app

$ cat Procfile
web: MIX_ENV=prod POOL_SIZE=2 mix ecto.migrate && mix phx.server

$ cat config/prod.exs
use Mix.Config
config :pleroma, Pleroma.Web.Endpoint,
 http: [port: {:system, "PORT"}],
  url: [scheme: "https", host: "pleroma.syui.cf", port: 443],
  force_ssl: [rewrite_on: [:x_forwarded_proto]],
  #cache_static_manifest: "priv/static/manifest.json",
  secret_key_base: System.get_env("SECRET_KEY_BASE")
config :logger, level: :info
config :logger, :console, format: "[$level] $message\n"
config :phoenix, :stacktrace_depth, 20
config :pleroma, Pleroma.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: System.get_env("DATABASE_URL"),
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"),
  ssl: true

$ mix deps.get
$ mix phx.gen.secret
XXX
$ heroku config:set SECRET_KEY_BASE="XXX" -a $APP_NAME
$ heroku addons:create heroku-postgresql:hobby-dev -a $APP_NAME
$ heroku buildpacks:set https://github.com/HashNuke/heroku-buildpack-elixir.git -a $APP_NAME

$ echo mix.lock >> .gitignore
$ git add .
$ git commit -m "first"
$ git push heroku master

大抵、srcを読めばわかりますが、config/prod.exsはこんな感じになってます。

config/prod.exs
use Mix.Config

config :pleroma, Pleroma.Web.Endpoint,
 http: [port: {:system, "PORT"}],
  url: [scheme: "https", host: "pleroma.syui.cf", port: 443],
  force_ssl: [rewrite_on: [:x_forwarded_proto]],
  #cache_static_manifest: "priv/static/manifest.json",
  secret_key_base: System.get_env("SECRET_KEY_BASE")

config :logger, level: :info
config :logger, :console, format: "[$level] $message\n"

config :phoenix, :stacktrace_depth, 20

config :pleroma, Pleroma.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: System.get_env("DATABASE_URL"),
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"),
  ssl: true
elixir_buildpack.config
erlang_version=20.1
elixir_version=1.6.0
always_rebuild=false
runtime_path=/app
Procfile
web: MIX_ENV=prod POOL_SIZE=2 mix ecto.migrate && mix phx.server

pleromaもそうですが、imgをuploadするserverが必要で、通常はhostingしているserverにuploadするんですけど、herokuは再起動と同時に、upload(write)されたものを消します。なので、この際にuploadしたavatarも消えます。

ということで、media_proxyを設定してみてどうにかならないかなってことでやってみましたが、どうにもなりませんでした。

config/prod.exs
config :pleroma, :media_proxy,
  enabled: true,
  redirect_on_failure: true,
  base_url: "https://syui.gitlab.io/img/pleroma"

これに関しては、srcのlib/pleroma/upload.exをいじって対応しています。けど、やりたいこと事自体は単純なので上記の設定でなんとなく分かると思います(それ自体は有効ではないけど)。

heroku webは、アクセスがないとM30ごとに落ちます。多分そんな感じ。立ち上がるまで結構時間がかかるので、schedulerを設定してみたわけですが、heroku logsみてみると、Stopping all processes with SIGTERMしたことがありました。なのでやめといたほうがいいですね。特にprocess-schedulerです。herokuに負担がかかりすぎるみたい。

# heroku addons:add process-scheduler -a $APP_NAME
# heroku addons:open process-scheduler -a $APP_NAME
$ heroku addons:create scheduler:standard -a $APP_NAME
$ heroku addons:open scheduler -a $APP_NAME

こちらは、pleromaの初期コマンド等です。

# sign up
# example : $ heroku run "mix register_user syui syui user@github.com . password123" -a pleroma
$ heroku run "mix register_user <name> <username> <email> <bio> <password>" -a $APP_NAME

# admin user
$ heroku run "mix set_moderator $USER" -a $APP_NAME

# single user mode
$ vim config/config.exs
+ config :pleroma, :instance, registrations_open: false,
+ config :pleroma, :chat, enabled: false

参考 :

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1