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(最新最详细版)