tapitapi’s blog

1日1杯タピオカ!エンジニア

dockerでSSLを使う(nginx + php-fpm)

SSL(https)のローカル環境が作れるDockerファイルを作りました!

 

localhostで鍵がちゃんとつきます^^

f:id:kayo445:20201101154954p:plain

 

github.com

 

使い方

*git clone 

git clone git@github.com:yoshiko-tsuka/wordpress-nginx-docker-ssl.git

 

*Homebrewインストール(インストールがまだの場合)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)

 

*opensslインストール

brew install openssl

 

SSLの証明書作成

cd /docker/cli
/bin/bash create-cert.sh
/bin/bash trust-cert.sh
> Password: Mac にログインするときのユーザーパスワードを入力
cd ../../

 

*composerのcreate-project実行

(vendorフォルダとcomposer.lockが作成されます)

docker-compose run composer create-project

 

*コンテナをスタート

docker-compose up -d

 

*ブラウザで下記にアクセス。Wordpressの初期画面が表示されれば成功!

https://localhost:8000/

f:id:kayo445:20201101155703p:plain

 

*ブラウザで下記にアクセス。PhpMyAdminのログイン画面が表示されます

http://127.0.0.1:8080/

f:id:kayo445:20201101155911p:plain

 

*ブラウザで下記にアクセス。phpで送信されたメールを確認できます。

http://127.0.0.1:8025/

f:id:kayo445:20201101160312p:plain

 

*その他

.env とwp-config.phpは、自由に変更可能です。

例えば、初期設定では

DOMAIN=localhostになっています。が、

DOMAIN=test.local などに変更可能です。

 

DOMAINを変更した場合、hostsファイルに設定が必要

127.0.0.1 test.local を追加など)ですが、

下記を実行することで、ドメインを追加&削除できます

cd /docker/cli/

/bin/bash setup-hosts-file.sh

> test.local(DOMAINで設定したドメイン名)

 

 

以上ですーー!!

今回はnginxのSSL化を試しました。

時間があれば、ApacheでもSSL化を試してみようと思います。

 

おやすみなさい^^

 

reCAPTCHA v3の導入方法

f:id:kayo445:20201024163601j:plain

f:id:kayo445:20201024163626j:plain

f:id:kayo445:20201024163805j:plain

 

というわけで、今回はreCAPTCHA V3の導入方法を紹介していきます

 

目次

1. reCAPTCHA v2とv3の違い

2. v3の導入方法:概要

3. v3の導入方法:2つのKey取得

4. v3の導入方法:フロントエンドのコーディング(JS)

5. v3の導入方法:バックエンドのコーディング(PHP)

 

1. reCAPTCHA v2とv3の違い

v2はこんな感じで、クリックしたり、「電車の画像を選べ」みたいな、めちゃむずな問題に答えないとダメだった、、、

f:id:kayo445:20201024164001g:plain

v3はユーザのサイト内の動きを見て、勝手にスコアをつけてくれる!

(仕組みはよくわかんないけど、googleさんすごい!!)

 

スコアは0から1の範囲でつけてくれる。

f:id:kayo445:20201024164425p:plain

ドキュメントはこちら

developers.google.com

 

ローカルでやってみたところ、0.9がつきました!

本番環境じゃないとフルスコアは出ないのかも、、?

f:id:kayo445:20201024171019p:plain

 

2. v3の導入方法:概要

大まかにreCAPTCHAのスコア判定方法はこんな感じ

 

*フロントで、reCAPTCHAでスコア判定を入れたいformに、下記のinputを追加して、一緒にPOST送信する

<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<input type="hidden" name="action" value="validate_captcha">

 

*この時、name="g-recaptcha-response"のinputのvalue(以降トークンと呼ぶ)は、JSで動的に取得する。

そのために、事前にgoogleアカウントで取得していたKey1(以降サイトキーと呼ぶ)を使用

 

*formのsubmitで情報を受け取ったバックで、受け取ったトークンと、事前にgoogleアカウントで取得していたKey2(以降シークレットキーと呼ぶ)を使用して、https://www.google.com/recaptcha/api/siteverify

宛にAPI通信し、スコアを取得する

 

以降、具体的な方法を紹介します

 

3. v3の導入方法:2つのKey取得

下記にアクセス

https://www.google.com/recaptcha/admin/create

 

ラベルや、ドメインを指定して「送信」

f:id:kayo445:20201024170733p:plain

二つのKeyが取得できるので、メモっておく

(後から確認できないので、この時にメモるの忘れないでーー)

f:id:kayo445:20201024171137p:plain

 

4. v3の導入方法:フロントエンドのコーディング(JS)

*reCAPTCHAでスコア判定を入れたいformに、下記のinputを追加

<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<input type="hidden" name="action" value="validate_captcha">

*ヘッダとかに、下記を追加(トークン発行のため)

<script src="https://www.google.com/recaptcha/api.js?render=サイトキー"></script>

*Bodyの最後とかに、下記を追加(これで、g-recaptcha-responseのvalueに、トークンが設定される)

<script>
grecaptcha.ready(function() {
 grecaptcha.execute('サイトキー', {action: 'submit'}).then(function(token) {
 var recaptchaResponse = document.getElementById('g-recaptcha-response');
 recaptchaResponse.value = token;
 });
});
</script>

 

5. v3の導入方法:バックエンドのコーディング(PHP)

今回はPHP のコードを紹介します。

ですが、やっていることは、

 

*送られてきたトークンと、シークレットキーを使って

https://www.google.com/recaptcha/api/siteverify

宛にAPIリクエスト(POST)を送信

 

*返ってきたレスポンス(JSON)に含まれているスコアをみて、0.5以下ならアクセス拒否する。レスポンスはこんな感じ

{
"success": true|false, 
"score": number 
"action": string 
"challenge_ts": timestamp, 
"hostname": string, 
"error-codes": [...] // optional
}

 

なので、他の言語でも同様に実装可能です

 

phpのコード例

// トークンが空ではないか判定
if (isset($_POST["g-recaptcha-response"]) && !empty($_POST["g-recaptcha-response"])) {
   $token =$_POST["g-recaptcha-response"];
} else {
   echo "トークンが空です";
   exit;
}


$secretKey = "シークレットキー";

 

//API Request URL
$url = 'https://www.google.com/recaptcha/api/siteverify';


//パラメータを指定
$data = array(
'secret' => $secretKey, 
'response' => $token 
);


$context = array(
'http' => array(
'method' => 'POST', // POST メソッドを使う
'header' => implode("\r\n", array('Content-Type: application/x-www-form-urlencoded',)),
'content' => http_build_query($data)
)
);


//上記パラメータを指定して レスポンスを取得
$api_response = file_get_contents($url, false, stream_context_create($context));

 

//レスポンス(JSON形式)をデコード
$result = json_decode($api_response);

 

if (!$result->success) {
// リキャプチャの認証に失敗したらBotと判定。
echo '<h2>認証失敗しました。</h2>';


} else if ($result->success==true && $result->score <= 0.5) {
// リキャプチャの認証に成功しても、スコアが一定以下であればBotと判定。
echo '<h2>認証失敗しました。</h2>';


} else {

// リキャプチャの認証に成功したときの処理

}

 

 

以上ですー!

はやくv2の無いセカイになります様に、、、、

 

まずはv1(グニャグニャ文字)の撲滅が先ですかね、、、

f:id:kayo445:20201024173217j:plain

 

おやすみなさいぃぃ

2分で分かる!Docker チュートリアル

tapitapi.hatenadiary.com

上記の様に、ローカルの環境を作っていた私。でも、自分の環境では動くのに、他の人の環境だと動かないいい!!ってことが度々発生してしまいました。

 

Dockerを使ってみよう!ということで、Dockerをダウンロードして、ローカル環境(チュートリアル)を作成してみました!

*Docker ダウンロード

docs.docker.com

 

チュートリアルをローカルにclone(下記の青ボタンをクリックすると、Cloneコマンドが右側のコンソールで実行されます)

f:id:kayo445:20201020173301p:plain

ローカルにGETTING-STARTEDフォルダができる!

f:id:kayo445:20201020182000p:plain

チュートリアルをbuildしてDockerイメージを作成(下記の青ボタンをクリックする)

f:id:kayo445:20201020174653p:plain

まだブラウザでlocalhostに接続してもチュートリアルサイトは見えません

f:id:kayo445:20201020182346p:plain

docker imagesコマンドで、Imageが作成されたことを確認できます

f:id:kayo445:20201020174814p:plain

 

*buildしたImageでContainerをRun(下記の青ボタンをクリックする)

f:id:kayo445:20201020174712p:plain

ブラウザでLocalhostにアクセス(下記の青ボタンをクリック)

f:id:kayo445:20201020174737p:plain

LocalhostでDockerチュートリアルページが表示されました!

f:id:kayo445:20201020174755p:plain

 

*おまけ

docker run -it docker101tutorial bin/sh で、dockerで立てたサーバに入れます。

f:id:kayo445:20201020174845p:plain

 

htmlフォルダとhtml/assetsフォルダ内に、ビルドされたファイルが配置されていることが分かります

f:id:kayo445:20201020182144p:plain

f:id:kayo445:20201020182040p:plain



次回は、dockerを使ってWordpressMysqlの開発環境構築の方法を紹介します

 

Docker便利!

おやすみなさい

Database管理ツールDataGripを使ってみた!

MySQLならPhpMyAdmin、PostgresSQLならPostico、、、、など、今までデータベースによって違うツールを使っていました。

 

今回、いろんなデータベースを一つのツールで管理できる!という素晴らしいツールを幸運にも無料でGet!!

その名も「DataGrip」!!

f:id:kayo445:20201015191027p:plain

www.jetbrains.com

 

使ってみて、めっちゃ便利やん!!と感動したので、

その素晴らしさを紹介します。JetBrainsさん、ありがとう

※JetBrainsさんの回し者ではありません

(どうやって無料でGetしたの?については記事の最後で紹介してますので、気になる方はチェックしてね)

 

1. いろんなDBを一つのツールで管理できる

DBに接続する時に、どの種類のDBにするか選べます。いいね!

f:id:kayo445:20201015191503p:plain

 

上記はデフォルトで選べるデータベースですが、ドライバーをインストールすることで、接続できるデータベースの種類が増えるー!

今後もドライバーはどんどん増えていくと思うので、AWSとかAzureのDB使ってる人でも、どんどん使いやすくなってくはず

f:id:kayo445:20201015191313p:plain

 

2. SQL文がツール内で実行、保存できる

データベースごとにSQLファイルが保存できます。

左上の緑の▶︎ボタンで実行!

下記のように、文法のガイドや、存在するテーブルのガイドも出るので、サクサク書ける!(白い部分はSQL文を実行する対象のデータベース名)

f:id:kayo445:20201015192755p:plain

実行結果はこんな感じで表示され、データの編集はGUI形式でも可能

f:id:kayo445:20201015192910p:plain



今のところ、この2つが、とってもいいな!と思った部分です。

今後使っていくうちに、便利機能など見つけたらシェアします^^

 

番外編:どうやって無料で入手したの?

DISTさんのオンラインイベントに参加して、当選しました!

抽選の参加方法は、twitterDISTさんをフォロー&イベントに#distgame のハッシュタグを付けてツイートするだけ!

 

DISTさんは今後もWebクリエイター向けのイベントを開催する予定です!

イベント、とってもタメになる&面白いスピーカーさんばかりだったので、皆さんも次回参加してみては?

twitter.com

 

おやすみなさい^^

2020最新MacBookProでRubyOnRails環境構築

2020最新MacBookのOSがCatalinaになり、デフォルトシェルがzshになりました!

このMacで、RubyOnRailsの開発環境を作成しましたので手順を紹介します。

今回はzshに慣れたいということもあり、デフォルトシェルをbashに戻すことなく、なるべくシェルをzshのまま使って開発環境構築していきます。

 

*やりたいこと

現行のシステム(Rubyバージョン2.4.2, Postgresql)を、Local(2020最新MacBookPro)でプレビューできるようにする

(現行システムを最新のRubyバージョンで使えるようにメンテしろよ!というツッコミは今回は無視で、、、これからやるんだよ?ほんとだよ?汗)

 

*目次

0.現行のシステム(システム名:test)をgit clone

1. Rubyバージョン2.4.2を使用できるようにする

2. Postgresqlを使用できるようにする

 

*0.現行のシステム(システム名:test)をgit clone

git clone リモートレポジトリURL(レポジトリ名:test)

これでカレントディレクトリにtestというフォルダができる

 

*1. Rubyバージョン2.4.2を使用できるようにする

 homebrewをインストール

(これは公式の推奨コマンドでbashが使用されていたので、そのままbash使用)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

 

homebrewを使用して、readline, openssl, rbenv, ruby-buildをインストール

brew install readline
brew install openssl
brew install rbenv
brew install ruby-build

 

pathが通るか確認

which ruby

>/Users/username/.rbenv/shims/ruby

 

pathが”/Users/username/.rbenv/shims/ruby”となっていない場合(/usr/bin/rubyなどになってしまっている場合)は、

pathを通すため、~/.zshenv と ~/.zshrc を編集する

デフォルトでは存在しないため作成必要あり

 

~/.zshenvファイルに下記を追加

export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH" 

eval "$(rbenv init -)"

~/.zshrcファイルに下記を追加

source $HOME/.zshenv

上記設定を反映するため下記コマンド実行

source ~/.zshrc

 

インストールされたRubyのバージョンを確認

ruby -v

>2.6.3 //最新のRubyが設定されている。でも必要なのは2.4.2!!

 

pathが通るか確認

which ruby

>/Users/username/.rbenv/shims/ruby

 

rbenvを使用し、必要なRubyバージョン(2.4.2)をインストール

rbenv install 2.4.2 

rbenv rehash

 

bundler インストール

gem install bundler rails --no-ri --no-rdoc

上記実行時、--no-ri is invalid と出た場合は、下記を実行(新しいコマンドリファレンス

sudo gem install bundler rails -N 

 

 

testレポジトリ内に移動

cd test

 

testレポジトリで必要なRubyバージョン2.4.2を選択(.ruby-versionファイルが作成される)

rbenv local 2.4.2 

 

Rubyバージョンがtestレポジトリ内で2.4.2 になっていることを確認

ruby -v 

> 2.4.2

 

*2. Postgresqlを使用できるようにする 

homebrewを使用して、postgresqlをインストール

brew install postgresql

 

postgresサーバ起動

brew services start postgresql 

 

ユーザ名と同じ名前のデータベース作成(これでpsqlコマンドが使用できるようになる)

createdb 

 

psqlが使用できるか、試す

psql

 

testレポジトリで必要なデータベース(test_db)作成後psqlから抜ける

CREATE DATABASE test_db;

exit

 

bundle install後マイグレーションと必要ならSeedも行う

bundle install

rake db:migrate

rake db:seed

 

サーバ起動

rails

 

ブラウザで、localhostでプレビューが見れたら完了〜〜〜!!

 

やっぱり毎回PC変えるたびに環境構築するの面倒だなぁぁ

というわけで、Dockerをいじって遊んでみてます。

f:id:kayo445:20201014181633p:plain

f:id:kayo445:20201014181653p:plain

 

Dockerをドカドカ作るぞー^^

Dockerについても今後ブログでシェアできればと思います。

 

おやすみなさいぃぃ

Defaultシェルzshに注意!2020最新MacBookPro

新しく購入したMacBookProで環境構築中、今までのコマンドがうまくいかない!?

ということがありました。

 

ターミナルのデフォルトシェルがbashではなくなって、zshになってたせいでした。

 

*うまくいかないコマンドを、下記のようにbashで実行

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

 

*または、chshコマンドでデフォルトシェルをbashに変更

(ターミナル再起動後変更される)

chsh -s /bin/bash

 

zshで気をつけることは下記の記事がよくまとまっていたので、紹介しておきます。

kanasys.com

 

おやすみなさい^^

 

スマルナ:ピル(低容量、中容量、アフター)が届くアプリ

先日、アフターピルが薬局で購入できるように、政府が検討しはじめるとのニュースがトレンドになっていました!

www.huffingtonpost.jp

 

性犯罪にあった場合はもちろん、ゴムが破けてしまった場合など、お守りとしてピルは入手しやすい方がいいですよね。

 

今は、主に産婦人科で入手できますが、なかなか病院に行く時間がない、、、という方も多いはず。

そんな方に、産婦人科に行く必要なくアプリで診察&ピル購入できるサービス、

「スマルナ」を今回は紹介したいと思います。

smaluna.com

 

利用は以下の流れで行います。

1、本人確認

2、問診

3、医師と相談

4、購入

 

今回は低容量ピルの購入方法を紹介しますが、中容量やアフターピルも購入可能です。

 

1、本人確認

*個人情報を登録&身分証明書を送信します。

身分証明書を送信してから承認されるまで、数十分かかります。

 

f:id:kayo445:20201011225438p:plainf:id:kayo445:20201011230936p:plain

f:id:kayo445:20201011230946p:plain

2、問診

*30問ほど、健康状態などの質問に回答します。

 

f:id:kayo445:20201011231011p:plainf:id:kayo445:20201011231045p:plain

 

*以下質問の例です

f:id:kayo445:20201011225452p:plainf:id:kayo445:20201011231116p:plain 

f:id:kayo445:20201011231310p:plainf:id:kayo445:20201011231338p:plain

f:id:kayo445:20201011231404p:plain

3、医師と相談

*どの種類の低容量ピルにするか、不安な点などを相談します。

(低容量ピルにも複数種類があるので、体にあったものを相談できます。)

f:id:kayo445:20201011231432p:plainf:id:kayo445:20201011231456p:plain

 

*医師のプロフィールを見て1名の医師を選択できます。

f:id:kayo445:20201011231524p:plainf:id:kayo445:20201011231537p:plain

 

f:id:kayo445:20201011231603p:plainf:id:kayo445:20201011231619p:plain

 

医師からチャットでメッセージが来ます。

f:id:kayo445:20201011231637p:plainf:id:kayo445:20201011231644p:plain

f:id:kayo445:20201011231654p:plain

 

4、購入

*支払い方法を選択、届け先の住所登録をします。

f:id:kayo445:20201011231728p:plainf:id:kayo445:20201011231733p:plain

f:id:kayo445:20201011231746p:plainf:id:kayo445:20201011231752p:plain

 

f:id:kayo445:20201011231812p:plainf:id:kayo445:20201011231847p:plain

 

あとは自宅に届くのを待つだけ!

大体購入してから二日以内に届きます。

 

スマルナ以外にも同じようなサービスがあるので、値段などを比較しながら、使ってみるのをお勧めします。LINEでOnline診療して、アフターピルを届けてくれるところもあります。

www.private-clinic.jp

 

 

今はまだまだ値段が高いピルですが、多くの女性が使うようになれば、値段も下がっていくと思います。

健康面のメリットデメリットも考慮して、体を守るために、ピルという選択肢を選ぶハードルが下がることを願って。

 

おやすみなさい。