AndroidのAsyncTaskに出てくる警告のお話
はじめに
KotlinでAsyncTaskを書いてるとこんな感じに警告が出ていた
Javaで書いてた時はこんなの出てきてなかったはず... ともかくこれだけ警告出されるとさすがに気にせずにはいられないので早速調べてみました
原因
エラーのところにマウスオーバーすると詳細が出てくる
どうやらstaticじゃないとメモリリークの恐れがあるよって言ってるみたいです
解決方法
AsyncTaskをstaticな内部クラスとして宣言するために 以下のように書き換えました
KotlinではJavaの様にstatic指定が出来ないので代わりにcompanion objectを使います
無事に警告が消えたのでこれで大丈夫だと思われる
最後に
ここ に原因と解決方法合わせて詳しく載っていました
今回はcompanion objectを使用しましたが、Kotlin的にはあまり推奨してないみたいです 出来るならば外部クラスとして宣言してあげるのがいいみたい
非同期処理は闇が深い...
右向き矢印 の ブログサイト は しんでしまった!
どうもお久しぶりです。最近就活で忙しい右向き矢印です。
なんでもいいけどこのHN適当に付けすぎたからもっとしっくりくるのに変えたいです。
さて、なぜこのクッソ忙しい時期にブログなんて書いてるかといいますとですね...
ブログ兼アプリ公開サイトの右向き矢印の日記帳が死んでしまいました!!!
知ってる人がいるかは分からないですけど1ヶ月くらいから見れないです。
訳あってポート開放出来てないのが原因なんですけれどもね...
いい加減お知らせがてら書いておいた方がいいかなと思って重い腰をあげたわけです。
というわけでまた時間が出来てその辺弄れたら復旧させる予定なんで出来たらまたこの場でお伝えするかもしれません。
ではまた。
Apacheサーバ上にWordPressを構築して公開する
※この記事は、右向き矢印の日記帳 – 備忘録とか日常とかに掲載しているものと同じものになります。良ければこちらの方もどうぞ!
はじめに
前回までの記事の続きとなります。今回の記事で、ラズパイ上にApacheサーバを立ててWordPressを構築し、外部に公開するまでの一連の流れが終了となります。 少し作業が多いですが頑張りましょう! また、今回の作業はLAN内でのssh接続で行っている前提で進めます。
環境
- ハード: Raspberry Pi 3 Model B
- OS: Raspbian Stretch
- サーバ: Apache2(2.4.25)
WordPressをインストールする前に
WordPressを使用するには、WordPressに使用されている言語であるPHPと、データベースをインストールする必要があります。今回は以下のものを入れていきます。
まずはこれらのパッケージをインストールしていきましょう。apt-getコマンドだと依存関係を解決するのが大変だったので、自分はaptitudeコマンドを使用しました。
$ sudo aptitude install php-7.0 php7.0-cgi mariadb
aptitudeコマンドを使用すると、依存関係のパッケージが足りない時に解決方法を提示してくれます。nを押すと他の選択肢が提示されるので、全ての依存関係のパッケージをインストールするという選択肢が出てきたら実行しましょう。
データベースの作成
次にmariaDBにWordPress用のデータベースを作成します。mariaDBはmySQLと同じような操作で使えます。
例として、データベースの名前をwordpress、ユーザー名をwpadmin、パスワードをpasswdとします。
CREATE DATABASE wordpress; CREATE USER 'wpadmin'@'localhost' IDENTIFIED BY 'passwd'; GRANT ALL ON 'wordpress'.* TO 'wpadmin'@'localhost';
WordPressパッケージのインストール
前準備が終わったので、次はwordpressのパッケージをインストールします。
$ sudo apt-get install wordpress
パッケージのインストールが終わったら、次にwp-config.phpにデータベースの設定を書き込みます。
最初にwp-config-sample.phpの内容をwp-config.phpにコピーします。
$ sudo cp wp-config-sample.php wp-config.php
コピーしたらwp-config.phpを開いて、以下の部分を先ほど作成したデータベース名やユーザ名、パスワードに変更します。
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wpadmin'); /** MySQL database password */ define('DB_PASSWORD', 'passwd'); /** MySQL hostname */ define('DB_HOST', 'localhost'); /** Database Charset to use in creating database tables. */ define('DB_CHARSET', 'utf8'); /** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE', '');
Apacheの設定を変更する
次に、Apacheの設定をいろいろ変更していきます。
Apacheでphpファイルを読み込むように設定する
現状では、Apacheでphpファイルを読み込むように設定されていないと思うので、phpファイルも読み込むように設定を変更します。/etc/apache2/apache2.confを開き、Directory /var/www の中にAddHandler .phpという記述を書き加えてください。
<Directory /var/www/> ... AddHandler .php #この記述を書き加える </Directory>
設定が終わったら、apacheを再起動し、var/www/htmlにtest.phpという名前で以下のようなファイルを作成し、phpの情報が見れるかを確認してみましょう。
<?php phpinfo(); php>
ブラウザでラズパイのローカルIPアドレス/test.phpを開き、phpの情報が表示されれば成功です。
ドキュメントルートを変更する
設定の書き込みが終わったら、次にApacheのドキュメントルートを変更します。今のままだと、/var/www/html下にあるファイルが読み込まれるようになっていると思うので、これを変更します。/etc/apache2/sites-available/000-default.confを開き、DocumentRootをwordpressがインストールされたディレクトリに変更してください。
DocumentRoot /ここにwordpressがインストールされているパス/
/var/www下に無いと気持ち悪いという方はmvコマンドなりでwordpressディレクトリの位置を変更してから設定して下さい。僕は/var/www下にwordpressのディレクトリを移動し、DocumentRoot /var/www/wordpressに変更しました。
いよいよWordPressをインストール!
ここまで来たら仕上げに入ります。
ブラウザでhttp://ラズパイのIPアドレス/wp-admin/install.phpにアクセスし、画面の指示に従って最終的なインストールを行います。
登録したユーザ名とパスワードでログインし、ダッシュボードが開けば完了です!
外部から見られるように
最後に外部からサイトを見られるように設定しましょう。
wordpressのダッシュボードを開き、設定→一般を開きます。
開いたら、wordpressアドレスとサイトアドレスを自分で取得したドメイン名に変更します。(自分は前回紹介したMyDNSを使って取得しました。)
また、wp-config.phpに直接設定を書きこむ方法もあります。この方法だとダッシュボードからアドレスを変更できなくなるので注意してください。
define('WP_SITEURL', '取得したアドレス'); define('WP_HOME', '取得したアドレス');
ただしこの操作を行うことで、LAN内からwordpressにアクセスすることができなくなるので注意してください。もしかしたらうまい回避方法はあるのかもしれないけど...
ラズパイサーバを外部に公開する
※この記事は、右向き矢印の日記帳 – 備忘録とか日常とかに掲載しているものと同じものになります。良ければこちらの方もどうぞ!
前回の記事の続きになります。
サーバを建てたはいいもののやっぱりlocalhostでしか確認できないのはつまらないので、このサーバに外部から接続できるようにしてみます。
とりあえずLAN内から接続
まずはラズパイが接続されているLAN内の他の端末からサーバに接続できるようにします。これにはラズパイのローカルIPアドレスを固定しておく必要があります。これをしないとラズパイを起動するたびに割り振られるIPアドレスが変わってしまうため、どのIPアドレスで接続できるかが分からなくなってしまいます。
まずは現在ラズパイに割り振られているアドレスを確認してみましょう。GUIを起動している場合はWi-Fiのアイコンにマウスオーバーすればラズパイに割り振られているアドレスが表示されます。
CUI環境の場合は以下のコマンドを入力することで確認できます。
$ ip addr
有線接続の場合はeth0、無線接続の場合はwlan0の値を参照します。また、ローカルIPアドレスは192で始まるのでgrepコマンドを活用すると確認しやすくなります。
$ ip addr | grep 192
ローカルIPアドレスの確認が終わったら、ラズパイのアドレスを固定する設定を書き込んでいきます。 この設定は/etc/dhcpcd.confに書き込みます。viなりnanoなり好きなエディタを使って先ほどの設定ファイルを開いたら、一番下に以下の内容を記述します。
interface wlan0 static ip_address=192.168.11.11/24 static routers=192.168.11.1 static domain_name_servers=192.168.11.1
ip_addressの部分にラズパイに指定したいIPアドレスを記述します。routersとdomain_name_serversの部分には自分が使っているルータのIPアドレスを記述します。これらの値は使用しているルータによって設定できる値が変わってくるので、自分の環境に合わせてみてください。また、指定するIPアドレスはサブネットマスクで指定されている範囲内にするように注意してください。この辺はネットワークの基礎の話になってくるので、この記事では割愛させていただきます。
これらの設定が終わったらラズパイを再起動してもう一度IPアドレスを確認してみてください。 先ほど指定したIPアドレスに変わっていれば大丈夫です。
では同じLAN内の他の端末でラズパイにアクセスしてみましょう。ブラウザを開いてラズパイのIPアドレスを検索バーに入力して検索してみます。
前回と同じページが現れたらOKです。
LAN外から接続できるように
では次にLAN外からでも接続できるようにしてみましょう。ここからは多少大変です。また、外のネットワークに接続するということは同時に外からの攻撃に合うことにもなります。一応ファイアウォールは前回設定しましたが、万全というわけではありません。なのでここから先は自己責任でお願いします。
早速設定していきたいのですが、ここからはラズパイの設定ではなく自宅で使用しているルータでの設定が主になります。設定画面はルータごとに違ってくるので注意してください。ここでは自分が使っているBUFFALOのWHR-1166DHPで具体的に説明していきます。
まずはブラウザを開いてルータの自身のIPアドレスを入力し、設定画面を開きます。この際、ユーザ名とパスワードを聞かれると思うので、自分が使っているルータのユーザ名とパスワードを入力してください。
管理画面に入ったら以下の設定をしていきます。
- IPフィルタの設定
- ポート変換の設定
- ルータのグローバルIPアドレスの確認
IPフィルタの設定
まずはIPフィルタの設定をしていきます。これは前回設定したファイアウォールと同じようなもので、外からの通信に対してどのような対応をするかのルールが設定されています。 基本的にルータは外からの通信には応答しないようになっているので、指定した通信を許可するように変更していきます。追加するルールは、
- 外側からの80番ポートに対する通信を許可する
- 外側からの22番ポートに対する通信を許可する
のふたつです。sshで操作していないのならば2番目のルールは追加しないことをお勧めします。
ポート変換の設定
次にポート変換の設定をしていきます。これは外側からのルータに対する通信を、LAN側のどの端末に転送するかといったルールが設定されます。ここで、80番ポートと22番ポートへの通信をラズパイのローカルアドレスに変換するようにルールを記述します。
ルータのグローバルIPアドレスの確認
これらの設定を行ったら、現在ルータに割り振られているグローバルIPアドレスを確認します。IPアドレスをメモしたら、LAN外の端末から先ほどメモしたIPアドレスにアクセスしてみます。自宅で確認する場合は、スマホをLTEや4G通信に切り替えて確認するのがいいと思います。ここでも先ほどと同じ画面が出てこればOKです。
最後に
これで無事に外側からサーバにアクセスできるようになりました。しかし今の状態ではルータを再起動するたびにグローバルIPアドレスが変わってしまうので不便です。ここでもIPアドレスを固定したいのですが、固定のグローバルIPアドレスを使用するには、固定グローバルIPアドレスを提供してくれるプロバイダと契約する必要が出て来るので面倒ですしお金もかかります。
そこで、動的に変化するIPアドレスにひとつのドメイン名を結び付けてくれるDDNSというサービスを使用します。MyDNSという無料で使えるDDNSサービスがあるのでそれを利用すると、独自のドメイン名でサーバにアクセス出来るようになります。少し制約はありますが、便利なので使うことをおすすめします。このサービスの詳しい使い方は他に説明してくれているサイトがたくさんあるのでそこを参照するといいと思います。
次回はWordpressをインストールして、実際に外部からも見れるようにしていくところまでやっていきます。
ラズベリーパイ上にApacheサーバを建てる
※この記事は、右向き矢印の日記帳 – 備忘録とか日常とかに掲載しているものと同じものになります。良ければこちらの方もどうぞ!
このブログ初の記事となります。自分自身このようなブログ記事を書くのは初めてなので、至らないところもあるかもしれませんがお願いしますm( )m
さて、初の記事の内容ですが、しばらくは自分がこのブログサイトを構築する際の手順や詰まったところを、何回かに分けて備忘録も兼ねて書いていきたいと思います。
というわけで今回はタイトルの通りサーバマシンであるラズベリーパイにApacheサーバを建てるところまでいきたいと思います。
環境
- ハード: Raspberry Pi 3 Model B
- OS : Raspbian Stretch
- サーバ: Apache2
では早速始めていきます。最初にApache2をラズパイにインストールしていきます。
$ sudo apt-get install apache2
インストールが終了したら以下のコマンドでサーバをリスタート
$ sudo systemctl restart apache2
ブラウザでlocalhost:80を入力して接続してみます。
無事にこのページが現れたら終了です!
サーバを建てるというと難しそうですが、実はこれだけなんですね。
とはいえこれだけだと内容が無さすぎるんでついでにファイアウォールの設定もしていきたいと思います。ファイアウォールの設定には、簡単にiptablesを設定できるufwを使用します。
$ sudo apt-get install ufw
インストールが終わったら実際に設定をしていきます。Apache2がhttp通信に使うポートはデフォルトで80番が設定されているので、ufwを使い、ラズベリーパイの80番ポートを開放します。
$ sudo ufw allow 80
また、ラズベリーパイにssh接続している場合は、ssh通信に使用している22番ポートも開放します。
$ sudo ufw allow 22
設定ができたら状態を確認します。
$ sudo ufw status
80番ポートと22番ポートがALLOWになっていれば問題ないです。ファイアウォールを有効化しましょう。
$ sudo ufw enable
これでファイアウォールの設定まで終わりました。
次回はサーバを実際に外部に公開するところまでやってみます。