monomeg Lab. 第2開発室

プログラミングで学んだことの覚書やら、考察ネタやら、なんでもあり

CentOS7+Phoenix Frameworkで80番ポートを使う方法

タイトルそのまま。デフォルトだと4000番ポートになってるけど、ブラウザでそのままアクセスできるように、80番(http)に変更してみる。

dev.exsの編集

projectを作成した後、config/dev.exshttp: [port: 4000]を以下のように編集する。

http: [port: 80]

firewalldの設定変更

この状態でサーバを起動しても、httpによる外部からのアクセスはiptablesによって拒否されるため、(iptablesを利用している)firewalldの設定を変更する。 firewalldがインストールされていない場合は、yumで適宜インストールしておく。

80番ポートのアクセスを許可する。

# firewall-cmd --add-port=80/tcp --permanent

設定を反映させる。

# firewalld-cmd --reload

サーバの起動

いよいよサーバを起動するのだが、ルート権限で実行しないと以下のようなエラーが出てしまう。

[error] Failed to start Ranch listener HelloPhoenix.Endpoint.HTTP in :ranch_tcp:listen([port: 80]) for reason :eacces (permission denied)


=INFO REPORT==== 4-Nov-2016::16:54:58 ===
    application: logger
    exited: stopped
    type: temporary
** (Mix) Could not start application hello_phoenix: HelloPhoenix.start(:normal, []) returned an error: shutdown: failed to start child: HelloPhoenix.Endpoint
    ** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Server
        ** (EXIT) shutdown: failed to start child: {:ranch_listener_sup, HelloPhoenix.Endpoint.HTTP}
            ** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup
                ** (EXIT) {:listen_error, HelloPhoenix.Endpoint.HTTP, :eacces}

というわけで、ルート権限でサーバを起動する。

# mix phoenix.server