ubuntu 20.04.4 安装部署django应用记录(踩坑,再踩坑)

1、安装ubuntu

经过测试网易云下载速度最快,地址如下:

网易云 ubuntu 镜像地址

2、安装ubuntu

ubuntu 20.04.4 server 安装详解

文章后面14节提到了要设置账号密码信息,记得修改

3、更新 ubuntu 软件源,推荐清华镜像站,写的很清楚

清华 ubuntu 软件源地址

4、更新可安装软件包,及更新已安装软件版本

sudo apt-get update
sudo apt-get upgrade

5、安装 net-tools 

系统默认没有安装net-tools,因此无法使用ifconfig,需要手动安装

sudo apt install net-tools

6、修改固定IP地址

这里可以参考我之前记录的过程,时隔多年,依然是一把过

ubuntu 20.04 设定固定IP地址碰到的坑

7、安装ssh

如果安装的时候忽略了ssh的安装,这里需要再安装下,很简单

sudo apt install ssh

8、测试ssh

ssh username@192.168.31.250

username 需替换成安装系统时的用户名,后面的IP地址已ifconfig查到的为准

回车后输入密码即可登录系统

* 阿里云等服务器需开防火墙端口。

9、测试 SFTP

服务器远程管理,windows用xshell secureCRT,在macos环境提供一个利器transmit,不用任何设置,即可上传成功。

10、修改 pip3 源

cd
mkdir .pip
vim ~/.pip/pip.conf

# 将下列内容拷贝到文件中

[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

 ==========   至此 ubuntu 部分安装完毕   ==========

10、安装、测试nginx

sudo apt install nginx

安装后用用浏览器访问  xxx.xxx.xxx.xxx即可访问,看到下方图片即表示安装成功,nginx主要为开机启动且提供不间断网络访问的伺服程序

11、安装redis

系统实时运行的数据是放在redis里的,方便快速计算,反馈结果,命令如下:

sudo apt install redis

安装秒完成,测试通过

12、安装、测试 django

# 安装django
pip3 install django

# 测试django
cd
django-admin startproject django_test
cd django_test
python3 manage.py runserver

如果出现了下面图片即表示安装成功。

*这时还不能网络访问,因为没有打开允许IP地址的选项,因为是linux没有界面,本机也无法看到状态,具体修改内容另发文再记录。

13、安装、测试 uwsgi

# 安装uwsgi
sudo apt install uwsgi

uwsgi --http :8000 --wsgi-file ./django-admin/wsgi.py

如果没有报错,就应该能访问到刚才和django默认页面一样的页面了

* 我在自己装的服务器上安装uwsgi就会出现打不开,找不到路径的情况,在阿里云的服务器上就有一个较长时间的编译过程,我把图截下来了

在我自己的设备上则是下面的界面,我还特意卸载和重安装了,但没有 building wheel for uwsgi的部分。

 最后找了一些文章通过源码安装解决了这个问题,不知道会不会下次还遇到这样的问题,大家可以自行搜索学习,这个问题以后装机再考虑解决吧

uwsgi 源码安装

 ==========   至此 程序安装完成   ==========

14、  nginx + uwsgi + django 联调

这个问题困扰了我很久,因为一直在学习编程序就没太重视,后来程序编辑的差不多了,看了很多文章说这块,总是感觉很困难,这里调试我的一个应用,终于成功了,耗时10小时,在这里记录下。

14.1、NGINX

nginx是这里最简单的部分,nginx目录如下,默认系统安装好的时候调用的是default的解释文件,

/etc/nginx/sites-available/default

这个文件里只有基本配置,如果正常上线部署应该是在

/etc/nginx/conf.d目录里新建配置文件,默认的则失效(个人理解没有验证)

因此default是最简配置,方便学习,我把default里的所有注释去掉,内容如下:

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/www/html;

	index index.html index.htm index.nginx-debian.html;

	# server_name 127.0.0.1 202.xxx.xxx.xxx;

	location / {
		try_files $uri $uri/ =404;
		# include /etc/nginx/uwsgi_params;
		# uwsgi_pass 127.0.0.1:8010;
	}

}

这里我解释下各个模块的意思:

server:核心模块,相当于一个虚拟主机,因此可以有多个虚拟主机
listen:为监听的端口,上面为 ipv4 的端口,下面为ipv6的端口
root:为访问时提供的目录,这个目录里有nginx的默认页面
index:为接受访问的文件名(这个没有验证,也没有改)
server_name:我看说明说写127.0.0.1 以及外网IP地址,反正是没报错,这块是后来修改的
location:是执行的一些参数,默认体用的是404的访问处理

加# 注释的三句是我后来添加的,IP地址就不说了

include /etc/nginx/uwsgi_params;  这句话说明要加载nginx自带的uwsgi的解释器,装NGINX的时候就有,就在/etc/nginx/目录下,相当于开启了nginx转发到uwsgi的解释通道;

uwsgi_pass 127.0.0.1:8010  是uwsgi内网监听的接口,uwsgi通过ini方式启动的时候,端口只为内部服务,这时nginx相当于把80接口的对UWSGI的访问全转发到127.0.0.1:8010,这个地址上,实现了对于python程序的解释转发;

把 # 注释的部分放开就相当于nginx调试完毕,这时再访问80端口则出现下面的页面:

这个表示nginx启动了,但是转发请求被拒绝或没有响应了,因为uwsgi还没有配置,这就是正确的反馈。

 14.2、uwsgi

这块就是坑了我将近10个小时的地方,我分别在根目录下将我开发的软件和一个django的默认初识环境放在一起测试

django_test        是初始应用
api_2                是我编写的应用

1、在两个目录下执行启动命令均可看到界面

        python3 manage.py runserver 0.0.0.0:8000

2、使用uwsgi启动

uwsgi --http :8020 -w api_2.wsgi
uwsgi --http :8020 -w django_test.wsgi

也是June可启用,只是api_2失去了对静态文件的解析

3、使用 ini 方式启动

这里是卡了最长的时间,django_test 一下就成功了,配置如下:

[uwsgi]
socket = :8010
chdir = /root/django_test
module = django_test.wsgi
master = true
pythonpath = /usr/local/lib/python3.8/dist-packagese
processes = 3
buffer-size = 65536
vacuum = true

socket:是监听内部从nginx发过来的端口请求,如果是从外网访问会显示500错误,我卡这里好久,明明收到了请求,为啥不返回信息呢,后来看了很多文章才发现,之前的启动命令 uwsgi --http :8020 -w api_2.wsgi 是响应http协议对8020端口的访问请求,ini文件是socket = :8010,只响应接口的请求,所以不对外网访问,这个事终于明白了;

chdir:启动路径,因为django里的项目名和默认应用名称是一样的,因此chdir截止在项目名称

module:是模块名称,也是项目启动的uwsgi.py文件,所以是项目名称+启动文件的形式;

pythonpath:是查了很多文章说同时安装2.x和3.x会冲突,就写了个路径;

其他素材都可以查到就不说了,启动 uwsgi --ini django_test.ini

成功启动!!!

但是同样的配置放在api_2上就不行了

无论怎么调模块都不行,踩的坑包括路径有问题,直接指定wsgi.py的启动绝对路径,最终实际上只改了一句话,因为我编写的应用里有很多应用名称,所以要标明,有的文章提了这个问题,但因为各种场景不理解,没有想到,最终终于成功了。

[uwsgi]
socket = :8010
chdir = /root/api_2
module = api_2.wsgi:application
master = true
pythonpath = /usr/local/lib/python3.8/dist-packagese
processes = 3
buffer-size = 65536
vacuum = true

就是这句:module = api_2.wsgi:application

至此  uwsgi --ini api.ini 一键启动,访问成功

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值