Mac からのリモートデスクトップ接続で日本語キーボード使う

muraveです。仕事では日本語キーボードな Mac を使ってます。

Windows Server でがんばる系のお仕事がきそうなのでクラウド上に実験環境を作ろうと思いました。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

dockerからAmazon EC2への奮闘記

今までdockerを使ったことがなかった私、勉強がてらLaradockを使ってLaravelで開発を行っていました
そこからAmazon EC2へ移行するまでの過程で色々行き詰まり、
なんとかLaradockからEC2へ環境移行することができましたので、
今後のメモのためにログを残しておこうと思います

今回書く内容はLaradockの環境設定〜Amazon EC2へ設置するまでの簡単な流れで行き詰ったものを晒すだけのほぼ日記の様なものです(笑)

Docker for Mac 〜 Laradockを導入するまで

$ git clone --depth=1 -b v5.5.1 https://github.com/LaraDock/laradock.git
$ cd laradock
$ cp env-example .env
$ vi .env

…とこのようにまずはドキュメントに従って導入を行っていました
しかし

問題1:Laradockを導入したが起動しない

$ docker-compose up -d nginx mysql
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
$ docker-machine start default
Host does not exist: "default"

defaultを設定しないといけない?

$ docker-machine create --driver virtualbox default

をすればよい、とのことだったので実行してみたけれどエラー発生
そもそもDocker for Macはvirtualbox使わなくても良くなった、との記述を見かけた気が…

解決:boot2dockerとDocker for macが混在していた

Laradockの問題ではなく、dockerの問題でした
どうやらDocker for Macを入れる前にboot2dockerをhomebrewで入れていたようで、
PC内にdockerが2つある状態でした
ということでboot2dokerを削除

brew uninstall docker boot2docker docker-compose docker-machine

念のためDocker for Macもアンインストールして入れ直し、もう一度動かしてみた所無事にLaradockを動かすことができました!
まぁこんなことしでかすなんて自分くらいしかいないと思うので参考にはならないかもしれませんが、思い出の一つとして…

問題2:MySQLが動かない

次のようなエラーが発生してMySQLが起動しない
docker-compose psを実行してみた所、laradock_mysql_1のstateはExitでした

$ docker-compose up --build -d nginx mysql
$ docker-compose exec mysql bash
ERROR: No container found for mysql_1

ログを確認

$ docker logs laradock_mysql_1
2017-08-01T08:01:50.339823Z 0 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!

解決:MySQLのデータファイルを削除

このエラーに関しては.envファイルを確認し、MySQLのデータファイルを削除した所、起動に成功しました

$ vi .env   ⇐ laradock/.envを確認
 10 ### Data Path:
 11 # For all storage systems.
 12
 13 DATA_SAVE_PATH=~/.laradock/data
$ cd ~/.laradock/data
$ mv data data.old

Laradockが動かない…動かない…と入れ直しを繰り返した時にゴミファイルとして残ってしまっていた模様

ローカルからAmazon EC2へ

システムが出来上がり、次はシステムをローカルからEC2へ移行作業へ…
まずLaradock環境内のバージョンを確認
EC2側にもPHP7.1、MySQL5.7、nginxをインストール

$ docker-compose exec workspace bash
# php -v
PHP 7.1.4-1+deb.sury.org~xenial+1 (cli) (built: Apr 11 2017 22:12:32) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.4-1+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies
# php artisan --version
Laravel Framework 5.4.30
# exit
exit

$ docker-compose exec mysql bash
# mysql --version
mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  EditLine wrapper
# exit
exit

EC2側環境作成

PHP、MySQL、nginxインストール後…
以下のファイルを編集

$ vi /etc/php-fpm.d/www.conf
 24 user = nginx
 25 ; RPM: Keep a group allowed to write in log dir.
 26 group = nginx

 48 listen.owner = nginx
 49 listen.group = nginx
 50 listen.mode = 0660
$ vi /etc/nginx/nginx.conf
 40     server {

 44         root         /var/www/html/public;

 73         location ~ \.php$ {
 74             root           /var/www/html/public;
 75             fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 76             fastcgi_index  index.php;
 77             fastcgi_param  SCRIPT_FILENAME  /var/www/html/public$fastcgi_script_name;
 78             include        fastcgi_params;
 79         }

それぞれのサービスを起動 & 自動起動するように設定

$ sudo service nginx start      ⇐ サービス起動
$ sudo service php-fpm start
$ sudo service mysqld start
$ sudo chkconfig nginx on           ⇐ 自動起動
$ sudo chkconfig php-fpm on
$ sudo chkconfig mysqld on

MySQL5.7ではrootユーザには初期パスワードなるものが存在し、
最初はそのパスワードでログインする

[ec2-user@ip-172-31-46-167 ~]$ sudo cat /var/log/mysqld.log
2017-08-03T06:59:34.488345Z 1 [Note] A temporary password is generated for root@localhost: Jt?eJUpbO6kl ⇐コレ

rootのパスワードは変更しておくべし

$ mysql -u root -p
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'パスワード';

Laravelのドキュメントに従いComposerをインストール後、Laravel5.4を導入

$ composer global require "laravel/installer"
$ cd /var/www/
$ laravel new html

ブラウザでLaravelのTOP画面が表示されることを確認

Laradockからお引っ越し

ローカルのLaravelより、gitを使ってアーカイブファイル作成!
Laradockには既に.gitignoreファイルが準備されており、logファイル等など必要ないファイルは省かれる様になっていました。便利!

git archive HEAD --output=~/WorkSpace/project/release/archive.zip

このファイルを/var/www/htmlに上書き(.envの取扱い注意!)し、
ファイルの権限を変更 chmod o+w -R storage
そして以下のコードを実行

$ php artisan config:cache
$ php artisan route:cache

.env.exampleを.envに書き換え、EC2上の環境に合わせた設定に書き換えます
そしてブラウザで確認!

The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.

こんなエラーが表示されましたよ…
以下を実行

$ php artisan key:generate
$ php artisan config:clear

.envファイルの APP_KEY= にキーがセットされるわけですね
無事TOPが表示されました!

でもページが遷移しませんよ?

/loginへ遷移できません。404エラーです。
原因はnginxの設定。5.4のドキュメント通りにnginx.confを編集。

$ vi /etc/nginx/nginx.conf
 49         location / {
 50             try_files $uri /index.php?$query_string;
 51         }

これで他のページへも遷移できるようになりました!
以上がEC2への引っ越し奮闘記になります。

Facebooktwitterlinkedintumblrmail

Laravel 5.1 でログ出力、faultline-php追加編

Laravel の次のLTS、5.5もそろそろ来そうな昨今ですが、また5.1のログ出力の話です。

昨日のBlogに書いたようにプロジェクトのログ出力に faultline-php (https://github.com/faultline/faultline-php) を組み込みました。Monolog integration のありがたさよ。

今日は faultline 関係の .env 対応を進めているのですが、コードがややこしくなる前の素朴なのをサンプルとして出しておこうかな〜と。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

Serverless未経験おじさんのfaultline導入記

実験用に自分のメアドで新しくAWSのアカウント作ろうと思ったら存在してました、muraveです。事務所引っ越す前の住所になってたので5年以上放置してた模様。

実験にはお安めのVPSを使うことが多いのですが、Serverlessという波にのるためにAWSを使わざるをえないのです。というか faultline を使いたい!

サーバーレスアーキテクチャなエラートラッキングツール faultline

きっかけは『PHPカンファレンス福岡2017』です。その時のスライド動画もきてました

コレだ! と思いましたね。

だいたい、今はまともなメールを送信するのも面倒じゃないですか?

某メール送信サービスを使おうと思ったこともあったのですが、エラーメール送信するには「利用者」の契約が必要とのことで、不特定多数の利用者が想定されるサービスでは使えません。そもそもエラー通知をメールで欲しいわけでもなく、今もメールから Slack に連携しています。

faultline は運用コストが低く(手間的にもマネー的にも)、そしてなによりクライアントの JavaScript についても利用できることに魅力を感じます。

faultline-jsを使ってJavaScriptのエラートラッキングにfaultlineを利用する

前置きが長くなってしまいました。これからが本番。導入について、主にどこで引っかかったか、です。
この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

funcphoneとダイヤル録音


ダイヤル録音アプレットは電話転送処理を、
funcphoneの音声案内を通して円滑に行う事ができるアプレットです

事前準備

今回、電話の受け取り側が電話を受け取れない場合は留守録へと案内されます
左メニュー「留守録案内メッセージ」より、案内メッセージを設定しましょう

設定してみる

  1. フロー編集画面を開きます
    転送先はユーザまたはグループを選択できるのですが、
    グループを指定した場合、所属するユーザが登録しているデバイスに着信がはいるので注意です
    発信者IDはどの電話番号にこのフローを実行させるのかを選択します
  2. 転送処理を行う前にユーザにメッセージを発信するか設定を行います
    今回は転送前にメッセージを流すよう設定を行っています
  3. 音声案内は「転送案内を配信者に行う」に設定しています
    転送先のユーザが電話を受け取った際にどこから電話がかかってきたのかを音声案内でお知らせしてくれます
    「○○さんへの着信です。受け取る場合には1を推してください→1を押す→会話開始」

    また『誰も応答応答しなかったら…』は、転送先のユーザが電話を受け取らなかった場合の処理を選択します
    『留守録』を選択しますとfuncphoneメニュー『留守録案内メッセージ』で設定したメッセージが読み上げられた後、
    発信者の留守録が開始されます

試してみる

  1. 管理画面を開いた状態で、
    電話機からフローを充てた電話番号に電話を開始すると、設定した転送案内が開始されます
  2. 電話を受け取る側は転送された着信を受け取ると『1ボタン』を押すよう、音声案内が流れます
  3. 受け取り側が『1ボタン』を押すと会話開始、受け取れなかった場合は掛けた側には電話が受け取れない受け取れない事を音声案内でお知らせします
Facebooktwitterlinkedintumblrmail

funcphoneとSMSフロー(着信電話番号編)


着信番号アプレットは、着信番号によってメッセージの振り分けを行うことが出来るアプレットです

設定してみる

  1. アプレットをセットし、振り分けする電話番号を設定します
  2. 振り分ける電話番号に実行するアプレットと『上記以外の場合に行うアクション〜』にSMS返信アプレット設置します
  3. それぞれのSMS返信アプレットにメッセージを記入します
    ↓指定した電話番号宛

    ↓それ以外の電話番号宛

確認してみる

  1. 設定した電話番号宛にメッセージを送ります
    設定時間によって、返ってくるメッセージが違うことを確認してください

  2. ↓指定した電話番号(スマートフォン)から

  3. 指定した電話番号以外から
    funcphoneにてもう一つ米国番号を取得して確認してみました
  4. 受信箱を確認すると、正しくメッセージが受信されていることが確認できました
Facebooktwitterlinkedintumblrmail

funcphoneとSMSフロー(スケジュールアプレット編)


これもまた以前書きました「funcphoneを使った営業時間管理」で疲れているスケジュールアプレットのSMS版です

設定してみる

  1. 以前ご紹介したスケジュールアプレットと同様の処理を行うことで、
    メッセージが送られてきた時間帯による処理の振り分けを行うことができるようになります
  2. 営業時間のアプレットにSMS返信アプレットを設置
    メッセージを設定します
    ↓ 営業時間

    ↓ 営業時間外

確認してみる

  1. 設定した電話番号宛にメッセージを送ります
    設定時間によって、返ってくるメッセージが違うことを確認してください
Facebooktwitterlinkedintumblrmail

funcphoneとSMSフロー(SMS受信アプレット編)

SMS受信箱


SMSで送られてきたメッセージを受信箱に保存することができるアプレットです

設定してみる

  1. アプレットをセットすると、メッセージを受信した際どのメールボックスに転送するか設定できるようになります
  2. グループを選択したらフローを保存しましょう

確認してみる

  1. スマートフォンからSMSメッセージを送信すると、送信主の電話番号とメッセージが返信されます
    相手先にメッセージの送信完了です
  2. 設定した電話番号に向けてショートメールを送ると、管理画面の指定したメールボックスにメッセージが保存されます

Facebooktwitterlinkedintumblrmail

funcphoneとSMSフロー(SMS返信アプレット編)


『SMS返信』はユーザから送られてきたメッセージに対して送る返信を設定するアプレットです

設定してみる

  1. 『SMS返信』アプレットを最初のフローに設定します
  2. メッセージ欄に返信文章を設定
    発信者IDをだれにするか設定すれば完了です
  3. 70文字以上入力するとSMSには文字数の制限がありますので、
    実際に送られるときには分割されて送り返されてしまいますので注意しましょう

確認してみる

  1. SMSで電話番号宛にメッセージを送ると自動で設定した文章が送り返されるようになります
    SMSメッセージを長文で設定した場合、画像の様に自動で分割してメッセージを送ってくれます
Facebooktwitterlinkedintumblrmail

funcphoneとSMSフロー(メニューアプレット編)

電話番号を米国番号で取得した場合、SMS機能が使えるようになる事は前回お話いたしました
今回はSMSフロー編集にあるアプレットご紹介したいと思います


SMSフローの編集は左メニューより「管理→フロー→編集 SNSフロー」から行うことができます

メニューアプレット

以前書きました「funcphoneを使った電話転送」で疲れているメニューアプレットのSMS用のようなイメージです

決まった単語を送信すると、フローで設定したメッセージを返信することができます

設定してみる

  1. 編集 SMSフローから編集画面を開き、「メニューアプレット」をセットします
  2. Menu Promptには電話番号宛に何かメッセージが送られてきた場合に最初に送るメッセージを設定しています
  3. Menu Optionsにはメッセージを送ってきたユーザが入力した単語に対して何を返信するのか設定しています
  4. 左メニューから「管理→番号」画面をひらき、フローを該当の電話番号にセットします

以上で設定は完了です

確認してみる

  1. スマートフォンから設定した番号あてにメッセージを送ってみます
    下の画像の「問題ください」がそれです
  2. しばらくするとMenu Promptに設定した文章が送られてきます
  3. キーワードを入力してみましょう
    Menu Optionsに設定したKeywordが入力されますと、設定したReplyが返ってくることを確認できます
Facebooktwitterlinkedintumblrmail