django之部署到ubuntu服务器上

Posted pikachuzj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django之部署到ubuntu服务器上相关的知识,希望对你有一定的参考价值。

 

 

 1.安装django

 

在 Ubuntu 16 这个版本中,默认集成了 Python 3.5 的环境,在终端输入“python3”,可以进入到 Python 3 的 Shell 中:

技术分享图片

但是我们发现,Python 下便捷的包管理工具 pip 并没有自带安装:

技术分享图片

所以我们使用 apt-get 对其进行安装,以方便安装其他的第三方模块:

sudo apt-get install python-pip3

 

在安装好 Python 的包管理工具——pip 3 之后,我们就可以快速地按照 Django 模块了:

pip3 install django

 

接着安装用于处理图片验证码的 Pillow 模块:

pip3 install Pillow

 

安装好两个模块之后,就可以来处理我们的项目文件了。

》2。将项目文件上传到虚拟机

在上一小节介绍了可以通过 Xftp 进入到文件传输界面进行文件的上传和下载,在这里,我们就借助这个功能将项目文件上传全部到虚拟机上,以进行测试和部署。

技术分享图片

》3.在运行django之前,一定要初始化:

python3 manage.py makemigrations   # 
python3 manage.py migrate       #  初始化数据库以及表格,这里面用的是django默认的数据库sqlite
python3 manage.py collectstatic    # 作用是搜集所有app里的的静态文件到根目录里的文件里面

 这里面的STATIC_ROOT = (os.path.join(BASE_DIR, ‘static‘))是在项目部署的时候才加上的,自己在本地测试的时候不要加上,会出错的!用于收集所有的app里面的静态文件到根目录static里面!

技术分享图片

 

在项目文件全部上传到虚拟机之后,我们进入到项目目录,运行 Django 的测试服务器,看看网站运行是否正常:

 

python3 manage.py runserver 0.0.0.0:80

这里面使用80端口,因为服务器的防火墙的原因,只有这个端口开放了,我试过其他的端口,但是失败了!

启动之后,我们在本机浏览器访问虚拟机的地址,最后出现的网页和在本地计算机运行的网页是一样的:

技术分享图片

这说明 Django 项目在 Ubuntu 上测试成功了,接下来才是烦人的事情,安装uwsgi模块

 

 

 1.2安装mysql数据库:

 》1.首先执行以下三条命令:

sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev

在安装过程中会要求设置密码,填写即可!

》2.通过下面命令测试安装情况:

sudo netstat -tap | grep mysql

 

技术分享图片

 

》3.进入数据库:

mysql -u root -p‘密码’

 

》4.设置mysql可以远程访问:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

 注释掉bind-address = 127.0.0.1: 

 技术分享图片

保存退出,然后进入mysql服务,执行授权命令:

grant all on *.* to [email protected]‘%‘ identified by ‘你的密码‘ with grant option;
flush privileges;

然后执行quit命令退出mysql服务,执行如下命令重启mysql:

service mysql restart

 

 

 

 2.安装uwsgi模块:

 

借用一个前辈的话:‘但是我们却不可能使用 Django 自带的测试服务器来运行我们的网站,因为其性能实在是太差了。在此选用 Uwsgi 作为 Django 项目运行的服务器。’,所以uwsgi就相当于一个微型的服务器。

这个实在vultr上部署的ubuntu服务器上安装uwsgi的错误??,提示说没有setup.py这个东西,我尝试着重新的的安装python3,但是还是这个错误,简直搞不懂,他的Ubuntu版本是不是原版的?

 1.安装pip3

apt install python3-pip

安装pip后在

技术分享图片

 》2.安装uwsgi之前,需要安装一些uwsgi的编译环境:

1 apt-get install build-essential python3
2 apt-get install python3-dev

》3.然后就是安装setup.py

1 wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
2 tar -zxvf setuptools-19.6.tar.gz
3 cd setuptools-19.6
4 python3 setup.py build
5 sudo python3 setup.py install

安装成功后,还是会出错如下:

技术分享图片

 

》 4.会提示你要升级一下pip的版本:

技术分享图片

 

pip3 install --upgrade pip

 

》 4.之后就是安装uwsgi了:

 

python3 -m pip install uwsgi

 

技术分享图片

 

 简直就是很高兴了,很高兴uwsgi安装成功了!

 

 

 3.配置django和uwsgi的关联:

》 1.配置uwsgi的文件:

在自己的django的根目录下面创建一个comic_uwsgi.ini文件

 

技术分享图片

在文件里面写入:

 

[uwsgi]
# Django-related settingsp
#socket = :8001
http = :8001 # the base directory (full path) chdir = /home/my/ # django项目的根目录路径 wsgi-file = comic_login/wsgi.py # 这里里面是django的wsgi.py的位置 # Django s wsgi file #module = videolearn.wsgi master = true processes = 5 threads = 10 python-autoreload = 1

 

  • socket 参数指定了项目运行在 8001端口上;
  • chdir 参数指定了项目的位置;
  • module 参数指定了项目的 wsgi 服务接口文件;
  • processes 参数指定了为项目分配一个进程;  
  • threads 参数指定了为项目分配两个线程;
  • python-autoreload 参数指定项目文件有改动时自动重启。

 

之后就可使用uwsgi命令来启动django的项目:

uwsgi --ini /home/my/comic_uwsgi.ini

还是服务的防火墙的原因,服务器默认开启的是80端口,所以在运行之前,的改下端口,http = :80,

 

 技术分享图片

 

》2.就是来安装一个进程守护软件,因为如果在xshell使用命令uwsgi --ini /home/my/comic_uwsgi.ini的话,一旦你的xshell窗口关闭了,这个命令也随之会关闭,所以呢就会解决办法,目前有两种解决办法:

1.使用一个进程’nohup --ini /home/my/comic_uwsgi.ini &‘使用这个命令后,在关闭xshell后, 网站确实还会运行,但是一旦服务器关机后,还得在运行一下这个命令,比较麻烦,但是有神器进程守护模块:

2.安装superviisor程序来管理脚本的启动:

 

sudo apt-get install supervisor

 

  安装之后,cd到supervisor的安装目录/etc/supervisor/,然后通过vim来编辑supervisor.conf

1 cd /etc/supervisor/
2 sudo vim supervisord.conf

  进入文件后,然后就是配置conf文件在文件的最后一行添加一下代码:

[program:comic]
command=uwsgi --ini /home/my/comic_uwsgi.ini 
directory=/home/my
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

user=root

 log_stderr=true

 logfile=/var/log/testpy.log //日志文件的地址

其中:

  • 第一行表示设置一个名为 video 的 program,可以通过这个名称来控制这个 program;
  • 第二行表示程序运行的命令,在这里我们设置的是 Uwsgi 通过 Uwsgi 配置文件启动 Django 项目的命令,也同样也可以是其他的命令,就相当于是一个运行脚本,来执行这个命令,
  • 第三行表示程序的目录;
  • 第四行表示程序在启动后需要保持的秒数,设置为 0 表示不需要保持;
  • 第五行表示在指示程序停止运行后,需要等待的秒数,设置为 0 表示不需要等待;
  • 第六行表示当 Supervisord 启动时,该程序自动启动;
  • 第七行表示当 Supervisord 为运行状态时,程序自动重启。

配置完之后,保存。

3.然后就是设置supervisor开开机自启:

cd进入到/etc里面,编辑rc.local文件:

 

1 cd /etc
2 vim /etc/rc.local

然后在这个文件中:exit 0 前面一行加上 service supervisor start 保存。

技术分享图片

这样的话,算是完成了,但是只用这个uwsgi的微处理软件的话,性能上还是比不上apache以及nginx的专业,所以呢,还是的装一个nginx,配合着uwsgi实现最大的处理状态!

 

 

 4.安装nginx处理器:

 

》1.安装 Nginx

首先,使用 apt 工具在 Ubuntu 虚拟机中安装上 Nginx:

启动 Nginx

sudo apt-get install nginx

 

Nginx 安装完成之后,就可以通过 service 命令进行启动了:

sudo service nginx start

如果启动成功,不会有任何提示,这时候,我们可以在浏览器输入虚拟机的 IP 地址进行访问,可以看到默认的 Nginx 欢迎页面,如下图所示:

技术分享图片

这说明 Nginx 运行成功了。

》2.创建 uwsgi_params

在设置 Nginx 之前,我们先在 Django 项目的 manage.py 同级目录下创建一个名为uwsgi_params文件,文件的内容为:

 

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

这个文件的作用在于 Nginx 可以匹配uwsgi_params文件中的变量名,将接受到的相关请求交由 Uwsgi 来处理。

 

3.创建站点的nginx的撇配置文件:

为了便利管理,我们不在 Nginx 默认的站点配置文件中添加站点的配置信息,而是在 manage.py 文件同级目录下新建一个名为comic_nginx.conf的 Nginx 配置文件,将以下配置信息写入文件中:

server {
    listen         80 ; 
    server_name    localhost; 
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include /home/my/uwsgi_params;     这里面的路径是刚才设置的uwsgi_params的文件
        uwsgi_pass 127.0.0.1:8001;      设置内部的IP地址
        uwsgi_read_timeout 60;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/my/static;        django项目的静态文件的绝对地址,为了能让nginx能找到django项目的文件
     }
     location /media  {
        alias /home/my/media;        django媒体的文件的地址,和上面的static作用差不多,但是这个我没有用,我把那些图片都放到了static里面了!
    }
 }

技术分享图片

 

video_nginx.conf文件编辑好之后,我们将这个文件通过软链接的形式添加到 Nginx 的 sites-enables 目录下,在命令行中运行一下命令:

 

sudo ln -s /home/my/comic_nginx.conf /etc/nginx/sites-enabled/comic_nginx.conf

技术分享图片

 

 

如此一来,Nginx 的启用的站点就有两个了:默认的欢迎页面和 Django 站点。我们将默认的欢迎页面删除,进入到 Nginx 的 sites-enabled 路径下:

 

cd /etc/nginx/sites-enabled/
sudo rm -f  default

修改 Uwsgi 配置文件;

之前为了方便运行,我们的 Uwsgi 配置文件中是直接使用 Http 的方式指定端口进行运行的,但是如果使用 Nginx 进行代理转发,就得修改一下。将video_uwsgi.ini文件中的:

 

http = :8001

 

 修改为:

socket = :8001

完成之后,需要重新的重启nginx以及supervisor, 当然最快捷的是重启一下服务器

sudo service nginx restart

 




以上是关于django之部署到ubuntu服务器上的主要内容,如果未能解决你的问题,请参考以下文章

基于Ubuntu Server 16.04 LTS版本安装和部署Django之:测试项目

ubuntu12上部署Django1.8.4+uwsgi+nginx超级详细流程配置到云服务器

Django Logging 在 Ubuntu/Apache 服务器上部署时不起作用

django2+uwsgi+nginx上线部署到服务器Ubuntu16.04(最新最详细版)

基于Ubuntu Server 16.04 LTS版本安装和部署Django之:安装MySQL数据库

Python3 + django2.0 + apache2 + ubuntu14部署网站上线