2013年9月23日月曜日

GAE/Djanigo で、メールとキャッシュを使う

Django には、メール送信や、キャッシュを使う仕組みがありますが、GAE(GoogleAppEngine)で、これを使うには、どうすれば良いのだろう??

GAE のサービスに、メールとキャッシュのAPIはあるので、このAPIを直接使うしかないのか??

と、調べてみると、良いものを見つけました。

django-gae-backends


1.使い方

1-1.プログラムの配置

ダウンロードして、ここに置きました。

mysite/
├mysite/
│ └settings.py
└gae_backends/
 ├__init.py__
 ├mail.py
 └memcache.py

1-2.設定

settings.py に、以下を追加。

-- settings.py --

EMAIL_BACKEND = 'gae_backends.mail.EmailBackend'
SERVER_EMAIL = '<Gmailのメールアドレス>'

ADMINS = (
 ('<管理者の名前>', '<管理者のメールアドレス>'),
)

CACHES = {
 'default': {
  'BACKEND': 'gae_backends.memcache.MemcacheCache',
 }
}

MIDDLEWARE_CLASSES = (
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',
)

LOGGING = {
 デフォルトのままでOK

--

1-3.メール送信

エラーが発生すると、管理者宛にメールが送信されます。

プログラム内で使う場合は、マニュアルを読んで下さい。

1-4.キャッシュ

UpdateCacheMiddleware と FetchFromCacheMiddleware によって、サイト単位のキャッシュが有効になっています。

2013年6月2日日曜日

引越しに合わせて、家電のリプレース

価格コムを参考にしながら、ヤマダ電機で購入。
http://www.yamada-denki.jp/store/contents/shop_193.html

冷蔵庫 NRF607T : 190,000円
パナソニックの一番デカい奴。とても使いやすそう。
http://kakaku.com/item/K0000442444/

エアコン RASM28C(W)工事セット付 : 101,800円
しろくま君のステンレス。長く使えそう。
http://kakaku.com/item/K0000487756/

洗濯機 BW10PV : 75,100円
日立の10kg。一番大きい奴。
http://kakaku.com/item/K0000468226/

炊飯器 RZ-SW1000K : 33,000円
サーモスとのコラボモデル。
http://kakaku.com/item/K0000394831/

掃除機 CVPW300 : 30,000円
今更だけど、紙パック式。
http://kakaku.com/item/K0000397053/

電子レンジ MROLS8  : 24,000円
レンジは、昔に比べて本当に安くなりましたねぇ。ビックリ。
http://kakaku.com/item/K0000369817/

LED照明 HLDCA0611 : 9,550円
やっぱ、照明は「ホタルック」でしょう。
http://kakaku.com/item/K0000414279/

ドアホン VLSVD300KL : 18,280円
ピンポンだけでは、やはり不便なので。
http://kakaku.com/item/K0000330712/

空気清浄機 KC500Y5 : 24,800円
シャープ、プラズマクラスターのヤマダ電機モデル。
最近、花粉症がひどいので、期待してます。

扇風機 TKF3031RP : 4,280円
デザインがかわいくて、良い感じ。

ネットと比べて格段に安いと云うことはないけど、ポイントが付いたり、10年保証が付いたりと、それなりのメリットはあるかな。

2013年5月1日水曜日

Nginx + uWSGI で、Django を起動する。

タイトルそのままですが、一応動いたので、忘れる前にメモ。

OS は、Ubuntu12.04 です。

1.インストール


# apt-get install nginx
# pip install Django==1.4 uwsgi

2.設定


まず、Nginx 側。
location / へのアクセスを、uwsgi_pass で、127.0.0.1:4000 に飛ばしています。
ポートは、4000以外でも良いです。

File: /etc/nginx/sites-available/default
--
location / {
 uwsgi_pass 127.0.0.1:4000;
 include uwsgi_params;
}
--

次は、uWSGI。
/etc/init にconf ファイルを置くことで、自動的にuWSGIを起動します。
ポート4000で待ち受けて、uWSGI を起動(exec)します。
起動パラメータ:
 --chdir /home/<ユーザ名>/mysite … Django プロジェクトのディレクトリに移動
 --wsgi-file mysite/wsgi.py … プロジェクト内の wsgi.py を指定

File: /etc/init/uwsgi.conf
--
# simple uWSGI script
description "uwsgi tiny instance"
start on socket PROTO=inet PORT=4000
stop on runlevel [06]
exec uwsgi --master --processes 2 --die-on-term --chdir /home/akira/mysite --wsgi-file mysite/wsgi.py

3.Django プロジェクトの作成


ユーザのホームディレクトリに作ります。

# cd
# django-admin.py startproject mysite

/home/<ユーザ名>/mysite/mysite/wsgi.py の出来上がりです。

ここで、一旦、リブートしておきます。

4.動作確認


ブラウザからアクセスして、Django の画面が出ることを確認しましょう。

参考




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

2013年2月3日日曜日

Django "sites"フレームワーク を使う

Django のマニュアルによると、1つのインスタンスで複数のサイトを運営できるようなことが書いてある。
http://docs.djangoproject.jp/en/latest/ref/contrib/sites.html#ref-contrib-sites

でも、そもそも、複数のサイトを切り替える手順が、どこにも書いてないんだよね??
ググっても、日本語の情報は無し。

英語のサイトを眺めながら、なんとなく、使えそうな方法を見つけた。

以下は、その手順

1.ミドルウェアの追加

settings.py の MIDDLEWARE_CLASSES に、ミドルウェア(後述)を追加

-- settings.py --
MIDDLEWARE_CLASSES = (
 'mysite.middle.MultiSiteMiddleware',

補足
mysite : プロジェクトのフォルダ名
middle : ファイル名(meddle.py)
MultiSiteMiddleware : クラス名

2.ミドルウェアを書く

アクセスされたドメイン名に対応するサイトID を設定します。

-- mysite.middle.py --
from django.conf import settings
from django.contrib.sites.models import Site
class MultiSiteMiddleware:  
 def process_request(self, request):
  host = request.get_host()
  try:
   site = Site.objects.get(domain=host)
  except Site.DoesNotExist:
   site = Site(domain=host, name=host)
   site.save()
  settings.SITE_ID = site.id

概要
・request.get_host() で、外部からアクセスされたドメイン名(host)を取り出し
・site オブジェクトを get (または、save)
・サイトID(site.id) を、SITE_ID にセット

ミドルウェアが、どのように動作するかは、こちらを参考に。
http://docs.djangoproject.jp/en/latest/topics/http/middleware.html

3.SITE_ID を使う

SITE_ID を get できれば、後は、ドキュメント通りにイロイロ応用できます。


-- views.py --
from django.conf import settings
from django.contrib.sites.models import Site
sid = settings.SITE_ID
site = Site.objects.get(id=sid)
# site.id, site.domain, site.name

余談ですが..
"sites"フレームワーク を使えば、ドメイン毎に、Apache の バーチャルホストを設定する必要はありません。


2013/02/17 追記

settings.SITE_ID = site.id では、SITE_ID をキチンとセットできないみたい。

さらに、ググってみると、こちらを見つけた。

http://djangosnippets.org/snippets/1099/

1.設定ファイル

-- settings.py --
from site_id_hook import SiteIDHook, SITE_THREAD_INFO
SITE_ID = SiteIDHook()

MIDDLEWARE_CLASSES = (
 'mysite.site_middleware.SiteOnFlyDetectionMiddleware',
 …
)

※ site_middleware は、MIDDLEWARE_CLASSES の先頭に記述します。

2.SITE_ID 取得

-- site_id_hook.py --
from threading import local
SITE_THREAD_INFO = local()
class SiteIDHook:
 def __int__(self):      
  return SITE_THREAD_INFO.SITE_ID
 def __hash__(self):      
  return SITE_THREAD_INFO.SITE_ID

3.ミドルウェア

-- site_middleware.py --
from django.conf import settings
from django.contrib.sites.models import Site
class SiteOnFlyDetectionMiddleware:  
 def process_request(self, request):
  host = request.get_host()
  try:
   site = Site.objects.get(domain=host)
  except Site.DoesNotExist:
   site = Site(domain=host, name=host)
   site.save()
  settings.SITE_THREAD_INFO.SITE_ID = site.id

今渡こそ、大丈夫かな??

Django1.4 で intcommaが効かない

intcomma とは、整数を三桁ごとにカンマで区切った形式の文字列に変換してくれる、賢い奴です。

使い方は、

1.settings.py

INSTALLED_APPS 設定に 'django.contrib.humanize' を追加

2.テンプレート

テンプレートの冒頭に {% load humanize %} を追加

3.テンプレートタグ

{{ <変数(整数)>|intcomma }} と書く


ドキュメントを読んでも、1.3 との違いは書かれて無いので、しばし悩んだ。
http://docs.djangoproject.jp/en/latest/ref/contrib/humanize.html

このような書き込みを見つけて、無事解決。
> Django 1.4になってからintcommaが効かないと思ったら、1.4からintcommaがL10Nを気にするようになってた。ロケールjaではNUMBER_GROUPINGが設定されていないので、明示的にNUMBER_GROUPING=3としてやらないといけない様子

settings.py に一行追加。

NUMBER_GROUPING=3

2013年2月2日土曜日

イオンSIM から ServersMan SIM 3G 100 に乗り換え

ServersMan@VPS を使い始めたので、ついでに、モバイル回線も引っ越した。
イオンSIM が 980円/月 なのに対して、ServersMan SIM 3G 100 は 490円/月と半額に。
ServersMan@VPS(490円/月)と合わせて、ちょうど同額なんだから、笑っちゃうよね。

速度は、ほとんど変わらないかな??
150kbps くらい出る時もあるので、イオンSIM より早いかも??

VoIP の無料通話アプリは使って無いけど、そろそろ Line でも入れておこうかと思案中。
イオンSIM は、あちこちのサイトで「VoIP は無理」と書かれていたので、はなから諦めていたんだけどね。

これで、また、LTE から遠のいてしまった.. (^^;;

2013年1月27日日曜日

ServersMan@VPS サーバ構築 (Django版)

ServersMan@VPS Entryプランでサーバを構築して、Djangoを使うまでのアレコレをスクリプトに纏めたので、公開しておきます。

apt-get でインストールできないパッケージがイロイロあるので、ソースからビルドしたり..
結構、面倒でした。

1.環境

OS : Ubuntu10.04 (32bit)

2.概要

主な流れは、次の通り。

  • Serversman を削除
  • iptables で、ファイヤーウォール設定
  • apt-get で mosh denyhosts mysql-server などをインストール
  • Python2.7
  • pip
  • Django MySQL-python
  • MeCab mecab-ipadic mecab-python (形態素解析できます)
  • mod_wsgi
  • /etc/apache2/httpd.conf に wsgi の設定

利用する場合は、<IPアドレス> と <ユーザ名> を書きかえてください。

3.手順

-- ここから --
※ L:はローカル(PC)、R:はリモート(VPS) です。

L:$ ssh root@<IPアドレス> -p 3843
> パスワード入力

R:# vi setup.sh
--
#!/bin/sh
/etc/init.d/smadmd stop
dpkg -P smadmin
dpkg -P serversman
### iptables ###
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3843 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT
iptables-save > /etc/iptables.rules
fl="/etc/network/if-pre-up.d/iptables_start"
cat > $fl <<_EOF_
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
_EOF_
chmod 755 $fl
### Install PKG ###
sed -i".bak" -e 's/archive.ubuntu.com/jp.archive.ubuntu.com/g' /etc/apt/sources.list
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:keithw/mosh
apt-get update
apt-get upgrade
apt-get install mosh language-pack-ja denyhosts phpmyadmin mysql-server gcc zlib1g-dev g++ apache2-dev
### Python2.7 ###
# apt-get install gcc zlib1g-dev
cd /usr/local/src
wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
tar jxvf Python-2.7.tar.bz2
cd Python-2.7
./configure --prefix=/usr/local
make
make install
### pip ###
cd /usr/local/src
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar xzvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
/usr/local/bin/python2.7 setup.py install
easy_install pip
pip install yolk Django==1.3 MySQL-python
### MeCab ###
# apt-get install g++
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-0.99.tar.gz
tar zxvf mecab-0.99.tar.gz
cd mecab-0.99/
./configure --enable-utf8-only
make
make install
ldconfig
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801/
./configure --with-charset=utf8
make
make install
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-python-0.99.tar.gz
tar zxvf mecab-python-0.99.tar.gz
cd mecab-python-0.99/
python setup.py build
python setup.py install
### mod_wsgi ###
# apt-get install apache2-dev
cd /usr/local/src
wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
tar xzf mod_wsgi-3.4.tar.gz
cd mod_wsgi-3.4
./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/bin/apxs2
make
make install
fl="/etc/apache2/httpd.conf"
cat > $fl <<_EOF_
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIScriptAliasMatch / /home/akira/django/django.wsgi
WSGIScriptAliasMatch ^/site([^/]+) /home/site\$1/django/django.wsgi
_EOF_
a2enmod userdir
mkdir /etc/skel/public_html
/etc/init.d/apache2 restart
### USER ###
adduser <ユーザ名> --ingroup sudo
usermod -L root
##
cd
rm setup.sh
--
R:# sh setup.sh
R:# exit

L:$ mosh <ユーザ名>@<IPアドレス> -p 3843
R:$ mkdir django
R:$ cd ~/django
R:$ vi django.wsgi
--
import os, sys, site
site.addsitedir(os.path.dirname(__file__))
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
--

2013年1月10日木曜日

ServersMan@VPS sshfs で リモートマウント

ふと、「ssh でサーバ(Ubuntu10.04)のディレクトリをマウントする方法は無いのか??」と思い、Google で検索してみると、みごとにヒット。

クライアント側(Xubuntu12.04)に sshfs をインストールするだけでした。
すばらしい。

1.インストール (クライアント側)

$ sudo apt-get install sshfs

2.マウント用ディレクトリを作る

$ mkdir <マウントポイント>

<マウントポイント> : 任意のディレクトリ名

3.マウント

$ sshfs [-p <接続ポート>] [アカウント@]<サーバ>:[ディレクトリ] <マウントポイント>

<サーバ> の後ろの ":" を忘れないように。

4.アンマウント

$ fusermount -u <マウントポイント>

これさえあれば、FTP も必要無いし、クライアント側の環境でプログラムも書けるし、イッキに便利になると思う。
とりあえず、一歩前進。

参考
http://l-w-i.net/t/ubuntu/sshfs_001.txt

2013年1月5日土曜日

ServersMan@VPS Python2.7を使う(その2)

Ubuntu10.04 で、Python2.7とDjango1.3を使うのに、試行錯誤中。

Django の公式ドキュメントには、
Apache と mod_wsgi の組み合わせは、推奨の Django の実運用環境です。
と、あります。

Django1.3 の指定は、django.wsgi に記述することで OK だけど、Python のバージョンを指定する方法が分からない..

WSGI のドキュメントには、WSGIPythonHome で指定できるように書かれているが、これはダメでした。

で、なんとか解決できそうな目処がついたので、メモっておきます。

1.Python2.7 インストール

Python 本体は、/usr/local に入れました。

# apt-get install gcc zlib1g-dev
# cd /usr/local/src
# wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
# tar jxvf Python-2.7.tar.bz2
# cd Python-2.7
# ./configure --prefix=/usr/local
# make
# make install

2.mod_wsgi インストール

apt-get install libapache2-mod-wsgi でインストールすると、システムで使っている
Python2.6.5 が適用されるので、ソースから make しました。

# apt-get install apache2-dev
# cd /usr/local/src
# wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
# tar xzf mod_wsgi-3.4.tar.gz
# cd mod_wsgi-3.4
# ./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/bin/apxs2
# make
# make install

こちらに、入りました。
/usr/lib/apache2/modules

モジュールを有効にします。
# vi /etc/apache2/httpd.conf
--
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIScriptAlias / /home/USERNAME/django/django.wsgi
--
# /etc/init.d/apache2 restart

※ とりあえず、ユーザディレクトリ(/home/..)で動作を確認。

3.virtualenv インストール

Django を、ユーザのディレクトリに入れる為に、virtualenv をインストール。

$ cd
$ mkdir src
$ cd ~/src
$ wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz
$ tar xzf virtualenv-1.6.4.tar.gz
$ cd virtualenv-1.6.4
$ python virtualenv.py --python=/usr/local/bin/python2.7 ~/mypython

アクティブにします。
$ source ~/mypython/bin/activate

4.Django1.3 インストール

$ pip install Django==1.3

5.django.wsgi を作る

$ cd
$ mkdir django
$ cd django
$ vi django.wsgi
--
import os, sys, site
site.addsitedir('/home/USERNAME/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
sys.path.append('/home/USERNAME/mypython/lib/python2.7/site-packages')
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
--

※ site.addsitedir でプロジェクトのディレクトリーを、sys.path.append でDjango本体のパスを指定しています。

6.Django プロジェクトを作る。

ここからは、チュートリアルを参考に。

$ cd ~/django
$ django-admin.py startproject mysite
$ cd mysite
$ python manage.py startapp polls

で、一応、動作確認まで、こぎつけることが出来ました。

2013年1月1日火曜日

ServersMan@VPS Python2.7を使う

Ubuntu10.04に入っている Python は、バージョン 2.6.5 。
いつも使っているバージョン(2.7)を使いたいので、ユーザのホームディレクトリに入れておきます。

1.ライブラリ(gcc,zlib)を入れておきます。

$ sudo apt-get install gcc zlib1g-dev

2.Python2.7 インストール

$ cd
$ mkdir local
$ mkdir src
$ cd ~/src
$ wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
$ tar jxvf Python-2.7.tar.bz2
$ cd Python-2.7
$ ./configure --prefix=$HOME/local
$ make
$ make install

3.Virtualenv インストール

$ cd ~/src
$ wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz
$ tar xzf virtualenv-1.6.4.tar.gz
$ cd virtualenv-1.6.4
$ python virtualenv.py --python=$HOME/local/bin/python2.7 ~/mypython
$ source ~/mypython/bin/activate

4.Django1.3 インストール

ついでに、Django1.3 も入れておきましょう。

$ pip install Django==1.3
$ pip install yolk
$ yolk -l

参考

https://plus.google.com/105835326498095858930/posts/8QFA2vPcMAR