手机网站建设制作教程视频,做印刷的网站,小程序定制开发广州,无忧网该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这一篇教程#xff0c;我们一起来了解如何在CentOS系统中将Django2的Web项目部署到Nginx服务器。
CentOS系统虽然和Ubuntu系统都是Linux系统#xff0c;但是环境搭建和部署过程还是有一些区别。
整个流程分为几个部分#xff1…该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这一篇教程我们一起来了解如何在CentOS系统中将Django2的Web项目部署到Nginx服务器。
CentOS系统虽然和Ubuntu系统都是Linux系统但是环境搭建和部署过程还是有一些区别。
整个流程分为几个部分
安装图形桌面与远程登录
安装Python3.6及相关库文件
安装Django2
安装uWSGI
安装Nginx
配置Nginx
使用ini文件启动uWSGI服务器
使用supervisor管理uWSGI服务器
接下来我们就逐一完成这些步骤。
一、安装图形界面
在此之前大家应该先完成CentOS系统的最小化安装。
然后安装我们需要的图形界面和远程登录功能。
因为远程登录需要图形界面支持所以从顺序上先进行图形界面的安装再安装远程登录。
一使用Gnome桌面
GNOME桌面比较耗费系统资源在主机上我们更多是通过命令行进行操作所以我比较倾向于使用面向低性能硬件的Xfce桌面。
如果选择使用Xfce桌面大家可以略过此步骤直接浏览第二部分。
1、安装软件源
执行命令
yum install epel* -y
2、更新软件包
执行命令
yum -y upgrade
3、安装桌面支持
执行命令
yum groupinstall X Window System GNOME Desktop -y
或者
yum -y groupinstall Server with GUI
4、安装xrdp和vnc
执行命令
yum install tigervnc-server xrdp -y
5、启动xrdp服务并且设置为开机启动
执行命令
systemctl start xrdp
二使用Xfce桌面
1、安装软件源
执行命令
yum install epel* -y
2、更新软件包
执行命令
yum -y upgrade
3、安装桌面管理器
执行命令
yum install lightdm -y
4、安装桌面
执行命令
yum groupinstall xfce -y
5、安装远程服务
执行命令
yum install tigervnc-server xrdp -y
6、禁用GDM桌面管理器
执行命令
systemctl disable gdm
7、启用LightDM桌面管理器
执行命令
systemctl enable lightdm
8、配置Xfce为默认桌面
执行命令
vim ~/.Xclients
在打开的文件中写入以下内容
#!/bin/bash
XFCE$(which xfce4-session 2/dev/null)
exec $XFCE
然后执行命令增加执行权限
chmod x ~/.Xclients
9、启动或重启远程连接服务
执行命令
systemctl start xrdp
或者
systemctl restart xrdp
10、设置远程连接为开机启动
执行命令
systemctl enable xrdp
二、安装Python3.6
CentOS系统自带的是Python2.7.5可以通过输入“python”命令打开。
我们安装了Python3.6之后需要使用命令“python3”启动Python3.6的Shell。
1、安装相关库文件
执行命令
yum -y install zlib*
yum -y install gcc
yum -y install gcc-c
yum -y install openssl
yum -y install openssl-devel
yum -y install sqlite
yum -y install sqlite-devel
yum -y install readline readline-devel
2、安装Python3.6与相关库文件
一安装Python3.6
首先创建一个用于保存下载文件的文件夹并赋予权限。
执行命令
mkdir /home/centos/Downloads
cd /home/centos/Downloads
chmod 777 /home/centos/Downloads
然后下载Python的源码安装包。
下载地址https://www.python.org/downloads/source/
如果是通过Windows远程登录可以直接复制系统中下载好的Python源码安装包粘贴到CentOS系统的文件夹中。
当然也可以在CentOS系统中通过“wget”命令进行下载。
执行命令
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
最后解压缩软件安装包进入解压缩后的目录进行安装。
执行命令
tar xfz Python-3.6.5.tgz
cd Python-3.6.5
./configure --enable-shared --with-sslopenssl
make make install
安装完毕后启动Python3.6。
执行命令
python3
此时可能会出现错误。
python3: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
产生错误的原因是配置文件添加了参数“ --enable-shared ”Python3.6运行时没有加载到文件“libpython3.6m.so.1.0 ”。
实际上我们在执行“make”命令时已经编译了这个文件解决问题的方法就是把编译好的文件复制到特定的目录中。
执行命令:
cd /home/centos/Downloads/Python-3.6.5
cp libpython3.6m.so.1.0 /usr/local/lib64/
cp libpython3.6m.so.1.0 /usr/lib/
cp libpython3.6m.so.1.0 /usr/lib64/
二安装相关库
我们需要安装 “python36-devel”。
这个库没有在系统默认源中所以无法直接通过“yum”命令进行安装。
我们需要先添加一个安装源工具通过下载rpm文件进行安装。
但是直接下载rpm文件进行安装有可能会出现错误。
Warning: user mockbuild does not exist. using root
所以我们需要先安装一个依赖库。
执行命令
yum install mock -y
useradd -s /sbin/nologin mockbuild
然后下载“rpmforge”的安装文件。
可以到“http://repoforge.org/use/”进行下载或者通过“wget”命令进行下载。
执行命令
cd /home/centos/Downloads/
wget http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
下载完成后进行安装。
执行命令
rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
此时可能会出现“NOKEY”的错误是因为“yum”安装了旧版本的“GPG keys”造成的解决办法是导入“gpg”。
执行命令
rpm --import /etc/pki/rpm-gpg/RPM*
接下来就可以安装 “python36-devel”了。
可以先通过命令搜索python3-devel的可用版本。
执行命令
yum search python3 | grep devel
在搜索结果中可以看到一些关于Python3.X的文件名称其中有一个为“Python36”。
执行命令
yum -y install python36-devel
这样就完成了“python36-devel”的安装。
三、安装Django2
Python3.6默认安装后需要使用命令“pip3”安装第三方库。
先安装Django的依赖库“pytz”。
执行命令
pip3 install pytz
然后安装Django。
执行命令
pip3 install django
或者下载Django的安装包放入“Downloads”文件夹后进行安装。
执行命令
cd /home/centos/Downloads/
tar xfz Django-2.0.3.tar.gz
cd Django-2.0.3
python3 setup.py install
最后测试一下Python3.6、Django以及Sqlite3是否能够正常使用。
执行命令
python3
import django
import sqlite3
四、安装uWSGI
注意不要用“yum install uwsgi”进行安装这样装完会关联系统中的Python2.7并且系统可能会自带uwsgi自带uwsgi的启动项在“/usr/sbin/”中而我们通过“pip3”命令安装uwsgi的启动项在“/usr/local/bin/”目录中。
执行命令
pip3 install uwsgi
如果怕搞混我们可以卸载系统自带的uwsgi然后将启动项复制到“/usr/sbin/”目录中。
执行命令
yum remove uwsgi
cp -f /usr/local/bin/uwsgi /usr/sbin/
或者我们可以将自己安装的uwsgi启动项复制到“/usr/sbin/”目录中时改名为“uwsgi3”。
执行命令
cp -f /usr/local/bin/uwsgi /usr/sbin/uwsgi3
接下来我们测试一下uwsgi是否能够正常工作。
创建一个测试文件“mytest.py”。
执行命令
vi /var/www/mytest.py
写入内容
# !/usr/bin/env python3 # 也可以写成“#!/usr/bin/python3.6”。
def application(env, start_response):
start_response(200 OK, [(Content-Type, text/html)])
return [bUWSGI Test...]
代码输入完毕按“ESC”键并键入“:wq”回车保存测试文件。
然后系统中如果没有自带浏览器的话可以安装火狐浏览器。
执行命令
yum install firefox -y
最后进行测试。
执行命令
cd /var/www/
uwsgi --http :8888 --wsgi-file mytest.py
此时通过本机浏览器访问“http://127.0.0.1:8888”或者“http://localhost:8888”进行测试如果页面中显示“UWSGI Test…”字样则说明测试成功uwsgi可以正常工作了。
五、安装Nginx
首先安装Nginx的依赖库“pcre”。
执行命令
yum install -y pcre pcre-devel
然后安装Nginx。
执行命令
yum install -y nginx*
安装完成后就可以通过命令控制Nginx了。
启动命令/usr/sbin/nginx
停止命令/usr/sbin/nginx -s stop
退出命令/usr/sbin/nginx -s quit
重载命令/usr/sbin/nginx -s reload
查询进程ps aux|grep nginx
另外我们还可以设置Nginx为开机自启动。
执行命令
vi /etc/rc.local
在打开的文件中添加一行内容。
/usr/local/nginx/sbin/nginx
六、配置Nginx
创建配置文件并写入内容。
执行命令
vi /etc/nginx/conf.d/MyWeb.conf
写入内容
server {
listen 80;
server_name http://www.qqtbb.com;
charset utf-8;
client_max_body_size 5M;
location /media {
alias /var/www/MyWeb/media;
}
location /static {
alias /var/www/MyWeb/static;
}
location / {
uwsgi_pass 127.0.0.1:8888;
include /etc/nginx/uwsgi_params;
}
}
提示配置内容的详细说明可以参考《Django2Web项目开发入门笔记16》。
内容输入完毕使用时请先清除注释按“ESC”键并键入“:wq”回车保存并让服务器重载配置。
执行命令
nginx -s reload
此时可能发生错误。
nginx: [error] open() “/usr/local/var/run/nginx.pid” failed (2: No such file or directory)
解决方法是找到“nginx.conf”的文件夹目录然后运行“nginx”命令。
例如“nginx.conf”文件在“/etc/nginx/”目录中。
执行命令
nginx -c /etc/nginx/nginx.conf
nginx -s reload
如果发生80端口被占用的情况可以先查询占用端口的进程通过“kill”命令关闭进程。
执行命令
lsof -i :80
kill -9 [进程ID]
nginx -c /etc/nginx/nginx.conf
七、使用ini文件启动uWSGI服务器
首先使用ini文件启动uWSGI服务器需要安装依赖库。
执行命令
yum install uwsgi-plugin-python3
然后在项目文件夹中创建ini文件。
例如在“/var/www/MyWeb”中存放Web项目文件。
执行命令
vi /var/www/MyWeb/uwsgi.ini
在新建的文件中输入内容。
[uwsgi]
socket 127.0.0.1:8888 # 因为要接收来自Nginx的Socket此处必须和Nginx的设置保持一致。
chdir /var/www/MyWeb/
wsgi-file MyWeb/wsgi.py # 完整路径是“/var/www/MyWeb/MyWeb/wsgi.py”
processes 3 # 注意此处启用了多进程之后使用supervisor管理uWSGI时需要增加配置项。
threads 5
chmod-socket 664
chown-socket www-data
pidfile /var/www/MyWeb/MyWeb.pid
vacuum true
提示配置内容的详细说明可以参考《Django2Web项目开发入门笔记16》。
内容输入完毕使用时请先清除注释按“ESC”键并键入“:wq”回车保存然后就可以通过配置文件启动uWSGI服务器了。
启动命令
uwsgi3 --ini /var/www/MyWeb/uwsgi.ini
停止命令
uwsgi3 --stop /var/www/MyWeb/MyWeb.pid
重载配置
uwsgi3 --reload uwsgi.ini
再次强调启动时注意Python版本是否Python3.6并且不要使用系统自带的uwsgi。
此时通过域名就能够访问我们的Web项目了。
八、使用supervisor管理uWSGI服务器
supervisor可以在程序意外关闭时自动重新启动使用它管理uWSGI服务器非常不错。
不过supervisor只支持Python2我们需要通过CentOS自带的Python2.7进行安装。
首先安装“pip”工具。
执行命令
cd /usr/lib/python2.7/site-packages/
easy_install pip
然后安装“supervisor”。
pip install supervisor
接下来进行配置。
执行命令
echo_supervisord_conf /etc/supervisord.conf
vi /etc/supervisord.conf
在打开的文件末尾添加内容。
注意语句前面不要有空格。
[program:MyWeb]
commanduwsgi --ini /var/www/MyWeb/uwsgi.ini
directory/var/www/MyWeb/
startsecs10
stopwaitsecs10
stopasgrouptrue
killasgrouptrue
autostarttrue
autorestarttrue
提示配置内容的详细说明可以参考《Django2Web项目开发入门笔记16》。
这里特别需要注意的是如果“uwsgi.ini”文件中开启了多进程一定要加上下面两句。
stopasgroup true # 用于停止进程组即停止所有通过“uwsgi.ini”配置启动的进程。
killasgroup true # 用于关闭进程组即关闭所有通过“uwsgi.ini”配置启动的进程。
如果不添加这两句supervisorctl命令停止或关闭进程时只会关闭其中1个进程从而导致再次启动或重启uWSGI失败出现类似“MyWeb: ERROR (spawn error)”的错误。
这是因为残留的孤儿进程阻止了新的同类进程的开启。
当我们完成配置文件的修改之后必须重新加载配置文件才能使其生效。
执行命令
supervisorctl reload
最后启动supervisord和uWSGI。
执行命令
/usr/bin/supervisord -c /etc/supervisord.conf
或者
supervisorctl -c /etc/supervisord.conf start MyWeb
此时可能会发生错误。
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
这是因为supervisord已经启动过我们需要先查询已开启的程序将其关闭。
执行命令
find / -name supervisor.sock
unlink /被链接文件的所在路径/supervisor.sock
另外通过“supervisorctl”命令可以方便的管理项目。
启动项目命令supervisorctl start [配置文件中的项目名称]
重启项目命令supervisorctl restart [配置文件中的项目名称]
停止项目命令supervisorctl stop [配置文件中的项目名称]
控制所有项目supervisorctl all