Help us understand the problem. What is going on with this article?

Raspberry pi 3 を使って、 LINE から 赤外線リモコンを操作(その2:httpsサーバ(apache + mod_wsgi) の構築)

More than 1 year has passed since last update.

はじめに

出先からおうちの家電を動かしたい!ということで、
LINE の Messaging API (webhook) を利用し、
Raspberry pi 3 経由で、赤外線を使って、
おうちの家電製品を操作するような仕組み作りました。
備忘録として、思い出しながら記載します。

今回の構成は以下の通りです。
LINE -> raspberry pi(httpsサーバ) -> 赤外線リモコン -> エアコン

以下のとおり、3回に分けて説明します
- 赤外線リモコン から エアコン を操作(前回)
- httpsサーバ(apache + mod_wsgi) の構築(今回)
- LINE から 赤外線リモコンを操作

今回は、httpsサーバーの構築するために、
httpsサーバーのデーモンである apache
pythonでhttpsサーバーとwebアプリケーションを繋げるためのモジュール mod_wsgi
httpsサーバで必要なSSLの証明書を無料で取得できるサービス Let's encrypt
を利用します。

※ 4ヶ月以上前に設定したことなので、参照サイト、および、記載が古いことがありますのでご了承ください

環境

OS: Raspbian 9.1
バージョンによって、設定方法など変わることに注意

手順

apache によるwebサーバーの構築

apache のインストール

apache のインストール前に、最新のソフトの情報を取得し、システムを最新の状態にする。

terminal
$ sudo apt-get update
$ sudo apt-get upgrade

apache2 をインストールする。

terminal
$ sudo apt-get install apache2

mod_wsgi のインストール

apache2 でmod_wsgi を使うためにlibraryをインストールする。

terminal
$ sudo apt-get install libapache2-mod-wsgi

pythonで mod_wsgi を使うためのライブラリをインストールする。

terminal
$ sudo pip install mod_wsgi

apache の設定ファイルの更新

webからアクセスするためのディレクトリを homeディレクトリ(私の設定は pi と言うディレクトリ名)配下にある public_htmlフォルダ に変更する。

terminal
$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/userdir.conf
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/userdir.load

webからのアクセスでスクリプトを起動するための仕組み(cgi) を動作するディレクトリを決める。
ここでは、homeディレクトリ(私の設定は pi と言うディレクトリ名)配下に /public_html/cgi-bin/ とし、以下のファイルを編集する。

/etc/apache2/conf-available/serve-cgi-bin.conf
・・・
<IfDefine ENABLE_USR_LIB_CGI_BIN>
    ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin
    <Directory "/home/pi/public_html/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Require all granted
    </Directory>
</IfDefine>
・・・

cgi を apache2 で利用するために、以下の2つを行なう。
特定フォルダに cgiファイル のリンクを置く。

terminal
$ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

apache2 で serve-cgi-bin.conf を参照するために、以下のファイルを編集する

/etc/apache2/sites-available/000-default.conf
(変更前)
 # Include conf-avaliable/serve-cgi-bin.conf
(変更後:コメントを外す)
 Include conf-avaliable/serve-cgi-bin.conf

cgi を利用できる拡張子(.py, .wsgi)を追加するために、以下のファイルを編集する。

/etc/apache2/mods-available/mime.conf
(変更前)
 AddHandler cgi-script .cgi
(変更後)
 AddHandler cgi-script .cgi .py
 AddHandler wsgi-script .wsgi

apache2で https(http + ssl) を使えるようにするために、特定フォルダに sslファイル のリンクを置く。

terminal
$ sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf
$ sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
$ sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

apache2で mod_wsgi を使えるようにするために、特定フォルダにファイルのリンクを置く。

terminal
$ sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled/wsgi.conf
$ sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled/wsgi.load

apache2 を再起動し、変更内容を有効化する。

terminal
$ sudo /etc/init.d/apache2 restart

Let's encrypt からSSL証明書取得

ルータのポート変換機能を使えるようにする

raspberry pi が割り当てられているローカルIPアドレスを取得する

terminal
$ sudo ifconfig

すると、192.168.x.y のIPアドレスを取得できる。

今回、http / https を利用するため、ポート 80 と ポート 443 に対して、
グローバルIPでアクセスした時に、ローカルIPアドレスに変換するように、ルータの設定を変更する。

各自がお持ちのルータの設定を確認ください。

証明書作成スクリプトのインストール

terminal
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto

IPアドレスとホスト名を取得

家庭用であれば、IPアドレスはプロバイダ経由で動的に割り当てられると思います。
IPアドレスはよく変わるかもしれませんが、グーグル先生に「IPアドレス」で検索するといくつかサイトが出て来ます。
私も動的にIPアドレスが割り当てられていますが、そこでIPアドレスとホスト名を取得しています。
自己責任で調べて見てください。
ここでは、以下の通りとしておきます。
    IPアドレス:xxx.yyy.zzz.vvv
    ホスト名:abcdefg.xyz.ne.jp

証明書の取得

今回、証明書取得フォルダはwebアクセスするためのデフォルトのフォルダになるため、以下のフォルダを参照する。
    /var/www/html/
また、ホスト名は上記の通り取得している。

それをもとに、以下の通りコマンドを実行して、証明書を取得する。

terminal
$ ./certbot-auto certonly --webroot -w /var/www/html/ -d abcdefg.xyz.ne.jp

具体的には以下に証明書が存在する。

証明書
証明書のデータ
/etc/letsencrypt/live/abcdefg.xyz.ne.jp/fullchain.pem
秘密鍵
/etc/letsencrypt/live/abcdefg.xyz.ne.jp/privkey.pem

SSLの証明書を参照するように以下のファイルを修正する。

/etc/apache2/sites-available/default-ssl.conf
(変更前)
SSLCertificateFile          /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateFileKeyFile   /etc/ssl/private/ssl-cert-snakeoil.key
(変更後)
SSLCertificateFile          /etc/letsencrypt/live/abcdefg.xyz.ne.jp/fullchain.pem
SSLCertificateFileKeyFile   /etc/letsencrypt/live/abcdefg.xyz.ne.jp/privkey.pem

apache2 を再起動し、SSL証明書を有効化する。

terminal
$ sudo /etc/init.d/apache2 restart

参考URL

(1)Raspberry Pi2にWebサーバを構築し、LEDを点灯させる
(2)Let's Encrypt の使い方

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした