Django 阿里云部署(supervisor+uwsgi+nginx)

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

  • 1 )海外服务器。
    为啥购买海外的,撂下不表,自己找度娘问问。我买的理由是:不用备案!!!。而且用的是ssd,相比阿里云便宜了不少。遇到的第一个坑是支付问题。我当时没有信用卡,用PayPal解决的。但是PayPal的汇率有点坑,7块多。而且,虽然vultr宣传是5$,实际是6$.
    1. 阿里云
      我之前的服务器快到期了。一天心血来潮,想看看有没有免费的HTTPS证书,于是看到了一个大神的网站,膜拜之心油然而生。于是我决定好好写博客,好好写代码。

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

 我是根据这个教程设置的,稍作更改。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 编码,如果不是,设置完全局后,重新建

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

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

  • 需要备案,不多说
  • 我用的是ECS,体会是阿里云在安全方面确实做得不错,但是体验上感觉不如我之前买的服务器。相应比较慢
  • 重要,请在安全组里(什么,什么是安全组,问!!!!度!!!!!娘!!!)手动添加80/443 接口,
  • 发送邮件25端口不能用,阿里专家说的。

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

    原文作者:woshiwodejia
    原文地址: https://www.jianshu.com/p/7f2ad45deee6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞