Archives
WordPressからHugoへ移行
開発メモブログをWordPressからHugoへの移行
- WordPressから記事をエクスポート
- Hugoをインストール
- エクスポートした記事を放り込む
WordPressから記事をエクスポート
- WordPressにHugo向けにエクスポートするプラグインを入れてデータを出す
Hugoをインストール
brew install hugo
hugo new site techblog
cd techblog
書き出した記事を放り込む
プラグインを使ってエクスポートした記事データはHugoのcontent/post
のpostディレクトリ相当のものが吐き出されているので、中身をcontent/post/
にぶちまける。
細かい設定
テーマを入れる
適当なテーマをインストール。今回はPolymer。
themeディレクトリがなかったら作ってその中でgit clone
したらいいよ。
config.tomlを編集
title,baseurl,languageCode,theme,paginateを修正する。
後で独自ドメインでGitHubPagesで運用するため、canonifyurls = trueを設定する。
GoogleAnalyticsのコードを入れるため、config.tomlに以下を追記
[params]
googleAnalyticsUserID = "<<code>>"
またURLの構造を検討する。 今回からパーマリンクを以下のようにした。permelink設定を追加
[permalinks]
post = "/:year/:month/:day/:slug"
これでyyyy/mm/dd/slugというようなURLになる。
URL構造を変更したため、取り込んだ記事のURL属性を消して代わりにSlug属性を追加。結構時間かかった。
新しい記事を追加する時には
hugo new post/<<post-name>>.md
で記事の初期状態のものが作られるので後は内容をMarkdownで記述していく。
GitHubPagesで公開する
- GitHubにリポジトリを追加
- hugoコマンドで出力されるpublicディレクトリの静的ファイルをコミット
- settingsのGitHub Pagesの項にあるCustom domainにドメインを入れて保存。
- hugoのpublicにCNAMEというファイルを追加。内容は公開ドメイン名
- 再度publicディレクトリの内容をコミット
- DNS(今回はRoute53)でCNAMEの設定をする。
今回はひとまずこんな感じ。 今後は記事の追加だけじゃなく、テーマを自作していきたい。
再始動
ブログ引越して再始動
…の予定
再始動
契約していたレンタルサーバーを解約して、長らく契約するも放置状態が続いていたVPSにいろいろ引っ越そうと検討。
ついでにいろいろ構成などを再検討してやり直そうと考えました。
構成
レンタルサーバー上のMovableTypeで細々と更新していたアニメやゲームについてのブログをVPS上にWordPressに構築し直しす事に。
ついでにWordPressのカスタマイズの練習台にも使おうという魂胆。
技術メモ的なこの忘備録ブログは今回を機にHugoで静的サイト構築してGithubPagesに載せる事にしました。
他にいくつか静的サイトジェネレーターを運営していろいろ触ってみたいと考えている。
ただ、今の所、上記2ブログ以外は全てS3での静的サイトホスティングでFTPでファイルをアップロードする方法を考えているけど、将来的には違う場所でホスティングしたりデプロイツールを使ったり、CI的なことをしたり、Dockerを使うなどして別の場所にサイトを構築しようかと考えている。
MovableTypeからWordPressへの引越し
テキストをずらずら記述していただけだったので、特に問題はなかった。 単純にエクスポートしてインポートしただけ。 インポート後にコツコツとカテゴリやタグを整理して付け直したり。
VPSサーバーの設定やHugoについて
後日、それぞれ別の記事にします。
自己紹介
いろいろな作業メモ、備忘録です。
2024-12-30時点のスキルセトッ(レベルに差はあり)
- FileMaker
- Windows Server
- Powershell
- shell
- MySQL
- Ubuntu
- Ansible
- Docker
- PHP
- JavaScript
- Python
- AWS
- Ruby
- Go
- Perl
カテゴリの区分
- 構築・設定 -> 何かをインストールしたり設定したりした時の備忘録
- 勉強日誌 -> 何かの勉強した時の備忘録
- トラブル -> トラブルルシュートした時の備忘録
タグの区分
- プログラミング言語の名称 -> 言語の勉強とかした時につけます。
- フレームワークの名称 -> フレームワーク固有の事についての記事につけます。
- OSの名称 -> OSの設定についての記事につけます。
- ツールの名称 -> ツールについての記事につけます。
- 購入・所持している書籍についての記事につけます。
Oracle Setup
Ubuntu14.04にOracle11gを入れる
大まかな手順
- 必要なものをいれる(unzip, libaio1, unixodbc, alien)
- oracle download(rpmパッケージだけどな!)
- /sbin/chkconfigを作ってあげる
- alienでrpmパッケージをdebに変換
- インストール
- 設定ファイル周りの編集(パスが違うとか、memory_targetの変更とか)
- hostsに外向けIPとhostnameの対応を追加(一番大事!)
嘘でしょう。。。
長い間悩まされていた問題が解決したかもしれないので、ここに書いておきましょう。
実際に解決したかどうかは、会社と自宅とPocket-Wifiで何回かネットワークを切り替えてから。
悩まされていた問題
会社やPocket-Wifiでは問題ないが、なぜか自宅のWifi環境だとMacのVM上のUbuntu(開発環境)のネットワークが繋がらなくなる。
VMのネットワーク設定を「Macと共有」の時は問題なくて「自動検出」にするとVMのUbuntuのIPが正しく設定されない。
ひとまず解決?
前提として、このUbuntuはDesktop 14.04LTSです。なのでUbuntuServerの場合は違うかも。
/etc/NetworkManager/system-connections/ 配下のネットワークの設定ファイルのファイル名に日本語(マルチバイト文字)が含まれていたので、ASCII文字のみに変更。
/etc/NetworkManager/system-connections/ のファイル名を変更したものを開く
この設定ファイルの中の「connection」にあるidの設定を変更したファイル名に合わせる。
これだけでネットワークつながるようになった。というかipが正しくふられるようになった。
まさかのマルチバイト文字ファイル名問題?
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環境も。
来年取り組みたいのは、今年やりそこねたメールサーバーやログ設定、それからプロキシ設定かな