之前买个海外的服务器(vultr),闲置了半年,硬是没有用上。当时刚入行,以为自己什么都行,可是遇到几个坑就不干了!白白浪费了半年,白白送了180大洋。
下面来显摆显摆我部署遇到的坑,小白一枚,大神勿喷。
- 1 )海外服务器。
为啥购买海外的,撂下不表,自己找度娘问问。我买的理由是:不用备案!!!。而且用的是ssd,相比阿里云便宜了不少。遇到的第一个坑是支付问题。我当时没有信用卡,用PayPal解决的。但是PayPal的汇率有点坑,7块多。而且,虽然vultr宣传是5$,实际是6$. - 阿里云
我之前的服务器快到期了。一天心血来潮,想看看有没有免费的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端口不能用,阿里专家说的。
最后的体验是,我能退款吗?