阿里云ECS服务器部署django

参考html


服务器安装的是Centos 系统。python

uwsgi是使用pip安装的。mysql

nginx是使用yum install nginx安装。linux

python 2.7, mysql 5.5使用 yum安装。nginx


它们之间的逻辑关系以下:web


the web client <-> the web server <-> the socket <-> uwsgi <-> Django

uswgi负责从Django拿内容,经过socket传给 web server如nginx, 最后显示到 网页浏览器。sql


在django的项目下,建文件 uswgi.ini,能够不用在uswgi后面写一串选项。apache


# uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /var/www/html/
# Django's wsgi file
module          = app.wsgi:application
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
#socket          = 127.0.0.1:8001
socket		 = /tmp/site.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true
process		= 4
threads		= 2

# Django's wsgi file这个对应你本身Django项目的就好。

chdir就是Django的所在目录,和manage.py同一目录。django

其余能够默认。浏览器


一样创建nginx.conf


# nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    server unix:///tmp/site.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

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

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

    # Django media
    location /media  {
        alias /var/www/html/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /var/www/html/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /var/www/html/uwsgi_params; # the uwsgi_params file you installed
    }
}


uwsgi_pass django; 中的django和upstream django 相对应。

两头的socket名字要同样。uwsgi里要改sock的权限为666,默认的664,nginx会连不上,在/var/log/nginx/error.log里能够看到connect is denied。


听说使用socket比端口要好,注意unix://这个前缀,加上后面sock的路径,是3个///,看起来很差看。

不管使用socket仍是TCP端口,uwsgi的socket和nginx的server值要对应,不然无法接通路径。


server_name demo.mmm.com; 看文章时,把server_name这个词当作域名,给修改掉,结果nginx启动失败。能够用域名或者IP。

ln -s  /var/www/html/nginx.conf   /etc/nginx/conf.d/

连接后,这样在conf.d 配置目录里会有Django下创建的nginx.conf,比较方便。


uwsgi_params文件在/etc/nginx下面有,老外说是拷贝到Django目录下,不知道直接使用会有什么区别。


最后:

使用chkconfig nginx on  把nginx设置成自启动服务。

在/etc/rc.local里加一行 uwsgi /var/www/html/uwsgi.ini  --uid www  --gid www


我没加uid和gid,以root运行uwsgi会被警告的。


原来是打算用apache的,因此有个/var/www/html目录。mod-python报错后,不知道怎么处理。 

系统自带Python2.6,mod-python就是调用的2.6。


nginx不能从uwsgi得到数据时,就会输出nginx的默认页面。还会输出 Bad Gateway提示。


linux最大的麻烦是,程序和配置文件分散,装好一个程序,都不知道它在哪里。