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 

  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/ldlx-mars/p/12075566.html
Copyright © 2011-2022 走看看