一.Django运行环境的部署:
-
首先安装python
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
解压
tar -zxvf Python-3.6.6.tgz
进入 Python-3.6.6路径,编译安装到指定路径
./configure --prefix=/usr/local/python3
/usr/local/python3 路径可以自己指定,自己记着就行,下边要用到。
安装python3
make
make install
安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
Python3安装完成之后pip3也一块安装完成,不需要再单独安装
一样建立软链接
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3 -
安装虚拟环境:
安装虚拟环境是保证各项目环境之间不相互影响,这也是开发过程中的一个良好习惯。
pip3 install virtualenv
安装成功后选择一个目录建立两个文件夹,主要用于存放虚拟环境与Django项目。
mkdir -p /home/laowang/web_virtualenv
mkdir -p /home/laowang/web_project
文件夹创建完毕后进入你要存放虚拟环境的目标文件夹进行虚拟环境的创建
virtualenv --python=/usr/bin/python3(虚拟环境的python解析器路径) web(虚拟环境的名称)
之后进入/home/laowang/web_vortualenv/web/bin
启动虚拟环境:
source activate -
虚拟环境下安装项目所需的包以及uwsgi
首先我们将项目所需的包导出:pip3 freeze > packages.txt,随后在虚拟环境下运行pip3 install -r packages.txt进行包的安装。
pip3 install uwsgi安装uwsgi -
检查uwsgi是否安装成功
def application(env, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b"Hello World"]
uwsgi --http :8000 --wsgi-file test.py
运行此段代码如果浏览器返回 Hello World证明安装成功。
除了上面这种方法我们还可以通过测试自己的项目来验证安装是否成功
uwsgi --http :8000 --module 项目名称.wsgi -
上面验证没有问题后我们配置uwsgi
[uwsgi] # 将uwsgi作为web服务器时开启 http=172.36.65.195:8080 # uwsgi与nginx进行socket通信时开启 # socket=172.36.65.195:8080 # 项目存放的根目录 chdir=/home/xiaomeng/project/influencer # wsgi基于你项目存放的路径 wsgi-file=influencer/wsgi.py # 为uwsgi设置进程与线程根据机器自身情况自行把握 processes=4 threads=2 # 设置为主进程 master=True # 设置uwsgi日志及主进程pid的存放路径 pidfile=uwsgi.pid daemonize=uwsgi.log
接着我们测试用配置文件启动uwsgi,进入到配置文件所在的位置运行:
uwsgi --ini uwsgi.ini,之后我们用ps -aux|grep uwsgi查看一下uwsgi的进程信息,如果存在进程信息的话我们在浏览器上面访问配置文件中的IP地址,如果发现项目正常运行则配置成功。
常用uwsgi命令:
uwsgi启动:uwsgi --ini uwsgi.ini(配置文件)
uwsgi重启:uwsgi – reload uwsgi.pid(存放uwsgi主进程pid的文件夹)
uwsgi结束:uwsgi --stop uwsgi/pid
重启与结束uwsgi的时候一定要在uwsgi的目录下,重启与结束uwsgi的过程中如果发现端口问题(这是一个bug问题,不过影响不大)可以通过 killall -9 uwsgi将进程杀死。 -
安装nginx及nginx.conf文件的配置
安装nginx的方式有多种,这里我推荐利用yum install ngin或者python -m pip install nginx,不推荐下载压缩文件之后自己安装,因为压缩文件安装之后还需要自己进行编译很容易出问题,本人亲测,也踩了坑,故不推荐。
安装完成后我们先测试时候安装成功,运行nginx后在浏览器访问服务器的IP地址如果出现nginx的官方问候语则证明安装成功,成功后我们修改nginx的配置文件/etc/nginx/nginx.conf与uwsgi配合使用# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80; #默认的web访问端口 server_name 127.0.0.1; #服务器名 #charset koi8-r; access_log /var/log/nginx/access.log; #服务器接收的请求日志,logs目录若不存在需要创建,否则nginx报错 error_log /var/log/nginx/error.log; #错误日志 location / { include uwsgi_params; #这里是导入的uwsgi配置 uwsgi_pass 172.36.65.195:8080; #需要和uwsgi的配置文件里socket项的地址相同,否则无法连接uwsgi uwsgi_param UWSGI_SCRIPT web.wsgi; uwsgi_param UWSGI_CHDIR /home/laowang/project/web; #项目根目录 } } }
以上配置完成后将uwsgi与nginx同时重启,nginx重启命令 nginx -s reload,然后去浏览器上访问服务器地址,没有问题说明安装成功。
nginx常见命令:
nginx运行:nginx
nginx停止:nginx -s stop
nginx重启:nginx -s reload
注:uwsgi与nginx搭配使用时配置文件uwsgi.ini里的http一定要注释,同时将socket的注释取消。每次修改uwsgi与nginx的配置文件的时候都要重启对应的应用。 -
以上配置完成后我们是能通过nginx访问我们的项目,但是静态文件(css,image,js)却没有办法加载,所以需要对静态文件做一些处理:
首先修改nginx配置文件:# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80; #默认的web访问端口 server_name 127.0.0.1; #服务器名 #charset koi8-r; access_log /var/log/nginx/access.log; #服务器接收的请求日志,logs目录若不存在需要创建,否则nginx报错 error_log /var/log/nginx/error.log; #错误日志 location / { include uwsgi_params; #这里是导入的uwsgi配置 uwsgi_pass 172.36.65.195:8080; #需要和uwsgi的配置文件里socket项的地址相同,否则无法连接uwsgi uwsgi_param UWSGI_SCRIPT web.wsgi; uwsgi_param UWSGI_CHDIR /home/laowang/project/web; #项目根目录 } # 静态文件配置 location /static/ { alias /home/xiaomeng/project/influencer_static/static/; } } }
配置修改完毕后我们运行 nginx -t试运行一下,如果看到success则证明配置修改正确,nginx可以正常运行。
紧接着我们要做的就是收集项目的静态文件,这里有一个问题是:有人会说我的静态文件在项目里不是已经配置好了嘛,怎么还需要收集静态文件,是的没错在项目里我们的确是配置好了,但是对于uwsgi来说它是处理不了静态文件的,处理静态文件的工作是交给nginx来做的。这里有人说,那简单我直接在nginx的配置文件里面将路径改成我项目里静态文件的路径不就可以了,思路是没有问题,但是在我们项目里的静态文件不单单只有我们app生成的还有一部分由框架自带的app生成的。这就是为什么要收集静态文件的原因。 -
项目静态文件收集
首先我们创建一个文件夹mkdir /home/xiaomeng/project/influencer_static
之后修改该文件夹的权限chmod 777 /home/xiaomeng/project/influencer_static,修改文件权限的问题是linux系统访问权限的问题,这里如果不修改权限的话,我们是没有办法在浏览器上访问静态文件的。
紧接着在当前文件夹/home/xiaomeng/project/influencer_static下面创建文件static,注意这里文件名字必须为static不然后面会出现很大问题。
文件创建完后我们在该文件夹/home/xiaomeng/project/influencer_static/static下面运行 python (你项目下面manage.py的绝对路径)collectstatic 来收集静态文件。
以上操作完成后你会发现你访问静态文件仍然是被拒绝,显示的仍然是权限不够,这里出现问题是因为配置文件里user nginx;的原因,我们将他修改成user root;此时就能正常访问我们的项目静态文件了。
最后记得在浏览器访问前将uwsgi与nginx重启。