python生活不易 我用pythonPython 运维

Django 阿里云部署(supervisor+uwsgi+ng

2017-05-31  本文已影响596人  woshiwodejia

之前买个海外的服务器(vultr),闲置了半年,硬是没有用上。当时刚入行,以为自己什么都行,可是遇到几个坑就不干了!白白浪费了半年,白白送了180大洋。
下面来显摆显摆我部署遇到的坑,小白一枚,大神勿喷。

下面就是干货,以及反坑策略,咳咳,大眼睛模式开启。

 我是根据这个教程设置的,稍作更改。http://code.ziqiangxuetang.com/django/django-nginx-deploy.html

1 supervisor 配置

  [program:my_project]
  command=/usr/local/bin/uwsgi  --ini  /XXXXX/XXXXX/django_project.ini # 注意放在和manage.py 同目录 
  #  下
 
  user=wanger # 不用root
  autostart=true
  autorestart=true
  loglevel=info
  stdout_logfile=/XXXX/supervisor_info.log   ;运行日志
  stdout_logfile_maxbytes=10MB
  stderr_logfile=/XXXX/supervisor_err.log ; 错误日志
  stderr_logfile_maxbytes=10MB
  redirect_stderr=true
  exitcodes=1

权限配置,我把日志文件都配置成了wanger 的,记得权限,不然报错。

2 uwsgi

  [uwsgi]
  socket = /tmp2/my_project.sock      # nginx 中用,也可以是端口什么的
  chdir=/XXXXXX/XXXX                                     # manage.py 所在目录
  module=my_project.wsgi:application
  home=/XXXXXX/XXXX            # 我用了virtualenv 这是环境所在目录
  pidfile=/tmp/project-master.pid # 这个设置不太好,可以改到其他目录,同样也是需要设置权限
  vacuum=True
  processes=1
  master=true
  max-requests=5000
  # daemonize=XXX 这个如果用supervisor管理不用设置,不然就是 spawerror(具体忘记了)
  touch-reload = /XXXXXX/reload.txt # 这个用来重启uwsgi的,touch 这个文件就能重启。
  chmod-socket = 666 # 网上有建议用664的,我自己米有试过。
  uid = wanger
  gid = www-data

最后三行一定是设置,不然nginx报权限不足错误,Permission Denied(大概这样)

3 nginx

# configuration of the server
server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name www.XXXXXX.com; # substitute your machine's IP address or FQDN
charset     utf-8;
index index.html index.htm index.jsp index.do;
root /XXXXXXXX/XXXXXX/;     # www-data 权限 只有读权限

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

location ^~ /static {
    alias /XXXXXX/XXXXXX/static; # your Django project's static files - amend as required
}

# Finally, send all non-media requests to the Django server.
# 我用的前后端分离,下面是django的url
location ~ (/XXXXXXX/|/XXXXXXXX//) {
    uwsgi_pass  unix:///tmp2/blog_api.sock; # .ini 中设置的

    include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
     proxy_set_header    Host $host:$server_port;
     proxy_set_header    X-Real-IP $remote_addr;
     proxy_set_header    X-Forwarded-Host $host:$server_port;
     proxy_set_header    X-Forwarded-Server $host:$server_port;
     proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
}
location / {
    root /XXXXXXXX/XXXXXX/;

}

}

4 django 配置

STATIC_ROOT = os.path.join(BASE_DIR, "XXXXX/static")
TIME_ZONE = 'Asia/Shanghai'
#Email
EMAIL_HOST = 'smtp.163.com'                   #SMTP地址
EMAIL_PORT = 994                                 #SMTP端口
EMAIL_HOST_USER = 'XXXX@163.com'       #我自己的邮箱
EMAIL_HOST_PASSWORD = '********'                  #我的邮箱密码
EMAIL_SUBJECT_PREFIX = u'[Project]'            #为邮件Subject-line前缀,默认是'[django]'
EMAIL_USE_SSL = True
#管理员站点
SERVER_EMAIL = 'XXXXXXXXX@163.com'            #The email address that error messages come from, 
such as those sent to # ADMINS and MANAGERS.

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "XXX/static")

说明几点:发邮件用的是网易的163,端口是994,具体看网易的说明

mysql

    注意默认的MySQL编码可能不是utf-8 自己设置下,最好查看下没有字段 是不是utf-8 编码,如果不是,设置完全局后,重新建

最后吐槽阿里云的坑::::::》》》》》

有一天我蹲厕所,看到阿里云的一个推送邮件,一年的费用才###,我心里盘算下(对于我这个仅仅计较的人来说,是大事),咬咬牙,买了。事后遇到这么多大坑,我想当时厕所蹲久了是不是脑子缺氧

最后的体验是,我能退款吗?

上一篇 下一篇

猜你喜欢

热点阅读