1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > 域名 > 正文

域名

Django手把手部署阿里云:外网ip访问,域名访问,HTTPS域名访问

1987web2023-01-18域名242
平台:阿里云

平台:阿里云

涉及的内容:DNS解析,SSL证书验证,域名解析,Nginx代理,Gunicorn服务,supervisor运维。

部署结果:将Django部署在阿里云服务器上,可以通过购买的域名使用https来进行访问。

三种需求:

情况一:只需要在公网访问。该情况只需要买服务器即可,使用服务器ip地址便可以访问。

情况二:需要使用域名访问,但是不需要使用https。该情况需要在情况一下再购买域名和DNS域名解析服务。(注意,如果是国内的服务器,希望使用域名访问,服务器需要备案,需要提交文件以及需要审核时间,如果使用国外服务器,不需要备案)

情况三:需要使用https域名访问服务器。该情况需要在情况二下额外购买ssl证书。

工具:finalshell(推荐,十分好用的免费shell软件,全平台支持,用来连接服务器。SSH工具 客户端

(由于阿里云经常更新,部分操作界面会有改变,但整体的流程是一样的)

情况一:

  1. 购买:

在阿里云通常购买云服务器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

情况二:

在完成情况一的基础上

  1. 购买

需要购买云解析DNS和域名,域名可以在其它域名服务商进行购买,本文对域名的购买过程不做介绍,云解析DNS在阿里云购买。

a. 免费版云解析DNS:

云解析DNS——域名解析——权威域名——添加域名:

之后选择对应域名的解析设置——添加记录

记录类型:A

记录值:ECS服务器ip地址

b. 付费版云解析DNS:

云解析DNS——域名解析——版本套餐管理

购买套餐后绑定域名,之后到权威域名处,择对应域名的解析设置——添加记录,添加方法同上。

DNS的配置就结束了。之后还需要到对应的域名服务商给对应的域名配置DNS解析服务器,对应的服务器地址为上图圈出来的http://vip1.aliyun.comhttp://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重新加载配置文件

情况三:

在情况一和情况二的基础上

  1. 购买

在阿里云购买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部署已经全部介绍完毕。