LoginSignup
19
27

More than 5 years have passed since last update.

エックスサーバーでPython+mySQL+Flask

Posted at

大手レンタルサーバーのエックスサーバーで、pythonベースのWEBサーバーを構築した時の手順についての記録です。

エックスサーバーはPythonがインストールされているものの、Flaskなどは全然入っていないので、自分でインストールする必要があります。
また、/etcへのアクセス権がなく、pipを使うとpipの中のos.listdir(_UNIXCONFDIR)で失敗します。
、、、など、色々ハマりながら、サンプルレベルのWEBサーバーを構築出来たので、覚えているうちにまとめます。
終わったあとに、記述しているので、途中手順がぬてけている事があるかもしれません。

なお、WEBアプリの開発は、趣味レベルで本職ではないので、知識が不足している上での記述であることを予めお断ります。
また、参考にさせていただいたサイトは、数知れず、どこからどう参照したのか、わからなくなっています。ごめんなさい。

easy_installを入れる

pipが使えないのですが、easy_installだとうまくいきました。

\$ mkdir src
\$ cd src
\$ wget http://peak.telecommunity.com/dist/ez_setup.py
\$ python ez_setup.py

pyenvを入れる

gitでpyenvを持ってきます。
gitは予めインストールしてありました。
https:ではうまくいかないのでgit:を使いました。

\$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

~/.bash_profileに下記の行を追加して、bashを再起動します。

.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

pythonをインストール

pyenvの管理下にpythonをインストールします。

\$ pyenv install 2.7.11 
\$ pyenv global 2.7.11

~/.bash_profileに下記の行を追加して、bashを再起動します。

.bash_profile
eval "$(pyenv init -)"

Flaskをインストール

\$ easy_install Flask

MySQL-pythonをインストール

\$ easy_install MySQL-python


ここまでで、入れるべきもののインストールは終わりです。

テスト用の環境の構築

データベースの準備

  1. エックスサーバーのサーバーパネルにログインして、[データーベース]-[MySQL設定を選びます]
  2. [MySQL追加]タブでデータベースを追加します。
  3. [アクセス所有権ユーザー]でテスト用のユーザーを登録しておきます。
  4. 画面の左の[phpmuadmin(<バージョン>)]を押して、phpmuadminが画面を出します。
  5. なんでもいいので、作成したDBに、とりあえず2つフィールドを作成しておきます。    (サンプルプログラムが2フィールドに書き込むからです)

ディレクトリの準備

/home/<ユーザーID>/<ドメイン名>.xsrv.jp/public_html/の下にディレクトリを作ります。

\$ mkdir /home/<ユーザーID>/<ドメイン名>.xsrv.jp/public_html/hoge

.htaccess,index.cgi,testFlask.pyの3つのファイルを作成します。

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /hoge/index.cgi/$1 [QSA,L]
index.cgi
from wsgiref.handlers import CGIHandler
from testFlask import app
CGIHandler().run(app)
index.cgi
# -*- coding: utf-8 -*-
from flask import Flask
import MySQLdb

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello world!"

@app.route('/db')
def db_save():
    connector = MySQLdb.connect(host="<MySQL5.5 ホスト名>, db="<作ったDB名>", user="<登録したユーザーID>", passwd="<パスワード>", charset="utf8")
    cursor = connector.cursor()
    sql = u"insert into testTable values('1','python')"
    cursor.execute(sql)
    connector.commit()
    cursor.close()
    connector.close()

    return "DB saved!"

はサーバーパネルのMySQL設定画面で確認できます。
<作ったDB名><登録したユーザーID><パスワード>は、「データベースの準備」の項目で設定した文字列を記載します。

index.cgiはパーミッションを変更します

\$chmod 700 index.cgi

これで、
http://home/<ユーザーID>/<ドメイン名>.xsrv.jp/hoge
にアクセスしたらHello world!が表示され
http://home/<ユーザーID>/<ドメイン名>.xsrv.jp/hoge/db
にアクセスしたらDB saved!が表示されたら成功です。

phpmuadminでDBの内容を確認してください。

19
27
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
27