Django项目部署到阿里云服务器及后台常驻

本文将记述如何简单的将自己的Django项目部署到阿里云服务器上。

准备条件:

阿里云服务器:centos 7.5
Nginx(反向代理)
Python 3.7.3
Django 2.2+

注意:centos自带的sqlit3版本比较低,请查看我的另一篇博客文章讲解如何解决该问题。还有自带的python是2.7版本的,所以需要自己通过xftp工具将本机下好的Python-3.7.3.tgz发送到阿里云服务器上,然后解压安装(此时输入的是python3而不是python),并执行pip3 install django安装Django。


1.先在阿里云服务器上的某个目录建立Django目录:

比如我,先在如图所示的目录下新建了djangoproject目录,然后我把我本机的Django项目(就是这里的django_introduction)通过下面的xtfp6工具发送到了阿里云服务器的该目录下。

Django项目部署到阿里云服务器及后台常驻_第1张图片

 

Django项目部署到阿里云服务器及后台常驻_第2张图片

验证:

可以通过新建一个django 项目来并通过xshell6工具再打开一个终端来测试是否成功(返回网址即成功)

补充:curl其实就是相当于浏览器的功能。它是访问网页的。因为字符界面的linux是没有图形化的浏览器界面的。当成浏览器使用就行了。

Django项目部署到阿里云服务器及后台常驻_第3张图片

2.Nginx代理:(反向代理)注意阿里云的权限组端口开放和防火墙等

我们的django项目运行在8000端口上,需要配置nginx反向代理,从而通过80端口访问我们的服务。

vim /etc/nginx/conf.d/default.conf

server
	{
		listen 80;
        server_name 你的阿里云服务器的公网ip;
        rewrite ^/$ / break;  
        location /
        {
        	proxy_pass http://127.0.0.1:8000;
        }
}



## break前面的问号是根路径。即访问时,输入xxx.xxx.xxx.xx就可以了。
如果你的django项目是127.0.0.1:8000/yinlei/home,这种,你就可以改break前面为/yinlei/home

上述server节点可放在原本文件的server节点后,即配置多个server.

注意:上面的是指的是通过终端等方式安装的nginx配置反向代理。第3步将介绍通过宝塔Linux面板配置的nginx反向代理。

3.Nignx的反向代理(通过宝塔Linux面板安装的nginx配置反向代理。不是通过宝塔Linux安装Nginx可跳过此步骤)

Django项目部署到阿里云服务器及后台常驻_第4张图片

Django项目部署到阿里云服务器及后台常驻_第5张图片

Django项目部署到阿里云服务器及后台常驻_第6张图片

这是原本配置文件的server,在下方再添加一个server:

别忘了点击保存!

然后 重启并重载配置或者直接重载配置

Django项目部署到阿里云服务器及后台常驻_第7张图片

配置的过程中遇到这样的问题,就是绑定了主机名后,重新加载配置时会出现警告。意思是重复绑定了server name,但这个警告不会影响到服务器运行。而且,这个重复绑定的意思是现在运行的nginx服务和将要加载的新配置中的重复,所以,这个警告其实是不必的。Django项目部署到阿里云服务器及后台常驻_第8张图片

4.运行Django项目,通过阿里云服务器的公网ip进行访问你的Django:(url后加不加项目名取决于你在本地上是怎么运行的,即本地上运行django项目的url中的127.0.0.1:8000修改为你的服务器的公网ip即可)

先通过xshell6工具运行我们的Django项目:

Django项目部署到阿里云服务器及后台常驻_第9张图片

浏览器通过url访问:

Django项目部署到阿里云服务器及后台常驻_第10张图片

 

补充:(springboot项目打包的jar让它在远程服务器上跑也是同理)

问题:虽然是通过nginx代理的,但是一旦那个关闭django终端就会失效:

Django项目部署到阿里云服务器及后台常驻_第11张图片

这时候就需要用到linux的后台进程了:(远程服务器执行的时候,一旦关闭了当前终端,程序也被迫停止运行了。希望的是让它常驻后台执行,不受启动其终端关闭与否的影响。)

Linux之后台执行命令:nohup和&的使用

nohup 是 no hungup的缩写,以为“不挂断”,我们在使用Xshell等工具执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用nohup指令来运行指令,使程序可以忽略挂起信号继续运行。

语法:
nohup Command [ Arg ... ] [ & ]

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

nohup和&的区别
&:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束
nohup:不挂断的运行,注意并没有后台运行的功能,就是指用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
因此将nohup和&结合使用,就可以实现使命令永久地在后台执行的功能

要实现守护进程,一种方法是按守护进程的规则去编程;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序: 

nohup <程序名> & 

顺便提一句:如果是后台运行jar包同理:nohup java -jar xxx.jar &

所以对于Django项目,执行如下命令是实现后台常驻:

nohup python3 manage.py runserver &


则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。
使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整的守护进程功能。

如果不想后台常驻了:查找linux相关命令找到相关程序的pid进程号然后kill掉即可。

你可能感兴趣的:(Python,Nginx)