2017-10-11に投稿

PhoenixでLet's EncryptによるSSL

前提

PhoenixでLet's Encryptにより無料でSSL対応を行う。

  • Elixir 1.5.2
  • Phoenix 1.3.0

手順

基本的には

Phoenix/Elixir App Secured with Let’s Encrypt – Andrew Forward – Medium

で書かれている通り。

とりあえずサーバー起動。

MIX_ENV=prod mix phx.server

サーバーを起動したまま.well-knownフォルダを更新しなければならないのでそのための設定を行う。

まず.well-knownフォルダ以下をそのままアクセスできるようにするための設定。

lib/プロジェクト名/web/endpoint.ex
にてPlug.Staticの設定に.well-knownを追加する。

plug Plug.Static,
 at: "/", from: :yourproject, gzip: false,
 only: ~w(css fonts images js favicon.ico robots.txt .well-known)

これで
_build/prod/lib/プロジェクト名/priv/static/.well-known
以下がそのまま公開され、
http://yourdomain.com/.well-known/****.html
のような感じでアクセスできるようになる。

ちなみに、設定を変更したらアプリケーションを再起動する必要があると思う。
また、再起動すると作っていた.well-knownは消えるので混乱しないよう注意。

うまくいったらあとはcertbotで証明書を発行する。

そして設定を更新。

config :yourproject, Yourproject.Web.Endpoint,
  http: [port: 80],
  https: [port: 443,
    url: [host: "yourdomain.com", port: 443],
    keyfile: "/etc/letsencrypt/live/yourdomain.com/privkey.pem",
    cacertfile: "/etc/letsencrypt/live/yourdomain.com/chain.pem",  
    certfile: "/etc/letsencrypt/live/yourdomain.com/cert.pem"],
  force_ssl: [hsts: true]

これで完了。更新などもそのまま普通にできるようになる。

Now your site is being served up only through SSL directly through Phoenix (no Nginx required).

と書かれているので別のWEBサーバーを使う冗長な方法もあったのだろうか。
とはいえ_build以下を使う方法なので今後のバージョンによってはできなくなる可能性などもあるのかもしれない。


だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはαバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
関連記事

コメント