windows server部署flask项目

部署环境
– windows server
– python3.6
– nginx

使用tornado作为flask的启动服务器

安装依赖

安装tornado

pip install tornado

可能会需要的包

pip install pycurl

创建启动文件

在flask项目根目录下创建tornado_server.py


import sys from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from flaskrun import app if len(sys.argv) == 2:   port = sys.argv[1] else:   port = 5000 http_server = HTTPServer(WSGIContainer(app)) http_server.listen(port) IOLoop.instance().start()

其中文件中app指的是flask项目的核心对象, 视情况修改, port为端口.

启动flask项目:

python tornado_server.py

配置nginx反向代理

为nginx添加一条服务器配置:

server {
  listen 443 default ssl; # 或者使用80端口
  # 这里填写你自己的域名(或者ip)
  server_name mydomain.com  www.mydomain.com;
    # 如果需要配置证书可以在这里配置
  location / {
      proxy_pass http://127.0.0.1:5000;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass_header Set-Cookie;
 }
 }

注意, 反向代理的端口, 和 tornado_server文件中使用的端口一致.
最后, 重启nginx服务器即可(可到任务管理器里结束任务再启动)

python连接oracle

客户端环境: window server x64 + python3.6
oracle服务器版本: 10.2.*
用到的python第三方包: cx-oracle
主要参考: http://cx-oracle.readthedocs.io/en/latest/installation.html#id3

安装cx_Oracle

使用Python的Pip 包从PyPI安装cx_Oracle :

python -m pip install cx_Oracle --upgrade

配置Oracle Instant Client

下载“Basic” 即时客户端

在官网64位的即时客户端下载页面中,根据服务器版本, 下载对应的“Basic” 或者 “Basic Light”(注:带有Light的版本不支持中文)。
比如, 我们的服务器的Oracle Database版本是10.2.*, 则需要下载使用instantclient-basic-windows.x64-11.2.0.4.0。 客户端-服务端对应关系图(图片来源

客户端-服务端对应关系图

此外还需安装环境依赖:
– 对于Instant Client 18或12.2安装VS 2013
– 对于Instant Client 12.1安装VS 2010
– 对于Instant Client 11.2,请安装VS 2005 64位或VS 2005 32位

本次只需要安装VS 2005 64位,但是我全部安装了。

将下载的文件解压到某个文件夹并加入到环境变量

将下载的instantclient-basic-windows.x64-11.2.0.4.0解压到一个文件夹, 比如C:\tools\instantclient_11_2, 并将该路径加入到环境变量。

复制指定文件到python/lib/site-packages

本机测试多次并不需要这步, 网上好多人说需要。但是如果执行了这步请将环境变量C:\tools\instantclient_11_2放到python文件夹的环境变量之前,也可以放到第一位。
将以下文件复制到python安装目录下的lib/site-packages

oci.dll
ocijdbc11.dll
oraocci11.dll
oraocci11d.dll

执行python连接

import cx_Oracle   
username = ''
userpwd = ''
host = ''
port = '1521'
sid = 'airtransport'


def connect_oracle_dsn(host, port, user, passwd, sid):
    """
    dsn方式连接oracle
    """
    dsn = cx_Oracle.makedsn(host, port, sid)
    connection = cx_Oracle.connect(user, passwd, dsn)
    return connection


if __name__ == '__main__':
    connection = connect_oracle_dsn(host, port, username, userpwd, sid)
    print(connection.version)
    connection.close()

常见问题

  • 环境变量或者下载的即时客户端有问题:
DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded
  • 连接信息填写错误, 比如sid填写错误:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

ubuntu下twisted安装错误解决

本机环境 python3.6, 使用pip install twisted时候出现错误:

Command ... /home/wukt/.virtualenvs/spiderenv/include/site/python3.6/twisted" failed with error code 1 in /tmp/pip-install-k06rgbaf/twisted/

同时造成无法正常安装scrapy框架。

解决方法

  1. 下载安装文件
wget https://pypi.python.org/packages/c0/7c/c1e5b61e30b7ffc96576d2a922615c8068e6996a622be813fc626cef07aa/Twisted-16.3.0.tar.bz2#md5=e044af844623e9fbcbe29f578db6053a
  1. 解压
tar jxvf Twisted-16.3.0.tar.bz2
  1. 安装
cd Twisted-16.3.0
python setup3.py install 

等待twisted安装成功后可以再使用pip install scrapy正常安装scrapy。