2012-06-04 SSHフォワーディング
SSHフォワーディング
特定のIPホストからでしかSSHやsftp,ftpの許可をしていない。
そんな時に活躍するのがSSHフォワーディング。回線もセキュアになります。
$ ssh -L <ローカルポート番号>:<転送先ホスト>:<転送先ポート番号> <ユーザ名>@<リモートホスト>
例えば
$ ssh -L 2222:you_want_to_connect.com:22 yourname@ssh_host.com
としてsshに接続して127.0.0.1(localhost)の2222ポートに対してyou_want_to_connect.com:22に接続するように接続してやります。
はじめは分かりにくいですが分かれば簡単。いつでも一行書けばセキュアな回線で接続が可能になりますね。
2012-06-03 symfony1.4からmemcachedを使う方法 - 基本編
symfony1.4からmemcachedを使う方法 - 基本編
symfonyでmemcachedを利用する方法を簡単にまとめました。
nginx + php5でmemcachedを利用するという方法です。
http://labs.unoh.net/2010/05/symfonydoctrine.html
に詳しくあるのですが更に詳細はこちらを参照ください。
nginx, php-fastcgiでphp5,symfony1.4を動かせていることを前提とします。
http://kmusiclife.hatenablog.com/entry/20111105/1320467309
http://kmusiclife.hatenablog.com/entry/20120509/1336538654
などを参考にしてください。
# apt-get install memcached # apt-get install php5-memcache # apt-get install php5-memcached # /etc/init.d/php-fastcgi restart # /etc/init.d/nginx restart
config/ProjectConfiguration.class.php
public function configureDoctrine(Doctrine_Manager $manager)
{
$servers = array(
array(
'host' => '127.0.0.1',
'port' => 11211,
'persistent' => true),
);
$cacheDriver = new Doctrine_Cache_Memcache(array(
'servers' => $servers,
'compression' => false)
);
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver);
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 60); // 結果キャッシュのデフォルトの存続秒数 sec
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, $cacheDriver);
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN, 60); // クエリーキャッシュのデフォルトの存続秒数 sec
}
Doctrineからの利用
$this->table_names = Doctrine_Core::getTable('table_name')
->createQuery('a')
->where('a.id =? ', $id)
->useResultCache(true)
->execute();
2012-05-30 Symfony2 Choice Fieldの使い方
Symfony2 Choice Fieldの使い方
Symfony2を本格的に覚え始めました。フレームワークを覚えるのにまず行うのがフォーム項目それぞれの使い方です。Choice, Multiple Choice, Radiobox, File, text, textarea, date/datetimeなどの基本フォーム項目の表示方法、validationを覚えればフレームワークも3割は使えたも同然です。
今回はchoiceからまとめていきます。
Post Entity:
class Post
{
/**
* @var category $category
* @ORM\Column(name="category", type="string", length="255")
*/
private $category;
public static function getCategories()
{
return array('cat1'=>'カテゴリー1', 'cat2'=>'カテゴリー2');
}
}
PostType:
use Bunble\Name\Entity\Post;
class PostType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('category', 'choice', array(
'choices'=>Post::getCategories(),
'empty_value' => 'Choose your gender'
)
);
}
}
choicesの項目にPostクラスのgetCategoriesを投げてあげましょう。
empty_valueの設定は色々と問題もあったようで。
https://github.com/symfony/symfony/pull/1336
TemplateではgetCategories()の配列をどう取得するかがポイントになります。
Twigではvar[ ]として配列を取得します。ControllerからPostのクエリを投げています。
Template(Twig):
{% for entity in entities %}
{{ entity.getCategories[entity.category] }}
{% endfor %}
ドキュメントにあるcallbackがなぜかうまく動作しませんでした。
validationでなぜか引っかかります。callbackの投げ方が悪かったのかもしれませんが。
http://symfony.com/doc/current/reference/forms/types/choice.html
Form Type一覧:
http://symfony.com/doc/current/reference/forms/types.html
Choice Field Type
http://symfony.com/doc/current/reference/forms/types/choice.html
Text Field Type
http://symfony.com/doc/current/reference/forms/types/text.html
Textarea Field Type
http://symfony.com/doc/current/reference/forms/types/textarea.html
Email Field Type
http://symfony.com/doc/current/reference/forms/types/email.html
URL Field Type
http://symfony.com/doc/current/reference/forms/types/url.html
Datetime Field Type
http://symfony.com/doc/current/reference/forms/types/datetime.html
Checkbox Field Type
http://symfony.com/doc/current/reference/forms/types/checkbox.html
File Field Type
http://symfony.com/doc/current/reference/forms/types/file.html
Radio Field Type
http://symfony.com/doc/current/reference/forms/types/radio.html
Hidden Field Type
http://symfony.com/doc/current/reference/forms/types/hidden.html
2012-05-10 macportでnginx/php5.4/phpmyadminを動かすまでザザーッと
macportでnginx/php5.4/phpmyadminを動かすまでザザーッと
php5.4のインストール
$ sudo port install php54 $ sudo port install php54-cgi $ sudo port install php54-mbstring $ sudo port install php54-curl $ sudo port install php54-mcrypt $ sudo port install php54-mysql
うちで出たエラーは下記の通り。対処も同時に。
エラー対処:
$ sudo port install php54 Error: Target org.macports.activate returned: Image error: /opt/local/bin/captoinfo is being used by the active ncursesw port. Please deactivate this port first, or use 'port -f activate ncurses' to force the activation. $ sudo port -f uninstall ncursesw
エラー対処:
$ sudo port install php54 Log for perl5 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_perl5/perl5/main.log $ sudo port installed perl $ sudo port -f perl5 @5.8.9_0 $ sudo port -f perl5 @5.12.3_1+perl5_12 $ sudo port -f perl5.8 @5.8.9_3 $ sudo port -f perl5.12 @5.12.4_0
spawn-fcgi/nginxのインストール
$ sudo port install nginx $ sudo port install spawn-fcgi
mysql5のインストール
$ sudo port install mysql5-server $ sudo /opt/local/bin/mysql_install_db5
普通に起動するとエラーが出るので下記のように設定変更。
_mysqlの権限を与える必要があります。
$ sudo cd /opt/local/var/db/mysql5 $ sudo chown _mysql:_mysql mysql $ sudo /opt/local/lib/mysql5/bin/mysqld_safe & # mysql5起動
mysql5の起動とパスワードの設定
$ sudo /opt/local/lib/mysql5/bin/mysqld_safe & $ sudo /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
spawn-cgiを使ってphp-cgiの待ち構え設定
$ sudo vim /bin/php-fastcgi-start
ファイルphp-fastcgi-startの内容:
#! /bin/bash /opt/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 3 -f /opt/local/bin/php-cgi54
$ sudo /bin/php-fastcgi-start
php.initの設定
$ sudo cd /opt/local/etc/php54 $ sudo cp php.ini-development php.ini $ sudo vim /opt/local/etc/php54/php.ini
pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock date.timezone = Asia/Tokyo
nginxの設定
$ sudo cd /opt/local/etc/nginx $ sudo mv nginx.conf.example nginx.conf $ sudo mv fastcgi_params.example fastcgi_params $ sudo mv scgi_params.example scgi_params $ sudo mv mime.types.example mime.types $ sudo mv uwsgi_params.example uwsgi_params $ sudo vim /opt/local/etc/nginx/nginx.conf
ファイルnginx.confの内容:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /opt/local/etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
#gzip on;
include /opt/local/etc/nginx/sites-enabled/*;
}
$ sudo mkdir /opt/local/etc/nginx/sites-enabled $ sudo vim /opt/local/etc/nginx/sites-enabled/localhost
ファイルlocalhostの内容:
server {
listen 80;
server_name localhost;
access_log /opt/local/var/log/nginx/localhost.log;
error_log /opt/local/var/log/nginx/localhost.error.log;
root /opt/local/var/www;
index index.php;
location /phpmyadmin {
alias /opt/local/share/phpmyadmin;
index index.php;
}
location ~ /phpmyadmin/.*\.php$ {
include /opt/local/etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/local/share/$uri;
}
location ~ ^/.+\.php(/.*)?$ {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /opt/local/etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param SCRIPT_FILENAME /opt/local/var/www$script;
fastcgi_param PATH_INFO $path_info;
}
}
nginx起動
$ sudo /opt/local/sbin/nginx
phpmyadminの準備
visit:
http://www.phpmyadmin.net/home_page/downloads.php
$ sudo cd /opt/local/share $ sudo wget http://downloadhost/phpMyAdmin-3.5.1-all-languages.tar.gz $ sudo tar zxvf phpMyAdmin-3.5.1-all-languages.tar.gz $ sudo mv phpMyAdmin-3.5.1-all-languages phpmyadmin $ sudo mv config.sample.inc.php config.inc.php $ sudo vim config.inc.php
メモ:nginxやphp-cgi, mysqlの落とし方など
$ sudo nginx -s reload $ sudo killall php-cgi54 $ sudo /opt/local/bin/mysqladmin5 -u root shutdown
2012-05-09 nginxの各アプリケーション設定(symfony1.4, phpmyadmin)
nginxの各アプリケーション設定(symfony1.4, phpmyadmin)
phpmyadmin:
location /phpmyadmin {
alias /usr/share/phpmyadmin/;
index index.php;
}
location ~ ^/phpmyadmin/.+\.php$ {
root /usr/share/phpmyadmin/;
rewrite /phpmyadmin/(.*\.php?) /$1 break;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
}
symfony1.4:
nginx0.9x
location / {
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/symfony1.4/web$script;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $script;
}
nginx1.x
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location / {
root /var/www/symfony1.4/web/;
index index.php;
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param SCRIPT_FILENAME /var/www/symfony1.4/web$script;
fastcgi_param PATH_INFO $path_info;
}
参考:
2012-05-01 石川県金沢・小松・加賀⇔関西国際空港の移動手段まとめ
石川県金沢・小松・加賀⇔関西国際空港の移動手段まとめ
金沢市内→関西国際空港(KIX)への格安交通手段は? | K-MUSICLIFE TRAVEL CHANNEL へ移動しました。
国際線のLCCがどれだけ増えて、価格が下がっても自宅のある石川県からは関西国際空港、または成田への移動がネックになります。小松空港という便利な空港はあるのですが、小松空港を使うのであればLCCを使う意味がありません。また、石川県内から成田を利用すると都内一泊必要になりコストも結局割高に。よって、金沢⇔関西国際空港の移動手段の検討が必要になるわけです。
というわけで調べましたが方法は3つ
1.特急サンダーバード+関空快速・特急はるか (8,690円〜10,550円/人) 所要時間4時間半 2.石川中央交通乗合空港ジャンボ、自宅まで送迎 (9,700円/人) 所要時間5時間半 3.高速バス+空港リムジンバス (5,800円/人) 所要時間約6〜7時間
1.特急サンダーバード+関空快速・特急はるか(8,690円〜10,550円/人)
至って普通の関空へのルート。
金沢(サンダーバード)→京都・大阪・新大阪(関空快速)→関西国際空港 金沢(サンダーバード)→京都・大阪・新大阪(はるか)→関西国際空港
金額は8,690円〜10,550円になります。
おでかけネットなどで調べれば出てきます。
南海鉄道を使う方法もありますが、必ず一度の乗り換えがあり価格帯はおよそ8000円〜11,000円/人という感じです。
所要時間も短く利用しやすいです。
金沢発の最終:金沢19:43→関空23:36 関空発の最終:関空22:16→金沢02:46 (グリーン・寝台のみのきたぐにを利用)
2.石川中央交通乗合空港ジャンボ、自宅まで送迎 (9,700円/人)
石川中央交通乗合空港ジャンボを使う方法。時間を問わず自宅から自宅までの送迎で一人9700円/片道。
金沢市(一部を除く)、内灘、白山市、能美市、小松市(一部を除く)、加賀市(一部を除く)にお住まいであればご自宅までお迎えに来てくれます。大人数になれば一人あたりの金額も安くなるみたいです。
所要時間は金沢西ICより、関西空港まで5時間半。空港にはフライトの2時間前に空港到着の予定で運行しているということです。
万が一渋滞でも迂回路で時間は厳守してくれるようです。心強いですね。
金沢発、関空発の両方に対応してくれるようです。
大荷物でも問題なく非常にスムーズなサービスのように思います。
石川中央交通乗合空港ジャンボ TEL: 076-274-3975
3.高速バス+空港リムジンバス (5,800円/人) 所要時間約6〜7時間
一番安くつくが、一番時間がかかりリスクが高いバスの利用。
バスは金沢→大阪(高速バス北陸ドリーム大阪号)、大阪→関空(空港リムジンバス)となり、
必ず1度乗り換えが必要になります。また、逆も同じです。
北陸ドリーム大阪号(4300円/人): 金沢⇔大阪駅JR高速バスターミナル
http://www.kakuyasubus.jp/kansai_hokuriku/hokuriku_dream/index.html
空港リムジンバス(1500円/人): 大阪駅近くハービス大阪⇔関空
http://www.okkbus.co.jp/index3.html
北陸ドリーム大阪号(4300円/人) + 空港リムジンバス(1500円/人) = 5,800円
所要時間は最も長い6〜7時間。乗り継ぎの時間もきわどいので多めに時間を見ておきましょう。
【金沢 → 関空:バス始発 (約6〜7時間)】 金沢 07:00 → 12:35 大阪駅 12:48 → 13:50 関空 金沢 07:00 → 12:35 大阪駅 13:08 → 14:10 関空 金沢 09:00 → 14:35 大阪駅 14:48 → 15:50 関空 金沢 09:00 → 14:35 大阪駅 15:08 → 16:10 関空 金沢 13:40 → 19:15 大阪駅 19:48 → 20:50 関空
【関空→金沢:バス最終 (約6〜7時間)】 関空 20:45 → 21:43 大阪駅 22:20 → 5:54 金沢 関空 21:05 → 22:03 大阪駅 22:20 → 5:54 金沢
ではよい旅を。
2012-04-10 linux上でdropboxを利用する方法 クラウドバックアップに活用可能
linux上でdropboxを利用する方法 クラウドバックアップに活用可能!
サイトのデータやデータベースのバックアップをどのようにとるか困っている方もいるのではないかと(^^) Dropboxを使う方法を紹介します。
1.Dropboxアカウントを取得
よりDropboxに登録!(すいません!私の紹介にさしてください!)
2.DropboxクライアントをDownload、Dropboxを実行
https://www.dropbox.com/install?os=lnx
# wget http://www.dropbox.com/download?plat=lnx.x86 -O dropbox.tar.gz # tar zxvf dropbox.tar.gz # cd .dropbox-dist # ./dropboxd start & This client is not linked to any account... Please visit https://www.dropbox.com/cli_link?host_id=xxxxxxxxxxxxx&cl=en_US to link this machine.
ここに書かれてるURLをchromeやfirefoxのブラウザ上で実行します。
1で取得したアカウントでログインします。ログインが成功すると。
Client successfully linked, Welcome Your name!
というメッセージが出るとDropboxが有効になります。
~Dropbox
がdropboxのホームとなります。Photos, Public, はじめに.pdf が初期ファイルとして存在していると思います。
3.monitでdropboxを監視
Dropboxが落ちてはバックアップになりませんのでmonitでdropboxが落ちないように監視します。
/etc/monit/monit.d/dropbox.conf
check process dropboxd with pidfile /path/.dropbox/dropbox.pid start program = "/path/.dropbox-dist/dropboxd start" stop program = "/path/.dropbox-dist/dropboxd stop"
monitのインストール設定は
http://d.hatena.ne.jp/Kmusiclife/20111110/1320936054
を参考にどうぞ。
4.cronでバックアップデータを作成
0 5 * * * tar zcvf /path/Dropbox/backup.tar.gz /backup_path/* > /dev/null 2>&1
などとしてバックアップデータをDropboxに保存です。
Dropboxでは以前のバージョンファイルも参照できるのでバックアップには便利かと思います。便利とセキュリティは天秤です。利用には十分注意が必要です。
2012-04-07 sendmailで送るメールを迷惑メールとならないようにするための2つの
sendmailで送るメールを迷惑メールとならないようにするための2つの施策
しっかりとドメインを取得して、サーバを立ててsendmailでメールを送信、自前のsmtpでメールを送信しても迷惑メールになる。メールが届かない(>人<;)
しっかりとしたサービスで迷惑がられていないサービスであれば下記対策をすることで迷惑メールになる可能性を減らすことができます。
1.逆引き設定
IPアドレスからホスト名を引けるようにしますが、逆引きは必ずしも設定しなくても良いことから設定していないこともありますがしっかりと設定しておきましょう。gmailはこの逆引きの設定で迷惑メールに入らなくなることが多いです。
http://support.google.com/mail/bin/answer.py?hl=ja&ctx=mail&answer=1311182&authuser=1
また、重要なことにSPFでIPを指定した際のIP逆引きが必要にもなります。
bindの逆引きの設定の仕方はここでは割愛します。
http://www.atmarkit.co.jp/flinux/rensai/bind904/bind904b.html
などを参照してください。
2.SPFの設定
SPFはメールの送信元が信頼出来るものなのかどうかをDNSサーバのTXTレコードのspf1を参照することでその信頼性を上げるというものです。YahooのメールはこのSPFを設定することで迷惑メールになる確率が下がりました。
SPFの設定は
http://www.openspf.org/SPF_Record_Syntax
に詳細があるのですがTXレコードに下記のフォーマットで記述します。
サンプルにお使いください。
"v=spf1 a:example.com ~all" "v=spf1 include:example.com ~all" "v=spf1 include:example.com ip4:0.0.0.0 ~all" "v=spf1 ip4:0.0.0.0 ~all" "v=spf1 ip4:0.0.0.0 ip4:1.1.1.1 ~all" "v=spf1 include:_spf.google.com ~all"
google appsはinclude:_spf.google.comで通ります。gmail.comはredirect=_spf.google.comとなっていますが、sendmailでのSPFであればincludeのほうが効率が良いみたいです。
bindでゾーンファイルでの記述は下記のようになります。
example.com 90 IN TXT "v=spf1 include:example.com ip4:0.0.0.0 ~all"
~allと-allの違いが結構重要になってきます。
"+" Pass "-" Fail "~" SoftFail "?" Neutral
http://www.openspf.org/SPF_Record_Syntax
に詳細があります。mxレコードの指定など色々と方法がありますので参考にしてみてください。
その他
SPFについて
http://www.openspf.org/Project_Overview
GmailのSPFについて
http://support.google.com/a/bin/answer.py?hl=ja&answer=183895
SPFチェックはここで出来ます。sendmailなど動かすサーバののIPアドレスと、そこから発信するメールアドレスを入力します。
http://www.sendmail.co.jp/sa/spfcheck.html
SPFについて ITmedia
http://www.itmedia.co.jp/enterprise/articles/0603/24/news006.html
Gmailの迷惑メールについて
http://support.google.com/mail/bin/answer.py?hl=ja&ctx=mail&answer=1366858&authuser=1&expand=5
digコマンドでTXTレコード調査
$ dig -t TXT ;; ANSWER SECTION: hostname. 81609 IN TXT "v=spf1 include:xxxxx ~all"
2012-04-06 Debian5.x sources.list更新
使っているDebian5.0.10が徐々に古くなってきたのでaptも通らなくなってきた。
http://forums.debian.net/viewtopic.php?f=30&t=76253
そろそろ6.x squeezeにしないとなぁ。
という訳ですがとりあえず5.xでも使えるように色々と更新しました。
ただ、apt-get upgradeで多くのソフトを更新するとおそらくトラブルが出るので注意してください。
5.xから6.xで一度失敗している私なので(>人<;) 注意してください。
sources.list
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free deb-src http://ftp.fr.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main deb http://www.debian-multimedia.org squeeze main non-free
下記のように怒られるので
W: GPG error: http://www.debian-multimedia.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXX W: You may want to run apt-get update to correct these problems
keyring
#apt-get install debian-keyring #gpg --keyserver pgp.mit.edu --recv-keys 1F41B907 #gpg --armor --export 1F41B907 | apt-key add -
2012-03-19 nginx + rapid-ssl導入 - わかりやすいよ
nginx + rapid-ssl導入 - わかりやすいよ
nginx + rapid-sslの導入方法を書きます。SSLって何かとめんどくさいイメージありますが、ファイルがどれがどれかわからなくなるから問題なのです。仕組みがわかっていてもファイルがどれがどれかわからなくなります。この時点でめんどくさいですね。でも簡単になるように説明します。
なんでめんどくさい書き方したブログしかないんだよ(・∀・) という不満があったので。
1.Rapid-SSLで暗号鍵を作成
でSSLを取得します。年間で2,600円ですね。
https://www.rapid-ssl.jp/tools/makePkeyCsr2048.php
ダイレクトアクセスできない場合はトップページ> 新規お申し込み > お申込みフォーム > CSR作成ツールより
で2048ビットの秘密鍵の作成を行います。このツールを使ったほうが楽で確実です。
- 秘密鍵のパスワード - コモンネーム(Common Name) [ 例) ssl.yourdomain.com ] - 正式英語組織名 [ 例) Hentai, Inc. ] - 部門名 [ 例) Design ] - 市区町村名 [ 例) Kanazawa-shi ] - 都道府県名 [ 例) Ishikawa ]
コモンネームはSSL接続の際のURL(FQDN)になります。ここ注意ね。
・秘密鍵 (cert.key ※1)
-----BEGIN RSA PRIVATE KEY----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END RSA PRIVATE KEY-----
・CSR (cert.csr)
-----BEGIN CERTIFICATE REQUEST----- BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -----END CERTIFICATE REQUEST-----
の2つが表示されます。
cert.key, cert.csrとしてファイルに保存してください。
/etc/nginx/ssl に私は保存しました。
2.Rapid-SSLで登録支払い・メールの確認
https://www.rapid-ssl.jp/ssl/orderForm.php
のオーダーフォームより必要事項を入力。
CSRの貼り付けの項目では上記のcert.csrの内容を貼り付け。
ショッピングの感覚でクレジット決済まで進みます。
承認メールアドレスという項目は postmaster@yourhost.com などでメールを受け取る必要があります。こちらは怠らずおこなってください。
IDがメールで届き、メールが本当に届いているかの確認を行います。
https://www.rapid-ssl.jp/rapidssl-support/ssl-support.htm
でステータスの確認を行います。
メールに書かれているURLをクリックし
RapidSSLのサイトより認証作業を行います。
のような感じになります。
ステータス = 証明書発行完了
になるまでがんばってください。
3.メールの確認、暗号キーのメールの受取り
【通知】 SSL サーバ証明書発行完了のお知らせ
というメールが届くはずです。私はこのようなタイトルでした。
内容は
SSLサーバ証明書:
-----BEGIN CERTIFICATE----- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -----END CERTIFICATE-----
中間証明書:
-----BEGIN CERTIFICATE----- DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD -----END CERTIFICATE-----
の2つです。確認できればOKです。
4.サーバ証明書+中間証明書を合体 (・∀・)
nginxではメールで届いた2つの証明書:SSLサーバ証明書、中間証明書をひとつにまとめたファイルにします。
合体証明書 ( cert.pem ※2 )
-----BEGIN CERTIFICATE----- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD -----END CERTIFICATE-----
としてcert.pemを/etc/nginx/sslに保存。
ここすごく重要なので何度も読みなおすように。
5.ファイルの確認
cert.key ※1とcert.pem ※2がしっかりと手元にあるか確認してください。
cert.key ※1= Rapid-ssl登録時にWEBサイトで作成したものです(秘密鍵)。 cert.pem ※2= メールで送られてきた証明書を2つ合体させたものです(合体証明書)。
この2つがあればnginxのSSLサーバは動きます。
本記事では下記に保存したとして進めてあります。
/etc/nginx/ssl/cert.key /etc/nginx/ssl/cert.pem
6.サーバ設定
nginxのconfファイルを書き換えます。
server {
listen 443;
server_name yourdomain.com;
ssl on;
# 秘密鍵 (cert.key ※1)
ssl_certificate_key /etc/nginx/ssl/cert.key;
# 合体証明書 (cert.pem ※2)
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/ssl_yourdomain.com.log;
error_log /var/log/nginx/ssl_yourdomain.com.error.log;
root /var/www/yourdomain.com;
index index.php;
}
nginx -tコマンドなどを入力すると
# nginx -t Enter PEM pass phrase: 2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf syntax is ok 2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf was tested successfully
パスワード入力が求められます。Rapid-ssl登録時のものを入力しましょう。
エラーがなければあとは普通に再起動です。
その他:
symfony1.4をnginxでSSL化するときのnginx.confファイル例です
fastcgi_param HTTPS on は見落としがちですので注意してください。
server {
listen 443;
server_name yourdomain.com;
ssl on;
# 秘密鍵 (cert.key ※1)
ssl_certificate_key /etc/nginx/ssl/cert.key;
# 合体証明書 (cert.pem ※2)
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/ssl_yourdomain.com.log;
error_log /var/log/nginx/ssl_yourdomain.com.error.log;
root /var/www/yourdomain.com;
index index.php;
location / {
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param HTTPS on; # PHPで_SERVER[HTTPS]のため
fastcgi_param SCRIPT_FILENAME /var/www/yourdmain.com/web$script;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $script;
}
}
nginx起動時に求められるパスワードを自動化するには?:
# cp cert.key cert.key.org # openssl rsa -in cert.key.org -out cert.key
参考になる:
2012-02-14 オーストラリア旅行向け。インターネット環境確保について色々と調べ
オーストラリア旅行向け。インターネット環境確保について色々と調べてみた。Wifi modem simカードなど。
2003年にオーストラリアにいたのですがその時日本では殆どの家庭にADSL入っていたのですがオーストラリアの家庭ではあまり普及していなかったのを覚えています。しかも、オーストラリアのインターネットは未だにですが従量制なので日本の無制限の感覚に慣れていると自分がどのくらいの転送量を使っているのかわからないもので躊躇します。従量制?しかも一ヶ月500Gの転送量で10,000円程度。オーストラリアのインターネット環境は正直えっ?!ってなります。オーストラリアではEMobile, WiMaxなどのWiFi modemを使おうとなるとこの感覚を引きずってとなります。
Global dataのMiFiを借りたり海外ではSimフリーのEmobileの端末に現地のSimカードを差し込んで利用しようとか色々と方法があります。何がベストな方法なのかというのをまとめたいと思います。
1.iPad(Softbank)は海外ではSimフリー
https://www.optus.com.au/shop/broadband/mobile/ipadplans
http://d.hatena.ne.jp/mekong23/20100529
とのことです。30Aドルで4Gの転送まで。ただし、Facebook, Twitter, LinkedIn, Myspace, eBay, Foursquareの転送量は無制限。Googleのサービスも無制限に入れて欲しいよね。Gmailとかも。
2.EMobile端末(国外ではSimフリー)で現地のSimカードを利用
・Telstra
GSM:900/1800MHz 3G:UMTS850/2100MHz, CDMA2000
・Optus
GSM:900/1800MHz 3G:UMTS2100/900MHz
・vodafone AU (オーストラリア略のAUです日本のauではありません)
GSM:900/1800Mhz 3G:UMTS2100MHz
・3(three)
GSM:900/1800Mhz 3G:UMTS2100MHz
というキャリアがあります
Optus 3Gカバーエリア
http://www.optus.com.au/aboutoptus/About+Optus/Network+Coverage
Telstraカバーエリア
http://www.telstra.com.au/mobile-phones/coverage-networks/our-coverage/mobile-broadband/
Telstraは大手でやはりカバー範囲は広いです。OptusはSimカードなど融通の聞くサービスが多いように私は思いました。Telstraは有線は相当強いという位置づけなのかもしれないですね。というわけでOptus Simを選ぶことに。
- Optusプラン1.30日有効転送量3GBまで
- Optusプラン2.12ヶ月契約で19Aドル/Month(特定のサービスに対しては転送量無制限)
Facebook, Twitter, LinkedIn, Myspace, eBay and Foursquare.は無制限。Googleは?
https://www.optus.com.au/shop/mobilephones
でも12ヶ月も滞在しませんよね。
いずれもFacebook, Twitter, LinkedIn, Myspace, eBay, Foursquareの転送量は無制限。
転送量制限付き(3GBまで)でだいたい30ドル。結構高いですね。
3.旅行代理店H.I.S.のWiFi modemレンタル
調べれば調べるほどわかります。H.I.S.のWiFi modemがいかに企業努力しているかがわかります。
http://activities.his-vacation.com/jp/jp/TourList/Default.aspx?ARCD=O6&NTCD=AUS&KYWD=Wi-Fi
33Aドル/weekで転送量無制限で利用ができるとされています。実際使ってみてからレポします。
H.I.S.のWiFi modemのモデルはこちら
http://www.cnet.com.au/optus-mini-wifi-modem-339308582.htm
ほとんどHuawei E583Cのようです
http://www.amazon.co.jp/dp/B004ED6CRY
ちなみに返却はどの都市のH.I.S.でも良いみたいです。本当に良いサービスです。
というわけで一週間程度の滞在の私は何を利用するかは決まりました。
長期滞在になるとまた事情が変わってきます。Optus回線よりもTelstra回線を引くのが良いのかもしれない。WiFi modemも持つのであればOptus simを使ったほうが良いみたいです。
2012-01-23 Symfony2チュートリアル CRUDアプリを作る
Symfony2チュートリアル CRUDアプリを作る
Symfony2でひとまず動かすためのチュートリアルです。
crudコマンドを使って簡単なCRUDを実装します。
http://yourhost/app_dev.php/post/
にチュートリアル用のアプリケーションを作ることを前提にします。
バンドル・エンティティを作成
TutorialHelloバンドルを作成し、Postというエンティティを追加します。
$ php app/console generate:bundle --namespace=Tutorial/HelloBundle $ php app/console doctrine:generate:entity --entity=TutorialHelloBundle:Post --format=yml
Postエンティティの編集
doctrine:generate:entity --entity=TutorialHelloBundle:Post --format=yml
では2つのファイルが作成されます。
src/Tutorial/HelloBundle/Entity/Post.php
src/Tutorial/HelloBundle/Resources/config/doctrine/Post.orm.yml
一つはPostモデル、Post.orm.ymlはDoctrineORマッパー用(今回はアノテーションを利用しません)。
Post.orm.ymlを編集し、 app/console doctrine:generate:entitiesを実行
することでモデルを生成します。
Post.orm.ymlにnameとsubject, descriptionのカラムを準備します。
$ vim src/TutorialHelloBundle/Resources/config/doctrine/Post.orm.yml
Tutorial\HelloBundle\Entity\Post:
type: entity
table: null
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
name:
type: string
notnull: true
subject:
type: string
notnull: true
description:
type: text
notnull: true
lifecycleCallbacks: { }
ORM.YMLからモデル生成しテーブルをupdate
編集したPost.orm.ymlからPost.phpモデルを作成し、doctrine:schema:updateで
テーブルと同期させます。テーブルが存在しない場合は doctrine:schema:create
doctrine:generate:entitiesでバックアップを作成したくない場合は
- no-backupオプションをつけます。バックアップを作成します。
Post.php~ というファイルが自動的に作成されます。
$ php app/console doctrine:generate:entities TutorialHelloBundle $ php app/console doctrine:schema:update --force
PostクラスのCRUDを作成
doctrine:generate:crudでCRUDを作成します。--entityオプションは必ず必要です。
また、--with-writeをつけないと表示のみ(show)となります。
CRUDには--with-writeが必要です。
$ php app/console doctrine:generate:crud --entity=TutorialHelloBundle:Post --with-write
routingの編集
CRUDのファイルが生成されたらroutingしてあげましょう。
app_dev.phpから/postからアクセスするように設定します。
app/config/routing_dev.yml を編集します。
$vim app/config/routing_dev.yml
# app/config/routing_dev.yml
_post:
resource: "@TutorialHelloBundle/Controller/PostController.php"
type: annotation
prefix: /post
これで
http://yourhost/app_dev.php/post
にアクセスできるようになると思います。
Symfony2でも思った以上に簡単にCRUDアプリケーションが出来上がります。
Symfony2のapp/console エンティティ周り
// データベース作成・削除 php app/console doctrine:database:drop --force php app/console doctrine:database:create // バンドルの作成 php app/console generate:bundle --namespace="My/ProjectBundle" --format=yml // エンティティの作成 --fieldsオプションも付けられます php app/console doctrine:generate:entity --entity=MyProjectBundle:Post --format=yml // yml Entityからモデルを作成 --no-backupでバックアップを作成しない php app/console doctrine:generate:entities "MyProjectBundle" --no-backup // エンティティからテーブルの作成・更新 php app/console doctrine:schema:create php app/console doctrine:schema:update --force
ymlエンティティ作成に関してfieldsの詳細は
http://symfony.com/doc/2.0/reference/forms/types.html
relationsなどに関して
2012-01-22 Symfony2の簡単チュートリアル(環境整備込み)
Symfony2の簡単チュートリアル(環境整備込み)
まだまだ現役のSymfony1.4.6ですがそろそろサポートも終わり、Symfony2が一般的になる日も近いような気がしてきているこのごろです。Symfony2はSymfony1.4.6と互換性がないといっていいでしょう。1.4.6で利用しているデータベースをSymfony2でモデルと生成して利用するというのが今後の流れになるでしょう。早めにSymfony2に触れておきましょう。
色々とチュートリアルがあるけれども意外と動かなかったり。とりあえずここで書いてあるものは私の環境ではしっかりと動作させたもののみ掲載しています。Debian6.0.3 さくらVPSの上でVPN経由で動かしました。
Symfony2の環境整備
symfony2はPHP5.3.xで動作します。Debian6 SqueezeではPHP5.3が入ります。
Debian5 Lenny等の場合は
http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html
などを参考になりますが、Squeezeでのmysqlのバージョンアップで多くが何故かトラブります。
Squeezeではnginxのバージョンも上がりますのでSqueezeへのバージョンアップをお勧めします。
http://d.hatena.ne.jp/Kmusiclife/20120118/1326871846
nginxでsymfony2を動作させます。今のところ下記の設定で動作しています。
app.phpやapp_dev.phpのコントロールもこの辺でできます。
location / {
root /path/symfony2/web;
index index.html index.htm index.php;
}
location ~ \.php|\.html$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}
location ~ \.cgi$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8999;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}
なお、nginxなどの細かい設定は
http://d.hatena.ne.jp/Kmusiclife/searchdiary?word=%2A%5Bnginx%5D
を参考にしてください。
その他、gitなど必要となるソフトも幾つかありますのでその都度確認してください。
Symfony2の簡単チュートリアル
$ wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.0.9.tgz -O Symfony_Standard_Vendors_2.0.9.tgz $ tar zxvf Symfony_Standard_Vendors_2.0.9.tgz $ mv Symfony symfony2 $ cd symfony2
download完了です
$ php app/check.php # 問題がなければ次へ $ php bin/vendors install # vendorの場合は --reinstall を追加
$ vim web/app_dev.php
/* コメントアウトします
if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
'127.0.0.1',
'::1',
))) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
*/
ブラウザよりアクセスします。
にアクセスします。
Whoops, looks like something went wrong.
などのエラーが出た場合はcacheのパーミッションに問題があることが多いです。
$ chmod -R 777 app/cache app/logs
でcacheのパーミッションを与えます。
welcomeのページが表示されればOKです。
http://hostname/app_dev.php/_configurator
よりデータベースなどの基本設定を行います。
おそらく書き込みエラーが出るので
$ chmod -R 777 app/config/parameters.ini
再度更新してリクエストを送り直せば更新されます。
Doctrine(model)を作成します。
$ php app/console doctrine:generate:entity --entity=AcmeDemoBundle:Product --fields="name:string(255) price:float description:text" --format=yml
を行うことによって
src/Acme/DemoBundle/Entity/Product.php src/Acme/DemoBundle/Resources/config/doctrine/Product.orm.yml
の2つのファイルが作られます。 doctrine:generate:entityで--format=ymlを付けないとProduct.orm.ymlファイルが作成されませんので注意です。
$ php app/console doctrine:database:create $ php app/console doctrine:schema:update --force
でデータベースにテーブルを作りモデルと同期させます。
// src/Acme/DemoBundle/Controller/DemoController.phpなどで
use Acme\DemoBundle\Entity\Product;
public function indexAction()
{
$product = new Product();
$product->setName('Foo bar');
$product->setPrice(100.00);
$product->setDescription('This is test description.');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
echo $product->getId();
}
とテストコードが動けば問題ないでしょう。
http://hostname/app_dev.php/demo/
などでアクセスできると思います(環境によって異なります)。
この辺のはなしは
http://docs.symfony.gr.jp/symfony2/book/doctrine.html
にもあります。ただ、私はこのチュートリアルではしっかりと動作しませんでした。
2012-01-18 Debian6でnginx1.xをaptから入れる
Debian6でnginx1.xをaptから入れる
/etc/nginx/nginx.confをバックアップしておいたほうが良いです。
私は下記作業で上書きされ多少書き直しました。
GPG署名を入れる
# wget http://nginx.org/packages/keys/nginx_signing.key # cat nginx_signing.key | apt-key add -
/etc/apt/sources.list を追加
deb http://nginx.org/packages/debian/ squeeze nginx deb-src http://nginx.org/packages/debian/ squeeze nginx
apt-getでインストール
#apt-get update # apt-get install nginx
バージョンをチェックします
# nginx -v nginx version: nginx/1.0.11


















