环境ubuntu
首先是安装pyenv,要保证系统有git使用官方提供的自动安装工具
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
将下面文件放在.bash里
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
然后重启控制台 exec$shell
python配置
* $ pyenv versions -- 查看系统当前安装的python列表
* $ pyenv install -v 3.5.1 -- 安装python
* $ pyenv uninstall 2.7.3 -- 卸载python
* $ pyenv rehash -- 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions/*/bin/*,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
python切换
* $ pyenv global 3.4.0 -- 设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
* $ pyenv local 2.7.3 -- 设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。
pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。
* $ pyenv shell pypy-2.2.1 -- 设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。
* $ pyenv shell --unset
python优先级
shell > local > global
由于使用官方直接下载太慢了需要使用国内的源
pyenv搜狐镜像源加速:http://mirrors.sohu.com/python/
将下载的文件放在pyenv 的 cache文件夹下
执行pyenv install 对应版本号可以直接安装
创建虚拟环境 $ pyenv virtualenv python版本号 虚拟环境名字
若不指定python 版本,会汇报认使用当前环境python版本。
列出当前虚拟环境 pyenv virtualenvs
激活虚拟环境 pyenv activate
退出虚拟环境 pyenv deactivate
删除虚拟环境 pyenv uninstall my-virtual-env
下一步修改pip源地址
创建一个.pip/pip.conf
写入
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
就可以使用清华的python源,这个源和pypi的基本保持同步。
下一步使用gunicorn部署应用
主要配置参数
-c 使用配置文件
-b 绑定的ip:port
-w 工作进程数 推荐为cpu核的2-4倍 默认一个
--worker-class 工作方式 默认为同步
--worker-connections INT 最大连接数
--reload 代码改变重新加载
-D 是否为守护进程
日志相关
--access-logfile FILE
--error-logfile FILE
以上就是gunicorn基本的使用
下一步使用nginx反向代理gunicorn
什么是反向代理?
反向代理指的就是服务方和代理是在一个局域网中。
请求方到了这个代理,代理通过负载均衡 将请求发送到具体执行请求的机器,
再将请求发送回去。请求方不关心后台具体是那个服务器执行任务的。
而正向代理相反,请求方和代理服务器属于一个局域网。在服务方看来请求相当于是
代理发送过来的。
对于一些服务,直接使用gunicorn也可以。但是要配置https,使用nginx可以很方便的
配置,所以就加一个nginx
具体配置参考自http://www.cnblogs.com/hunttown/p/5759959.html
在sites-enable文件夹下可以将不同虚拟主机的配置文件分开来写。
运行nginx -t 检查配置文件
nginx -s reload进行重新加载
使用sentry进行日志管理
https://sentry.io/
可以很简单的集成到程序中,由于要给sentry发送日志,不可避免的会带来一些
网络开销,对于大多数网站来说这个开销影响很小。
当网站全部配置好后发现从网页上面打不开,后端程序也没有请求接收。检查刚才的配置发现没问题。
后来排查发现是这个新买的腾讯云服务器的安全控制那里只开放的公网的22端口,在安全策略中加入
80 443端口程序可以正常运行
gunicorn官方文档 http://docs.gunicorn.org/en/stable/settings.html
pyenv地址 https://github.com/yyuu/pyenv/