1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Django】Nginx+uWSIG在阿里云服务器部署两个Django项目

【Django】Nginx+uWSIG在阿里云服务器部署两个Django项目

时间:2018-09-08 01:17:22

相关推荐

【Django】Nginx+uWSIG在阿里云服务器部署两个Django项目

参考资料:Django中文文档 CentOS7下部署Django项目详细操作步骤-Django社区,Django中文网,django教程,Django!

云服务器:阿里云轻量级应用服务器centos,2G内存+40G固态、

工具:Xshell6和Xftp6

之前已经部署好了一个网站,现在由于做了第二个项目,需要再做一个网站部署上去

网上看了很多博客,都没成功,最后通过qq群网友提供的这个中文文档部署成功,万分感谢!!

第一个项目,放在/home文件夹下

第一个网站部署过程:

更新系统(ubuntu)

如果是新系统的话先更新一下系统,防止版本过旧导致安装软件出现问题。

sudo apt-get updatesudo apt-get upgrade

yum安装(ubuntu)

sudo apt install yum

由于Ubuntu的一些问题,改用centos

安装python3.6依赖包

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

安装Python3.6.5

wget /ftp/python/3.6.5/Python-3.6.5.tgz

解压安装包

tar -xvf Python-3.6.5.tgz

将解压文件移动到 usr/local目录下

mv Python-3.6.5 /usr/local

在local目录下创建python3目录

mkdir /usr/local/python3

转到解压文件夹下配置安装目录

cd /usr/local/Python-3.6.5./configure --with-ssl --prefix=/usr/local/python3

编译源码及安装

make && make install

配置软连接

首先删除原来的软连接

rm -rf /usr/bin/python

建立新的软连接

ln -s /usr/local/python3/bin/python3 /usr/bin/pythonln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

将python版本指向以前的旧版本 (yum配置文件等)

# vi /usr/bin/yum#!/usr/bin/python2.7

# vi /usr/libexec/urlgrabber-ext-down#!/usr/bin/python2.7

测试

安装Nginx

cd /usr/local/wget /download/nginx-1.8.0.tar.gztar -zxvf nginx-1.8.0.tar.gzcd nginx-1.8.0 ./configure --prefix=/usr/local/nginx make && make install

启动Nginx服务

cd /usr/local/nginx/sbin./nginx -t #测试是否成功./nginx

启动成功后输入域名可看到如下界面

配置Nginx

nginx一般默认安装好的路径为/usr/local/nginx

在/user/local/nginx/conf/中打开nginx.conf,加入以下内容

server {listen 8996; #暴露给外部访问的端口server_name localhost;charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8997; #外部访问8996就转发到内部8997}location /static/ {alias /home/project/static/; #项目静态路径设置}}

强调:alias那一行static后必须加/,否则无法加载静态文件

安装pip3和django2.0

pip3 install django==2.0

安装uwsgi并配置

pip3 install uwsgi

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

安装mysql

wget /get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpmyum -y install mysql mysql-server mysql-devel

启动mysql

service mysqld start

进入myql(第一次无密码)

mysql -u root -p

修改mysql密码

mysqladmin -uroot -p password

重启Myql

service mysql restart

django与Mysql连接工具

pip3 install mysqlclient

安装pytorch

版本:Python3.6 Cuda9.0

pip3 install torch torchvision

同步项目数据库

python manage.py makemigrationspython manage.py migrate

安装uwsgi和配置xml文件

pip3 install uwsgi

为了在终端中使用uwsgi命令,执行以下命令

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

在django项目下(与manage.py同级目录)新建~.xml文件(~为你的项目名称)

~.xml文件内容如下

<uwsgi><socket>127.0.0.1:8997</socket><!-- 内部端口,自定义 --><chdir>/home/www/myproject</chdir><!-- 项目路径 --><module>myproject.wsgi</module><processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize><!-- 日志文件 --></uwsgi>

执行

首先进入root模式。

进入~.xml文件同级目录

uwsgi3 -x ~.xml

运行Nginx

cd /usr/local/nginx/sbin./nginx

此时便已经部署完成

其他

1、静态文件依然无法加载

2.无法调用摄像头 (NotSupportedError, Only secure origins are allowed )

需要改写http为https

阿里云免费SSL证书配置Https请求

同时改写nginx.conf文件如下

worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfileon;server {listen 80;listen 443 ssl;server_name 47.106.39.91;ssl_certificate cert/1823148_easydown.xin.pem;ssl_certificate_key cert/1823148_easydown.xin.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8997;uwsgi_param UWSGI_SCRIPT mysite.wsgi;uwsgi_param UWSGI_CHDIR /data/wwwroot/mysite;}location /static/ {alias /home/GYTJ/static/; #项目静态路径设置}}}

此时可能出现的问题:unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:12

解决办法:Starting nginx: nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:112_xubin.nic的博客-CSDN博客

server 500

代码部分有错误(安全性方面,比如list访问错误等等

(用到了django内置model操作---》数据库表名要对应!!大小写

重启部署

cd /usr/local/nginx/sbin./nginxcd /home/GYTJuwsgi3 -x GYTJ.xml

致此,第一个网站部署成功!!!!

第二个网站部署

1、进入Nginx的配置文件目录/usr/local/nginx/conf/,然后新建一个目录:

mkdirvhost

之后在vhost目录里建立两个以.conf结尾的文件(GYTJ.conf以及LYBB.conf),里面的内容如下:

GYTJ.conf文件夹内容:

server{listen80;server_name之前备案好的域名;charsetutf-8;location/{includeuwsgi_params;uwsgi_pass127.0.0.1:8997;#端口要和uwsgi里配置的一样uwsgi_paramUWSGI_SCRIPTGYTJ.wsgi;#wsgi.py所在的目录名+.wsgiuwsgi_paramUWSGI_CHDIR/home/GYTJ/;#项目路径}location/static/{alias/home/GYTJ/static/;#静态资源路径}}

LYBB.conf文件夹内容:

server{listen80;server_name你的服务器公网ip; #有域名用域名,没有就暂时用这个charsetutf-8;location/{includeuwsgi_params;uwsgi_pass127.0.0.1:8995;#端口要和uwsgi里配置的一样uwsgi_paramUWSGI_SCRIPTLYBB.wsgi;#wsgi.py所在的目录名+.wsgiuwsgi_paramUWSGI_CHDIR/home/LYBB/;#项目路径}location/static/{alias/home/LYBB/Segment/static/;#静态资源路径}}

项目路径、端口、静态资源与所属项目对应好。注意:项目里的uwsgi端口不能与另一个项目重复。

2、/usr/local/nginx/conf/目录下的原来默认的nginx.conf文件,先备份一下,然后把里面的代码删除,修改成如下代码:

events{worker_connections1024;}http{includemime.types;default_typeapplication/octet-stream;sendfileon;include/usr/local/nginx/conf/vhost/*.conf;#主要是这个地方,把新建的两配置文件包含进来server{listen80default_server;server_name_;return404;}}

3、

将本地测试好的项目,上传到第一个网站文件夹同目录下,也就是/home文件夹下

然后再在这个文件夹下新建虚拟环境,进入虚拟环境,在新的虚拟环境再装一次uwsgi,和安装项目所需依赖包,然后在项目根目录新建立一个uwsgi配置文件,里面的端口和配置文件名不要和其它项目相同,路径换成自己的项目路径。

具体步骤:

(1)创建指定版本的虚拟环境。

创建文件夹env放虚拟环境:mkdir-p/home/env

cd /home/env

virtualenv--python=/usr/bin/python3pyweb

然后进入/home/env/pyweb/bin 启动虚拟环境pyweb

sourceactivate

tip:退出虚拟环境命令:deactivate

(2)在虚拟环境中安装所需要的包(注意:是在虚拟环境中操作,也就是最前面有pyweb标志)

先从第一个项目文件夹下导出所需要的环境依赖包

pipfreeze>requirements.txt

将这个txt文件拷贝到第二个项目文件夹下

等待所有的包安装成功

如果是用到了MySQL数据库,还需要把你的数据库文件导入进来

导入数据库到服务器。(如果用的是Mysql的话)

默认使用的是SQLite数据库,就不用做此操作。数据库原来是SQLite的,想换成Mysql,请查看文章:如何把SQLite数据库转换为Mysql数据库

如果是Mysql数据库的,则在命令行里输入:

#导出Mysql,django为你的数据库mysqldump-uroot-ppassworddjango>django.sql#把django.sql上传到服务器,在服务器里用下面命令导入mysql-uroot-ppasswordusedajngo;sourceyourPath\django.sql

(3)进入虚拟环境,在新的虚拟环境pyweb再装一次uwsgi

我的第二个网站项目路径是 /home/LYBB/,在项目根目录下创建

LYBB.xml文件,输入如下内容:

<uwsgi><socket>127.0.0.1:8995</socket><!--内部端口,自定义--><chdir>/home/LYBB/</chdir><!--项目路径--><module>LYBB.wsgi</module><!--mysite为wsgi.py所在目录名--><processes>4</processes><!--进程数--><daemonize>uwsgi.log</daemonize><!--日志文件--></uwsgi>

保存

注意<module>里的mysite,为wsgi.py所在的目录名。

启动uwsig

uwsgi3 -x LYBB.xml

4、重启Nginx,就能成功访问。哪个项目不能访问,就把原来的uwsgi进行杀死,然后再进入对应虚拟环境,启动uwsgi即可。

先杀死所有我的第二个网站LYBB相关的进程(因为我之前试了很多方法,导致和第二个网站相关的已经在运行了)

第一个网站GYTJ相关的不要动

再通过命令 ps aux 查看所有正在运行的进程

可以发现和第二个网站LYBB相关的已经不在运行了

重启nginx

再次查看,发现第二个网站已经在运行中了

现在,就可以通过两个链接分别访问到两个网站了

第一个:http://www.xxxx.xin(第一个网站的域名)

第二个:http://公网ip

如果你有两个域名,可以把第二个换成域名访问

补充:修改代码后,需要重启uwsgi和nginx

步骤

1.在修改源码上传服务器之后,进入服务器项目目录,查看uwsgi进程

ps -ef|grep uwsgi

2.然后杀死进程

注:如果只有一个网站,可以直接杀死所有进程

killall -9 uwsgi

3.再重新启动uwsgi

4.重启Nginx

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。