2013年5月1日水曜日

Ubuntu12.04 + Nginx で、画像のリサイズを行う。

Nginx の HttpImageFilterModule で、サムネイル画像を作ってみます。

元の画像

http://3.bp.blogspot.com/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG

1.インストール


# apt-get install nginx

バージョンとモジュールの確認

# nginx -V

イメージフィルターのモジュールが入っています。すばらしい。
--with-http_image_filter_module

2.設定


キャッシュを使えるようにしておきます。

# mkdir /var/nginx
# cd /var/nginx
# mkdir cache
# mkdir temp

File: /etc/nginx/nginx.conf
--
http {
 proxy_cache_path /var/nginx/cache levels=1 keys_zone=cache1:15m max_size=50m inactive=7d;
 proxy_temp_path /var/nginx/temp;
--

levels    サブディレクトリ階層
keys_zone ゾーン名:メモリサイズ
max_size  ファイルサイズ(最大値)
inactive  キャッシュを保持する時間

File: /etc/nginx/sites-available/default
--
server {
 listen 80;
 server_name www.example.com;
 resolver 8.8.8.8;
 location /img/ {
  image_filter crop 100 100;
  proxy_cache cache1;
  proxy_cache_valid 200 1d;
  proxy_pass http://3.bp.blogspot.com/;
 }
--

resolver で、名前解決できるようにしておきます。
image_filter で、100x100 に変換し、proxy_cache で、キャッシュします。
proxy_pass で、元画像のURLを指定しています。

3.起動/停止


# /etc/init.d/nginx stop … 停止
# /etc/init.d/nginx start … 起動

4.動作確認


ブラウザから

http://www.example.com/img/-qn0m7KScp4A/TsTyX4cO5FI/AAAAAAAAANA/ooqc_7cGnis/s1600/NEC_0025.JPG

にアクセスすると、サムネイル画像を表示します。

参考


2013年4月21日日曜日

Ubuntu IMAPサーバ構築 (Dovecot)

webmail(squirrelmail) を使いたいので、IMAPサーバをインストールします。

1.インストール


Dovecot本体と、IMAPデーモン、POP3デーモンの 3つを入れておきます。
(POP3は、必要に応じて。)

# apt-get install dovecot-common dovecot-imapd dovecot-pop3d

2.設定


ローカルホストのデフォルトポート(143)をリッスンします。

File: /etc/dovecot/dovecot.conf
--
listen = localhost
--

ユーザのホームディレクトリに Maildir形式で保管されたメールを読み込みます。

File: /etc/dovecot/conf.d/10-mail.conf
--
mail_location = maildir:~/Maildir
--

3.起動/停止


# /etc/init.d/dovecot stop … 停止
# /etc/init.d/dovecot start … 起動

4.ファイヤーウォール


外部から接続する場合は、UFW で、POP(110)と、IMAP(143)のポートを開きます。
(webmailだけなら、不要です。)

# ufw allow 110
# ufw allow 143

5.おまけ


セットアップスクリプトです。
--
apt-get install dovecot-common dovecot-imapd dovecot-pop3d
sed -i".bak" -e 's/^#listen.*/listen = localhost/g' /etc/dovecot/dovecot.conf
sed -i".bak" -e 's/^#mail_location.*/mail_location = maildir:~\/Maildir/g' /etc/dovecot/conf.d/10-mail.conf
#ufw allow 110
#ufw allow 143
--

2013年4月17日水曜日

Ubuntu メールサーバ構築 (Exim4)

素のUbuntuは、メールを使えません。
とりあえず、使えるようにしておきましょう。

1.インストール

メールサーバ(smtpd)は、Exim4 を。
スパムメール対策として、spamassassin を入れておきます。

# apt-get install exim4 sa-exim spamassassin

2.Exim4 設定

OS インストール時に、ホスト/ドメインを設定していれば、その他の設定はラクラク。

File: /etc/exim4/update-exim4.conf.conf
--
dc_eximconfig_configtype='internet' … 送受信共に開放(ちょと危険 ^^;;)
dc_other_hostnames='<ホスト名 ex: example.com>'
dc_local_interfaces='' … 入力側のアドレス = 全て
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets='' … 間違っても、リレーは行わないこと。
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home' … Maildir形式を指定
--

対話形式でも設定できます。

# dpkg-reconfigure exim4-config

3.Exim4 起動/停止

# /etc/init.d/exim4 stop … 停止
# /etc/init.d/exim4 start … 起動

4.環境変数(MAIL)設定

mail コマンドで、Maildir を読めるように。

# echo "export MAIL=\$HOME/Maildir" >> /etc/profile

5.spamassassin

お忘れなく。

File: /etc/default/spamassassin
--
ENABLED=1
--

6.ファイアーウォール

# ufw allow 25

7.おまけ

セットアップスクリプトです。
--
apt-get install exim4 sa-exim spamassassin
sed -i".bak" -e "s/dc_eximconfig_configtype.*/dc_eximconfig_configtype='internet'/g" /etc/exim4/update-exim4.conf.conf
sed -i -e "s/dc_local_interfaces.*/dc_local_interfaces=''/g" /etc/exim4/update-exim4.conf.conf
sed -i -e "s/dc_localdelivery.*/dc_localdelivery='maildir_home'/g" /etc/exim4/update-exim4.conf.conf
echo "export MAIL=\$HOME/Maildir" >> /etc/profile
sed -i".bak" -e 's/ENABLED=0/ENABLED=1/g' /etc/default/spamassassin
ufw allow 25
--

こちらも参考に。
https://help.ubuntu.com/12.04/serverguide/exim4.html

2013年4月14日日曜日

Pythonで、Yahoo商品検索APIから gzipで結果を取得する。

WEB高速化とやらが、ブームのようです。
確かに、早いことは良いことだ。

ふと、Yahoo商品検索APIから gzipで結果を取得できないかと、調べてみた。

どうやら、リクエストの時、Accept-encoding に gzip を指定すれば良いみたい。

こんな感じ。

-- ここから --
import urllib, urllib2, gzip, StringIO, json

url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?"
query = {
 'appid'     : <アプリケーションID>,
 'affiliate_type' : 'yid',
 'query'     : "sony vaio"
}
url = url + urllib.urlencode(query)
req = urllib2.Request(url)
req.add_header('Accept-encoding', 'gzip')
res = urllib2.urlopen(req)
res_data = res.read()
sf = StringIO.StringIO(res_data)
f = gzip.GzipFile(fileobj=sf).read()
json_data = json.loads(f)
-- ここまで --

req.add_header で、gzip を指定しているのが、ポイントです。

print res.headers で、確認してみます。

こんな感じ。
Date: Sun, 14 Apr 2013 06:20:01 GMT
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Cache-Control: private
Connection: close
Transfer-Encoding: chunked

ちなみに、gzip を指定しないと..
Date: Sun, 14 Apr 2013 06:19:19 GMT
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Cache-Control: private
Connection: close
Transfer-Encoding: chunked

ついでに、JSON を確認しておきましょう。
print json.dumps(json_data, sort_keys=True, indent=4)

とは言っても、元々、Yahooから取得するJSONデータは大きくないので、どれほど高速化に貢献できるのか、疑問ですけどね..(^^;;

2013年4月7日日曜日

Ubuntu サーバの時刻を自動的に合わせる

時刻を合わせる方法はイロイロあるようだけど、これが一番シンプルで良さげ。
https://help.ubuntu.com/8.04/serverguide/NTP.html

# echo "ntpdate ntp.ubuntu.com" > /etc/cron.daily/ntpdate
# chmod 755 /etc/cron.daily/ntpdate

cron で、一日一回 ntpdate を起動しているだけ。簡単です。

2013年3月9日土曜日

ABLENET の VPS(KVM) を試してみた。

ServersMan@VPS は、仮想化基盤が OpenVZ なので、Ubuntu 10.04 から 12.04 へのアップグレードができないとか、ufw(ファイアーウオール)が使えないとか、イロイロ苦労した。
今度は、KVM かな?? と探してみると、お手頃なのをみつけた。

それは、ABLENET VPS です。
1CPU,512MB,50GB で 480円/月と、ServersMan@VPS と同程度の価格。

標準OS は、CentOS だけど、Ubuntu や FreeBSD なども選択できます。

とりあえず、Ubuntu(12.04) とか、Debian とか、インストールしてみたけど、コントロールパネルが使いやすくて、ナカナカ良いです。

コントロールパネルからVNCコンソールを使うには、JAVA が必要なので、こちらを参考にして、パソコン(Xubuntu12.04)に、JAVA をインストールしました。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

これから、あれこれ試してみようと思います。

2013年3月2日土曜日

GAE/P + Django1.4 で、セッションを使う

GAE(Google App Engine)/P + Django1.4 で、セッションを使う方法です。
バックエンドに、キャッシュを使ってます。

プロジェクトの雛形は、こちらを参考にしましたが、Django1.4 では、CACHE_BACKEND = 'memcached:///' は使えません..

1.ディレクトリー構成

Django1.4標準のディレクトリ構成とは若干異なりますが、あまり気にしなくても良いかと。

/app
 app.yaml
 main.py
 favicon.ico
 /project
  __init.py__
  settings.py
  urls.py
  views.py
  /templates
   index.html

2.app.yaml

Python2.7 + Django1.4 を使います。

-- app.yaml --
application: <アプリケーション名>
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
 static_files: favicon.ico
 upload: favicon\.ico

- url: .*
 script: main.app

libraries:
- name: django
 version: "1.4"

3.main.py

sysモジュール'memcache'を、google.appengine.api.memcacheにエイリアスしています。

-- main.py --
import os, sys
import django.core.handlers.wsgi
from google.appengine.api import memcache

sys.modules['memcache'] = memcache
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
app = django.core.handlers.wsgi.WSGIHandler()

4.settings.py

MIDDLEWARE_CLASSES に、SessionMiddleware を追加。
SESSION_ENGINE には、キャッシュを使います。
CACHES の BACKEND に、memcached を使います。

-- settings.py --
import os

DEBUG = True

TIME_ZONE = 'Asia/Tokyo'
USE_TZ = False

LANGUAGE_CODE = 'ja-jp'

MIDDLEWARE_CLASSES = (
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
)

INSTALLED_APPS = (
 'django.contrib.humanize',
 'project'
)

ROOT_URLCONF = 'project.urls'

ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
 ROOT_PATH + '/templates',
)

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
 }
}

5.views.py

セッションデータの書き込み
request.session['<キー名>'] = '<データ>'

セッションデータの読み出し
xxx = request.session['<キー名>']

6.参考

セッションの使い方
http://docs.djangoproject.jp/ja/latest/topics/http/sessions.html
キャッシュフレームワーク
http://docs.djangoproject.jp/ja/latest/topics/cache.html#topics-cache