CentOS7下使用systemd+gunicorn+venv啓動Flask項目

Flask官方有個樣例項目flaskr 指南路徑 http://flask.palletsprojects.com/en/1.1.x/tutorial/

這裏通過systemd+gunicorn(http)+venv+python3.6方式部署。flask項目打包可以參考相關文檔

python setup bdist_whell

build/lib/flaskr   這裏是項目文件,第二種方式會使用到
dist/flaskr-1.0.0-py3-none-any.whl  這個是whell類型包,可以通過pip安裝

備註:gunicorn出了http方式之外,還有unix socket方式(與nginx配合使用),文檔 http://docs.gunicorn.org/en/stable/deploy.html

配置環境

# 安裝python3
yum install python36
https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

# 配置python虛擬化環境
cd /opt
python3 -m venv venv

第一種方式:將Flask項目通過pip安裝到site-packages目錄

第一步:安裝項目

. /opt/venv/bin/activate
(venv) [root@cloudlab ~]# pip install flaskr-1.0.0-py3-none-any.whl  #自動安裝setup.py配置的依賴
(venv) [root@cloudlab ~]# pip list
Package            Version
------------------ -------
atomicwrites       1.3.0  
attrs              19.1.0 
Click              7.0    
Flask              1.1.1  
flaskr             1.0.0             # 這個就是flask項目
// 省略 ....  


# 初始化數據庫
FLASK_APP=flaskr flask init-db
Initialized the database.

/opt/venv/var/flaskr-instance/flaskr.sqlite

第二步:配置gunicorn+systemd

# 虛擬化環境裏面安裝gunicorn
. /opt/venv/bin/activate
(venv) [root@cloudlab ~]# pip install gunicorn

# 編寫gunicorn.service
vi /usr/lib/systemd/system/gunicorn.service
[Unit]
Description='demo project'
After=network.target

[Service]
Type=forking
PrivateTmp=true
Restart=on-failure
PIDFile=/run/gunicorn.pid
ExecStart=/opt/venv/bin/gunicorn -D --access-logfile /var/log/gunicorn.log --pid /run/gunicorn.pid flaskr:create_app() -b 0.0.0.0:8080   # 也可以指定配置文件啓動
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

啓動服務

systemctl daemon-reload
systemctl start gunicorn.service

netstat -pltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1421/python3 

驗證 創建user1
在這裏插入圖片描述

第二種方式:將Flask項目放置到指定目錄啓動

第一步 將項目目錄build/lib/flaskr 放置到/opt/app/下面

mv build/lib/flaskr /opt/app/
tree /opt/app/flaskr
/opt/app/flaskr
├── static
│   └── style.css
├── templates
│   ├── auth
│   │   ├── login.html
│   │   └── register.html
│   ├── base.html
│   └── blog
│       ├── create.html
│       ├── index.html
│       └── update.html
├── __init__.py
├── auth.py
├── blog.py
├── db.py
├── schema.sql
└── requirements.txt

配置gunicorn+systemd

. /opt/venv/bin/activate

# 安裝項目依賴
(venv) [root@cloudlab ~]# pip install -r requirements.txt 
# 安裝gunicorn 
(venv) [root@cloudlab flaskr]# pip install gunicorn 

# 編寫gunicorn.service
vi /usr/lib/systemd/system/gunicorn.service
[Unit]
Description='demo project'
After=network.target

[Service]
Type=forking
PrivateTmp=true
Restart=on-failure
PIDFile=/run/gunicorn.pid
WorkingDirectory=/opt/app    # 可以看到這裏比第一種方式多了一個家目錄的設置
ExecStart=/opt/venv/bin/gunicorn -D --access-logfile /var/log/gunicorn.log --pid /run/gunicorn.pid flaskr:create_app() -b 0.0.0.0:8080     # 也可以指定配置文件啓動
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

# 數據庫初始化
FLASK_APP=/opt/app/flaskr flask init-db
Initialized the database.

ll /opt/app/instance/flaskr.sqlite 
-rw-r--r-- 1 root root 5120 Aug  7 19:59 /opt/app/instance/flaskr.sqlite

啓動服務

systemctl daemon-reload
systemctl start gunicorn.service

netstat -pltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1421/python3 

驗證服務 創建user2
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章