Study-Daily
Agile and Sprint myself
自分の目標をアジャイルにスプリントな感じで少しずつ達成していきたい
と、言うことです。
覚えたいこと、挑戦したいことを目標とするはいいけど、いつまでたっても着手しなかったり遅々として進まなかったりするので優先順位をつけて期限を設けて手中して取り組んでいけば少しは結果が変わってくると信じたい。
現在の目標
- ブログや静的サイトのテーマをつくり込みたい(Pelican,Hexo,Jekyll,WordPress,Hugo,Sphinx)
- AWSの機能のだいたいを触って感覚を掴んでおきたい
- Microsoft Azureを触ってAWSとの違いを掴んでおきたい
- GCC?を以下略
- Blumixに挑戦したい
- FreeBSDを構築したい
- Alpineを構築して慣れたい
- Ansibleを一通り触っていろいろできるよういなりたい
- Dockerをある程度使えるようになりたい
- IPv6の学習と擬似ネットワークの構築してみたい
- VPNの設定をGUIじゃなくても設定できるようになりたい
- VyOS?を試してみたい
- Shell及びAWKを覚えたい
- Powershellを覚えたい
- dot net C#を覚えたい
- Javaを覚えたい
- Androidを覚えたい
- Swiftを覚えたい
- JavaScriptをもっと使いこなせるようになりmたい
- Perl6/Perl5を使えるようになりたい
- PHP7を覚えたい
- PHPのフレームワーク、Laravelを覚えたい
- Nginxに組み込むLuaを少し試したい
- Ruby/Railsを覚えたい
- Python3をもう少し使えるようになりたい
- Scalaちょっと覚えたい
- Lispわかるようになりたい
- Clojure書けるようになりたい
- Haskell読めるようになりたい
- F#ちょっとしたものなら書けるようになりたい
- ActiveDirectory/OpenDirectoryがわかるようになりたい。
- Golang書けるようになりたい
- Makerel試したい
- Erlang読み書きできるようになりたい
- Elasticsearch扱えるようになりたい
- Neo4j試したい
- MongoDB試したい
- DynamoDB試したい
- Redis扱えるようになりたい
とっても曖昧なものが多い。。
今もっとも取り組みたいことを多くて3つに絞るなら
- ブログや静的サイトのテーマをつくり込みたい(Pelican,Hexo,Jekyll,WordPress,Hugo,Sphinx)
- Makerel試したい
- Dockerをある程度使えるようになりたい
以下、打ち消し戦のものは現時点で達成済みのもの
再始動
ブログ引越して再始動
…の予定
再始動
契約していたレンタルサーバーを解約して、長らく契約するも放置状態が続いていたVPSにいろいろ引っ越そうと検討。
ついでにいろいろ構成などを再検討してやり直そうと考えました。
構成
レンタルサーバー上のMovableTypeで細々と更新していたアニメやゲームについてのブログをVPS上にWordPressに構築し直しす事に。
ついでにWordPressのカスタマイズの練習台にも使おうという魂胆。
技術メモ的なこの忘備録ブログは今回を機にHugoで静的サイト構築してGithubPagesに載せる事にしました。
他にいくつか静的サイトジェネレーターを運営していろいろ触ってみたいと考えている。
ただ、今の所、上記2ブログ以外は全てS3での静的サイトホスティングでFTPでファイルをアップロードする方法を考えているけど、将来的には違う場所でホスティングしたりデプロイツールを使ったり、CI的なことをしたり、Dockerを使うなどして別の場所にサイトを構築しようかと考えている。
MovableTypeからWordPressへの引越し
テキストをずらずら記述していただけだったので、特に問題はなかった。 単純にエクスポートしてインポートしただけ。 インポート後にコツコツとカテゴリやタグを整理して付け直したり。
VPSサーバーの設定やHugoについて
後日、それぞれ別の記事にします。
fmxj.js のサーバーサイドをPHPじゃなくてPerl(Mojolicious)で試す
先日、SeedCodeの方がFileMakerのCustom Web Publishing の為のJavaScriptとServer side で使うPHPのサンプルをGithubで公開されてました。
https://github.com/seedcode/fmxj
概要としては、FileMaker Server の XML公開を使う。
Web公開エンジンにXML公開のためのリクエストをJavaScriptで生成してサーバーサイドスクリプト(SeedCodeのサンプルではPHP)にpostする。
◆ハマった事:サンプルPHPの内容
サンプルのPHPをよく読んでなかった。。。
JavaScriptからFileMakerのユーザーアカウントとパスワードをpost出来るようにキーバリューを元々のpostデータに加えている。それから本来のpostデータからおまけを除くための追加分のパラメータ文字数もpostに加えている。この辺りの仕様にもんりょりする。
-db=dbname&-lay=layname&-query=(q1)&-q1=Status&-q1.value=Vendor&-findquery みたいな通常のクエリデータに
u=undefined&p=undefined&l=コンテンツの文字数
ていうのがくっついてPHPにpostされてくる。
それをPHP側でphp://inputでリクエストのボディを取得して余計なパラメータを削ってpostデータを作り直してcurl使ってPOSTしてた。
そこに気づかずperlで再現しようとした時にpostデータを丸投げしてエラーになってしまっていた。
なんでpostデータをわざわざこねくり回してるんだろう?て思ってた。
サンプルって事でいろいろハードコーディングされてるけど、気にしない。
◆ハマった:Nginxの設定
欲をかいてPerlでサーバーサイド書くにあたって、FastCGIでさらっと書くじゃなくてMojolicious使うことにしたら
WebServer→Nginxでバーチャルホスト(hoge.sample.comみたいな)とmorboで127.0.0.1:3000で動くMojoliciousになって、何が起きたかって言うとクロスドメインの問題が発生してしまい、エラーになる。
これについてはNginxの設定でproxy_passでMojoliciousにリクエストがリバースプロキシされるようにして解決。
しかしNginx、デフォルトではContent-Typeの書き換えができず、JavaScriptにレスポンスされるデータがXMLになっていなくて、意図する結果に終わらない。既にあるヘッダーに値を追加する処理を行ってしまう。
※Nginxで add_header Content-Type ‘application/xml’してもmime-typeの設定ファイルに追記しても
Content-Type text/html;charset=UTF-8に application/xmlの値が追記されるだけになる。
その結果、fmxj.jsがXMLHttpRequestのresponseXMLに値がセットされない。そしてresponseXMLがあるの前提になっているXMLをパースする処理のところで結果が空欄になって処理が終わってしまう。
最初fmxj.js内部を書き換えて(responseTextをXMLに変換して)みたんだけど、コアのライブラリを触るのはよくないので、Nginxでちゃんとヘッダを書き換えられる方法を調べる、nginx-extrasを追加でインストールするとmore-set-headerというのが使えるようになり、ヘッダーの書き換えができるようになるとの事だったのでインストール。
自分はUbuntuの環境なので、
sudo apt-get install nginx-extras
後はNginxの設定ファイルに(厳密に言うとリクエストを受け付けるLocationディレクティブで)
more_set_headers ‘Content-Type: application/xml; charset=UTF8’;
を追記、more…がヘッダーの追記ではなく書き換えなのでcharsetも忘れずに書く!
これでようやく、Sample.html → fmxj.jsを使ってServerにpostリクエスト → 受けたリクエストをNginxがMojoliciousを動かしてるmorboにリバースプロキシ → MojoliciousがPOSTリクエスト受け取りXML公開のクエリパラメータ付きURLを生成して(生成しなおして)cURLをラップしたライブラリからPOST送信 → JavaScriptにレスポンスが返り、完成。
AnsibleのSSH設定について
Ansibleがバージョンを上げた所為か今までのやり方だとSSHのコネクションエラーになるようになって、どうも–ask-pass の引数付きにするとパスワードいれて処理ができる事はわかったんだけど、スマートじゃない。
という事で調べた。
結論としては、varsファイルに
・ansible_ssh_user
・ansible_ssh_pass
・ansible_sudo_pass
の3つを書いておきましょう。でした。
最初に呼び出すsite.yml内で変数定義してもいいんだけど、group_varsディレクトリ内にhostsファイルで書くグループ名のyamlに書くのがいいかなって思う。
例えばhostsファイルに
`Ansibleがバージョンを上げた所為か今までのやり方だとSSHのコネクションエラーになるようになって、どうも–ask-pass の引数付きにするとパスワードいれて処理ができる事はわかったんだけど、スマートじゃない。
という事で調べた。
結論としては、varsファイルに
・ansible_ssh_user
・ansible_ssh_pass
・ansible_sudo_pass
の3つを書いておきましょう。でした。
最初に呼び出すsite.yml内で変数定義してもいいんだけど、group_varsディレクトリ内にhostsファイルで書くグループ名のyamlに書くのがいいかなって思う。
例えばhostsファイルに
`
とか書いてグループ名が「dev」の場合に
-playbook\
|
|–dev.yml
|
|–group_vars\
| |
| |–dev.yml
|
|–roles\※内容略
|
|–site.yml
みたいな感じで書く。
group_varsのdev.ymlには上記のようなansible_xxx_xxxを変数定義しておくとグループに対してssh接続の時に定義された値が使われる。これにより–ask-passの指定が必要なくなった。
問題は1つあって、group_varsのdev.ymlは公開したくない場合多いよねって事。
なので更に、ここでいうdev.ymlはansible-vaultコマンドを使って暗号化する。もしくはバージョン管理に含めない運用を行うって事が必要になる。暗号化する場合も復号に使うキー? ソルトみたいなもん?を書いたファイルを作る必要があって、それがないと暗号と復号ができないんだけど、そのファイルをバージョン管理に含めないって運用にするなら、最初からdev.ymlを含めないでも一緒かなって思う。
ansible-playbookを実行する時に復号のために–vault-passの引数とそのファイルパスを渡さないといけないってのも–ask-pass使うのと大差ないじゃんってなるから暗号化は必要な案件だけでいいかな。
hostsファイルにhostの後に引数オプション的にansible_ssh_passとか書けばいいのだけれども、それもなんだかなー
って事で、今後はgroup_varsもしくはglobalに認識されるような変数を定義するファイルにssh接続情報は書こうかと考えている。
Ubuntu14.04 でphpでメール受信とか
## install postfix
“`
sudo apt-get install postfix postfix-dev sasl2-bin
sudo apt-get install dovecot-core dovecot-dev dovecot-pop3d dovecot-imapd dovecot-gssapt
“`
## Settings
“`
sudo cp /usr/lib/postfix/main.cf /etc/postfix/main.cf
sudo emacs -nw /etc/postfix/main.cf
“`
### 参考
– http://www.server-world.info/query?os=Ubuntu_14.04&p=mail
– http://www.server-world.info/query?os=Ubuntu_14.04&p=mail&f=2
### gmailに転送する設定に変更
relayhostにgmailを指定
パスワードの設定とかね。
## phpでメールを受信出来るよう設定
メールサーバ受信DNS設定とか面倒だからやめた。
phpinfoを見ると案の定imap入ってませんでしたので、php5.5系の落としてきてimapのディレクトリ移動してphpize
### configureで失敗する
configureしたらutf8_mime2text()がうんたらと出てきた。
ググると、どうもphpにimapとかメール関係入れる時にライブラリが足りないと出るエラーのようだ。
sudo apt-cache search libc-client
Ubuntu14.04 LTS でNginx FasCGI Perl
古いPerlのサンプルを参考に復習したくなって、やむなく自分の開発環境にFastCGI環境をセットアップ
最初、コードが間違っているのに気づかず3日ほどあれこれ調べまわっても解決せず時間を浪費した。
502 bad gatewayのエラーでて、ログを見ると Cannot execute script って出てて、調べても分からんし、権限は間違ってるはず無いしでずっとつまずいてた。
結局、
sudo apt-get install fcgiwrap
※もしかしたら libgcgi-perlも必要?でもなんか下記のfastcgi-wrapper.plを使う場合に必要なやつかも
/etc/init.d/fcgiwrap のFCGI_USERあたりを動かしたいユーザーやグループに変更。※お好みで
sudo sysv-rc-conf on fcgiwrap
sudo service fcgiwrap start
でFastCGIが動くようになる。
最初、fastcgi-wrapper.plを使う場合を参考にしてたけど、
参考:http://ubuntu.flowconsult.at/linux/nginx-perl-fastcgi-installation-ubuntu-linux-14-04/
これだとなんかPerlのみっぽかったしTCPだったので、Unixソケットで通信にしたかったのとpythonやRubyでも動かしたかったのでfcgiwrapを使うようにした。
Nginxの設定はlocationディレクティブだけ抜粋すると
#拡張子が.plで終わるリクエストの場合
location ~ \.pl$ {
try_files $uri = 404;
gzip off;
#インストールしたfcgiwrapのソケットファイルのパス
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#/etc/nginx/fastcgi_paramsの内容を読み込む。
include fastcgi_params;
}
で
2014年を振り返る インフラ系
2014年を振り返る。インフラ関係について
今年もっとも多く成長したのはインフラ関係についてだと思う。
来年はもう少しスタートアップ用のシェルスクリプト理解して作れるようになりたい。
PowerShellももう少し覚えてWindowsServer環境の制御も出来るようになりたい。
構成管理は今年手を付けたVagrantとAnsibleをもっと掘り下げていきたい。
VagrantはPackerを使ってVirtualBox以外のボックス作成やEC2へのアクセス。
Ansibleは様々な構成管理、できればWindows環境も。
来年取り組みたいのは、今年やりそこねたメールサーバーやログ設定、それからプロキシ設定かな
2014年を振り返る サーバーサイドプログラミング
サーバーサイドプログラミング(Perl,PHP,Python,Ruby,etc…)について振り返る
まず、コンパイルする系の言語には全然手を出さなかったのでノーコメント。
Groovyはちょっとだけ久しぶりに触ったらバージョンが上がってて言語仕様変わってた箇所でトラブった。
Perl,Python,Rubyについては全然触れなくてフラストレーション。
PHPは少し触ってたけど、使用バージョンがPHP5.4→PHP5.5→PHP5.6といろいろ触ってその間の言語仕様の変更に惑わされたりした。
本当はテストコードがしっかり書けるようになりたかったけど、いろいろ自分が足りなくて駄目だった。
家にたまった古い書籍も含めて処分していきたいので2015年はバシバシコードを書捨てていきたい。
PHP7が来年だか再来年にリリースされることによって現場には相当バージョン違いのプロジェクトが出てしまうと思うので、できれば新規案件は
枯れたPerl5系かPython3系(サポートがだいぶ長引くことになった2系も場合によっては)でチャレンジしたい。
Rubyは…どうだろう。試しやプロトタイプにはいいのかも、ただしSinatra限定。ツールはRuby系が多いのでRubyでいろいろ学習してから他の言語のものを使うようにするといいのかもしれない。
2014年を振り返る JavaScript編
今年を振り返ってみる。クライアントサイド、特にJavaScriptについて
JavaScriptについては今年、なるべくjQueryを使わないようにチャレンジする時期があった。
結局IEとの互換を維持するコードを書かないといけない事を考えるのが面倒になってjQuery使わないの諦めた。
document.getElementByIdとか使える場合は積極的に使ったほうがコストが抑えられるけど、中途半端に混ぜても他のオブジェクトとの兼ね合いで結局jQueryオブジェクトに変換しないといけなかったりして、もにょる。
jQueryでdata属性使うとキャッシュの関係で後から値の変更がうまくいかないとか、なんて地雷だよ!て憤ったよ。
ただ今後はBackbone.jsに手を出していきたいと考えているのでjQueryとは仲良くやっていきたいと思っている。
ただ、思ったよりはJavaScriptの学習や経験は積めなかったのが残念。
もっとCanvasとかSVGのコントロールとか挑戦したかったし、TypeScriptやClojureScriptにも挑戦したかった。
CoffeeScriptはちゃんと学習する前にオワコンになりそうだし、あんまりやらなくていいかなって考えている。
思い出せない
前回の投稿から1ヶ月以上過ぎていて、何か書こうと思ったけど、ここ1ヶ月何やってたか記憶がほぼない。
サーバー関係
ログローテーションの設定を行った。
yum install logrotate
/etc/logrotate.d/配下に追加の設定を行う
/var/log/httpd/_/_logとかやるとユーザーごとに設置したログ・ファイル全てを対象にしたローテーション設定ができる
Ansible
1台のサーバーでTomcat、Gitbucket、Jenkins、Redmineを動かす計画をしているのでVagrantで実験中
ついでにNginxをフロントにおいてGitbucket(Tomcat)、Jenkins、Redmine(Unicorn)、PHP(Apache)にリバースプロキシにする予定。
yumモジュールはnameでhttpでrepl指定してもインストールできるようだ。
後でNginxでリバースプロキシの設定する予定だからTomcatのデフォルトポートはそのままに、Jenknsは8010とか競合しない番号にポート変更。
Tomcatの自動起動スクリプト調べて作ったんだけど、何かよろしくなかったらしい。daemon化うまくいかなかった。
JavaScript
AWSのS3へのアップロード・ダウンロードがJSのみで出来ないか調査。サンプルがいろいろあって試していたら出来た。
マルチパートアップロードの場合はファイルをバッファ分割しながら送信するのがミソ。
AWSのS3のCORSで許可ヘッダーの設定が必要でした。
PHP
namespaceやautoloadをまだ理解しきれていない部分があるようで、読み込みで躓く
毎日ちゃんとメモとらないと駄目ですね。。