美文网首页程序员Java-Python-Django社区
皮卡丘也会配置的环境——Django服务器部署

皮卡丘也会配置的环境——Django服务器部署

作者: 远月soul | 来源:发表于2018-10-21 19:38 被阅读14次

    配置环境

    本地系统:Ubuntu 18.04 或 mac
    腾讯云服务器:Ubuntu 16.04
    数据库:MySQL
    服务器端配置:Django+uwsgi+nginx

    前言

    写了一个微信公众号的后台管理界面,第一次将Django项目部署到正式的服务器上,花了整整一天配置环境,中途踩了不少坑。写这篇教程,是从一个小白的角度出发,手把手介绍Django服务器端的搭建,希望大家在搭建过程中能少走弯路。

    在此先感谢 @nocmt 大佬写的教程,对我这次环境的配置帮助颇多,本文章在此基础上进行一定程度的扩展与修改,去掉了一些不必要的步骤,增加了自己踩的一些坑。参考教程链接:https://www.jianshu.com/p/d6f9138fab7b

    具体步骤

    1、开始

    Ubuntu命令行输入sudo -i进入root模式,本教程默认在root模式下进行。要退出root请按Ctrl+D或输入logout命令。
    16.04版本中apt-get命令可以直接使用apt命令,本文采用后者,版本较低请将文中命令对应替换成前者。
    本篇文章本地操作系统使用的是Ubuntu 18.04,用Mac的同学也可以参照本文直接安装,使用Windows系统的同学请自行查看XShell的用法,或者参照腾讯云给的官方教程连接上服务器。
    官方教程地址:https://cloud.tencent.com/document/product/213/5436

    2、连接服务器

    Ubuntu连接远程服务器非常简单(Mac由于使用Linux内核同理),首先,在你的电脑上安装ssh

    apt update
    apt install openssh-server
    service ssh start
    

    这样你的ssh服务就成功安装并启动。

    下面链接远程服务器,使用分发的ip和密码

    ssh 你服务器的用户名@你服务器的ip
    

    在此会让你输入密码,输入即可,可以跳转到你的远程服务器了,此时你会发现命令行前端状态已经变成你服务器的名字了,说明成功登录服务器。
    进入服务器同样输入sudo -i进入root模式。

    本教程需要多次修改配置文件,vim大神请无视,不会使用vim的新手请使用nano,安装命令

    apt install nano
    

    nano的使用就不介绍了,只要进去就知道皮卡丘都会用,根本不需要教程。

    3、配置python环境

    这里先介绍一个命令

    ls
    

    用途是查看当前文件夹下的项目,请妥善利用。

    Ubuntu 16.04默认自带了Python3.5的环境,命令行输入python3,若进入python3环境说明安装完成,否则请自行搜索安装。需要python3.6或更高版本的人请自行解决。

    4、安装MySQL

    直接上命令行代码

    apt install mysql-server
    #此处按照要求配置密码
    mysql_secure_installation
    #按照要求配置,所有y/n全部用y
    #下面修改MySQL配置文件
    cd /etc/mysql/
    nano my.cnf
    

    里面应该有些东西,不要管,拉到文件尾添上这些东西

    [client]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    default-character-set=utf8
    
    [mysqld]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    character-set-server=utf8
    
    [mysql]
    no-auto-rehash
    default-character-set=utf8
    

    重启并连接MySQL

    service mysql restart
    

    如果没有报错直接按照教程继续进行。此步可能报错,我在这一步踩了坑,下面贴出解决方法,方便大家参考:

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
    

    可尝试下面两篇连接中给的方法:
    https://dba.stackexchange.com/questions/98467/how-to-solve-cant-connect-to-local-mysql-server-through-socket-error
    https://stackoverflow.com/questions/19658891/error-2002-hy000-cant-connect-to-local-mysql-server-through-socket-var-run
    很抱歉我已经忘了自己用的是哪一个了,大家都试试吧。

    解决完报错后连接mysql

    mysql -u root -p
    create database '你的数据库名称'
    

    输入quit退出

    5、创建虚拟环境

    我知道你们可能在本地使用了virtualenv等虚拟环境,但在本教程中推荐使用vcmt,python3.5自带,不需要任何安装。

    创建并激活虚拟环境虚拟环境

    python3 -m venv /home/vcmt
    source /home/vcmt/bin/activate
    

    命令行前面应该多出一个(vcmt)代表完成了这一步。

    6、将本地文件打包上传至服务器

    这一步可以直接从git上下载,如果你从git上下载,请自行研究,如果从本地上传,可以参考下面的步骤。

    下面操作在本地完成。

    首先修改settings.py的ALLOWED_HOSTS这一项,将你服务器的域名填入,不要http,不然运行时会报错。

    删除各app/migrations/下的以数字开头的数据库同步日志文件。

    在Django的主目录下打开命令行,运行

    pip freeze > requirements.txt
    

    看到多出一个requirements.txt 文件,打开,将里面的时间和pylint等项目删除,只保留你需要的环境包。

    右键将文件夹压缩成压缩包zip,在文件夹目录下打开命令行

    scp -r 文件名.zip 服务器用户名@服务器ip:/home/用户名/
    

    输入密码上传。

    下面在服务器上:

    cd /home/用户名
    unzip 上传的文件
    

    和Windows解压缩一样,该目录下出现了你的文件夹。

    rm 上传的文件
    

    删除压缩包。

    7、在服务器上安装依赖包

    cd 到你Django的主目录下

    pip -r install requirements.txt
    

    安装了对应的依赖包文件。

    如果安装时很有可能出现mysqlclient报错,用nano打开requirements.txt,删掉mysqlclient那一行,重新运行安装依赖包。mysqlclient按照下面的方法安装。

    apt update
    apt install mysql-server
    apt install mysql-client
    apt-get install libmysqlclient-dev
    apt-get install python-dev
    pip install mysqlclient
    

    下面迁移数据库,注意更改你的configs.json文件。具体更改每个人都不一样,不细说。

    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser
    python manage.py collectstatic
    

    测试是否正确安装

    python manage.py runserver 0:80
    

    正常安装的话应该没有报错信息,大功告成,到这一步实际上你将Django放在后台运行其他人已经可以访问了。但是我们还要继续配置更稳定的环境。

    8、安装并配置uwsgi

    先给大家介绍一个命令,因为很多程序被关闭后依然不会释放占用的端口,所以如果发现端口被占用,运行下面的命令查杀。这句话要经常使用,以80端口为例:

    fuser -k 80/tcp
    

    安装uwsgi

    pip install uwsgi
    

    启动测试

    uwsgi --http :80  --chdir /home/用户名/项目名称 -w 项目名称.wsgi
    

    正确的话恭喜你!错误的话也就和我一样踩坑了,请检查项目路径以及是否正确填写了绝对路径。

    下一步填写配置文件

    mkdir -p /etc/uwsgi/sites
    cd /etc/uwsgi/sites
    nano 项目名称.ini
    

    填入以下内容:

    [uwsgi]
    project = 项目名称
    base = /home/用户名
    
    chdir = %(base)/%(project)
    module = %(project).wsgi:application
    
    master = true
    processes = 5
    
    socket = %(base)/%(project)/%(project).sock
    chmod-socket = 666
    vacuum = true
    

    保存并退出

    9、安装并配置nginx

    apt install nginx
    nano /etc/nginx/sites-available/项目名称
    

    填入以下内容:

    server {
        
        listen 80;
        server_name read.nocmt.com;
    
        location /static/ {
            root /home/用户名/项目名称;
            }
        location / {
            include         uwsgi_params;
            uwsgi_pass      unix:/home/用户名/项目名称/项目名称.sock;
            }
        }
    

    保存并退出,运行下面代码,注意空格

    ln -s /etc/nginx/sites-available/项目名称 /etc/nginx/sites-enabled/
    service nginx configtest
    

    返回OK没有问题。

    10、启动网站项目

    重启服务

    service nginx restart
    uwsgi /etc/uwsgi/sites/项目名称.ini -d /home/用户名/项目名称/项目名称.log
    

    查看网站是否能正常运行,到这一步没有问题就 OK啦!

    最后更改你的configs.json文件

    DEBUG = False
    

    重启一次服务,命令行输入

    tmux attach
    

    Ctrl+D返回,大功告成!

    总结

    这次环境配置真的是相当耗时,第一次踩了很多坑,很多问题Google了n次才得以解决,这是我个人第一篇技术博客,希望能帮助更多有需要的人。

    相关文章

      网友评论

        本文标题:皮卡丘也会配置的环境——Django服务器部署

        本文链接:https://www.haomeiwen.com/subject/wcdvzftx.html