通过docker来启动程序
-docker run -d --restart always --name docker-name -v /etc/localtime:/etc/localtime:ro -p 8001:8000 containers.cisco.com /yare-core-yactrl:latest gunicorn --bind=0.0.0.0:8000 name.wsgi:application -w 4 -k gevent
-p:把容器的8000端口映射到宿主机8001
-v:主机的目录/etc/localtimet映射到容器的目录/etc/localtime:ro
–name:给容器起个名字docker-name
–restart:always 容器退出时总是重启
–privileged=true:执行容器内文件需要的权限
containers.cisco.com /yare-core-yactrl:latest指定镜像
gunicorn --bind: 绑定的端口
name.wsgi:application 执行代码里的wsgi文件
-w : 指定运行的子进程个数,加快api返回时间
-k :gevent每个进程也可以异步处理io请求
wsgi.py文件
import os
import sys
# python在import时需要搜索的目录结构,0的优先级最大
sys.path.insert(0, os.getcwd())
# router是一个py文件
from router import create_app
# application是create_app一个实例.
application = create_app()
router.py文件
# app实例作为WSGI应用
# WSGI是web服务器网关接口,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来
from flask import Flask
app = Flask(__name__)
# 同时可以包含一些变量,例如数据库的用户名密码等信息
此处顺便整理下获取目录结构
'***获取当前目录***'
print os.getcwd()
'***获取上级目录***'
print os.path.abspath(os.path.dirname(os.getcwd()))
'***获取上上级目录***'
print os.path.abspath(os.path.join(os.getcwd(), "../.."))
蓝图BLUEPRINT
第一个参数:蓝图名
第二个参数:import_name
第三个参数:规则前缀,支持多个实例
url_prefix = blue_print('routers', 'templates', [
[Ips, '/ip', '/ip/<action>'],
[Community, '/community']
])
app.register_blueprint('BLUE_PRINT_PUBLIC', url_prefix=url_prefix)