Let's encrypt!! EC2 (Amazon Linux 2) Nginx 自動更新はできてない。

環境

手順

参考 Let's EncryptでSSLの設定〜自動更新 - Socapnw

ダウンロード

$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
$ sudo chmod 700 /usr/bin/certbot-auto

amazon linux2に対応する

このままコマンド叩くと・・エラーが出る。

$ ./certbot-auto'
 
Sorry, I don't know how to bootstrap Certbot on your operating system!

You will need to install OS dependencies, configure virtualenv, and run pip install manually.
Please see https://letsencrypt.readthedocs.org/en/latest/contributing.html#prerequisites
for more info.

以下を参考に実行ファイルを編集する。 Amazon Linux 2でLet’s Encryptが使えない – RE:ENGINES

$ sudo cp /usr/bin/certbot-auto /usr/bin/certbot-auto.bak
$ sudo vi /usr/bin/certbot-auto

$ sudo diff /usr/bin/certbot-auto /usr/bin/certbot-auto.bak
843,844c843
< elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
<     grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
---
> elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then

WEBサーバを止める

$ sudo systemctl stop nginx

※WEBサーバを止めないLet's encryptのやり方(Rails対応)はこれじゃないかな。 Let's EncryptをHerokuにあるRailsアプリに適用する(2016/9月版) - Qiita

Certbotで証明書を発行する

ドメインは各自のを設定してください。

sudo certbot-auto certonly \
  --standalone \
  -d domain.com

エラーが出ました。amazon linuxは検証段階だから--debugをつけろと。

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

再チャレンジ。

sudo certbot-auto certonly \
  --debug \
  --standalone \
  -d domain.com

メールアドレスの入力と規約に同意するか否かを聞かれます。 ※このオプションつければ、聞かれなくなってたのかな。

-m mail@example.com
--agree-tos

nginxに証明書と鍵の設定

/etc/letsencrypt/live/ 以下に証明書と鍵が発行されるのでこれをnginxに設定。

EC2でユーザ作成して、公開鍵認証でログインする(ssh/configも使うよ)

awsでダウンロードする秘密鍵で、SSHログイン

ssh -i "aws-key.pem" ec2-user@ec2-***.ap-***-1.compute.amazonaws.com

ユーザ作成 / 作成したユーザ

sudo useradd test_user
sudo su -l test_user

公開鍵 / 秘密鍵の作成 / 公開鍵の名前変更 / 権限変更

mkdir .ssh
chmod 700 .ssh/
cd .ssh
ssh-keygen -t rsa -b 4096 -f key_file
mv key_file.pub authorized_keys
chmod 400 authorized_keys

参考:お前らのSSH Keysの作り方は間違っている - Qiita

秘密鍵をローカルにコピーして権限を400にする、サーバ上の鍵は削除する

ローカルからssh 接続する。

.ssh/config

Host hostname-test
    HostName ec2-***.ap-***-1.compute.amazonaws.com
    IdentityFile ~/.ssh/key_file
    User test_user

この設定により、以下でアクセスできるようになる。

ssh hostname-test

LINE@ 運用編

最近はLINE@のコンサル的な企業が増えてるんだな〜と思いつつ
マニュアルだけ渡されて、ほっとかれてる店舗さんも多そうな雰囲気ですね。ある程度は自分でキャッチアップしろってことかな。

私は個人で運営する団体のLINE@で情報配信等やってた経験があって、LINE@運用の相談受けた時のメモ。

対象企業

  • LINE@運用会社は従業員10名ほどの個人経営のサービス業。
  • 友達数は300名ほど、有料アカウント契約中。
  • 月に3回ほどメッセージで休館情報、近所の交通規制情報などを配信。
  • 今後は豆知識や日々の少し笑ってしまうようなメッセージも配信したい

相談、使い方など

メッセージ流しすぎてない?

メッセージで流すと友達全員に通知が行くので、流しすぎかな。うるさいと思われてないかな。と思うことがあると思います。こんな時は「タイムライン」にのみ流すという方法があります。


友達に情報を配信する方法は

  1. メッセージ(友達に通知が飛ぶ)
  2. タイムライン(友達に通知が飛ばない、いいね!やシェアなどができる)

2種類あり、友達に通知されるか、情報がどこに表示されるかの違いがあります。

いつも業務連絡ばっかり流してて、たまには緩くて少し笑える話とか流したいけど・・、メッセージで通知されるほどじゃないんだよな〜というものこそ、タイムラインだけに流しましょう。いいね!なども教えてもらえて友達とコミュニケーションが取れますよ。


キーワード応答メッセージの使い方

管理画面で事前に登録したキーワードを、友達がLINEメッセージ上で入力することで、そのキーワードに合わせた指定返信メッセージを返せる。
例)友達が「予約」とメッセージを打つと、予約の方法などを決められた文言を返信することができる

管理画面
 メッセージ→キーワード応答メッセージ
 ・代表メッセージ;
 ・キーワード追加;代表メッセージの類似語、同意語。
 ・返信したいメッセージを追加する。

メッセージがうるさい、しつこいというお客様向け

 通知オフできますよ。
ASCII.jp:LINE公式アカウントの通知を止める方法は?|解決方法を教えます! LINE駆け込み寺

接客中に電話予約がなり、対応できず折り返す事が多い・・。予約をLINE@の一対一トークでやろうと思うがどう?

結論から言って、お勧めできません。。。
お店で一対一トークをするは、電話じゃないのでお待たせする事が少なくていいんじゃないか?と思うんですが
これにより、LINE@トークで返信が滞ってないか?確認する人が必要になります。
また、緊急性のあるものをトークでされてしまうと、お店の確認が遅れたことが落ち度になります。
また、LINE来てるかもって確認、気をとらせる作業って意外な集中力を落としていってると思います。

そのため、以下の条件に1つ以上当てはまってればLINE@の予約も検討していいと思います。

  • LINE@を1日確認しててもストレスない人が店舗にいること。
  • 返信が●時間なければ、必ず電話してください、や、忙しい日は返信できない可能性がありますなど、の予防線がハレルこと。
  • 2日前までの予約に限る。など緊急性を減らせること。

お客様にとっては楽になるかもしれませんが、働く側のコストが増えることで結局従業員が疲弊して接客が疎かになるパターンです。それなら、無理しないほうがいいです。

ショップカード機能の紹介

来店促進ツールです。
lineでスタンプを貯めることできる。
お客様がLINE上でショップカードを取得し、来店時に店舗で用意したQRコードを読み込むことでポイントを貯めることできる。
http://blog-at.line.me/archives/45639327.html

QRコードは 付与するポイント数に応じてQRコードを用意することができる。
 1ポイント用、3ポイント用など。

リサーチページ機能の紹介

人気商品を調査したりできます。特典も付けれるので、リサーチ情報を集めやすいです。
http://manual-at.line.me/archives/1063362020.html

macOS High Sierra (10.13) Tunnelblick was not able to load a device driver (kext) that is needed to connect...

macOS High Sierra (10.13) でVPN接続しようと思ったら、OSのバージョンでエラー出たのでメモ。
基本的には以下のやり方でやってる。
qiita.com

ただ、以下のエラーで接続できない。

Tunnelblick was not able to load a device driver (kext) that is needed to connect 

解決策

[システム環境設定] -> [セキュリティ&グループ] -> [Allow apps downloadwd from] -> [App Store and identified developers]に変更
f:id:meikotan:20180206220329p:plain

Google ドライブ 動画埋込み iFrame

2018年1月現在。

Googleはどんどん情報が新しくなっていくんだな・・。
動画埋込方法を調べてて、新しい情報と古い情報が入り混じり過ぎ。

①動画をクリックしプレビューする
②その他の操作(縦三つの点)

新しいウィンドウで開く
f:id:meikotan:20180131162410p:plain

③新しいウィンドウでも、その他の操作(縦三つの点)

アイテムを埋め込む
f:id:meikotan:20180131162401p:plain


iframeのスクリプトをコピーする

メモ

共有設定で、リンクを知っている方全員が閲覧可にしなくても観れるかも?

ファイルメーカー チェックボックスごとの詳細記入欄がチェックの有無で表示、非表示する

動物病院向け、ヒアリングシートをファイルメーカーで作製中。
ペットの食事内容を記入する個所、食事の種類ごとに詳細を記入する入力を項目があり、これがチェック有りの場合のみ表示されるようにしたい。

f:id:meikotan:20180131152311p:plain

以下のように、チェックが付いてるものだけ詳細を表示させる。これが地味に悩みました。


やり方

ドライフードの詳細入力ボックスの場合
インスペクタ→データベースマーク→動作→次の場合オブジェクトを隠す

IsEmpty ( FilterValues ( 患者::食事_種類_ ; "ドライフード" ) )
FilterValues ( フィルタするテキスト ; フィルタ値 )

フィルタ値で指定した値にチェックが入ってない場合は、空を返す。

IsEmpty ( フィールド )

フィールドの値が空の場合「1」(true)を返す

メモ

ファイルメーカーチェックボックスはチェックすると、その文字列がそのままDBに格納される。
ファイルメーカーの場合、あまり表示、非表示とかしないのかな。

Chromeヘッドレスでスクレイピング Node.jsライブラリpuppeteer使ってみた

仕事の依頼でスクレイピングすることがあってヘッドレスブラウザを使ってみた。

目的

ホテルや病院などの検索WEBサイトから
検索結果の名前、住所、電話番号などCSVで取得する

ヘッドレスブラウザ

以前はPhantomJSが使われたようですが、Chromeのヘッドレスが今年リリースされたようで、実際両方使ってみたけどスピードはChromeの方が早い。

スクレイピングとは

ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと

ウェブスクレイピング - Wikipedia

Node.jsからChromeのヘッドレスを使うためのライブラリ

chromyだとエラーが出てうまくいかなったし、以下の記事見てpuppeteerを使うことにしました。
ヘッドレスブラウザ(Chrome)を使ってSPAをスクレイピングする - Qiita

puppeteerがこれらのライブラリと一線を画すのは、なんと言っても本家ChromeのDevTool開発チームが作成・メンテナンスしている、という点でしょう。

環境

node v.8.9.1
npm 5.5.1
puppeteer

ソース

参考:puppeteer/search.js at master · GoogleChrome/puppeteer · GitHub

'use strict';

// puppeteer読込み
const puppeteer = require('puppeteer');
// ファイル読み書きライブラリ
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(【URL】);
  // スクレイピングするセレクタ
  await page.waitForSelector('#search_result .content');

  const links = await page.evaluate(() => {
    const anchors = Array.from(document.querySelectorAll('#search_result .content'));
    return anchors.map(anchor => anchor.textContent).map(text => text.trim().replace(/\s+/g, ','));
  });
  fs.writeFileSync( "puppeteer.csv" , links.join('\n') );

  await browser.close();
})();


スクレイピングも始めてて、Node.jsもほとんど未経験ですが結構簡単にできました!すごいね~。

TechPlay 女子部の皆様へ謝罪

今回はTechPlay女子部のアドベンチャーカレンダーに参加させて頂きました!
初!アドベンチャーカレンダー!(*^^)v
TECH PLAY女子部 Advent Calendar 2017 - Qiita

ただ、私の担当は12日だったのに・・ずるずるずるるるうzzz
ここまで引き延ばしてすみませんでした。。しかも内容も予告してたのと違う・・
来年は計画的に頑張りまっす。