项目依赖: 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. (十九)golang--函数参数的传递方式

    两种传递方式: 值传递:值类型参数默认 引用传递:引用类型参数默认 一般来说,地址传递效率高,因为数据量小. 值类型:int.float.bool.string.数组.结构体: 引用类型:指针.切片. ...

  2. kmp算法笔记(简单易懂)

    一般字符串比较长串m短串为n,那么用暴力方法复杂度为O(m*n) 但是kmp却可以达到O(m+n)!!!!!! 对于这个神奇的算法,我也是似懂非懂, 下面介绍一个简单的方法求kmp 1.求next数组 ...

  3. Anaconda--在虚拟环境中安装CUDA and cudnn

    在conda虚拟环境中安装CUDAconda install cudatoolkit=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs ...

  4. 你必须知道的EF知识和经验(转)

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  5. Python 线程池(小节)

    Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...

  6. linq 获取不重复数据,重复数据 var unique = arr.GroupBy(o => o).Where(g => g.Count() == 1) .Select(g => g.ElementAt(0));

    static void Main(string[] args) { int[] arr = { 1, 3, 3, 3, 3, 4, 5, 4, 5, 8, 9, 3 }; //不重复 var uniq ...

  7. Git以及GitHub的一些基本使用

    1:注册GitHub账号: https://github.com/ 2:Git bash工具下载地址 https://gitforwindows.org/ 3:怎么在GitHub 新增 SSH Key ...

  8. Photoshop CC 2020 (PS 2020)改变与新功能

    Adobe Photoshop CC 2020中文版新增相机防抖动功能.CameraRAW 功能改进.图像提升采样.属性面板改进.Behance集成等功能,以及同步设置和其他更多有用的功能.ps202 ...

  9. iframe超出外层元素显示滚动条怎么办?

    尝试把外层盒子滚动条样式隐藏,或者设为overflow:hidden等都不生效,突然发现iframe有这个属性的忘记用了!! <iframe frameborder="0" ...

  10. 团队作业第3周——需求改进&系统设计(crtl冲锋队)

    2.需求&原型改进: 1.问题:游戏中我方飞机和敌方飞机是怎么控制的? 改进: 在游戏中,我控制我方飞机,按下方向键飞机便向按下的方向移动,按下Z键,我方飞机发射子弹. 敌方飞机面向随机的方向 ...