中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CentOS如何部署flask項目

發布時間:2022-04-13 15:04:25 來源:億速云 閱讀:234 作者:iii 欄目:編程語言

這篇文章主要介紹“CentOS如何部署flask項目”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“CentOS如何部署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 mysql

mysql-connectors-community/x86_64 mysql connectors community         36
mysql-tools-community/x86_64   mysql tools community            47
mysql57-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 = innodb

character-set-server = utf8

collation-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 make
sudo 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/blog
mkdir venv
python3 -m venv venv

激活虛擬環境:

source venv/bin/activate

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

pip3 install -r requirements.txt

安裝gunicorn

pip3 install gunicorn

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

from app import create_app

application = 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項目

到這里 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 os
from fabric.api import local, env, run, cd, sudo, prefix, settings, execute, task, put
from fabric.contrib.files import exists
from contextlib import contextmanager

env.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')

@contextmanager
def source_virtualenv():
  with prefix("source {}".format(venv_path)):
    yield

def 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))

@task
def deploy():
  execute(update)
  execute(restart)

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

fab deploy

關于“CentOS如何部署flask項目”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金昌市| 太和县| 青神县| 平原县| 紫云| 龙陵县| 塔城市| 茌平县| 邹城市| 蓬溪县| 余庆县| 桂林市| 北宁市| 榆社县| 泸西县| 通城县| 都兰县| 寿光市| 兴和县| 吴川市| 屯留县| 启东市| 紫金县| 富宁县| 泾川县| 温宿县| 米脂县| 根河市| 吉安县| 定远县| 明光市| 诸城市| 新野县| 和林格尔县| 泸西县| 监利县| 荆门市| 化德县| 顺平县| 且末县| 黄冈市|