UbuntuにAnaconda+Flask環境を作成する

## 環境確認
```sh
lsb_release -a
```
```
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.2 LTS
Release:	20.04
Codename:	focal
```
## Anacondaのinstall
wgetでダウンロードしてきます。
https://www.anaconda.com/products/distribution#Downloads
```sh
https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh
```
ダウンロードしたスクリプトをbashで実行
```:~/Anaconda3-2022.10-Linux-x86_64.sh
bash Anaconda3-2022.10-Linux-x86_64.sh
```
```:出力
Welcome to Anaconda3 2022.10

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> 
```
ひたすらEnter押すと同意するか聞かれるのでyes
```:出力
Do you accept the license terms? [yes|no]
[no] >>> 
Please answer 'yes' or 'no':'
>>> yes
```
インストールの場所を聞かれるので作成したユーザーのホームに置く
```:出力
Anaconda3 will now be installed into this location:
/root/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/anaconda3] >>> /home/katsuji/anaconda3
```
condaのバージョン確認の前にパスが通っていないのでパスを通してあげます。
```sh
vi ~/.bashrc
```
```~/.bashrc```に```export PATH=~/anaconda3/bin:$PATH```をどこでもいいので記述します。　　
最後に.bashrcを更新します。
```sh
source ~/.bashrc
```
condaの確認
```sh
conda -V
```
```:出力
conda 22.9.0 #OK
```
## Flask環境の作成

```sh
conda create -n flask
```
flask環境内にflaskをインストール
```sh
conda activate flask
(flask) katsuji@XXX:~$ conda install flask
```

## ディレクトリ構成
```
~/flask_app
    ├── app.py
    └── test.py
```
## uWSGI
### uwsgiのインストール
デフォルトのチャンネルからはinstallできなかったのでconda-forgeから
```sh
(flask) katsuji@XXX:~/$conda install -c conda-forge uwsgi
```
### uwsgiの動作確認

下記サイトを参考にしました。というかそのままです。　　https://serip39.hatenablog.com/entry/2020/07/06/070000
```python:test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World uWSGI"]
```
uwsgiの動作確認
```sh
(flask) katsuji@XXX:~/flask_app$ uwsgi --http :8000 --wsgi-file test.py
```

```http://127.0.0.1:8000```に接続して「Hello World uWSGI」が出てきたらOK
自分の場合はレンタルサーバーで行なっているので```http://X.X.X.X:8000```に接続。Xの部分はレンタルサーバーのIPアドレス

## Flaskをuwsgiで起動する
```python:app.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello world Flask"

if __name__ == "__main__":
    app.run()
```
```sh
(flask) katsuji@XXX:~/flask_app$ uwsgi --http :8000 --wsgi-file app.py --callable app
```
確認
localhost　　　```http://127.0.0.1:8000```
レンタルサーバー```http://X.X.X.X :8000```
"Hello world Flask"が出力されたらOK

## nginxの設定
### nginxのinstall と確認
```conda deactivate```でflask環境を出る
```sh
#nginx install
sudo apt install nginx 
#start nginx
sudo /etc/init.d/nginx start 
```
```http://127.0.0.1:80```に接続して「Welcome to nginx!」が出てきたらOK
自分の場合はレンタルサーバーで行なっているので```http://X.X.X.X:80```に接続。Xの部分はレンタルサーバーのIPアドレス
### nginxの設定 configの編集
```sh
cd /etc/nginx/sites-available
```
```sites-available```内のdefaultを今回のアプリ用に```app_nginx.conf```としてコピーします。
```
sudo cp default ./app_nginx.conf
```
```sh:/etc/nginx/sites-available/app_nginx.conf
# Virtual Host configuration for example.com
server {
        listen X.X.X.X80; #Xの部分を省略してlisten 80;とするとlocalhostに接続
        server_name example.com;        
        location / {
          include uwsgi_params;
          uwsgi_pass unix:/tmp/uwsgi.sock;
        }
}
```
```site-available``` -> ```site-enabled```にシンボリックリンク
```sh
# シンボリックリンクの作成
cd /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/app_nginx.conf app_nginx.conf
```
```app_nginx.conf```だけを読み込むように```/etc/nginx/nginx.conf```を編集する。
```sh
sudo vi /etc/nginx/nginx.conf
```
```sh:/etc/nginx/nginx.conf
# Virtual Host Configs
include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*; #コメントアウト
include /etc/nginx/sites-enabled/*.conf; #app_nginx.confを読む
```
## nginxとuwsgiを接続する
uwsgiサーバーの起動
```sh
uwsgi --ini myapp.ini
```
別のターミナルでnginxを起動
```sh
sudo /etc/init.d/nginx start
```

## 参考
大変参考になりました。ありがとうございます。
[【Python】Flaskの本番環境構築（Flask + uWSGI + Nginx）](https://serip39.hatenablog.com/entry/2020/07/06/070000)