apostrophe で動いている Flask アプリを wplj に引っ越す。
virtualenvとuwsgiのインストール
takatoh@wplj $ pip install virtualenv プログラム 'pip' はまだインストールされていません。 次のように入力することでインストールできます: sudo apt install python-pip
あれ、pip
がインストールされてなかった。
takatoh@wplj $ sudo apt install python-pip
では、あらためて。
takatoh@wplj $ sudo pip install virtualenv takatoh@wplj $ sudo pip install uwsgi
以前のエントリを見たら sudo
をつけていたので、今回もつけて実行した。
takatoh@wplj $ pip list adium-theme-ubuntu (0.3.4) dnspython (1.12.0) pip (8.1.1) pycrypto (2.6.1) setuptools (20.7.0) unity-lens-photos (1.0) uWSGI (2.0.14) virtualenv (15.1.0) wheel (0.29.0) You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
virtualenv と uWSGI がちゃんとインストールされてる。pip をアップグレードしろみたいなメッセージが出てるけど、これはあとでいいや。
ユーザを作る
Flask アプリを動かす専用のユーザを作る。
takatoh@wplj $ sudo adduser bruschetta ユーザー `bruschetta' を追加しています... 新しいグループ `bruschetta' (1001) を追加しています... 新しいユーザー `bruschetta' (1001) をグループ `bruschetta' に追加しています... ホームディレクトリ `/home/bruschetta' を作成しています... `/etc/skel' からファイルをコピーしています... 新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました bruschetta のユーザ情報を変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください フルネーム []: 部屋番号 []: 職場電話番号 []: 自宅電話番号 []: その他 []: 以上で正しいですか? [Y/n] y
sudo
する権利をつける。
takatoh@wplj $ sudo gpasswd -a bruschetta sudo ユーザ bruschetta をグループ sudo に追加
ここで今作ったユーザでログインしなおす。
Flaskアプリの配置
GitHub からクローン。
bruschetta@wplj:~$ git clone https://github.com/takatoh/Bruschetta.git bruschetta Cloning into 'bruschetta'... remote: Counting objects: 358, done. remote: Total 358 (delta 0), reused 0 (delta 0), pack-reused 358 Receiving objects: 100% (358/358), 31.96 KiB | 0 bytes/s, done. Resolving deltas: 100% (241/241), done. Checking connectivity... done.
virtualenv を作って必要なライブラリをインストール。
bruschetta@wplj:~/bruschetta$ virtualenv env New python executable in /home/bruschetta/bruschetta/env/bin/python Installing setuptools, pip, wheel...done. bruschetta@wplj:~/bruschetta$ source env/bin/activate (env) bruschetta@wplj:~/bruschetta$ pip install -r requirements.txt Collecting Flask (from -r requirements.txt (line 1)) Downloading Flask-0.12-py2.py3-none-any.whl (82kB) 100% |████████████████████████████████| 92kB 3.0MB/s Collecting Flask-SQLAlchemy (from -r requirements.txt (line 2)) Downloading Flask_SQLAlchemy-2.2-py2.py3-none-any.whl Collecting Flask-Script (from -r requirements.txt (line 3)) Downloading Flask-Script-2.0.5.tar.gz (42kB) 100% |████████████████████████████████| 51kB 4.0MB/s Collecting itsdangerous>=0.21 (from Flask->-r requirements.txt (line 1)) Downloading itsdangerous-0.24.tar.gz (46kB) 100% |████████████████████████████████| 51kB 4.6MB/s Collecting click>=2.0 (from Flask->-r requirements.txt (line 1)) Downloading click-6.7-py2.py3-none-any.whl (71kB) 100% |████████████████████████████████| 71kB 4.4MB/s Collecting Werkzeug>=0.7 (from Flask->-r requirements.txt (line 1)) Downloading Werkzeug-0.11.15-py2.py3-none-any.whl (307kB) 100% |████████████████████████████████| 317kB 3.0MB/s Collecting Jinja2>=2.4 (from Flask->-r requirements.txt (line 1)) Downloading Jinja2-2.9.5-py2.py3-none-any.whl (340kB) 100% |████████████████████████████████| 348kB 4.0MB/s Collecting SQLAlchemy>=0.8.0 (from Flask-SQLAlchemy->-r requirements.txt (line 2)) Downloading SQLAlchemy-1.1.5.tar.gz (5.1MB) 100% |████████████████████████████████| 5.1MB 237kB/s Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask->-r requirements.txt (line 1)) Downloading MarkupSafe-0.23.tar.gz Building wheels for collected packages: Flask-Script, itsdangerous, SQLAlchemy, MarkupSafe Running setup.py bdist_wheel for Flask-Script ... done Stored in directory: /home/bruschetta/.cache/pip/wheels/e2/ea/d8/8d114e46cef819f7d9879504a7f9cb2a88a479af2858223d9f Running setup.py bdist_wheel for itsdangerous ... done Stored in directory: /home/bruschetta/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a Running setup.py bdist_wheel for SQLAlchemy ... done Stored in directory: /home/bruschetta/.cache/pip/wheels/8d/0a/3b/2109101a4052e58ad64f83661383a6b483a1c383eb09aad6d6 Running setup.py bdist_wheel for MarkupSafe ... done Stored in directory: /home/bruschetta/.cache/pip/wheels/a3/fa/dc/0198eed9ad95489b8a4f45d14dd5d2aee3f8984e46862c5748 Successfully built Flask-Script itsdangerous SQLAlchemy MarkupSafe Installing collected packages: itsdangerous, click, Werkzeug, MarkupSafe, Jinja2, Flask, SQLAlchemy, Flask-SQLAlchemy, Flask-Script Successfully installed Flask-0.12 Flask-SQLAlchemy-2.2 Flask-Script-2.0.5 Jinja2-2.9.5 MarkupSafe-0.23 SQLAlchemy-1.1.5 Werkzeug-0.11.15 click-6.7 itsdangerous-0.24
データベースの初期化。
(env) bruschetta@wplj:~/bruschetta$ python manage.py init_db manage.py:2: ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead. from flask.ext.script import Manager /home/bruschetta/bruschetta/bruschetta/__init__.py:2: ExtDeprecationWarning: Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead. from flask.ext.sqlalchemy import SQLAlchemy
なんか SQLAlchemy がらみでメッセージが出てるな。まあいい、先に進めよう。
起動確認。
(env) bruschetta@wplj:~/bruschetta$ python manage.py runserver manage.py:2: ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead. from flask.ext.script import Manager /home/bruschetta/bruschetta/bruschetta/__init__.py:2: ExtDeprecationWarning: Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead. from flask.ext.sqlalchemy import SQLAlchemy * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [28/Feb/2017 20:14:23] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [28/Feb/2017 20:14:23] "GET /static/style.css HTTP/1.1" 200 - 127.0.0.1 - - [28/Feb/2017 20:14:23] "GET /favicon.ico HTTP/1.1" 404 -
OK。ブラウザでも確認できた。
ここで virtualenv から抜ける。
(env) bruschetta@wplj:~/bruschetta$ deactivate
uWSGIで起動
uWSGI の設定ファイルを apostrophe からコピーしてくる。
bruschetta@wplj:~/bruschetta$ scp bruschetta@apostrophe:bruschetta/bruschetta.ini . bruschetta@apostrophe's password: bruschetta.ini 100% 350 0.3KB/s 00:00
内容はこんな感じ。
[uwsgi] uid = www-data gid = www-data http = :9090 venv = /home/bruschetta/bruschetta/env python-path = /home/bruschetta/bruschetta wsgi-file = /home/bruschetta/bruschetta/manage.py callable = app master=true pidfile=/var/run/bruschetta.pid daemonize=/home/bruschetta/bruschetta/bruschetta.log
ディレクトリ構成は一緒だから、このまま行けるはずだ。
bruschetta@wplj:~/bruschetta$ sudo uwsgi bruschetta.ini sudo bruschetta のパスワード: uWSGI getting INI configuration from bruschetta.ini
OK。今度もブラウザで確認できた。
起動スクリプト
これも以前のスクリプトと同じ。
#!/bin/sh PATH=/usr/local/bin:/usr/bin:/bin:/sbin APP_ROOT=/home/bruschetta/bruschetta case "$1" in start) cd ${APP_ROOT} uwsgi bruschetta.ini ;; stop) PID_FILE=/var/run/bruschetta.pid PID=`cat ${PID_FILE}` kill -INT ${PID} rm ${PID_FILE} ;; *) echo "Usage: bruschetta {start|stop}" >&2 exit 1 ;; esac exit 0
起動確認。
bruschetta@wplj:~/bruschetta$ sudo service bruschetta start Failed to start bruschetta.service: Unit bruschetta.service not found.
あれ、ダメだ。bruschetta.service ってなんだ?
ググってみると、/lib/systemd/system/bruschetta.service ファイルを作ってやればいいようだけど、書き方がよくわからない。どうしたもんか……