現在、使用しているWebサーバをCoreServerからさくらのVPSへ変更する為に細々と作業をやっているのですが、メールサーバの管理は面倒かつ踏み台の危険性等を考慮するとあまり自分で管理したくありません。
そこで年間1000円のメールボックスサービスであるさくらのメールボックスを使用することにしました。
Tag Archives: サーバ
gitにpushしたwebサイトを自動的に同期させる
earthquake_jpに関連して作業したので備考録としてメモ。
前提
gitのリモートリポジトリとHTTPサーバが同一のサーバに存在している状態です。
別サーバで行う場合はgit cloneを行う際にパス無し秘密鍵でcloneして
おかないと上手く動作しないと思われます。
処理の流れ
開発者 → コミット → プッシュ → post-receive → Web API → git pull
失敗
- 最初はpost-receiveでpullを発行しようとしたが、HTTPサーバとgitosisの権限が異なる。
- sudoを発行してみたが、エラーが発生して処理が行えない。
結果
- post-receiveはWeb APIへとアクセスする。
- Web APIはHTTPサーバの権限で動作する。
- Web APIではシェルスクリプトを実行する。
- HTTPサーバの権限でpullが行われる。
例
リポジトリ.git/hooks/post-receive
#!/bin/sh wget -q -O - http://APIのURL
API(update.php)
<?php
$cmd = dirname(__FILE__) . '/update.sh';
$res = system($cmd);
if (false === $res) {
echo "NGn";
} else {
echo "OK:{$res}n";
}
シェルスクリプト(update.sh)
#!/bin/sh cd /var/www/html/ /usr/bin/git --git-dir=/var/www/html/.git pull
post-receive、update.shは実行権限を付加するのを忘れずに。update.phpはweb上から実行可能であれば問題ない。
念の為、127.0.0.1か自身のグローバルIPでのみアクセス可能にしている。
AsakusaSatelliteをPassengerで動かしてみる。
AsakusaSatelliteをまだ個人的な試用中ですが、期待ageしつつ実験してみました。
AsakusaSatellite は、開発者向けのリアルタイムチャットアプリケーションです。開発者間のコミュニケーション品質を向上し、ソフトウェア開発にリズムをもたらします
AsakusaSatelliteのページを参考にしつつ、Passengerで動くように設定していきます。
Passenger自体はredmine用に入れていたのを利用したので下記資料には書いていません。
また、筆者はruby環境についてはあまり詳しくないので、その辺を考慮に入れておいてください。
$ cd /vaw/www
$ git clone git://github.com/codefirst/AsakusaSatellite.git
$ cd AsakusaSatellite
$ cp config/filter.yml.example config/filter.yml
$ cp config/websocket.yml.example config/websocket.yml
$ cp config/settings.yml.example config/settings.yml
$ vi config/filter.yml
1 - name: auto_link
2 - name: redmine_ticket_link
3 roots:
4 project:
5 - name: twitter_link
6 - name: code_highlight_filter
$ vi config/websocket.yml
1 roots: 0.0.0.0/satellite # AsakusaSatelliteのPassengerでマッピングするURL
2 websocketPort: 18081
3 httpPort: 18080
4 use_rails_ssl: false
$ bundle install --path vendor/bundle
$ rake groonga:migrate RAILS_ENV=production
$ sudo chown -R apache:apache AsakusaSatellite
$ sudo vi /etc/httpd/conf/httpd.conf
# ServerName_
DocumentRoot /var/www/html
RailsBaseURI /redmine
RailsBaseURI /satellite
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
AllowOverride all
Options -MultiViews
$ ln -s /var/www/AsakusaSatellite/public/ /var/www/html/satellite
$ sudo service httpd restart
$ ruby websocket/server.rb &
各リソースをgz圧縮して転送量を抑える
ライブラリに関してはCDNのキャッシュを使う事も出来ますが、自作のライブラリやCSS等のリソースはCDNには登録されていないので
ファイルの転送サイズが膨れがちです。
そこで対応ブラウザの場合はリソースファイルをgz圧縮して転送するように設定する方法を備考録として書いておきます。
参考サイト
- 亜細亜ノ蛾 – Weblog – prototype.jsをgzip圧縮して利用するテスト(Safari 対応版)
- Schuzak’s Blog – Webサイトの.htaccessをいじってGZIP圧縮を使う
- C/pHeR Memo – Java とか。Eclipse とか。 – [Web]サイト高速化のための JavaScript と CSS 圧縮スクリプト
前提
転送数を減らす為にCSSとかJavaScriptとかで1ファイルにまとめられるものはまとめておく。
それに加えて圧縮をかける事により転送するデータ量を減らします。
また、gz圧縮できるアーカイバが必要。
ファイルの圧縮
まずは対象のファイルをgz圧縮します。
gz圧縮は1ファイルしか圧縮できない形式なので、まず、CSSやJavaScriptファイルを1つにまとめておきます。
別にまとめなくともこの手法は有効ですが、転送数が多いままになってしまうことと、読み込み方法によってはシリアルで読み込んでしまうのでまとめておく方が早いです。
まとめたファイルをgz圧縮します。自分の場合、windowsではExplzh、mac/linuxの場合はgzip -c [ファイル名] > [ファイル名].gzを使用しています。
.htaccessの作成
gzファイルが存在する場合はgzファイルを読み込むように設定をします。
最近は使えるサーバが多くなっていますが、mod_rewriteがサーバに入っていないと使えません。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME} !.gz$
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule .+ %{REQUEST_URI}.gz
<FilesMatch ".html.gz$">
ForceType text/html
AddEncoding x-gzip .gz
</FilesMatch>
<FilesMatch ".txt.gz$">
ForceType text/plain
AddEncoding x-gzip .gz
</FilesMatch>
<FilesMatch ".js.gz$">
ForceType application/x-javascript
AddEncoding x-gzip .gz
</FilesMatch>
<FilesMatch ".css.gz$">
ForceType text/css
AddEncoding x-gzip .gz
</FilesMatch>
</IfModule>
まず、mod_rewriteでgzファイルが存在する場合にはアクセスされたファイル名.gzを読み込むように切り替えています。
そして、FileMatchでファイル毎にMIME-TYPEとgzエンコードを指定しています。
これによってgz圧縮ファイルに対応しているブラウザの場合はgzファイルを読み込めるようになります。
更に高速化
これだけでファイルのサイズが下がりますが、キャッシュで持たせるようにしておきます。
これも.htaccessに記述する事によって利用可能です。
ExpiresActive on
ExpiresDefault "access plus 1 month"
FileETag None