项目依赖: 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

make

make 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 -ppassword

use 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:80
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8070; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT qize_demo.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_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' # 密码
}
}

Python Django项目部署 Linux 服务器的更多相关文章

  1. python - django 项目部署 Ubuntu 服务器后接口访问一直 502 问题

    问题描述:最近有了一台 Ubuntu 的服务器,然后准备部署个项目,结果没想到部署的过程跟用 Centos 的时候还有点不一样,最后一步我是卡在了 uwsgi 这里,访问一直502,且可以访问项目的静 ...

  2. Django项目在Linux服务器上部署和躺过的坑

    引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...

  3. java项目部署Linux服务器几种启动方式总结经验

    一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...

  4. Nginx+Uwsgi+Django 项目部署到服务器。

    首先先说一下思路: 1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的 ...

  5. PHP项目部署 Linux 服务器

    一.运行环境 Centos7 x64 lnmp (Linux , Nginx , Mysql , PHP/Python) 二.安装依赖和修改配置 安装Lnmp环境集成包:https://lnmp.or ...

  6. Django项目在linux系统中虚拟环境部署

    1.在linux系统下,安装virtualenv 命令:pip install virtualenv 2.项目部署前的准备 1. Django web project deployment 1.1.  ...

  7. Django项目部署在Linux下以进程方式启动

    Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...

  8. django项目、vue项目部署云服务器

    目录 上线架构图 服务器购买与远程连接 安装git 安装mysql 安装redis(源码安装) 安装python3.8(源码安装) 安装uwsgi 安装虚拟环境 安装nginx(源码安装) vue项目 ...

  9. 部署web前端的react项目到linux服务器

    部署web前端的react项目到linux服务器 项目的目录结构 ``` ├─dlls #dlls编译后的问题 ├─doc #帮助文件入口 │ ├─src │ ├─apps #各个功能模块放在这里 │ ...

随机推荐

  1. 游戏设计艺术 第2版 (Jesse Schell 著)

    第1章 太初之时,有设计师 (已看) 第2章 设计师创造体验 第3章 体验发生于场景 第4章 体验从游戏中诞生 第5章 游戏由元素构成 第6章 元素支撑起主题 第7章 游戏始于一个创意 第8章 游戏通 ...

  2. 大话设计模式Python实现-观察者模式

    观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...

  3. Vue.js 源码分析(二十八) 高级应用 transition组件 详解

    transition组件可以给任何元素和组件添加进入/离开过渡,但只能给单个组件实行过渡效果(多个元素可以用transition-group组件,下一节再讲),调用该内置组件时,可以传入如下特性: n ...

  4. Ubuntu18.04下修改快捷键

    Ubuntu下修改快捷键 Intelij Idea在Ubuntu下的快捷键几乎和windows差不多,最常用的一个快捷键与系统冲突: Ctrl + Alt + T idea是surround with ...

  5. 【转】EF架构~为EF DbContext生成的实体添加注释(T5模板应用)

    嗨,没法说,EF4的TT模版加上注释后,升级到EF5的TT模版后,注释就不通用了,所以,还得再研究一下,然后把操作方法再分享出来,没辙的微软! T4模版可能有些凌乱,这在T5模版里有了不错的改进,但我 ...

  6. generator的本质是将异步的管理剥离

    generator的本质是将异步的管理剥离

  7. FPGA最小系统设计

    以EP4CE6E22I7为例,设计FPGA最小系统. 程序存储设计 一般使用EPCS4I8N: FPGA_DATA0:13 FPGA_DCLK :12 FPGA_nCS:8 ASDO:6 时钟 待续

  8. c# sqlserver 删除大批量数据超时

    我做的项目有个功能需要进行批量删除,删除的数据量有4.5W条数据. 通过下面的sql语句删除这么多数据,直接导致结果超时,无法删除数据. ,,,......) 我查了一些资料,可能找的不全,找到了一个 ...

  9. 编译 datax

    datax 是阿里巴巴官方开源的一个数据同步工具,可以用于诸多数据源之间的同步,并且使用简单.效率高. datax 官方有提供编译好的版本,可以直接下载,但是其中包含有 BUG. 我最近遇到的一个问题 ...

  10. Vert.x HTTP 服务器与客户端

    编写HTTP 服务器与客户端 Vert.x让编写非阻塞的HTTP 服务器与客户端变得非常轻松. 创建HTTP 服务器 缺省状况: HttpServer server = vertx.createHtt ...