一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 在阿里云服務器上配置CentOS+Nginx+Python+Flask環境

在阿里云服務器上配置CentOS+Nginx+Python+Flask環境

2020-08-28 09:25cangmean Python

這篇文章主要介紹了在阿里云服務器上配置CentOS+Nginx+Python+Flask環境的教程,值得一提的是這里的方案用Nginx作反向代理而使用Gunicorn作wsgi服務器,需要的朋友可以參考下

項目運行環境

阿里云(單核CPU, 1G內存, Ubuntu 14.04 x64 帶寬1Mbps), 具體購買和ssh連接阿里云本文不做描述。

實用工具

首先進入阿里云服務器后先要升級下apt-get, 并下載所需軟件

?
1
2
sudo apt-get update
sudo apt-get install vim git wget tmux

我還會使用zsh和oh-my-zsh來替換bash

?
1
2
3
4
sudo apt-get install zsh
 
# 終端下打以下命令
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

替換bash為zsh

?
1
chsh -s /bin/zsh

重新連接阿里云就可以看到效果, 具體主題可以根據自己喜好更改主目錄下的.zshrc即可

安裝python相關模塊

使用python的pip包管理工具

?
1
2
3
sudo apt-get install python-setuptools
sudo apt-get install python-pip
sudo pip install python-virtualenv

在主目錄下創建文件夾code并把所有項目放進這個目錄里

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mkdir code
 
# 使用virtualenv
vritualenv venv
 
# 開啟virtualenv
source /venv/bin/activate
 
# 關閉virtualenv
deactivate
 
# 在開啟virtualenv的狀態下使用pip會使用venv中的pip,也就是所有模塊都會安裝到venv中
# 如果想要安裝全局模塊就使用sudo pip
 
# 安裝flask, 安裝到venv中
pip install flask
 
# 兩個是不同的, 安裝到系統中
sudo pip install flask

使用Flask

現在我們已經安裝了Flask, 現在我們寫一個小的程序來運行一下。
這里我們在一次安裝flask的相關模塊,并把他們寫入到requirements.txt這個文件中。

?
1
2
3
4
5
6
7
8
9
10
11
# 安裝flask的相關模塊
pip install -r requirements
 
# 創建一個manage.py文件, 用作管理我們的應用, 然后創建我們的一個應用。
touch manage.py
 
## 創建一個叫bamboo的應用
mkdir bamboo
 
## 創建一個應用的文件, 接下來我們要編輯這個文件了。
touch bamboo/__init__.py bamboo/app.py


項目目錄結構是這樣的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/root/code/
├── bamboo
│  ├── app.py
│  ├── config.py
│  ├── __init__.py
│  ├── static
│  ├── templates
│  └── views
├── gunicorn.conf
├── logs
│  ├── access.log
│  ├── error.log
│  ├── supervisord.log
│  ├── supervisor_err.log
│  └── supervisor_out.log
├── manage.py
├── requirements.txt
├── run.py
├── sweep.py
└── venv

編輯bamboo/app.py和bamboo/views/main.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## app.py
from flask import Flask
 
def create_app():
  app = Flask(__name__)
 
  # do something
 
  register_blueprints(app)
  return app
 
 
# 用來注冊視圖的路由
def register_blueprints(app):
  from bamboo.views import main, error
  for i in (main, error):
    app.register_blueprint(i.bp)
 
## main.py
from flask import render_template, Blueprint
 
bp = Blueprint('main', __name__)
 
 
@bp.route('/')
@bp.route('/index')
def index():
  return '<h1>Hello, Bamboo!</h1>'

安裝Gunicorn

Gunicorn是一個wsgi服務器, 我們將通過它來啟動我們的web服務。

?
1
2
# 注意我們是通過pip來安裝,所以該模塊所有文件都是在venv里面
pip install gunicorn

可以進入目錄vevn/bin下查看是否存在gunicorn命令

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 這里我們編輯下manage.py文件,具體文件路徑請查看上文中的目錄結構
## manage.py
 
from bamboo.app import create_app
from flask.ext.script import Manager, Server, Shell
 
app = create_app()
manager = Manager(app)
 
def make_shell_context():
  # 用于shell使用
  pass
 
manager.add_command('shell', Shell(make_context=make_shell_context))
manager.add_command('runserver', Server(
  use_debugger=True,
  use_reloader=True,
  host='127.0.0.1',
  port=5000
))
 
if __name__ == '__main__':
  manager.run()

運行一下manage.py

?
1
2
3
4
5
6
# 不適用gunicorn運行
python manage.py runserver
 
# 使用gunicorn 運行
# 這里需要注意一下, 冒號前面的是文件名也就是manage.py而后面的是應用的名稱。我在這里載過跟頭。因為服務器需要接受一個wsgi的應用而manager = Manager(app)不是一個wsgi應用所以報錯
gunicorn manage:app

我們創建一個gunicorn配置文件gunicorn.conf并把他放到code目錄下

?
1
2
3
4
## gunicorn.conf
 
workers=3
bind='127.0.0.1:5000'

安裝Nginx

我們通過nginx來反向代理我們的服務。

?
1
2
# 首先下載一個nginx
sudo apt-get install nginx

我們可以訪問我們的域名或IP地址,如果出現Nginx的提示就表示安裝成功了。
nginx安裝在/etc/nginx/目錄下, 我們把項目的配置文件放到/etc/nginx/sites-available/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server{
  listen 80;
  server_name xxx.xxx.xxx.xxx;
 
  # nginx log信息, 需要創建logs目錄
  access_log /root/code/logs/access.log
  error_log /root/code/logs/error.log
 
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header HOST $host;
    proxy_redirect off;
    if (!-f $request_filename){
      proxy_pass http://127.0.0.1:5000;
      break;
    }
  }
}

需要創建一個軟鏈接到/etc/nginx/sites-enabled/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 這里bamoo只是文件名你也可以取自己的項目名稱
ln -s /etc/nginx/sites-available/bamboo /etc/nginx/sites-enabled/bamboo
 
# 然后檢查nginx有沒有錯誤
nginx -t
 
# 重新啟動服務
service nginx restart
安裝Supervisor
 
supervisor用來監控進程,并在進程掛掉的時候自動重啟它。
 
# 這里需要把它安裝到系統中
sudo pip install supervisor
 
# 生成配置文件
sudo echo_supervisord_conf > /etc/supervisord.conf
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 編輯/etc/supervisord.conf,并在最后一行加入一下字段
# 這樣配置文件會將/etc/supervisor/conf.d下所有.conf結尾的都會導入進來
[include]
files = /etc/supervisor/conf.d/*.conf
 
# 在創建一個配置文件到/etc/supervisor/conf.d/bamboo.conf
[program:bamboo]
command=/root/code/venv/bin/gunicorn manage:app -c /root/code/gunicorn.conf
directory=/root/code/
user=root
autostart=true
autorestart=true
stdout_logfile=/root/code/logs/supervisor_out.log
stderr_logfile=/root/code/logs/supervisor_err.log

通過supervisorctl工具用來管理supervisor維護的進程

?
1
2
3
4
5
6
7
# reread來檢測修改的配置內容, update來更新
# 這樣就可以看到bamboo的process啟動了
supervisorctl reread
supervisorctl update
 
# 也可以通過supervisorctl status 查看所有的項目進程
bamboo              RUNNING  pid 12928, uptime 2:13:05

這樣我們的web服務已經啟動起來了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 2019韩国最新三级 | 亚洲精品视频专区 | 日本sss在线高清观看 | 妇伦小说 | 九色PORNY真实丨国产免费 | h在线动漫 | 呜嗯啊野战h呻吟男男双性 污小说在线阅读 | 高清在线免费观看 | 涩涩漫画软件 | 亚洲精品无码不卡 | 国产精品久久久久久久久免费 | 日韩在线免费播放 | 日本最新伦中文字幕 | 女人叉开腿让男人桶 | www.色老板 | 国产亚洲自愉自愉 | 五月天婷婷网亚洲综合在线 | 日韩在线视频在线 | 成人久久伊人精品伊人 | 亚洲精品老司机福利在线播放 | 狠狠色综合久久婷婷色天使 | 深夜福利一区 | 韩国免费视频 | 胸奶好大好紧好湿好爽 | 三级小说网站 | 日韩一区二区三区免费 | 免费又爽又黄禁片视频在线播放 | 闺蜜的样子小说安沁在线阅读 | 国产老妇 | 亚洲精品丝袜在线一区波多野结衣 | 亚洲精品久久啪啪网站成年 | 成人伊在线影院 | 岛国a香蕉片不卡在线观看 荡女淫春2古装 | 草逼视频网址 | 91极品女神久色在线播放 | 亚洲天堂网在线观看视频 | 色欲麻豆国产福利精品 | 四虎黄色网址 | 国产真实一区二区三区 | 18美女光胸光屁屁洗澡 | 美女扒开屁股让男人进去 |