Flaskを使ったデモを作成するための雛形コードです。 Ajaxを使ったテキストと画像ファイルのPOSTができます。
実行環境 Ubuntu 16.04.5 Python 3.5.2
- 新しく作るFlaskアプリのディレクトリ名
newapp
を自分の作りたいアプリの名前に変更してください /home/hirono/projects
を自分がFlaskアプリを置くpathに変更してくださいhirono
を自分のユーザー名に変更してください
- カレントディレクトリ以下の任意の場所に雛形Flaskアプリをclone
$ git clone git@github.com:d-hacks/imasugudemo.git newapp ## newappの部分を書き換えてください
- アプリ名を変更
$ mv newapp/imasugudemo.py newapp/newapp.py
- Nginx、uWSGI、systemd serviceの設定ファイルを作成
$ cd /home/hirono/projects/newapp/src
$ python create_config_files.py --appname 'newapp' --appdirpath '/home/hirono/projects' --user 'hirono'
- 対象のFlaskアプリのディレクトリの中でvenvを立ち上げる
$ cd /home/hirono/projects/newapp
$ python -m venv newappenv
$ source newappenv/bin/activate
- 使用しているライブラリ全てと、Flask、uWSGIをvenv内にインストール
(newappenv) $ pip install uwsgi flask
- venvから出る
(newappenv) $ deactivate
- /etc/systemd/system/直下に
newapp.service
を移動
$ sudo mv /home/hirono/projects/newapp/newapp.service /etc/systemd/system/newapp.service
- serviceの起動 + statusの確認
$ sudo systemctl start newapp
$ sudo systemctl enable newapp
$ sudo systemctl status newapp
- /etc/nginx/sites-available/flaskappに
newapp.conf
の中身を追記
- newapp.confは
newapp/
直下に作られています
$ sudo vim /etc/nginx/sites-available/flaskapp
(/etc/nginx/site-avalable/flaskappの中身)
server {
listen 443;
server_name ***;
ssl on;
ssl_certificate ***; # managed by Certbot
ssl_certificate_key ***; # managed by Certbot
location / {
index index.html index.htm index.nginx-debian.html;
}
## 他の人のlocationの記述
## ↓↓↓この最後の部分にnewapp.confの中身を以下のように貼り付ける
## newapp - hirono
location ~ ^/newapp(.*)$ {
root /home/hirono/projects/newapp;
include uwsgi_params;
uwsgi_pass unix:/home/hirono/projects/newapp/newapp.sock;
uwsgi_param SCRIPT_NAME /newapp;
uwsgi_param PATH_INFO /$1;
}
location ^~ /newapp/static/js { root /home/hirono/projects/; }
location ^~ /newapp/static/css { root /home/hirono/projects/; }
location ^~ /newapp/static/img { root /home/hirono/projects/; }
### ↑↑↑
}
- Nginxの設定にエラーがないかテスト
$ sudo nginx -t
- Nginxをrestart
$ sudo systemctl restart nginx
-
キャッシュの消去とハード再読み込み
-
serviceの再起動→nginxの再起動
$ sudo systemctl stop newapp
$ sudo systemctl start newapp
$ sudo systemctl restart nginx
- nginxのログを見る
$ sudo tailf /var/log/nginx/access.log
$ sudo tailf /var/log/nginx/error.log
- アプリ内の
<script>
<img>
<link>
タグ内のリンクを書き換える
(例)
<img src="/static/img/logo.img">
<link rel="stylesheet" href="/static/css/mystyle.css">
<script src="/static/js/myscript.js"></script>
↓
<img src="/imasugudemo/static/img/logo.img">
<link rel="stylesheet" href="/imasugudemo/static/css/mystyle.css">
<script src="/imasugudemo/static/js/myscript.js"></script>
※ locationの評価条件にimg, js, cssを明記しないと、nginxのデフォルトの設定で/usr/www/html以下にファイルを探しに行ってしまう。
またGETでリクエストされるurlからどのアプリのファイルをリクエストしているのかを判断しなければならないため、タグ内のリンクにアプリ名を含めなければならない(Flaskの基本設定には反する書き方になります)。詳しくは https://www.digitalocean.com/community/questions/nginx-image-folder-and-declaration
- jsファイルの中のajaxのurlを書き換える
$.ajax({
url: '/upload'
$.ajax({
url: '/newapp/upload_image',
独自に作った場合はこの記事を参考にすると良いです!
Ajax
Nginxが再起動できない