下载python3包 $ wget --no-check-certificate www.python.org/ftp/python/…python
'下载可能会出现证书无效问题,只要安装个ca-certificates或使用--no-check-certificate下载就能够避免下面的错误'linux
进入下载目录 $ cd 下载的目录下/nginx
解压包 $ tar -zxf Python-3.6.3.tgzgit
进入python3 $ cd Python-3.6.3web
建立安装目录 $ mkdir -p /usr/local/python3.6.3sql
进入python3目录 $ cd Python-3.6.3shell
指定到安装目录 ./configure --enable-optimizationsjson
这里编译使用的是make all没有直接使用make,all参数会编译全部子模块。flask
$ make all
$ make install
复制代码
安装 nginx -vvim
启动 nginx $ sudo /etc/init.d/nginx start 浏览器访问:你的服务器ip地址 如:http://45.45.162.162
中止 nginx $ sudo nginx -s stop
若是:有现成的项目能够把项目上传到服务器中,在git 管理项目,只须要 git clone 一下就能够了。
若是:你须要从本地上传项目文件,能够用scp命令,这里就不啰嗦用法了。总之咱们将项目文件放到服务器,而后就能够用virtualenv管理Python环境 virtualenv就很少说了。这里直接用flask demo进行。
安装虚拟环境 $ pip3 install virtualenv
建立一个包 cd myproject
建立虚拟环境 source env/bin/activate (2)在虚环境中安装flask
deactivate (4)建立启动文件 $ vim run.py (5)写入一个flask,端口本身进行设置。我这里用的80端口。 from flask import Flask app = Flask(name) @app.route("/") def hello(): return "Hello World!" if name == "main": app.run(host='0.0.0.0', port=80) (6)esc+wq保存而且退出
运行这个run.py文件 (1)先中止Nginx iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 若是想关闭打开的端口:
cd myproject $ python3 run.py
用其余电脑和手机4G访问你的服务器ip地址+上端口。 如:http://45.32.122.555:80/ 出现:Hello World! 那就成功了。
(1)进入 vim default ————————————————————————————————— # 或者直接配置
vim nginx.conf # 不过要根据其语法来配置其实最后nginx.conf仍是会调用/etc/nginx/sites-enabled/default的配置。 (3)在最后写入后 :wq保存而且退出 server { listen 80; server_name 45.32.162.255; charset utf-8; client_max_body_size 75M; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_PYHOME /root/myproject/venv; uwsgi_param UWSGI_CHDIR /root/myproject; uwsgi_param UWSGI_SCRIPT run:app; } } 解析 listen 80; # 服务器监听端口 server_name 45.32.162.255; # 这里写你的域名或者公网IP charset utf-8; # 编码 client_max_body_size 75M; # 以前写的关于GET和POST的区别 include uwsgi_params; # 导入uwsgi配置 uwsgi_pass 127.0.0.1:8000; # 转发端口,须要和uwsgi配置当中的监听端口一致 (下面会配置uwsgi) uwsgi_param UWSGI_PYTHON /root/myproject/venv; # Python解释器所在的路径(这里为虚拟环境)【路径按照本身具体的路径填写】 uwsgi_param UWSGI_CHDIR /root/myproject; # 项目根目录 uwsgi_param UWSGI_SCRIPT run:app; # 项目的主程序,即Flask app所在的位置【run是运行文件run.py文件(根据本身建立的文件名)app是falsk实例】
(4)测试一下配置文件是否正确,若检测配置文件失败,再好好检查下配置文件有没有疏漏。
$ nginx -t
复制代码
(5)此时访问Nginx服务器应该会获得502 Bad Gateway的提示,由于请求被Nginx转发了,可是并无转发服务器来处理请求(尚未配置好uwsgi)。
$ service nginx start
复制代码
# 在项目文件根目录新建配置文件uwsgi.ini(uwsgi支持多种配置文件格式: xml, ini, json等) (1)进入项目根目录 vim uwsgi.ini (3)写入如下内容后 :wq保存并退出 [uwsgi]
socket = 127.0.0.1:8000
plugins = python
chidir = /root/myproject
wsgi-file = run.py
callable = app
# uwsgi的监听端口【要跟上面nginx配置里的端口同样】 # 这行必定要加上,否则请求时会出现-- unavailable modifier requested: 0 --错误提示 # 项目根目录【路径按照本身具体的路径填写】 # flask程序的启动文件【这里我命名为run.py】 # 程序变量名 【app是falsk实例变量】
启动测试 (1)启动 Nginx cd ~
uwsgi uwsgi.ini 若一切正常的话就能够在终端上看到uwsgi的启动信息了 (3)打开浏览器 访问你的ip加上端口 例:http://45.32.162.255:80 页面出现:Hello World! # 说明Nginx和uwsgi配置成功了
# 但离真正项目上线还差一段,由于uwsgi是直接在前台启动的,当咱们的链接终端跟服务器断开的时候uwsgi进程也被关闭了,因此咱们须要uwsgi在后台运行。
解释一下上面这段话:咱们在链接服务器启动项目后能够用浏览器访问成功。可是咱们一但关闭与服务器的链接后再用浏览器访问就不行了.项目是运行在前台的也就是说.在关闭与服务器链接的同时也关闭了服务器的命令窗.运行在前台的项目也同时关闭。因此咱们须要把项目运行在后台。
后台启动项目 (1)用nohup启动:不挂断运行命令,用"&"可让你的命令在后台执行 (nohup详细的命名参数请到官网查询)注意:别漏了&号。 ps -ef|grep uwsgi 找到uwsgi进程uwsgi.ini: root 7950 1 0 14:57 ? 00:00:00 uwsgi uwsgi.ini 进程id每一个人都不同 这里的id是7950。 (4)杀掉后台的uwsgi进程kill -9 后面加上进程的id 或者 killall uwsgi杀掉所有同名为uwsgi的进程。
killall uwsgi (5)再用浏览器去访问ip 浏览器页面显示:502 Bad Gateway 表示中止掉uwsgi程序的运行 (6)项目根目录下会生成 nohup.out 记录日志
# Supervisor是python2写就的一款强大的运维工具。 目前Supervisor还不支持python3。能够经过如下方法解决。
可经过pip安装.这里用的是python3的pip.因此会安装失败.使用如下.
首先安装supervisor (默认由自带的python2.7驱动) $ apt-get install supervisor
进入默认配置文件(修改配置文件) vim supervisord.conf 按shift+G 跳到末尾 添加:files = /etc/supervisor/*.conf esc:wq 保存
执行:(若不是在root下执行在最前面加上 sudo)
$ supervisord -c /etc/supervisor/supervisord.conf
$ supervisorctl -c /etc/supervisor/supervisord.conf
# 这里补充以一下:每当修改完配置后若是出现
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.
# 请从新执行以上的两句命令
进入:supervisor shell模式表示成功
退出:supervisor shell
supervisor> exit
复制代码
建立脚本文件,生成默认配置文件. vim app.conf
进入编辑模式添加配置 [program:myproject] directory = /root/myproject/ command= uwsgi --ini /root/myproject/uwsgi.ini autostart = true startsecs = 5 autorestart = true startretries = 3 user = root redirect_stderr = true stdout_logfile_maxbytes = 20MB stdout_logfile_backups = 20 stdout_logfile = /tmp/app.log stopasgroup=false killasgroup=false esc:wq 保存并退出
# 解析 [program:myproject]:# 项目的包名字(个人是myproject)
directory = /root/myproject/:# 程序的启动目录路径
command= uwsgi --ini /root/myproject/uwsgi.ini:#启动命令 (至关于直接启动 uwsgi uwsgi.ini同样只是加上了路径)
autostart = true:# 在 supervisord 启动的时候也自动启动 startsecs = 5: # 启动 5 秒后没有异常退出,就看成已经正常启动了 autorestart = true:# 程序异常退出后自动重启 startretries = 3:# 启动失败自动重试次数,默认是 3 user = root: # 使用哪一个用户启动(我这里用的root)
redirect_stderr = true:# 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB:# stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20:# stdout 日志文件备份数
注意:stdout 日志文件,须要注意当指定目录不存在时没法正常启动,因此须要手动建立目录(supervisord会自动建立日志文件)别忘了配置以后建立下面继续。
stdout_logfile = /tmp/app.log
说下这两个有用的配置项stopasgroup和killasgroup,若是咱们用Flask等Rest服务,一般其会开启几个进程,那么若是stopasgroup不启用的话,supervisor没法重启此服务(关闭主进程时其子进程没有关闭,再开启主进程时会提示端口被占用等错误信息)。
stopasgroup=false: 默认为 false,若是设置为 true,当进程收到 stop 信号时,会自动将该信号发给该进程的子进程。若是这个配置项为 true,那么也隐含 killasgroup 为 true。例如在 Debug 模式使用 Flask 时,Flask 不会将接收到的 stop 信号也传递给它的子进程,所以就须要设置这个配置项。
killasgroup=false: 默认为 false,若是设置为 true,当进程收到 kill 信号时,会自动将该信号发给该进程的子进程。若是这个程序使用了 python 的 multiprocessing 时,就能自动中止它的子线程。
# 建立日志的文件夹
$ cd ~
$ cd /myproject/
$ mkdir tmp
复制代码
配置完成
# 还有更多的配置参数请查阅官网
#这里咱们能够看出,虽然supervisor是python2写的,但只要咱们指定运行的python3解释器去运行程序就好了。
使配置生效(每当修改主配置文件或增改子配置文件都须要执行使它生效) 须要先进入 supervisorctl update # 由于是python3执行该命令可能会报错 # 可使用如下命令:从新加载配置文件 $ supervisorctl reload
运行supervisorctl,便可进入shell里面方便的操做,如start app、restart app等。 supervisorctl
restart myproject # 从新启动 $ stop myproject # 中止 # 更多相关命令能够到官网上查阅这里不消息介绍
以上咱们只能在控制台查看运行.咱们须要web界面上查看 # 添加修改配置文件 vim supervisord.conf # 若是在vim模式下找到则对应修改 # 若是没有 按shift+G 跳至末尾添加
# IP和绑定端口
# 管理员名称
# 管理员密码
[inet_http_server]
port = 45.32.111.111:9001
username = user
password = 666666
# 若是不须要密码能够注释在最前面机上;号
# ;username = user
# ;password = 666666
# 从新加载配置文件使它生效
$ cd /etc/supervisor
$ supervisorctl reload
# 最后你须要打开你的这个端口而且重启supervisorctl
$ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
$ cd /etc/supervisor
$ supervisorctl
复制代码
用浏览器启动 # 输入你的ip和端口 45.32.111.111:9001
看到上图界面表示已经成功,以后能够经过打开Supervisor端口去监控管理你的项目一键启动/中止你的项目。
——————————————————————————————————
有什么遗漏不足的请多多指导!!!