CHANSHIGELOG

いろんなこと

kudaranai.infoの記録

kudaranai.infoというくだらないドメインを過去取得していて、くだらないコンテンツにしようと思っていたので「僕の誕生日までカウントするサイト」を作っていました。

インターネットアーカイブから拾っております。

2012,2013-2014

CSSが拾えなくてこの感じでしたが、当時はiWebを使ってました。
なぜMacから見ないとダメだったかは謎 f:id:tanakashigeki:20191109142919p:plain

2014-2015

アプリ一切ないのにそれっぽくしたかったやつ f:id:tanakashigeki:20191109142931p:plain

2015-2016

Let it go... 時代を感じますね f:id:tanakashigeki:20191109142937p:plain

2016-2017

色とフォント変えてきただけか f:id:tanakashigeki:20191109142943p:plain

2017-2018

色すら変えてないな(飽きてきてる f:id:tanakashigeki:20191109142952p:plain

2018 - END

完全に飽きた状態 f:id:tanakashigeki:20191109143001p:plain

whoisproxyのAPI仕様変更しました

ちゃんしげです。ちょくちょくご利用いただいている api.whoisproxy.infoですが、以下を変更しました。

  • URIに含まれていた"APIバージョニング"の廃止 '/v1'
  • 404 NotFound時に、リクエスト可能なAPI形式をlinkで提供

APIバージョニングについては様々な意見があって、よく議論されている部分かなと思いますが、そもそも不要なのでは?というところから、本APIの利用者様に提供するレスポンスの内容(価値)に大きな変更が無いので、もっと気軽にリクエストできるように廃止しました。

例として、https://api.whoisproxy.info にリクエストした場合は、特別なリソースを設定していないので404ですが、'_link'プロパティにリクエスト可能な形式を記載しています。

Content-Type: application/problem+json;charset=utf-8

{
  "code": 404,
  "state": "fail",
  "_links": {
    "self": {
      "href": "/"
    },
    "doc:whois": {
      "href": "/whois/{domain}",
      "title": "Lookup find out the registered domain holder."
    },
    "doc:dig": {
      "href": "/dig/{domain}[/{q-type}]",
      "title": "domain information groper."
    },
    "reference": {
      "href": ""
    }
  },
  "results": "Welcome to a whoisproxy api."
}

※上記 /whois/dig でのレスポンス形式はこれまで通りです。

このような感じで、APIへのリクエスト方法を使い手側が知らなくても、とりあえず投げてみればわかるほうが便利じゃんと思いました。

奥が深いRESTの世界に興味があるので、引き続き学びつつアップデートしていきます。是非ご意見お待ちしております!!!!1

whoisproxyのAPIをアップデートした

前回、僕が運用しているwhoisproxy.infoのAPI版を作成した話をしましたが、その中の一つであるdig(DNSレコードを検索するやつ)で、クエリタイプも指定できるようになりました。

許可しているクエリタイプは、以下です。

a
any
aaaa
mx
ns
soa
txt
srv
cname

リクエストとしては、https://api.whoisproxy.info/dig/{ドメイン名}/{クエリタイプ} の形式となります。
以下、例としてicloud.comのAレコードとMXレコードをリクエストしてみます。

/dig/icloud.com/a

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/dig/icloud.com/a"
    }
  },
  "results": [
    "icloud.com.  2246 IN A 17.253.144.10"
  ]
}

/dig/icloud.com/mx

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/dig/icloud.com/mx"
    }
  },
  "results": [
    "icloud.com.  271 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx6.mail.icloud.com."
  ]
}

クエリタイプを渡さない場合は、これまで通り"ANY"でのリクエストととなり、仮に許可しないクエリタイプを指定された場合はエラーを返します。

/dig/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/dig/icloud.com"
    }
  },
  "results": [
    "icloud.com.  21571 IN SOA adns1.apple.com. hostmaster.apple.com. 2011093772 1800 900 2592000 1800",
    "icloud.com.  21571 IN NS b.ns.apple.com.",
    "icloud.com.  21571 IN NS e.ns.apple.com.",
    "icloud.com.  21571 IN NS c.ns.apple.com.",
    "icloud.com.  21571 IN NS f.ns.apple.com.",
    "icloud.com.  21571 IN NS a.ns.apple.com.",
    "icloud.com.  21571 IN NS d.ns.apple.com.",
    "icloud.com.  3571 IN A 17.253.144.10",
    "icloud.com.  271 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx6.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  3571 IN TXT  google-site-verification=knAEOH4QxR29I4gjRkpkvmUmP2AA7WrDk8Kq0wu9g9o",
    "icloud.com.  3571 IN TXT  v=spf1 ip4:17.36.0.0/16 ip4:17.41.0.0/16 ip4:17.58.0.0/16 ip4:17.110.0.0/15 ip4:17.111.110.0/23 ip4:17.120.0.0/16 ip4:17.133.0.0/16 ip4:17.139.0.0/16 ip4:17.142.0.0/15 ip4:17.151.1.0/24    ip4:17.158.0.0/15 ip4:17.162.0.0/15 ip4:17.164.0.0/16 ip4:17.171.37.0/24 ip4:17.172.0.0/16 ip4:17.179.168.0/23 ~all"
  ]
}

/dig/icloud.com/query (Error)

{
  "code": 403,
  "state": "fail",
  "_links": {
    "self": {
      "href": "/dig/icloud.com/query"
    }
  },
  "results": "query-type:query is not supported."
}

※digはGoogle Public DNS(@8.8.8.8)で参照した結果を返しています

地味に便利だったりするので、ぜひご活用ください!

前回の記事 chanshige.hatenablog.com

※ 2019/05/29変更
リクエスURIの変更をしました

ドメインのwhoisとdnsレコードを検索できるAPIをつくってみた

ドメインwhois情報やDNSレコードを検索できるWHOISPROXYサイトを運営していますが、世の中に新しいドメインが増えて、検索できる種類が限られてきたことと、そろそろ(見た目も)作り変えたいなと思ってきたので、SlimPHP3x(Framework)を使って簡単なAPIを作ってみました。

APIにするからにはそれっぽくapi.whoisproxy.infoFQDNとして、WEB上でも検索できる2種類(whois, dig)のエンドポイントを用意しました。
結果は、安定のJSON形式で返すようにしています。

https://api.whoisproxy.info/{whois or dig}/{検索したいドメイン名} でリクエストする感じです。

試しにAppleiCloudドメイン(icloud.com)を使ってWHOISとDIGのリクエスト(GET)を投げると、以下のように返ってきます。

/whois/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/whois/icloud.com"
    }
  },
  "results": {
    "domain": "icloud.com",
    "servername": "whois.corporatedomains.com",
    "tld": "com",
    "registered": true,
    "reserved": false,
    "client_hold": false,
    "detail": {
      "registrant": [
        "Registrant Name: Domain Administrator",
        "Registrant Organization: Apple Inc.",
        "Registrant Street: One Apple Park Way",
        "Registrant City: Cupertino",
        "Registrant State/Province: CA",
        "Registrant Postal Code: 95014",
        "Registrant Country: US",
        "Registrant Phone: +1.4089961010",
        "Registrant Phone Ext:",
        "Registrant Fax: +1.4089741560",
        "Registrant Fax Ext:",
        "Registrant Email: domains@apple.com"
      ],
      "admin": [
        "Admin Name: Domain Administrator",
        "Admin Organization: Apple Inc.",
        "Admin Street: One Apple Park Way",
        "Admin City: Cupertino",
        "Admin State/Province: CA",
        "Admin Postal Code: 95014",
        "Admin Country: US",
        "Admin Phone: +1.4089961010",
        "Admin Phone Ext:",
        "Admin Fax: +1.4089741560",
        "Admin Fax Ext:",
        "Admin Email: domains@apple.com"
      ],
      "tech": [
        "Tech Name: Domain Administrator",
        "Tech Organization: Apple Inc.",
        "Tech Street: One Apple Park Way",
        "Tech City: Cupertino",
        "Tech State/Province: CA",
        "Tech Postal Code: 95014",
        "Tech Country: US",
        "Tech Phone: +1.4089961010",
        "Tech Phone Ext:",
        "Tech Fax: +1.4089741560",
        "Tech Fax Ext:",
        "Tech Email: apple-noc@apple.com"
      ],
      "billing": [],
      "status": [
        "Domain Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited"
      ],
      "date": [
        "Updated Date: 2018-09-27T20:55:11Z",
        "Creation Date: 1999-01-15T05:00:00Z",
        "Registrar Registration Expiration Date: 2020-01-15T05:00:00Z"
      ],
      "name_server": [
        "Name Server: b.ns.apple.com",
        "Name Server: d.ns.apple.com",
        "Name Server: f.ns.apple.com",
        "Name Server: e.ns.apple.com",
        "Name Server: a.ns.apple.com",
        "Name Server: c.ns.apple.com"
      ]
    }
  }
}

/dig/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/dig/icloud.com"
    }
  },
  "results": [
    "; (1 server found)",
    ";; global options: +cmd",
    "icloud.com.  21371 IN SOA adns1.apple.com. hostmaster.apple.com. 2011089978 1800 900 2592000 1800",
    "icloud.com.  21371 IN NS c.ns.apple.com.",
    "icloud.com.  21371 IN NS a.ns.apple.com.",
    "icloud.com.  21371 IN NS d.ns.apple.com.",
    "icloud.com.  21371 IN NS b.ns.apple.com.",
    "icloud.com.  21371 IN NS e.ns.apple.com.",
    "icloud.com.  21371 IN NS f.ns.apple.com.",
    "icloud.com.  3371 IN A 17.253.144.10",
    "icloud.com.  71 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx6.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  3371 IN TXT  google-site-verification=knAEOH4QxR29I4gjRkpkvmUmP2AA7WrDk8Kq0wu9g9o",
    "icloud.com.  3371 IN TXT  v=spf1 ip4:17.36.0.0/16 ip4:17.41.0.0/16 ip4:17.58.0.0/16 ip4:17.110.0.0/15 ip4:17.111.110.0/23 ip4:17.120.0.0/16 ip4:17.133.0.0/16 ip4:17.139.0.0/16 ip4:17.142.0.0/15 ip4:17.151.1.0/24    ip4:17.158.0.0/15 ip4:17.162.0.0/15 ip4:17.164.0.0/16 ip4:17.171.37.0/24 ip4:17.172.0.0/16 ip4:17.179.168.0/23 ~all"
  ]
}

まず、whoisについては以前僕が作成したwhoisライブラリを使っていて、新ドメインも大体は検索できる?かな?と思っています。
検証するにも、種類が多すぎているので思いついた時にしかチェックしていません。もし結果が来ない!おかしい!があったらGithubのIssueかLINEでも連絡ください!切実っっ!

GDPR施行により、ドメインによっては結果がほとんど出てこないものもありますが、各ドメインレジストリレジストラのポリシーに準して、whois結果自体は加工せずそのまま使用しているので、そういうこともあります。

github.com

digについては、GooglePublicDNS(8.8.8.8)に対してリクエストを投げているだけなので特別な加工はしていません。

僕がカスタマーサポート業をやっていた時代(4,5年前)からつくってたwhoisproxy.infoですが、今も利用してくれている方がいてとても嬉しいです!ありがとうございます!!!!!!1

このサイトが何かの役に立っている限り、徐々に更新していきたいと思いますが、サイト自体のリニューアルはこれからやりますので引き続きよろしくお願いします。

※2019/02/20追記  json形式をcontent-type: application/hal+jsonに変更しました。
 今後の予定として、正常・エラー時のレスポンスにLink属性をつけて、リファレンス等のリンクをつける予定です。

※ 2019/05/29変更
リクエスURIの変更をしました

dockerを使ってシュッと開発環境をつくる

前回、Vagrant(VirtualBox)を使った開発環境構築の流れを書きましたが、PHPと触れ合うまでに結構時間がかかります。

サーバー構築って割と勉強になると思っていますが、(実際に)環境構築の時間はできる限りかけたくないものなので、最近の僕はDockerを使ってアプリケーションごとにシュッと環境を立ち上げています。

immutableかつ、使わない時はサッと環境を捨てることができるし管理が楽です。ありがとうコンテナ!
そこで、僕が使ってるDockerfileとdocker-composeファイルをGithubに公開しました。

github.com

README.md に書いてあるようなコマンドを実行してもらえば、あっという間に環境が出来上がるので、お試しください!

docker-composeは、Dockerイメージを複合的に管理・実行できる(と思っている)ツールで、たとえばWordpressのようにwebサーバ(PHP)と、DBが必要なアプリケーションであれば、使いたい各イメージ(webサーバ、DB)と、ポートや環境変数をdocker-compose.yml書くことで、いい感じに出来上がります。料理のレシピみたいなもんだとおもっていただければ良いのかなと(?)

dockerfile自体は docker commit でバージョン管理もできるのでとても素敵。

※Dockerっって!っという方は、さくらさんのとてもわかりやすいナレッジがあるので是非ご覧ください knowledge.sakura.ad.jp

el7+phpenv+nginx(php-fpm)で開発環境を作り直した話 その2

前回からの続き、主にwebサーバー(nginx + php-fpm)に対するの設定を書き残していきます。
chanshige.hatenablog.com

yum install するとき -y をつけてる記事が多いですが、インストールされる内容(依存関係のパッケージ)など眺めながらやるのもオススメですので、書いてません。

では、nginxをインストール

# yum install nginx

自動起動設定もやっておく
# systemctl enable nginx
 ※ nginx.service って明示的に宣言するのもあり

nginxの設定ファイルを用意する
# vi /etc/nginx/conf.d/dev.conf

server {
    listen       81;
    server_name  192.168.33.10:81;

    error_log    /var/log/nginx/error_81.log;
    access_log   /var/log/nginx/access_81.log;

    root         /home/vagrant;
    index        index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

URLはhttp://192.168.33.10:81 、ドキュメントルート(root)は/home/vagrantにしてますが、その他諸々も自由に変えてください。

php-fpmの設定を変更する
# vi /usr/local/phpenv/versions/7.2.13/etc/php-fpm.d/www.conf
user/group を適宜調整してください。よくあるのはどちらもnginxです

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = vagrant
group = vagrant

phpのバージョンに合わせた、php-fpmをサービス登録する。
既存ファイルを参考にして作る記事や説明が多いですが、phpenvに同梱されているのでコピーして使います。

php7.2 を選択中なので、こちらを使う
※ systemd 配下に置くサービス名はわかりやすくバージョンつけておく
# cp /usr/local/phpenv/versions/7.2.13/etc/systemd/system/php-fpm.service /usr/lib/systemd/system/php-fpm-7.2.13.service

ここまでできたら、あとはnginx, php-fpm を起動すれば完了です。

# systemctl start php-fpm-7.2.13.service
# systemctl start nginx.service

phpのバージョンを変更するときは、以下をやってください。

7.2のphp-fpmとnginxを終了
# systemctl stop php-fpm-7.2.13.service
# systemctl stop nginx.service

バージョン毎のphp-fpm.serviceをコピー
cp /usr/local/phpenv/versions/x.x.x/etc/systemd/system/php-fpm.service /usr/lib/systemd/system/php-fpm-x.x.x.service

起動
# systemctl start php-fpm-x.x.x.service
# systemctl start nginx.service

この作業を通して、アプリケーションやサイト1つ動かすにしても、サーバー側では様々な設定が行われて動いてる(公開できている)ことがよくわかります。

こういったことを気にしなくても、ボタン一つで環境が立ち上がって、快適に使える環境を提供しているサービスがあり、それを支えてる方々は真面目にすげーなと思うばかりです。

今回の手順に関して、細かい内容はググったらだいたい出てくるので割愛してますが、世の中に向けて公開するサーバーを構築する場合は、もっと(設定を)やらないといけないことがたくさんあるので、あくまでもローカルで楽しんでくださいね😂

近いうちに、Dockerを使って開発環境作ってみた話を書こうと思います。

おわり

【2019】el7+phpenv+nginx(php-fpm)で開発環境を作り直した話 その1

あけましておめでとうございます。
2019年も引き続き、よろしくお願いいたします。

去年の大晦日から元旦にかけ、MacOSをMojaveにアップグレードしたついでに、
Vagrantの開発環境も新しくしたので、備忘録程度に残していきたいと思います。

旧環境を取っておけば一発だったと思いますが、実際にコマンド叩いて環境構築していくのも楽しいし、理解が深まるので久しぶりにやってみました。

まずは作業ディレクトリとCentOS7のBoxを使う前提のVagrantfileを生成します。

$ mkdir vagrant-dev
$ cd vagrant-dev
$ vagrant init centos/7

環境のサーバIPを設定 (好きなように変更)
$ vim Vagrantfile

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"

結構便利なプラグインも入れておく
$ vagrant plugin install vagrant-vbguest

お立ち上げからsshログイン

$ vagrant up
$ vagrant ssh

これでベースができたので、ここからサーバの設定とphpenv(rbenv), nginxなどなどを入れます。

rootに移動
$ sudo su -

SELinuxを無効にする
# vi /etc/sysconfig/selinux

disabled に変更して保存

SELINUX=disabled

timezoneをAsia/Tokyo にOverwrite

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ここでsshログアウト後、 $ vagrant reload をしてVMを再起動
あらためて $vagrant sshログイン後、rootに移動する $ sudo su -

TimezoneがJSTになってることを確認
# date

EPELリポジトリと、phpenv等で必要になるパッケージをインストール
# yum install epel-release openssl-devel readline-devel zlib-devel libxml2-devel bzip2-devel curl-devel libjpeg-devel libpng-devel libicu-devel gcc-c++ libtidy-devel libxslt-devel autoconf bison-devel wget unzip perl-ExtUtils-MakeMaker

gitをインストール ※yumでも入りますが、新しいVersionを使う

# wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
# tar vfx git-2.9.5.tar.gz
# cd git-2.9.5
# make configure
# ./configure --prefix=/usr
# make all
# make install

インストールできたか確認
# git --version

不要なファイルを削除
# cd ../ && rm -rf git-*

phpenv をシステムワイドに入れる

# git clone https://github.com/CHH/phpenv.git
# phpenv/bin/phpenv-install.sh
# mv .phpenv/ /usr/local/phpenv
# chmod 775 -R /usr/local/phpenv
# git clone https://github.com/php-build/php-build.git /usr/local/phpenv/plugins/php-build
# exec $SHELL
# phpenv

rbenv も必要になるので同様に入れる

# git clone http://github.com/sstephenson/rbenv.git .rbenv
# mv .rbenv/ /usr/local/rbenv
# chmod 775 -R /usr/local/rbenv
# git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
# exec $SHELL
# rbenv

rbenvのprofileを修正して保存
# vi /etc/profile.d/rbenv.sh

export RBENV_ROOT="/usr/local/rbenv"
export PATH="$RBENV_ROOT/bin:/usr/local/phpenv/bin:$PATH"
eval "$(rbenv init -)"
eval "$(phpenv init -)"

リロード
# exec $SHELL

rubyインストール

# rbenv install 2.6.0
# rbenv global 2.6.0
# rbenv versions
# ruby -v

phpenv をちょっと修正
# vi /usr/local/phpenv/bin/phpenv

#!/usr/bin/env bash
export PHPENV_ROOT=${PHPENV_ROOT:-'/usr/local/phpenv'}
export RBENV_ROOT="$PHPENV_ROOT"
exec "$RBENV_ROOT/libexec/rbenv" "$@"

リロード
# exec $SHELL

やっと、phpインストール
5.6 / 7.1 / 7.2 を入れます

# phpenv install 7.1.25
# phpenv install 7.2.13
# phpenv install 5.6.39

確認 (このときはまだバージョン指定がされていない状態)
# phpenv versions
* system (set by /usr/local/phpenv/version)
  5.6.39
  7.1.25
  7.2.13

コマンド無いよ!となる
# php -v
rbenv: php: command not found

The `php' command exists in these PHP versions:
  5.6.39
  7.1.25
  7.2.13

システムのphpバージョンを7.2に切り替える (バージョンはインストールしたものを指定)

# phpenv global 7.2.13

確認
# phpenv versions
  system
  5.6.39
  7.1.25
* 7.2.13 (set by /usr/local/phpenv/version)

生きた...!!! ちゃっかりXdebugもある素敵
# php -v
PHP 7.2.13 (cli) (built: Jan  9 2019 20:17:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans

ついでにcomposerも入れましょう

# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

※ 以下でも可
# yum install composer

確認(rootで動かすなや!といわれてます。実際はrootで叩かないのでOK)
# composer --version
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.8.0 xxxxx

長くなりましたので、この辺にしておきます!
次回は php-fpm + nginx の設定を書こうと思います。

※追記 書いたのでリンク

chanshige.hatenablog.com