自宅で速攻DNSサーバー構築 by Docker(Google Oauth対策)
概要
LAN内にDNSサーバーをさくっとたてます。by docker compose
iphoneから自宅(社内)に立てたWebサーバーを自分で作成したドメイン(IPアドレスではない)で見れたりできます。
1. git cloneでDockerfileをダウンロード
git clone https://github.com/S64/dockerfile-dns.git
2. DNSの設定を記載
cd dockerfile-dns cp docker-compose.example.yml docker-compose.yml vi docker-compose.yml
・docker-compose.yml
以下の部分に自分で決めたドメインとIPの対応を記載するだけでOK。素敵!
extra_hosts: - "example.dev:93.184.216.34" - "oreore.com:192.168.0.201"
3.起動
追加したら
docker compose up -d
で起動
4.ルータの設定
最後にルータの設定でDNSをたてた自宅サーバーも名前解決先にできるようルーターの設定をいじります。
http://192.168.0.1
たいてい自宅とかでは上記のIPでルーターへアクセスできるはず。
アクセスしたらDHCPの設定欄でプライマリDNSに先程起動したDNSが起動しているサーバーのIPアドレスをセットする。
余談
なんのためにこれやったのか?
Google対策だよ!Googleログインする(Google Oauth)ためにはIPアドレスでリダイレクトURL設定ができないんですよ。
「xip.io」使う手もあるんですが、やっぱ外にあるのは気になっちゃうんですよ。
ルンバ i7 アプリ初期設定で無事ハマる
前置き
物理モジュールの世界でもハマりました。
挙句の果てに「えっ十何万も払ったのに初期不良?!」という自分のやり方がまずいのに他責なる疑いの心まで芽生えてしまった。
二度と繰り返してはいけない。
その誓いから記録に残します。
遭遇したエラー
アプリでrobotが最初から表示され、選択するも接続できない
アプリでルンバの追加を選択するも「モバイルがWifiにつながっていません」と怒られる。(めっちゃつないでますよ!)
正しい手順(順番が大事!)
もう一度言います。
「順番が大事!」
1)ルンバをホームベースに設置する
2)【!ここ重要!】 ルンバの電源を切っておく(再起動中などアクティブにさせてなければ電源OFFでなくても可)
3)携帯をWifiにつないでおく
4)アプリを立ち上げ、ルンバの追加を選択
5)アプリの指示に従う
1. Wifiのパスワードなど入力
2. ルンバの電源をいれてWifiモード立ち上げ
3. 接続
参考にした記事
irobot-homesupport-ja-jp.custhelp.com
Python Selenium Chrome セッション保持したまま デバッグ
ログイン後のサイトページでHTML解析やSeleniumの動作確認などサクサクやりたいって方向けです。
何回もログインするは面倒ですよね。
やり方
import chromedriver_binary from selenium import webdriver p_id = 1 ## 自由に決めてOK options = webdriver.ChromeOptions() options.add_argument('user-data-dir=./Chrome') ## ここも自由に決めてOK options.add_argument('--profile-directory=Profile '+p_id) driver = webdriver.Chrome(options=options) driver.get(login_url) sleep(30) ## これ書いておいて、sleepしている間に手でログインすればログインロジックすら不要になる driver.quit()
こうすることで実行フォルダに「Chrome」(user-data-dirで定義したフォルダ)が自動的作成されて、そこにブラウザセッションなどもろもろ保存される。
一回ログインすれば次回からログインなしで実行可能。
※ 金融などセキュリティの高いサイト(セッション保持期間が短いサイト)などはすぐにセッションきれるので要注意
HTML解析のポイント
ちょっと道は外れますが、余談コーナーです。 HTML解析についてだけではなくエンジニアリング全般にいえることですが、とにかく便利なコードをメモしてすぐ取り出せるようにしておくことがなによりも大切です。 それがあるかないかで開発スピードが段違いに差がつきます。
Googleで検索するという手もありますが、繰り返し使うようなコードには不向き。
だからいいと思ったものは自分の中に蓄積していくことが大切です。
課題
その便利なコードをどこにどうやって管理するか
メモ帳やGoogleのスプレッドシートなどでは限界があるため、スニペット管理ツールを使うというのがベターでしょう。
そんな思いからエンジニア向けスニペット管理ツールMetaPiiを開発しました。
タグ管理(自動補完機能付)できてスニペット同士に関連性をもたせることもできます。
またそのスニペットに関する調査事項やレファレンスなども管理できるノート機能も便利です。
ぜひ一度使ってみてください。
Python Selenium 超速デバッグ by サイト側に迷惑かけないやり方
ログイン後のサイトページでHTML解析やSeleniumの動作確認などサクサクやりたいって方向けです。
やり方はいたってシンプルでローカルにHTMLファイルを保存してそれを読み込むだけ。
セッションを保持するやり方は今回対象外です。
やり方
1. 保存 (Chrome)
デバックしたWebページに手動でいく。
そのページでChromeブラウザの右上にあるメニューを開く
上記メニューの「その他ツール」の中にある「ページを別名で保存」でローカルにファイルを落とす。
2. 読み込み
url = "file:///Users/hoge/savedHtml/google_01.html" driver.get(url) driver.find_element_by_id('hoge')
これでおっけー
docker laravelのmysqlがUbuntuでこける件
浅はかなDocker知識が招いた泥試合の記録です。
環境
- Ubuntu 18.04 on Virtualbox
- Docker 19.03.2 on Ubuntu
- docker-compose version 1.24.1 on ubuntu
- Mysql 8.0 in docker-compose
エラー内容
Initializing database 2019-09-15T13:33:50.756496-00:00 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2019-09-15T13:33:50.756598-00:00 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.17) initializing of server in progress as process 28 2019-09-15T13:33:50.758448-00:00 0 [ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/mysql-error.log' for error logging: Permission denied 2019-09-15T13:33:50.758811-00:00 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it. 2019-09-15T13:33:50.758906-00:00 0 [ERROR] [MY-010119] [Server] Aborting 2019-09-15T13:33:50.760556-00:00 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.17) MySQL Community Server - GPL.
原因
結局はファイルのowner問題です。特にエラーログまわり
いろいろ記事は探して以下は参考になったんですが、私の浅はかなLinuxの知識では問題の解決には至りませんでした。
解決策
以下2点行いました。
- データボリューム上にlogファイルをマウント
- ファイルのオーナーを起動時に変更する
0.準備
- git clone
$ pwd /home/dev/docker $ git clone https://github.com/ucan-lab/docker-laravel.git $ cd docker-laravel
1. データボリューム上にマウント
$ pwd /home/dev/docker/docker-laravel $ vi docker-compose.yml
- 変更前:docker-compose.yml
db: image: mysql:8.0 volumes: - db-store:/var/lib/mysql - ./logs:/var/log/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf 〜省略 volumes: db-store: redis-store:
- 変更後:docker-compose.yml
以下のように、image項目を削除し自分でbuildファイルを作成し実行できるようにします。
db: build: context: "." dockerfile: DockerfileDB volumes: - db-store:/var/lib/mysql - db-log-store:/var/log/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf 〜省略 volumes: db-store: db-log-store: redis-store:
2.ファイルのオーナーを起動時に変更する
$ pwd /home/dev/docker/docker-laravel $ vi DockerfileDB
- 新規作成:DockerfileDB
FROM mysql:8.0 RUN mkdir /var/log/mysql RUN chown mysql:mysql /var/log/mysql
起動確認
$ docker compose build $ docker compose up -d $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3249c67bc967 nginx:1.17-alpine "nginx -g 'daemon of…" 4 seconds ago Up 2 seconds 0.0.0.0:10080->80/tcp myproject_web_1 1086fe08bbb6 mysql:8.0 "docker-entrypoint.s…" 11 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:13307->3306/tcp myproject_db-testing_1 473f6acf9f46 mailhog/mailhog "MailHog" 11 seconds ago Up 7 seconds 1025/tcp, 0.0.0.0:18025->8025/tcp myproject_mail_1 8daae7ea27d4 redis:5.0-alpine "docker-entrypoint.s…" 11 seconds ago Up 8 seconds 6379/tcp myproject_redis_1 b74eeb2e0340 myproject_app "docker-php-entrypoi…" 11 seconds ago Up 3 seconds 9000/tcp, 0.0.0.0:18000->8000/tcp myproject_app_1 34d77196f83a node:12.8-alpine "docker-entrypoint.s…" 11 seconds ago Exited (0) 6 seconds ago myproject_node_1 ecce1dc69755 myproject_db "docker-entrypoint.s…" 11 seconds ago Up 4 seconds 33060/tcp, 0.0.0.0:13306->3306/tcp myproject_db_1
開発したサービス
このdocker構成を起点にエンジニア向けスニペット管理ツールMetaPiiを開発しました。
タグ管理(自動補完機能付)できてスニペット同士に関連性をもたせることもできます。
またそのスニペットに関する調査事項やレファレンスなども管理できるノート機能も便利です。
ぜひ一度使ってみてください。
その他参考記事
2019年:IFTTTでGoogleSheetへの自動設定日付を自動フォーマットする
IFTTTでGoogleSpreadSheetへ何らかのデータの行を追加するとき、設定でCreatedAtやUpdateAtなどIFTTTが自動で追加時点の日付を入れていくれるのは便利だ。
だが、どうも一般的に期待されるフォーマットにならない問題がある。
そういうときはGoogle側でさくっとフォーマットの自動処理をGASでいれてしまうのが便利だ。
やりたいこと
↓ こういうのにする
ステップ1 IFTTT側の設定
{{CreatedAt}}|||{{CreatedAt}}|||{{TextField}}
ステップ2 GoogleSpreadSheet側でやること
ステップ3 GAS側の設定
(1) スクリプト作成
var sheet = SpreadsheetApp.getActiveSheet();
//最後の行を取得し、
function addDate() {
setDate(1, "yyyy/M/d"); //1列目左記フォーマットに編集する
setDate(2, "H:m:s"); //2列目左記フォーマットに編集する
}
function setDate(col, format) {
var lastrow = sheet.getLastRow();
if (sheet.getRange(lastrow, col).getValue() == "")
sheet.getRange(lastrow, col).setValue(formatDate(new Date(), format));
}
function formatDate(date, format) {
return Utilities.formatDate(date, 'Asia/Tokyo', format)
}
(2) 編集許可
(3) トリガーセット
さっき作成したaddDate関数をいつ実行しますかっていう設定をします。
編集>現在のプロジェクトトリガーをセット。
トリガーセット画面に移ったら右下にあるトリガーを追加ボタンを押下し、
上記のようにセットし保存ボタンを押す。
ステップ4 それでどうなるの?
IFTTTからのSheetへ行が追加されると、トリガーが発動して、
期待した結果になると思います。
よいIFTTT生活を!