zoukankan      html  css  js  c++  java
  • python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上

    经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈

    注意一点,就是,centos7是基于python2的,我这边默认的是python2.7.5,记住不要删除了python2,否则后果很严重,yum会报错,这是因为python3和python2版本的冲突导致的

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

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

    第二步,下载Pyhton3到/usr/local 目录

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

    第三步,解压

    tar -zxvf Python-3.8.0.tgz

    第四步,进入cd Python-3.8.0

    第五步,解压到指定路径

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

    第六步,安装python3

    make
    
    make install

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

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

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

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

    如果安装了python3以后发现没有pip可以通过以下方式下载pip,进入一个目录就是你想把它下载到哪个目录就进入哪个目录

    执行命令:wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate

    会下载get-pip.py文件

    然后执行: python3 get-pip.py

    第九步,安装virtualenv, 方便不同版本项目管理。

    pip3 install virtualenv

    第十步,建立软链接

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

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

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

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

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

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

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

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

    pip freeze > requirements.txt 

    第十五步,把项目源码压缩打包。把项目上传到服务器对应的目录里(/data/www/),解压。

    这里可以导入本地数据库,其实django建model,只要在线上mysql数据库中建立项目中的数据库的名称,eg:python

    然后,可以像本地开发一样 migrate 数据库,前提是已经安装好了数据库啊

    第十六步,进入解压好的项目根路径中安装requirements.txt里的依赖包。

    pip3 install -r requirements.txt

    第十七步,安装mysql

    wget -P /home/liudong http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

    cd /home/liudong

    安装mysql的YUM源:rpm -ivh mysql57-community-release-el7-11.noarch.rpm

    检查mysql的YUM源是否安装成功:yum repolist enabled | grep "mysql.*-community.*"

    查看mysql版本,执行:yum repolist all | grep mysql

    查看当前的启用的 MySQL 版本:yum repolist enabled | grep mysql

    yum install mysql-community-server

    安装过程中一直输入"y"就可以了,当出现下面的结果时,就代表mysql数据库安装成功了

    启动mysql服务:systemctl start mysqld

    登录进Mysql(我的刚安装完时没有密码):mysql -uroot -p

    查看默认密码

    grep 'temporary password' /var/log/mysqld.log

     进去之后重新设置密码

    set password for 'root'@'localhost' = password('123456');

    如果使用navicat for mysql链接不上 可能是这个原因 https://blog.csdn.net/qq_19306197/article/details/83820319

    第十八步,通过 python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查 

    如果报错: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__)

    第十九步,在项目根目录里添加uwsgi配置文件 (uwsgi.ini)

    [uwsgi]
    socket = 127.0.0.1:8070
    #是否使用主线程
    master = true
    # 项目在服务器中的目录(绝对路径)
    chdir = /data/www/web
    # Django's wsgi 文件目录
    wsgi-file = web/wsgi.py
    # 最大进程数
    processes = 4
    #每个进程的线程数
    threads = 2
    #状态监听端口
    stats = 127.0.0.1:9191
    # 退出时自动清理环境配置
    vacuum = true
    #目录下文件改动时自动重启
    touch-reload = /data/www/web
    #Python文件改动时自动重启
    #py-auto-reload = 1
    #后台运行并把日志存到.log文件
    daemonize = /data/www/web/uWSGI.log

    第二十步,进入部署到服务器的项目根目录下,执行

    uwsgi --ini uwsgi.ini

    第二十一步,查看端口,看下uwsgi是否存在

    netstat -nltp

     第二十二步,配置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 web.wsgi;     #wsgi.py所在的目录名+.wsgi
               uwsgi_param UWSGI_CHDIR /data/www/web/; #项目路径
               
            }
            location /static {
                alias /data/www/web/myapp/static; #静态资源路径
            }
        
            location /templates {
                alias /data/www/web/templates;
            }
        }
    
    }

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

    uwsgi 启动方法
        uwsgi --ini uwsgi.ini
    Nginx 重启方法
        nginx -s reload

    以下总结下注意事项:

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

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

     ALLOWED_HOSTS = ['*']

    3 数据库设置(settings.py)

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

    在这里非常感谢 Q博主 https://www.cnblogs.com/chaoqi/p/11103188.html 

  • 相关阅读:
    网页快捷键
    2016年5月3日15:55:23笔记
    【编程的乐趣-用python解算法谜题系列】谜题一 保持一致
    重温离散系列②之良序原理
    重温离散系列①之什么是证明
    浅谈栈和队列
    [leetcode]16-最接近的三数之和
    [leetcode] 4-寻找两个有序数组的中位数
    英语句子的基本结构【转】
    [leetcode] 11-盛最多水的容器
  • 原文地址:https://www.cnblogs.com/ldlx-mars/p/12075566.html
Copyright © 2011-2022 走看看