Django手把手部署阿里云:外网ip访问,域名访问,HTTPS域名访问
平台:阿里云
涉及的内容:DNS解析,SSL证书验证,域名解析,Nginx代理,Gunicorn服务,supervisor运维。
部署结果:将Django部署在阿里云服务器上,可以通过购买的域名使用https来进行访问。
三种需求:
情况一:只需要在公网访问。该情况只需要买服务器即可,使用服务器ip地址便可以访问。
情况二:需要使用域名访问,但是不需要使用https。该情况需要在情况一下再购买域名和DNS域名解析服务。(注意,如果是国内的服务器,希望使用域名访问,服务器需要备案,需要提交文件以及需要审核时间,如果使用国外服务器,不需要备案)
情况三:需要使用https域名访问服务器。该情况需要在情况二下额外购买ssl证书。
工具:finalshell(推荐,十分好用的免费shell软件,全平台支持,用来连接服务器。SSH工具 客户端)
(由于阿里云经常更新,部分操作界面会有改变,但整体的流程是一样的)
情况一:
- 购买:
在阿里云通常购买云服务器ECS即可,具体的配置根据你的需求,购买完成后可以在控制台看到你的服务器。
2. 安装finalshell
根据平台安装好finalshell之后,连接服务器,选择ssh连接,输入ip(主机),用户名和密码,名称任意。
连接好服务器之后,安装运行项目所需要的虚拟环境(本文使用的是virtualenv,相关内容可查阅资料),并将项目上传到服务器上。
以下是我的项目结构,在/home目录下包括venv文件夹(虚拟环境)和code文件夹(项目文件目录),其中在code文件夹下,Code文件夹是配置文件夹,apps文件夹是应用文件夹(一个Django项目包含多个应用)。
3. 安装Gunicorn
进入虚拟环境
source /home/venv/bin/activate
pip install gunicorn
4. 安装Nginx
可以直接使用yum install nginx安装,本文安装目录在/etc/下,配置文件如下,其中/static是存储静态文件,包括css,js,imgs等,/media是存储上传文件等。
假设服务器ip为
192.168.77.58
server{
charset utf-8;
listen 80;
server_name 192.168.77.58;
location /static {
alias /home/Code/static;
}
location /media {
alias /home/Code/media;
}
location /{
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/192.168.77.58.socket;
}
}
收集Django项目中的静态文件:
进入项目的环境,输入
python manage.py collectstatic
注意将Django项目中settings.py文件中
DEBUG = False
ALLOWED_HOSTS = [*]
以及将STATICFILES_DIRS改成
STATIC_ROOT=os.path.join(BASE_DIR,static)
将urls.py中的STATICFILES_DIRS也改成STATIC_ROOT
5. 安装supervisor
注意,supervisor需要在Python2.7环境下安装,(Python3安装不兼容)
pip install supervisor
supervisor的使用方法:Supervisor使用教程 - 飞鸿影 - 博客园
安装后很可能遇到问题:unix:///tmp/supervisor.sock no such file
解决方法:挽歌:解决unix:///tmp/supervisor.sock no such file的问题
配置方法:在配置文件最后加上
[program:Code]
command=/home/venv/bin/gunicorn --bind unix:/tmp/192.168.77.58.socket Code.wsgi:application
directory=/home/Code
autostart=true
autorestart=true
stdout_logfile=/home/Code/log/gunicorn.log
stderr_logfile=/home/Code/log/gunicorn.err
6. 配置阿里云安全组
登陆阿里云——控制台——ECS实例——点击服务器名称
配置规则——入方向——快速添加
7. 启动nginx和supervisor和重新加载配置文件
PS:杀死进程的方法:
ps -ef | grep supervisor(进程名称)
kill 进程号
启动nginx
nginx
nginx重新加载配置文件
nginx -s reload
启动supervisor
supervisord
supervisor更新新的配置
supervisorctl update
supervisor重启所有管理的应用
supervisorctl reload
情况二:
在完成情况一的基础上
- 购买
需要购买云解析DNS和域名,域名可以在其它域名服务商进行购买,本文对域名的购买过程不做介绍,云解析DNS在阿里云购买。
a. 免费版云解析DNS:
云解析DNS——域名解析——权威域名——添加域名:
之后选择对应域名的解析设置——添加记录
记录类型:A
记录值:ECS服务器ip地址
b. 付费版云解析DNS:
云解析DNS——域名解析——版本套餐管理
购买套餐后绑定域名,之后到权威域名处,择对应域名的解析设置——添加记录,添加方法同上。
DNS的配置就结束了。之后还需要到对应的域名服务商给对应的域名配置DNS解析服务器,对应的服务器地址为上图圈出来的http://vip1.aliyun.com和http://vip2.aliyun.com,阿里云下的域名可能可以自动配置,其它域名服务商需要自己修改DNS配置。
阿里云下域名的DNS自动配置结果如下
2. Nginx配置
假设域名为http://www.code.com
server{
charset utf-8;
listen 80;
server_name www.code.com;
location /static {
alias /home/Code/static;
}
location /media {
alias /home/Code/media;
}
location /{
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/www.code.com.socket;
}
}
3. supervisor配置
配置方法:在配置文件最后加上
[program:Code]
command=/home/venv/bin/gunicorn --bind unix:/tmp/www.code.com.socket Code.wsgi:application
directory=/home/Code
autostart=true
autorestart=true
stdout_logfile=/home/Code/log/gunicorn.log
stderr_logfile=/home/Code/log/gunicorn.err
4. nginx和supervisor重新加载配置文件
情况三:
在情况一和情况二的基础上
- 购买
在阿里云购买SSL证书即可,根据需求选择(所有的证书应该都能够开启SSL服务,即使用https进行访问,只不过可以使用的域名数目不一样,以前可以有免费版可以白嫖的,今年找不到了,嘤嘤嘤,如果哪位大佬有白嫖SSL证书的方法,麻烦指点我一下)
购买证书的时候,将证书与域名进行绑定,之后需要进行申请验证,如果域名在阿里云,会出现以下界面
此时不要关闭这个页面,同时打开云解析DNS,选择对应域名的解析设置——添加记录,将上面的解析记录添加上,在进行验证。特别注意,这个验证的记录值是随时更新的,每次打开验证界面,记录值都是不一样的,因此添加解析配置过程和验证过程要同步进行。
验证申请成功后,通过经过十分钟到二十分钟,会现实验证通过,之下下载对应的证书,会得到一个压缩包,里面有两个文件,一个是以.pem结尾,一个是以.key结尾
2. 配置nginx
在nginx下新建文件夹cert,将上面证书下载得到的两个文件上传到/etc/nginx/cert中
server{
charset utf-8;
listen 443;
server_name www.code.com;
ssl on;
ssl_certificate /etc/nginx/cert/code.com.pem;
ssl_certificate_key /etc/nginx/cert/code.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /static {
alias /home/Code/static;
}
location /media {
alias /home/Code/media;
}
location /{
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/www.code.com.socket;
}
}
server{
listen 80;
server_name www.code.com;
rewrite ^(.*) https://$server_name$request_uri? permanent;
}
3. 配置阿里云安全组
登陆阿里云——控制台——ECS实例——点击服务器
配置规则——入方向——快速添加
4. nginx和supervisor重新加载配置文件
至此,三种情况的Django部署已经全部介绍完毕。
本经验以万网账号为例,登陆万网会员账号,点击进入【会员中心】如图
找到域名列表点击设置需要配置的域名,管理
进入域名的安全配置设置---- 域名隐身保护和服务中心
点击鼠标滑动开关,把域名隐私保护开启。
绿色为开启状态(设置之后,域名注册信息将不会在whois里面显示)
万网怎么开启域名隐私保护—禁止删除修改保护
对于域名购买之前一般都会去查询域名的whois信息,细心的小伙伴会发现有的域名会提示运营商设置客户禁止修改保护,同时大多数都会显示注册的用户的个人信息。为了安全
原创EasyDSS无法使用https+以外的客户端域名该如何解决?
原标题:EasyDSS无法使用https+以外的客户端域名该如何解决?