Python Django项目部署 Linux 服务器

项目依赖: Linux Centos7 (阿里云轻量级服务器) + Python 3.7.2 + Django 2.2.1 + restframework 3.9.4 + mysql 5.7

1 安装 python3 到 Centos7, 先安装软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

2 下载Pyhton3到/usr/local 目录

wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

3 解压

tar -zxvf Python-3.7.2.tgz

4 进入到解压好的python文件中

cd Python-3.7.2

5 编译安装到指定路径

./configure --prefix=/usr/local/python3

6 安装python3

makemake install

7 安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3

ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

8 Python3安装完成之后pip3也一块安装完成,不需要再单独安装一样建立软链接
同样给pip3建立软链接

ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3注: 如果软链建立完成,但是却无法使用的时候执行下面命令:mv pip pip2  # (将文件 pip 更名为 pip2 )ln -s /usr/local/python3/bin/pip3 /usr/bin/pip  

9 安装virtualenv, 方便不同版本项目管理。

pip3 install virtualenv

10 建立软链接

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv3

11 安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的 (文件创建随意,根据实际需求)。

mkdir -p /data/env   # 存放虚拟环境mkdir -p /data/wwwroot   # 存放web项目

12 切换到/data/env/下,创建指定版本的虚拟环境。

       virtualenv3 --python=/usr/bin/python qize_demo (项目名) # 创建虚拟环境# 然后进入cd /data/env/qize_demo/bin # 进入bin目录后开启虚拟环境,执行命令source activate  # 注:(启动后出现 (qize_demo),说明是成功进入虚拟环境。)

13 虚拟环境里用pip3安django和uwsgi (留意:uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。)

pip3 install django  #(如果用于生产的话,则需要指定安装和你项目相同的版本)pip3 install uwsgi# 给uwsgi建立软链接,方便使用ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

14 在本地项目目录下用下面的命令把当前的环境依赖包导出到requirements.txt文件

pip freeze > requirements.txt 


15 把项目源码压缩打包。把项目上传到服务器对应的目录里(/data/wwwroot/),解压。

16 进入解压好的项目根路径中安装requirements.txt里的依赖包。

pip3 install -r requirements.txt

17 导入数据库到服务器。(如果用的是Mysql的话)

导出Mysql,django为你的数据库

mysqldump -uroot -p password django>django.sql

把django.sql上传到服务器,在服务器里用下面命令导入

mysql -uroot -ppassworduse dajngo;source your Path\django.sql

18 通过 python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查 (下面给出几个常见错误和解决方案)。

报错1:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11 解决方案:

解决:编辑Python安装路径下的 Python36-32\Lib\site-packages\django\db\backends\mysql\base.py

将文件中的如下代码注释#if version < (1, 3, 3):
#    raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

报错2: File "/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query query = query.decode(errors='replace')

AttributeError: 'str' object has no attribute 'decode'

解决:编辑

/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py

的 第146 行,

# 将 decode 改为 encode 保存并退出
query = query.decode(errors='replace') 改为 query = query.encode(errors='replace')

19 在项目根目录里添加uwsgi配置文件 (qize_demo.xml)

<uwsgi>       <socket>127.0.0.1:8070/</socket><!-- 内部端口,自定义 --> <chdir>/data/wwwroot/qize_demo/</chdir><!-- 项目路径 -->            <module>qize_demo.wsgi</module> <processes>4</processes> <!-- 进程数 -->     <daemonize>uwsgi.log</daemonize><!-- 日志文件 --></uwsgi>

20 配置Nginx配置文件(把原先的配置文件可以备份以下,然后将下面的替换进去)。

events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;sendfile        on;server {listen 80;server_name  127.0.0.1:80;  # 改为自己的域名,没域名修改为127.0.0.1:80charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8070;  #端口要和uwsgi里配置的一样uwsgi_param UWSGI_SCRIPT qize_demo.wsgi;     #wsgi.py所在的目录名+.wsgiuwsgi_param UWSGI_CHDIR /data/wwwroot/qize_demo/; #项目路径}location /static {alias /data/wwwroot/qize_demo/static; #静态资源路径}location /templates {alias /data/wwwroot/qize_demo/templates;}}}

留意:一定要注意Uwsgi和Nginx配置文件里的项目路径和静态资源路径,填写正确了才能成功访问。不然会出现502错误。还有就是,修改Django文件和其它配置文件之后,一定要重启Uwsgi和Nginx,不然不生效。

21 Uwsgi和Nginx重启方法:

uwsgi 启动方法

uwsgi -x qize_demo.xml

Nginx 重启方法

nginx -s reload

然后在浏览器里访问服务器ip(或域名),就能查看到项目。

如果想使用域名访问项目,先在域名管理后台把域名解析到服务器IP上来,之后在Nginx配置文件里绑定域名。然后在浏览器里通过绑定的域名访问项目。

以下总结一些问题:

1 如果访问出现 500 以上的错误信息并有nginx的信息,一般是nginx配置出了问题。去查看nginx.conf配置中的项目路径是否正确,uwsgi_pass 参数的端口和 uwsgi的xml 文件中端口是否一致,是否修改完配置后重新启动了nginx。还有就是可以去项目根路径下 python manage.py runserver 启动下项目,看看有没有报错,也有可能是程序本身就有问题。

2 如果访问出现 400 以上的错误信息,重点检查项目路径,包括 tempates / static 静态路径是否正确,和项目中 settings 是否配置了 tempates / static 文件的访问路径,以及 url 是否正确,其次还有html文件中引入的 css, js, img 等文件路径是否正确, 比如:

  css文件:<link rel="stylesheet" href="/static/css/q.css">js文件 :<script src="/static/js/q.js"></script>

以下总结下注意事项:

1 项目上线后记得 DEBUG = False 这样设置,这样的话你的项目访问失败就不会有 Django 的错误信息了

2 设置所有 IP 都可访问 (settings.py)

     ALLOWED_HOSTS = ['*']

3 数据库设置(settings.py)

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'sql_base',       # 库名 (根据实际数据库名进行修改)'PORT': 3306,         # 端口(不用改)'HOST': '127.0.0.1',  # 本地host(不用改)"USER": 'root',           # 用户名'PASSWORD': '123456'  # 密码}
}

转载于:https://www.cnblogs.com/chaoqi/p/11103188.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习——C++中的四种类型转换

文章目录1.dynamic_cast2.const_cast3.3 static_cast3.4 reinterpret_cast1.dynamic_cast 用于动态类型转换。只能用于含有虚函数的类&#xff0c;用于类层次间的向上和向下转化。只能转指针或引用。向下转化时&#xff0c;如果是非法的对于指针返回NULL&#xff0c;对于引用抛…

终于,LoRaWAN成全球物联网标准!LoRa将拿下LPWAN领域50%市场?

来源&#xff1a;LoRa联盟官网等整理发布&#xff1a;物联网智库 不久之前&#xff0c;支持物联网低功耗广域网&#xff08;LPWAN&#xff09;LoRaWAN开放标准的LoRa联盟宣布&#xff0c;致力于“物联网和智慧城市及社区标准化”的国际电联电信标准化部门&#xff08;ITU-T&…

spring学习笔记02-spring-bean创建的细节问题

spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式Bean的作用范围Bean的生命周期 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www…

算法(二叉树-矩阵-堆排序)

最小和 位运算知识点 12>>1 //6 a/2 等价为 a>>1 中间数 (LR)/2 会出现溢出(溢出的意思就是超过了二进制) L(R-L)/2 最终改成 l((r-l)>>1) const smallSum arr > {if (arr null || arr.length < 2) {return 0;}return mergeSort(arr, 0, arr.length …

Nature:盐粒大小的相机,可以拍出清晰彩色照片,未来或可应用到手机

来源&#xff1a;大数据文摘你能想象上图只有盐粒大小的物体是一款相机吗&#xff1f;事实上&#xff0c;这款微型相机甚至可以拍出清晰的全彩图像&#xff0c;而相比之下&#xff0c;普通相机的尺寸要大50万倍。我们可以来看看它的成片。这款微型相机是普林斯顿大学和华盛顿大…

C++学习——C++中的四个智能指针

C里面的四个智能指针:auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c11支持&#xff0c;并且第一个已经被11弃用。为什么要使用智能指针&#xff1a;智能指针的作用是管理一个指针&#xff0c;因为存在以下这种情况&#xff1a; 申请的空间在函数结束时忘记释放&am…

spring学习笔记01-BeanFactory和ApplicationContext的区别

spring学习笔记01-BeanFactory和ApplicationContext的区别 BeanFactory 和 ApplicationContext 的区别 BeanFactory 才是 Spring 容器中的顶层接口。 ApplicationContext 是它的子接口。           BeanFactory 和 ApplicationContext 的区别&#xff1a; 创建对象的…

java微博爬虫

微博爬取要做到每日百万级的数据量&#xff0c;需要解决很多问题。 1.springboot自带Scheduled注解是一个轻量级的quartz&#xff0c;可以完成定时任务。只需要在运行方法上加一个Scheduled注解即可。 该注解有许多属性值 initiaDelay 从程序开始延长一定时间后首次执行。 fixe…

C++学习——set与map

1.set的使用 set的各成员函数列表如下:1. begin()--返回指向第一个元素的迭代器2. clear()--清除所有元素3. count()--返回某个值元素的个数4. empty()--如果集合为空&#xff0c;返回true5. end()--返回指向最后一个元素的迭代器6. equal_range()--返回集合中与给定值相等的上…

2100年彻底颠覆世界的“十大未来科技”

来源&#xff1a;于硅谷智库 科学家们对2100年前的人类生活进行了十大预测&#xff0c;如果这些预测能够变成现实的话&#xff0c;将会让世界发生翻天覆地的变化。1能上网的隐形眼镜出现时间&#xff1a;2030年前预测者&#xff1a;来自华盛顿大学西雅图分校的巴巴克A帕尔维兹教…

spring学习笔记04-IOC常用注解(一)

文章目录2.3常用注解2.3.1 用于创建对象的2.3.1.1 Component2.3.1.2 Controller Service Repository2.3.2 用于注入数据的2.3.2.1 Autowired2.3.2.2 Qualifier2.3.2.3 Resource2.3.2.4 Value2.3.3 用于改变作用范围的&#xff1a;2.3.3.1 Scope2.3.4 和生命周期相关的&#xff…

TCP三次握手和四次挥手通俗理解

一、TCP报文格式 在了解三次握手和四次挥手之前&#xff0c;先知道TCP报文内部包含了哪些东西。 1 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接&#xff0c;这里连接意思是&#xff1a;双方需要内保…

智能如何产生,这仍然是个问题

来源&#xff1a;孙学军科学网博客链接地址&#xff1a;https://blog.sciencenet.cn/blog-41174-1316772.html本文的智能只是生物系统工作原理层面&#xff0c;而不是意识层面的&#xff0c;无论是工作原理&#xff0c;还是大脑意识层面&#xff0c;今天的科学仍然没有给出理想…

spring学习笔记05-IOC常用注解(二)

文章目录2.3 关于 Spring 注解和 XML 的选择问题2.4spring 管理对象细节2.5spring 的纯注解配置2.5.1 待改造的问题2.5.2 新注解说明2.5.2.1 Configuration2.5.2.2 ComponentScan2.5.2.3 Bean2.5.2.4 PropertySource2.5.2.5 Import2.5.2.6 通过注解获取容器&#xff1a;2.3 关于…

数据结构与算法——排序

文章目录1.冒泡排序2.选择排序3.插入排序4.快速排序5.堆排序6.归并排序7.希尔排序1.冒泡排序 将一个数组从小到大排序&#xff0c;一次循环&#xff08;从头开始遍历&#xff0c;将相邻的两个数值比较&#xff0c;如果前面一个大于后面的数字&#xff0c;交换这两个数字&#x…

Luogu P4168 [Violet]蒲公英 分块

这道题算是好好写了。写了三种方法。 有一个好像是$qwq$$N\sqrt(N)$的方法&#xff0c;&#xff0c;但是恳请大佬们帮我看看为什么这么慢$qwq$&#xff08;后面的第三种&#xff09; 注:$pos[i]$表示$i$属于第$pos[i]$块。 第一种是统计所有可能的块组成的区间中&#xff08;第…

一文掌握明年物联网传感器市场!2022中国AIoT产业全景图谱报告新鲜出炉

来源&#xff1a;传感器专家网物联网产业是传感器应用最广泛的领域之一&#xff0c;研发新型传感器&#xff0c;做传感器市场&#xff0c;都不能不考虑物联网产业的需求。2021年随着COVID-19 病毒的存在已常态化&#xff0c;防疫抗疫进入了拉锯阶段&#xff1b;波及全球的“芯片…

spring学习笔记06-spring整合junit(出现的问题,解决的思路)

spring学习笔记06-spring整合junit&#xff08;出现的问题&#xff0c;解决的思路&#xff09; 文章目录spring学习笔记06-spring整合junit&#xff08;出现的问题&#xff0c;解决的思路&#xff09;3.1测试类中的问题和解决思路3.1.1 问题3.2.1 第一步&#xff1a;pom.xml文件…

phpstorm 不能自动打开上次的历史文件

问题产生的原因&#xff1a;可能是电脑非正常关机&#xff0c;导致phpstrom 无法正常关闭。 一开始我以为是配置上那里出现了问题&#xff0c;所以直接就把配置删除了&#xff0c;然后生成了默认配置。发现还是无法解决问题。然后一个个配置查阅过去。因为我的ide是英文&#x…

EUV光刻机内部揭秘!

转载自: ittbank来源&#xff1a;半导体行业观察PatrickWhelan正在透过他的洁净室服面板凝视着事情的进展。在他面前是一块闪闪发光的玻璃&#xff0c;大约有一个烤箱那么大&#xff0c;上面刻有许多挖出的部分以减轻重量&#xff0c;看起来像一个外星图腾。Whelan 的团队正在将…