• 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

    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 Pathdjango.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-32Libsite-packagesdjangodbackendsmysqlase.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'	# 密码
        }
    }
    

  • 相关阅读:
    如何在Ubuntu下通过USB连接iPone/iPod
    全手动封装教程+SRS9.80102 文本教程(适合初学)
    PHP 面试踩过的坑
    视频 | 一步步教你操作websocket通知案例
    在职场,辞退你、培养你,从来不是看能力
    git撤销本地修改与回退版本
    异步发送邮件完整示例
    如何解决Redis缓存和MySQL数据一致性的问题?
    PHP 面试踩过的坑(二)
    守护进程、信号和平滑重启
  • 原文地址:https://www.cnblogs.com/chaoqi/p/11103188.html
Copyright © 2020-2023  润新知