共计 3407 个字符,预计需要花费 9 分钟才能阅读完成。
Step1 安装系统环境
Ubuntu 服务器选择是阿里云的 ECS 服务,ECS 提供单独的内存 \CPU\ 带宽 \ 存储规格可以选择,并且提供合适的镜像可以安装。安装镜像后通过 ssh 进行远程管理,配置。配置的自由程度非常高,也适合进行远程的编程和调试,作为编程调试的服务器和测试服务器非常棒。
服务器的环境:
* 确认系统版本
cat /proc/version
Linux version 3.13.0-95-generic (buildd@lgw01-58) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #142-Ubuntu SMP Fri Aug 12 17:00:09 UTC 2016
-
安装必要的软件
apt-get install Python3 python3-dev build-essential mysql nginx
pip install uwsgi
Step2 部署运行环境
Flask 应用的部署是通过 uWSGI 发布 Nginx 上运行的。这个结构简单来说 Nginx 是一个类似 apache 的提供静态网页的服务器,并不能直接运行和部署 python 的应用(Flask 应用),因此需要 uWSGI 对 Flask 应用进行解析和运行,Nginx 与 uWSGI 进行通信并提供 Web 服务。
创建应用目录
在部署之前先在 /work 下面创建应用目录,并将代码从服务器上同步下来。
mkdir /work/demoapp/
cd /work/demoapp/
git clone git://****
配置 uWSGI
在应用目录中创建一个 uWSGI 的配置文件/work/demoapp/uwsgi_configuration.ini
,配置内容如下:
[uwsgi]
# 应用目录
base = /work/demoapp/
# 应用名称
app = demoapp
# 获取 app 的 python 模块名称
module = icetea_server
# 在模块中的 app 名称
callable = app
# 如果是使用 venv 的,使用这个 python 环境
# home = %(base)/venv
pythonpath = %(base)
# 用于和 nginx 通讯的 socket 文件路径
socket = /var/www/demoapp/icetea_uwsgi.sock
# socket 文件的权限
chmod-socket = 664
# log 文件的路径
logto = /var/log/uwsgi/icetea_uwsgi.log
创建上述中涉及到的两个目录,/var/www/demoapp/ 目录用于存放应用修改的文件,例如此时的 socket 文件以及其他的临时文件,/var/log/uwsgi 存放应用的 log 文件,这两个目录 chown 到当前用户,然后在当前用户下,可以通过 uWSGI 使用此配置文件运行。
sudo mkdir /var/www/demoapp/
sudo chown demo:demo /var/www/demoapp/
sudo mkdir /var/log/uwsgi/
sudo chown demo:demo /var/www/uwsgi
uwsgi --ini /var/www/demoapp/demoapp_uwsgi.ini
多数情况下,uWSGI 应该以系统服务运行。并且 uWSGI 提供了 emperor 模式管理多个 uWSGI 的应用。先切换到 root 模式创建一个服务配置文件sudo touch /etc/init.d/uwsgi.conf
,使用 emperor 模式管理 /etc/uwsgi/vassals 下面的 uwsgi 的 app 配置文件。
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn
env UWSGI=/var/www/demoapp/venv/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
同样在 root 模式下,创建 /etc/uwsgi/vassals
目录。并将之前 demoapp 的 uwsgi 配置文件链接到此文件目录下。
sudo mkdir /etc/uwsgi && sudo mkdir /etc/uwsgi/vassals
sudo ln -s /var/www/demoapp/demoapp_uwsgi.ini /etc/uwsgi/vassals
然后可以启动 uWSGI 服务sudo service uwsgi start
,由于此时 uwsgi 服务的运行用户是 www-data,因此将之前创建的存放 socket 的文件目录以及存放 log 的文件目录的用户更改为 www-data。
sudo chown -R www-data:www-data /var/www/demoapp/
sudo chown -R www-data:www-data /var/log/uwsgi/
配置 Nginx
配置好的并已经成功启动的 uwsgi 服务,可以解析和运行 flask 应用,现在需要配置 nginx 和 uwsgi 服务通信将 Flask 应用部署为 web 服务。首先删除 nginx 的默认网站。
sudo rm /etc/nginx/sites-enabled/default
如果安装之前版本的 nginx,默认网站可能存在于 /etc/nginx/conf.d 文件夹中
在应用目录中为应用创建 nginx 的配置文件。
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
location / {try_files $uri @yourapplication;}
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
}
}
连接到 /etc/nginx/conf.d/ 文件夹中,并重启 nginx 服务。
sudo ln -s /var/www/demoapp/demoapp_nginx.conf /etc/nginx/conf.d/
sudo /etc/init.d/nginx restart
OK, 配置成功。
更多参考
Nginx+uWSGI+Supervisor 在 Ubuntu 上部署 Flask 应用 http://www.linuxidc.com/Linux/2016-07/133064.htm
Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm
Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm
Nginx+uWSGI+Django+Python 应用架构部署 http://www.linuxidc.com/Linux/2015-10/124183.htm
Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django http://www.linuxidc.com/Linux/2015-04/116397.htm
Flask+uWSGI+Nginx+Ubuntu 部署教程 http://www.linuxidc.com/Linux/2016-06/132690.htm
Ubuntu 16.04 下安装部署 Nginx+uWSGI+Django1.9.7 http://www.linuxidc.com/Linux/2016-07/133484.htm
Nginx+uWSGI+Django 在 Ubuntu 下的部署 http://www.linuxidc.com/Linux/2016-07/133490.htm
Linux 上利用 Nginx 代理 uWSGI 处理 Flask Web 应用 http://www.linuxidc.com/Linux/2016-08/134164.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135364.htm