Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

大手レンタルサーバーのエックスサーバーで、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の内容を確認してください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away