Ubuntu16.04下Django项目的部署
起飞前的准备
# 首先在Ubuntu的当前用户zhang下新建data文件夹,然后在data文件夹下新建你的项目目录
root@zhang-virtual-machine:/home/zhang/data# mkdir my_web_project
root@zhang-virtual-machine:/home/zhang/data# ls
my_web_project
root@zhang-virtual-machine:/home/zhang/data# cd my_web_project/ # virtualenv --no-site-paceages env 创建虚拟环境,--no-site-packages 表示一个干净的目录,不会安装没必要的包
root@zhang-virtual-machine:/home/zhang/data/my_web_project# virtualenv --no-site-packages env
Using base prefix '/usr'
New python executable in /home/zhang/data/my_web_project/env/bin/python3
Also creating executable in /home/zhang/data/my_web_project/env/bin/python
Installing setuptools, pip, wheel...done.
root@zhang-virtual-machine:/home/zhang/data/my_web_project# ls
env
root@zhang-virtual-machine:/home/zhang/data/my_web_project# cd env/
root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# ls
bin include lib pip-selfcheck.json # 激活虚拟环境
root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# source bin/activate #查看版本,查看到当前的环境下没有太多的包
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# pip -V
pip 10.0.0 from /home/zhang/data/my_web_project/env/lib/python3.5/site-packages/pip (python 3.5)
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# pip list
Package Version
---------- -------
pip 10.0.0
setuptools 39.0.1
wheel 0.31.0 # 退出虚拟环境
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# deactivate
root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# source bin/activate
# 安装1.10.4版本的Django
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# pip install django==1.10.4
Collecting django==1.10.4
# 安装uwsgi
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project/env# pip install uwsgi
Collecting uwsgi
第一步:uwsgi
首先测试uwsgi,并用uwsgi启动服务
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello uwsgi!"]
刚开始按照网上说的用这个方法启动老是报错
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# python app.py
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# uwsgi --http :8008 --wsfi-file app.py
uwsgi: unrecognized option '--wsfi-file'
getopt_long() error 最后发现启动的方式默认是socket的方式
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# uwsgi --http-socket :8008 --wsgi-file app.py
*** Starting uWSGI 2.0.17 (64bit) on [Tue Apr 17 19:05:22 2018] ***
compiled with version: 5.4.0 20160609 on 18 April 2018 01:30:18
os: Linux-4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 pkill -f -9 uwsgi #停止uwsgi
第二步:nginx
# 直接在命令行下运行 apt-get install nginx
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# apt-get install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
nginx的启动与关闭
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# service nginx stop
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# ps aux | grep nginx
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# service nginx start
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project# ps aux | grep nginx
root 55075 0.0 0.0 124968 1420 ? Ss 19:24 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 55076 0.0 0.1 125332 3072 ? S 19:24 0:00 nginx: worker process
www-data 55077 0.0 0.1 125332 3072 ? S 19:24 0:00 nginx: worker process
www-data 55078 0.0 0.1 125332 3072 ? S 19:24 0:00 nginx: worker process
www-data 55079 0.0 0.1 125332 3072 ? S 19:24 0:00 nginx: worker process
root 55082 0.0 0.0 14220 988 pts/20 S+ 19:24 0:00 grep --color=auto nginx
(env) root@zhang-virtual-machine:/home/zhang/data/my_web_project#
nginx的配置文件都在
# /etc/nginx/...
(env) root@zhang-virtual-machine:/etc/nginx# ls
conf.d fastcgi_params koi-win nginx.conf scgi_params sites-enabled uwsgi_params
fastcgi.conf koi-utf mime.types proxy_params sites-available snippets win-utf
此时访问浏览器可以看到如下:
第三步:Django+uwsgi+nginx
nginx的配置文件所在路径:
/etc/nginx/nginx.conf
uwsgi 所在路径:项目更目录
启动项目:
uwsgi --ini demo.ini & #利用配置文件启动,默认不在终端显示
/etc/init.d/nginx start #启动nginx
附加:
supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)。
安装:apt-get install supervisor
配置 vim /etc/supervisor/supervisor.conf
[supervisord]
http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
;http_port=127.0.0.1:9001 ; (alternately, ip_address:port specifies AF_INET)
;sockchmod=0700 ; AF_UNIX socketmode (AF_INET ignore, default 0700)
;sockchown=nobody.nogroup ; AF_UNIX socket uid.gid owner (AF_INET ignores)
;umask=022 ; (process file creation umask;default 022)
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (logging level;default info; others: debug,warn)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200) ;nocleanup=true ; (don't clean up tempfiles at start;default false)
;http_username=user ; (default is no username (open system))
;http_password=123 ; (default is no password (open system))
;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)
;user=chrism ; (default is current user, required if root)
;directory=/tmp ; (default is not to cd during start)
;environment=KEY=value ; (key value pairs to add to environment) [supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor") ; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor. ;[program:theprogramname]
;command=/bin/cat ; the program (relative uses PATH, can take args)
;priority=999 ; the relative start priority (default 999)
;autostart=true ; start at supervisord start (default: true)
;autorestart=true ; retstart at unexpected quit (default: true)
;startsecs=10 ; number of secs prog must stay running (def. 10)
;startretries=3 ; max # of serial start failures (default 3)
;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait before SIGKILL (default 10)
;user=chrism ; setuid to this UNIX account to run the program
;log_stdout=true ; if true, log program stdout (default true)
;log_stderr=true ; if true, log program stderr (def false)
;logfile=/var/log/cat.log ; child log path, use NONE for none; default AUTO
;logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;logfile_backups=10 ; # of logfile backups (default 10) [program:oldboy]
command=/usr/local/bin/uwsgi /data/oldboy/oldboy.ini ;命令
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
stopwaitsecs=10 ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将使用SIGKILL杀进程
user=chrism ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/var/log/cat.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
配置文件
启动:
supervisord /etc/supervisor.conf #这个总是报错,不知道什么原因
或
/etc/init.d/supervisor start #这个比较好用
# 通过配置文件启动
uwsgi --ini uwsgi.ini # 这样启动之后后台可以看到,不方便
uwsgi --ini uwsgi.ini & # 建议这种,启动之后后台运行
# 会生成两个文件
PID文件 他是标识这个程序所处的状态
SOCK文件 他是用来和其他程序通信的
# 停止uwsgi
uwsgi --stop uwsgi.pid # 重载配置
uwsgi --reload uwsgi.ini
Ubuntu16.04下Django项目的部署的更多相关文章
- Ubuntu 14.04下Django+MySQL安装部署全过程
一.简要步骤.(Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便一些有需要的童鞋,大神勿喷~ 二.Python的安装 由于博主使用的环境是 ...
- 【转】Ubuntu 14.04下Django+MySQL安装部署全过程
一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便一些有需要的童鞋,大神勿喷~ 二.Python的安装 由于博主使用的 ...
- Ubuntu16.04下部署 nginx+uwsgi+django1.9.7(虚拟环境pyenv+virtualenv)
由于用的新版本系统,和旧的稍有差别,在网上搜了很多相关资料,搞了三天终于搞好在Ubuntu16.04下的部署,接下来就详细写写步骤以及其中遇到的问题.前提是安装有虚拟环境pyenv+virtualen ...
- Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Mongodb官网卸载部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 前期博客 Ubuntu16.04下Mongodb官网安装部署步骤(图文详解)(博主推荐) https://docs.mongodb.com/manual/tutorial/ins ...
- Ubuntu16.04下Mongodb官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 在这篇博客里,我采用了非官网的安装步骤,来进行安装.走了弯路,同时,也是不建议.因为在大数据领域和实际生产里,还是要走正规的为好. Ubuntu16.04下Mongodb(离线安 ...
- Ubuntu16.04下安装数据库oracle客户端
在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...
- Ubuntu16.04下caffe CPU版的详细安装步骤
一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...
随机推荐
- Apache2 FastCGI C Demo
安装依赖 sudo apt-get install libapache2-mod-fastcgi a2enmod fastcgi sudo apt-get install libfcgi-dev li ...
- xampp下bugfree部署
以Bugfree3.0.4为例,讲解如何搭建LAMP架构的Web服务器. Bugfree是一个XAMPP架构的网站,XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的搭建XAMP ...
- [luoguP2770] 航空路线问题(最小费用最大流)
传送门 模型 求最长两条不相交路径,用最大费用最大流解决. 实现 为了限制经过次数,将每个点i拆成xi,yi. 1.从xi向yi连一条容量为1,费用为1的有向边(1<i<N), 2.从x1 ...
- 27深入理解C指针之---字符串基础
一.字符串:是以ASCII字符NUL结尾的字符序列,NUL表示为\0 1.定义:将字符按顺序存储在数组中,以NUL结尾. 2.特征: 1).每个字符串长度只是包含所有的字符,不包括最后的NUL,手动分 ...
- webUpload上传插件的一些bug
当你给上传按钮的父级或当前元素添加一个display:none时 你可能遇到了这样的一个问题.当你在点击显示这个按钮时 你发现按钮失效了 你需要点击F12才可以. flash 版本太低,请至少大于等于 ...
- hdu 1787(欧拉函数)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Delphi GDI对象之脱屏位图(Offscreen Bitmaps),也叫内存位图
http://www.cnblogs.com/pchmonster/archive/2012/07/09/2583613.html 脱屏位图(Offscreen Bitmaps) 脱屏位图,也叫内存位 ...
- Wannafly挑战赛2 D.Delete(拓扑排序 + dij预处理 + 线段树维护最小值)
题目链接 D.Delete 考虑到原图是个DAG,于是我们可以求出每个点的拓扑序. 然后预处理出起点到每个点的最短路$ds[u]$, 和所有边反向之后从终点出发到每个点的最短路$dt[u]$. 令点 ...
- 机器学习之SVM
一.线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线) 假如说,我们 ...
- window下安装tensowflow
tensorflow0.12版本支持windows,但是需要python3.5.x.而我的本机只安装了Anaconda2.7版本.因此我们可以在Anaconda中新增Python3.5的环境. 首先, ...