2021-07-20 暑期项目实训心得十


前言

为了方便前端组测试后端组不定时更新的接口,下面紧接着要进行的就是将DRF后端配置到阿里云服务器。


一、环境

主流的配置方式是uwsgi+nginx,最初的想法是端口8000用作nginx反向代理,端口8083用作uwsgi来启动项目,3306给mysql。然而配置uwsgi.ini时出现了问题,不能正确启动项目。
那就退而求其次,毕竟django是有自带的启动方式的,对我们的小项目也是足够使用了。
最后使用的端口如下,8000直接运行项目后端而不是nginx,不再使用8083,3306给mysql
当然阿里云的安全组的依旧要开,把3306,8000端口打开,具体操作参考vue前端配置那篇文章。
使用出错的反向代理nginx.conf,也不知道错在哪了,反正uwsgi.ini疯狂报错,咱也不知道到底是哪个配置的问题
在这里插入图片描述

起初参考的博客:https://www.cnblogs.com/pyyu/p/10160874.html
如果想参考这个,注意一下有个地方
在这里插入图片描述
这个地方module要改成wsgi-file,毕竟上面的注释也写了
而且少用注释,两个信息文件的配置
pidfile=uwsgi.pid #记录进程号
daemonize=uswgi.log #记录报错信息
生成的文件名居然就是’uswgi.log #记录报错信息’ = =。。

二、配置DRF后端

我可以说是把奇奇怪怪的坑踩了一遍,最初凭着印象中用的python3.5.2,然而安装numpy库都找不到相应版本,一问才知道要改用python3.7.3。
改用后很快就下完了所有所需的包,能够成功运行项目了。
首先运行项目前,最好有个虚拟环境保证各种python包干净隔离,当然不用也可以(咱就没用
然后是最重要的!!!要配置settings.py!!!!

1.配置前,要将服务器防火墙的相应端口打开(我们就卡在这很久
如下是添加8000端口的操作示例

firewall-cmd --list-ports 查看开放的端口:
firewall-cmd --add-port=8000/tcp --permanent  #添加8000端口
firewall-cmd --reload   #重新加载配置

当然,你也可以关掉整个防火墙

systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl is-enabled firewalld #查看防火墙是否开机自启
systemctl disable firewalld #关闭防火墙的开机自启
systemctl start firewalld #启动防火墙
systemctl enable firewalld #重启防火墙

如果没有在防火墙打开相应的端口,成功运行项目后,访问后端网址时,会很慢,然后告诉你timeout(阿里云的安全组没配置也是这样,不过这两种情况项目也能成功运行,如果真是运行不了也不会提示timeout

2.这个是允许访问的host,省事的话就配成’*’,代表都可以访问
如果不配置,运行成功后,访问的时候会提示不允许访问,非法的host,报错也会让你去配置ALLOWED_HOSTS,把host加到白名单(报错界面忘截图了

ALLOWED_HOSTS = ['*']

3.DEFAULT_AUTO_FIELD ,这个直接加进去就好,如果你运行时会报waring,如下所示,就加上,似乎和数据库的model相关,反正我们运行项目时好像没有什么影响
在这里插入图片描述

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

4.跨域设置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'user',#这是写的一些接口,依据项目具体加
    'citycrop',
    'cityclimate',
    'market',
    'news',
    'image',#到这都是接口
    'corsheaders'#这个可太重要了,必须加上
]
CORS_ORIGIN_WHITELIST = (#允许跨域的IP
    'http://localhost:8080',
    'http://127.0.0.1:8080',
    'http://10.27.236.90:8080',
    'http://localhost:8082',
    'http://127.0.0.1:8082',
    'http://0.0.0.0:8082',
    'http://0.0.0.0:8080',
) #这个写8080好像是因为前端组成员本地的前端有的用的端口为8080??不太清楚
CORS_ALLOW_CREDENTIALS = True #也重要

如果你没有配置这个,运行成功后,后端也可以收到各种get post请求,也会有状态码200,但是不能返回给前端,前端会提示被跨域拦截
5.数据库的配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '库名',
        'USER': '用户名',
        'PASSWORD':'密码',
        'HOST':'数据库地址.mysql.rds.aliyuncs.com',#我们使用的阿里云
        'PORT':'3306'#记得在安全组开启该端口
    }
}

这个不配置,运行项目时就会直接报错,告诉你密码错误连不上之类的

三、启动DRF项目

首先把项目打包成zip包,丢进mnt或者opt文件夹。(有的教程用前者,有的教程用后者,好像也没啥影响,都是空文件夹。)
在这里插入图片描述
cd到相应目录,然后解压,例如

cd /mnt
unzip ariculture.zip

然后刷新下进入解压后的目录,运行项目

python manage.py runserver 0.0.0.08000

提示缺啥库就下啥库,提示如下就是成功了
可以用postman或者前端组连接进行测试,
在这里插入图片描述
接到的各种get post请求就会在下面显示
在这里插入图片描述

netstat -tnlp #查看项目是否已运行
kill -9 相应PID #强制结束某进程

如下代表成功运行
在这里插入图片描述
直接访问是这样也就代表能用了
在这里插入图片描述

四、持续运行server

搭配使用nohup和&可以使你摆脱不定时重启server的困扰

nohup python manage.py runserver 0.0.0.0:8000 &

nohup是no hang up 的缩写,即:不挂断的意思。以忽略挂起信号的方式执行命令,关闭终端后进程还能继续执行,但是直接在shell中使用ctrl + c 或ctrl + z时,进程会结束。
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫

在命令末尾加上&,作用是使进程在后台执行,即使你用ctrl + c, 进程照样运行,因此会丢失标准错误和标准输出。如果是守护进程,断开终端则程序继续运行,如果不是守护进程,断开终端则程序也会被断开停止运行。
使用&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭

平日线上经常使用nohup和&配合来启动程序:
同时免疫SIGINT和SIGHUP信号

转自https://www.jianshu.com/p/5e9c4871e8f8,有详细测试过程

如果使用了上述方法,所有后续的信息都会被存在与manage.py同目录下的nohup.out文件里
在这里插入图片描述

总结

今天记录了在阿里云服务器上配置DRF的详细过程与经历,也学习到很多知识。最后祝大家少踩坑,一次成功!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值