亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

CentOS 部署 flask項目的方法

2024-09-01 13:53:40
字體:
來源:轉載
供稿:網友

最近在學習 python,使用 flask 實現了個個人博客程序,完了想部署到服務器上。因為是新手,一路磕磕絆絆最終把它基本搞定。網上資料對新手感覺都不太友好,都是零零碎碎的,所以我整理了一下,一方面作為我自己的記錄,方便以后查閱,另一方面也希望能幫助到跟我一樣的新手。

前提

  1. 有一個服務器(不然搞毛),購買可以參考優質國外vps推薦
  2. 有個人域名(當然,你可以直接使用 IP訪問,但有點奇怪不是?購買域名可以去GoDaddy

1.安裝git

可以選擇 github 或者Bitbucket,當然你也可以自己搭建 git服務器,但我覺得沒啥必要,我選擇Bitbucket,主要是因為它私有庫免費

sudo yum install git

后續就跟我們本地開發沒什么區別了,配置 ssh key,clone代碼,就不展開了,項目目錄建議放在 /home/www/ 下

2. 安裝 Mysql

添加 MySQL YUM 源

$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'$sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm$yum repolist all | grep mysqlmysql-connectors-community/x86_64 MySQL Connectors Community         36mysql-tools-community/x86_64   MySQL Tools Community            47mysql57-community/x86_64     MySQL 5.7 Community Server         187

安裝最新版本

$sudo yum install mysql-community-server

啟動 MySQL 服務

$sudo service mysqld start $sudo systemctl start mysqld #CentOS 7$sudo systemctl status mysqld● mysqld.service - MySQL Community Server  Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)  Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS) Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 2481 (mysqld_safe)  CGroup: /system.slice/mysqld.service      ├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr      └─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...

說明已經正在運行中了

修改密碼

$ mysql -uroot -p 

這里有要求你輸入密碼,Mysql安裝時會生成一個默認密碼,使用 grep "temporary password" /var/log/mysqld.log 命令,返回結果最后引號后面的字符串就是root的默認密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

修改編碼

在 /etc/my.cnf 中設置默認的編碼

[client]default-character-set = utf8[mysqld]default-storage-engine = INNODBcharacter-set-server = utf8collation-server = utf8_general_ci #不區分大小寫collation-server = utf8_bin #區分大小寫collation-server = utf8_unicode_ci #比 utf8_general_ci 更準確

創建數據庫

mysql> CREATE DATABASE <datebasename> CHARACTER SET utf8;

3. 安裝python3 pip3

CentOS 7 默認安裝了 Python 2,當需要使用 Python 3 的時候,可以手動下載 Python 源碼后編譯安裝。

安裝 Python 3

sudo mkdir /usr/local/python3 # 創建安裝目錄$ wget --no-check-certificate https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz # 下載 Python 源文件 # 注意:wget獲取https的時候要加上:--no-check-certifica$ tar -xzvf Python-3.6.2.tgz # 解壓縮包$ cd Python-3.6.2 # 進入解壓目錄sudo ./configure --prefix=/usr/local/python3 # 指定創建的目錄sudo makesudo make install # 編譯安裝

執行./configure時可能會報錯,configure: error: no acceptable C compiler found in $PATH,這是因為未安裝合適的編譯器,安裝下就好了,

sudo yum install gcc-c++ (使用sudo yum install gcc-c++時會自動安裝/升級gcc及其他依賴的包。)

配置兩個版本共存

創建 python3 的軟鏈接:

$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

這樣就可以通過 python 命令使用 Python 2, python3 來使用 Python 3。

安裝 pip

$ sudo yum -y install epel-release # 首先安裝 epel 擴展源$ sudo yum -y install python-pip # 安裝 python-pip$ sudo yum clean all # 清除 cache

通過這種方式貌似只能安裝 pip2,想要安裝 Python 3 的 pip,可以通過以下的源代碼安裝方式。

# 下載源代碼$ wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz$ tar -zvxf 9.0.1.tar.gz  # 解壓文件$ cd pip-9.0.1$ python3 setup.py install # 使用 Python 3 安裝

創建鏈接:

$ sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3

升級 pip

$ pip install --upgrade pip

4. 安裝 gunicorn

Gunicorn (獨角獸)是一個高效的Python WSGI Server,通常用它來運行 wsgi application(由我們自己編寫遵循WSGI application的編寫規范) 或者 wsgi framework(如Django,Paster),地位相當于Java中的Tomcat。 WSGI就是這樣的一個協議:它是一個Python程序和用戶請求之間的接口。WSGI服務器的作用就是接受并分析用戶的請求,調用相應的python對象完成對請求的處理,然后返回相應的結果。 簡單來說gunicorn封裝了HTTP的底層實現,我們通過gunicorn啟動服務,用戶請求與服務相應都經過gunicorn傳輸

創建虛擬環境

cd /home/www/blogmkdir venvpython3 -m venv venv

激活虛擬環境:

source venv/bin/activate

然后根據 requirements.txt 文件安裝依賴包:

pip3 install -r requirements.txt

安裝gunicorn

pip3 install gunicorn

在項目根目錄創建一個wsgi.py文件

from app import create_appapplication = create_app('production')if __name__ == '__main__':  application.run()

不再通過manage.py啟動服務,那只在開發的時候使用

啟動服務:

gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application

5. 安裝 Nginx

nginx 是一個高性能的web服務器。通常用來在前端做反向代理服務器。所謂正向與反向(reverse),只是英文說法翻譯。代理服務,簡而言之,一個請求經過代理服務器從局域網發出,然后到達互聯網上服務器,這個過程的代理為正向代理。如果一個請求,從互聯網過來,先進入代理服務器,再由代理服務器轉發給局域網的目標服務器,這個時候,代理服務器為反向代理(相對正向而言)。

正向代理:{ 客戶端 ---》 代理服務器 } ---》 服務器

反向代理:客戶端 ---》 { 代理服務器 ---》 服務器 }

{} 表示局域網

nginx既可以做正向,也可以做反向。

$ yum -y install nginx

啟動 nginx 服務

$ service nginx start

停止 nginx 服務

$ service nginx stop

重啟 nginx 服務

$ service nginx restart

平滑重啟

nginx配置改動了,可以重新加載而不用先關閉再打開

$ nginx -s reload

啟動后 ,在瀏覽器中 輸入服務器的 ip 地址,就可以看到

CentOS,部署,flask,flask項目部署

到這里 yum 安裝 nginx 就完成了

添加配置

nginx的配置文件為: /etc/nginx/nginx.conf

server {    listen 80;    server_name adisonhyh.com;    location / {        proxy_pass http://127.0.0.1:8000;        proxy_set_header Host $host;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}
  1. 監聽http默認的端口號80
  2. server_name:個人網站域名
  3. 把請求代理到本機的8000端口(gunicorn啟動服務指定的端口) 剩下proxy_set_header照抄

gunicorn和nginx關系:

gunicorn 可以單獨提供服務,但生產環境一般不這樣做。首先靜態資源(jscssimg)會占用不少的請求資源,而對于 gunicorn 來講它本身更應該關注實際業務的請求與處理而不應該把資源浪費在靜態資源請求上;此外,單獨運行 gunicorn 是沒有辦法起多個進程多個端口來負載均衡的。

nginx 的作用就是彌補以上問題,首先作為前端服務器它可以處理一切靜態文件請求,此時 gunicorn 作為后端服務器,nginx 將會把動態請求轉發給后端服務器,因此我們可以起多個 gunicorn 進程,然后讓 nginx 作均衡負載轉發請求給多個 gunicorn 進程從而提升服務器處理效率與處理能力。最后,nginx 還可以配置很多安全相關、認證相關等很多處理,可以讓你的網站更專注業務的編寫,把一些轉發規則等其它業務無關的事情交給 nginx 做。
配置好后打開本地瀏覽器,輸入域名,應該就能訪問了。

6.supervisor

如果你需要進程一直執行,若該進程因各種原因中斷,也會自動重啟的話,supervisor是一個很好的選擇。 supervisor管理進程,是通過fork/exec的方式將這些被管理的進程當作supervisor的子進程來啟動,所以我們只需要將要管理進程的可執行文件的路徑添加到supervisor的配置文件中就好了。此時被管理進程被視為supervisor的子進程,若該子進程異常終端,則父進程可以準確的獲取子進程異常終端的信息,通過在配置文件中設置autostart=true,可以實現對異常中斷的子進程的自動重啟。

安裝 supervisor

$ pip install supervisor$ echo_supervisord_conf > supervisor.conf  # 生成 supervisor 默認配置文件$ vim supervisor.conf            # 修改 supervisor 配置文件,添加 gunicorn 進程管理

在blog supervisor.conf 配置文件底部添加 (注意我的工作路徑是 www/home/blog/ )

[program:blog]command=/home/www/blog/venv/bin/gunicorn -w4 -b0.0.0.0:8000 wsgi:application  ;supervisor啟動命令directory=/home/www/blog                         ; 項目的文件夾路徑startsecs=0                                ; 啟動時間stopwaitsecs=0                              ; 終止等待時間autostart=false                              ; 是否自動啟動autorestart=false                             ; 是否自動重啟stdout_logfile=/home/www/blog/logs/gunicorn.log              ; log 日志stderr_logfile=/home/www/blog/logs/gunicorn.err              ; 錯誤日志

使用 supervsior 啟動 gunicorn

$ sudo supervisord -c supervisor.conf $ sudo supervisorctl start blog

在瀏覽器地址欄輸入配置的地址即可訪問網站。

7. fabric

最后一步,我們使用fabric實現遠程操作和部署。Fabric 是一個 Python 下類似于 Makefiles 的工具,但是能夠在遠程服務器上執行命令。

安裝 fabric

pip install fabric

在 blog 目錄下新建一個fabfile.py文件

import osfrom fabric.api import local, env, run, cd, sudo, prefix, settings, execute, task, putfrom fabric.contrib.files import existsfrom contextlib import contextmanagerenv.hosts = ['204.152.201.69']env.user = 'root'env.password = '****'#密碼env.group = "root"DEPLOY_DIR = '/home/www/blog'VENV_DIR = os.path.join(DEPLOY_DIR, 'venv')VENV_PATH = os.path.join(VENV_DIR, 'bin/activate')@contextmanagerdef source_virtualenv():  with prefix("source {}".format(VENV_PATH)):    yielddef update():  with cd('/home/www/blog/'):    sudo('git pull')def restart():  with cd(DEPLOY_DIR):    if not exists(VENV_DIR):      run("virtualenv {}".format(VENV_DIR))    with settings(warn_only=True):      with source_virtualenv():        run("pip install -r {}/requirements.txt".format(DEPLOY_DIR))        with settings(warn_only=True):          stop_result = sudo("supervisorctl -c {}/supervisor.conf stop all".format(DEPLOY_DIR))          if not stop_result.failed:            kill_result = sudo("pkill supervisor")            if not kill_result:              sudo("supervisord -c {}/supervisor.conf".format(DEPLOY_DIR))              sudo("supervisorctl -c {}/supervisor.conf reload".format(DEPLOY_DIR))              sudo("supervisorctl -c {}/supervisor.conf status".format(DEPLOY_DIR))              sudo("supervisorctl -c {}/supervisor.conf start all".format(DEPLOY_DIR))@taskdef deploy():  execute(update)  execute(restart)

現在代碼如果更新了,可以直接在本地執行遠程部署了

fab deploy

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本久久精品视频| 一级做a爰片久久毛片美女图片| 日本精品视频在线播放| 久久6免费高清热精品| 亚洲精品中文字| 亚洲欧洲高清在线| 一区二区在线免费视频| 亚洲的天堂在线中文字幕| 久久中国妇女中文字幕| 久久香蕉频线观| 亚洲激情视频网| 国产精品视频xxxx| 亚洲国模精品一区| 久久6精品影院| 国产乱人伦真实精品视频| 日韩精品视频观看| 日韩不卡中文字幕| 中文字幕在线日韩| 热99精品里视频精品| 欧美高清视频在线观看| 国模私拍视频一区| 国产a∨精品一区二区三区不卡| 国产第一区电影| 色婷婷久久av| 欧美激情在线观看视频| 亚洲天天在线日亚洲洲精| 亚洲a区在线视频| 欧美精品情趣视频| 国产午夜精品全部视频在线播放| 日韩一区视频在线| 日韩av有码在线| 岛国精品视频在线播放| 91精品久久久久久久久青青| 亚洲天堂av高清| 欧美日韩国产第一页| 亚洲国产欧美自拍| 狠狠躁夜夜躁人人爽天天天天97| 国产999精品久久久影片官网| 国产噜噜噜噜久久久久久久久| 7777精品久久久久久| 日韩视频免费在线| 宅男66日本亚洲欧美视频| 91精品久久久久久久久中文字幕| 国产精品白嫩初高中害羞小美女| 国产精品女人久久久久久| 欧美老肥婆性猛交视频| 91精品久久久久久久久不口人| 欧美激情在线视频二区| 狠狠久久亚洲欧美专区| 最近日韩中文字幕中文| 国产精品午夜视频| 中文字幕欧美亚洲| 欧美性视频在线| 亚洲一区二区三区香蕉| 国产欧美日韩精品在线观看| 最近中文字幕mv在线一区二区三区四区| 成人中文字幕+乱码+中文字幕| 国产精品羞羞答答| 日本精品va在线观看| 97视频在线观看播放| 欧美成年人网站| 欧美一区亚洲一区| 色琪琪综合男人的天堂aⅴ视频| 久久久国产精彩视频美女艺术照福利| 92福利视频午夜1000合集在线观看| 亚洲a成v人在线观看| 日韩久久午夜影院| 久久久视频在线| 亚洲福利视频免费观看| 日本久久亚洲电影| 亚洲自拍小视频| 亚洲黄色www| 欧美激情二区三区| 人体精品一二三区| 日韩在线中文字| 久久精品一偷一偷国产| 亚洲最大成人网色| 精品在线观看国产| 中文字幕视频一区二区在线有码| 亚洲天堂一区二区三区| 97成人精品视频在线观看| 欧美最近摘花xxxx摘花| 九九热精品视频国产| 98视频在线噜噜噜国产| 亚洲精品自拍视频| 亚洲精品久久久久| 国产91色在线播放| 欧美性高潮床叫视频| 欧美激情一区二区三区在线视频观看| 97福利一区二区| 国产精品美女在线| 日韩电影免费在线观看| 久久亚洲精品一区二区| 国产亚洲成精品久久| 久久人体大胆视频| 91高清视频在线免费观看| 最近2019年日本中文免费字幕| 欧亚精品在线观看| 欧美影院成年免费版| 国语自产精品视频在线看一大j8| 色爱av美腿丝袜综合粉嫩av| 日韩一区av在线| 欧美成人小视频| 欧美激情三级免费| 中文字幕日韩欧美在线| 亚洲一区av在线播放| 国产日韩在线精品av| 精品国产成人在线| 久久在线精品视频| 北条麻妃一区二区在线观看| 俺去亚洲欧洲欧美日韩| 精品日韩视频在线观看| 欧美综合一区第一页| 在线观看视频亚洲| 国产极品jizzhd欧美| 成人黄色在线播放| 亚洲欧美日韩中文在线制服| 久久艳片www.17c.com| 日本国产高清不卡| 亚洲精品一区二区网址| 国产精品久久久久久久久久久久久| 久99久在线视频| 国产精品丝袜视频| 日本久久久久久久| 久久6精品影院| 久久视频精品在线| 成人日韩av在线| 色噜噜亚洲精品中文字幕| 日韩成人在线视频| 国产91精品高潮白浆喷水| 日韩国产高清污视频在线观看| 国产一区二区三区在线看| 2019中文字幕在线免费观看| 久久人91精品久久久久久不卡| 国产成人涩涩涩视频在线观看| 精品视频—区二区三区免费| 国产日韩换脸av一区在线观看| 久久久国产一区| 国产精品mp4| 国产精品福利网| 久久精品视频va| 欧美日韩中文字幕在线视频| 成人在线视频网| 亚洲人成欧美中文字幕| 亚洲欧美日本另类| 成人免费看片视频| 亚洲精品久久久久久久久久久久久| 粉嫩av一区二区三区免费野| 亚洲精品国产精品国自产观看浪潮| 亚洲人成在线一二| 欧美日韩在线一区| 成人在线视频网站| 清纯唯美亚洲综合| 亚洲国产精品悠悠久久琪琪| 92看片淫黄大片欧美看国产片| 亚洲国产小视频| 一本色道久久综合亚洲精品小说| 欧美片一区二区三区| 精品中文字幕乱| 久久中文久久字幕| 91中文字幕一区| 成人国产在线激情| 黑人巨大精品欧美一区二区一视频| 国产精品久久久久不卡|