Linux 下部署Django项目

Linux 下部署Django项目

说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11

安装Django、Nginx和uWSGI

1.确定已经安装了2.7版本的Python; 
2.安装python-devel 
yum install python-devel 
3.安装uwsgi 
pip install uwsgi

测试uwsgi是否能正常工作

1.新建一个index.py;

# index.py
def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
    return "Hello World"
  • 1
  • 2
  • 3
  • 4

2.uwsgi –http :8000 –wsgi-file index.py 
浏览器访问8000端口看是否有hello world输出 
注意:确保8000端口能被外网访问

测试Django能否正常工作

$ cd /var/www/ 
$ django-admin startproject mysite 
$ cd mysite 
$ python manage.py runserver 0.0.0.0:8000 
浏览器访问8000端口看是否有hello world输出

测试uwsgi是否能和django集成

uwsgi --http :8000 --chdir=/var/www/mysite --module mysite.wsgi 
or 
uwsgi --http :8008 --chdir /var/www/mysite --wsgi-file weixin/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9192

在浏览器中访问8000端口,看能否正常访问django网站。

参数说明:

# http : 协议类型和端口号
# processes : 开启的进程数量
# workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
# chdir : 指定运行目录(chdir to specified directory before apps loading)
# wsgi-file : 载入wsgi-file(load .wsgi file)
# stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
# threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
# master : 允许主进程存在(enable master process)
# daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常
用的,还是把运行记录输出到一个本地文件上。
# daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常
用的,还是把运行记录输出到一个本地文件上。
# vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

配置Nginx,使Nginx能为Django提供服务

在/etc/nginx/conf.d/下创建一个针对mysite项目的配置文件,详细如下:

# /etc/nginx/conf.d/mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
    server 127.0.0.1:8000; # for a web port socket
}

# configuration of the server
server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name .example.com; # substitute your machine‘s IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django 的static和 media目录
    # 如果没有static或media目录,你需要先创建
    location /media  {
        alias /var/www/mysite/media;
    }  

    location /static {
        alias /var/www/mysite/static;
    }

    # 将所有非静态文件的请求转给django server处理,这里的django server用的是uwsgi。
    location / {
        uwsgi_pass  django;
        include  /var/www/mysite/uwsgi_params;
    }
}
#你可以从/etc/nginx/uwsgi_params复制一个拷贝到/var/www/mysite/uwsgi_params。
$ cp /etc/nginx/uwsgi_params /var/www/mysite/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

需要补充说明的是,在/etc/nginx/nginx.conf文件中,在最后一行的配置是include /etc/nginx/conf.d/*.conf,也就是说,/etc/nginx/conf.d/mysite_nginx.conf是会被包含在/etc/nginx/nginx.conf中的。

重启nginx服务器,验证访问结果

/etc/init.d/nginx restart 
通过浏览器访问80端口,你发现了什么?502 Bad Gateway?是不是?想一想,这是为什么呢?原因是你访问80端口时,请求的资源不是static,也不是media,这个时候Nginx就把请求转给upstream django,upstream的网关配置的127.0.0.1:8000,而127.0.0.1:8000是要靠uwsgi启动的,所以报了一个502 Bad Gateway。你,明白了吗?

注:CentOS 7启动服务的命令是systemctl restart nginx.service

启动uwsgi,再次验证结果

执行下面一个命令,启动uwsgi。 
uwsgi --socket :8000 --chdir=/var/www/mysite --module mysite.wsgi 
重启Nginx服务/etc/init.d/nginx restart,再次通过浏览器访问80端口试试看。是不是成功了?

注:CentOS 7启动服务的命令是systemctl restart nginx.service

如何使uwsgi以配置文件运行?Configuring uWSGI to run with a .ini file

创建一个mysite_uwsgi.ini文件,内容如下:

[uwsgi]
socket=:8000
chdir = /var/www/mysite
#wsgi-file = mysite/wsgi.py
module=mysite.wsgi:application
processes = 10
threads = 2
#django<1.4,必须指定env和module
env = DJANGO_SETTINGS_MODULE=mysite.settings

# clear environment on exit
vacuum = true
safe-pidfile = /tmp/project-master.pid # create a pidfile
harakiri = 20 # respawn processes taking more than 20 seconds
limit-as = 128 # limit the project to 128 MB
max-requests = 5000 # respawn processes after serving 5000 requests
daemonize = /var/log/uwsgi/mysite.log # background the process & log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

执行命令uwsgi --ini mysite_uwsgi.ini即可运行

如何以Emperor模式运行?

什么是Emperor模式?,官网说的很清楚,如下:

uWSGI can run in ‘emperor’ mode. In this mode it keeps an eye on a directory of uWSGI config files, and will spawn instances (‘vassals’) for each one it finds.

Whenever a config file is amended, the emperor will automatically restart the vassal.

按下面的步骤操作,即可以Emperor模式运行uwsgi: 
1. create a directory for the vassals 
sudo mkdir /etc/uwsgi 
sudo mkdir /etc/uwsgi/vassals 
2. symlink from the default config directory to your config file 
sudo ln -s /path/to/your/mysite/mysite_uwsgi.ini /etc/uwsgi/vassals/ 
3. run the emperor 
uwsgi --emperor /etc/uwsgi/vassals --uid nginx --gid nginx

如何创建uwsgi服务?

在Linux中,一个服务其实就是一个shell脚本。在CenOS6中,服务脚本一般都在/etc/init.d/目录下。 
首先我们在/etc/initd/目录下创建一个uwsgi文件,文件内容如下:

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: uwsgi
# Required-Start: $syslog $remote_fs
# Should-Start: $time ypbind smtp
# Required-Stop: $syslog $remote_fs
# Should-Stop: ypbind smtp
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
# Check for missing binaries (stale symlinks should not happen)
UWSGI_BIN="/usr/local/bin/uwsgi"
UWSGI_EMPEROR_MODE=true
UWSGI_VASSALS="/etc/uwsgi/vassals/"
UWSGI_OPTIONS="--uid nginx  --gid nginx  --logto /var/log/uwsgi/uwsgi.log"
lockfile=/var/lock/subsys/uwsgi
UWSGI_OPTIONS="$UWSGI_OPTIONS --autoload"
if [ "$UWSGI_EMPEROR_MODE" = "true" ] ; then
    UWSGI_OPTIONS="$UWSGI_OPTIONS --emperor $UWSGI_VASSALS"
fi
case "$1" in
    start)
    echo "Starting uWSGI ... "
    daemon $UWSGI_BIN $UWSGI_OPTIONS &
    ;;
    stop)
    echo "Shutting down uWSGI ... "
    killproc $UWSGI_BIN
    ;;
    restart)
    $0 stop
    $0 start
    ;;
    status)
    echo -n "Checking for service uWSGI "
    status $UWSGI_BIN
    ;;
    *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac
exit 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

然后,我们可以使用此脚本来管理uwsgi,如下:

/etc/init.d/uwsgi start 
/etc/init.d/uwsgi stop 
/etc/init.d/uwsgi restart 
/etc/init.d/uwsgi status

需要注意的是,日志文件夹的所属权应该归配置文件中指定的用户nginx 
$ chown nginx.nginx /var/log/uwsgi -R

如何设置开机起动uwsgi?

把启动uwsgi的命令添加到“/etc/rc.local”文件中即可。

多站点部署问题

#Simple HTTP server
server {
    listen   80;
    root /usr/share/nginx/www;
    server_name host1.example.com;
}

#Django server
server {
    listen   80;
    server_name host2.example.com;

    #...upstream config...
}

原文地址:https://www.cnblogs.com/mmdln/p/9068502.html

时间: 2024-08-08 01:23:01

Linux 下部署Django项目的相关文章

关于在linux下部署php项目

废话不说,直奔主题: 1.关于session的使用: session_start()之前不能有任何输出. 比如 echo 'hi' 或者一般的html标签 或者空行 2.header跳转页面,和session一样,之前都不能有任何输出. 3.在iframe框架中,别忘了使用session前,在载入的页面中一定写入session_start..不然调整了一天,突然菊花一惊,发现session不能用,还以为是页面跳转后session失效了呢. 4.关于mysql数据库的部署. 所有mysql数据库在

6.linux下部署 web 项目

安装java 1.下载 linux 环境的jdk 2.上传该压缩包到 linux 系统中并且解压 tar -zxvf 压缩包名 3.配置环境变量并且刷新配置 export JAVA_HOME=/alidata/java/jdk1.8.0_111 export PATH=$JAVA_HOME/bin:$PATH source /etc/profile 安装tomcat 1.在官网下载好tomcat的压缩包 2.安装 tomcat 之前必须安装好java的环境 3.进入到 tomcat 中 bin

linux中部署django项目

通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求. 可见,uwsgi的作用就类似一个桥接器.起到桥梁的作用. Linux的强项

腾讯云ubuntu16.04下部署django项目

服务器:腾讯云 s2 标准版 系统版本:ubuntu 16.04 django版本:1.10 项目的部署步骤: 一:安装uwsgi 1.安装uwsgi之前首先要配置c-python解释器:sudo apt-get install build-essential python-dev 2.安装uwsgi:sudo pip install uwsgi 3.测试是否安装成功uwsgi --http :8000 --wsgi-file test.py 可以看到安装成功,先把uwsgi结束 二: 1.在我

CentOS7下部署Django项目详细操作步骤

以下文章摘抄自:https://www.django.cn/article/show-4.html  谢谢大佬的好文章,已经亲测 详细步骤(下面步骤都是ROOT权限执行): 一.更新系统软件包yum update -y 二.安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel s

Centos7运维(2)-第一次在Linux下部署PHP项目,采用LAMP网站架构(Linux+Apache+MySQL+PHP)

LAMP指的Linux(操作系统).Apache(HTTP 服务器),MySQL(数据库软件) 和PHP(有时也是指Perl或Python) 的缩写,一般用来搭建web 服务器. (1)Mysql 5.6 1.下载mysql-server文件 [[email protected] ~]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-server文件 [[email protect

Linux下部署springboot项目的步骤及过程

最近在研究将springboot项目部署到Linux服务器上,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上.我是在idea上的项目,所以我就基于此说下过程. (一)打包你的项目 1.在pom文件中添加springboot的maven插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId&g

Linux下部署web项目

转载声明: http://www.cnblogs.com/xdp-gacl/p/4097608.html 解压tomcat服务器压缩包 配置环境变量 tomcat服务器运行时是需要JDK支持的,所以必须配置好JDK用到的那些环境变量 编辑/etc下的profile文件,加上如下内容: 修改tomcat服务器的启动端口 修改完server.xml文件之后,保存,退出. 3.1.启动Tomcat服务器 进入tomcat服务器的bin目录,然后执行"./startup.sh"命令启动Tomc

linux下部署项目问题

1. 今天linux下部署thinkphp项目,数据库用的mysql. 页面其他都是正常的,但是从数据库中取出的数据都是乱码.最后查了资料 解决方案: 在ThinkPHP里面 Library\Think\Db\Driver.class.php 103行 后加上 $this->linkID[$linkNum] ->query("set names utf8");