源码安装python +NGINX 的坎坷路 +uwsgi安装 部署django 项目

1、Nginx安装(基于ubuntu17.10 版本)css

首先咱们是基于源码安装,主要有以下步骤html

一、安装依赖包python

一、安装gcc g++的依赖库 sudo apt-get install build-essential sudo apt-get install libtool

 二、安装pcre依赖库
 sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev

 三、安装zlib依赖库
 sudo apt-get install zlib1g-dev

 四、安装SSL依赖库
 sudo apt-get install openssl

 说实话我一直不知道为何linux安装个软件须要先安装依赖包这个东西,有时间查询一下,不过若是你要安装nginx,请相信我,必定要执行上述步骤。

  

2 、安装过程linux

wget http://nginx.org/download/nginx-1.13.6.tar.gz #下载nginx安装包 #解压: tar -zxvf nginx-1.13.6.tar.gz #解压安装包 #进入解压目录: cd nginx-1.13.6 #配置: ./configure --prefix=/usr/local/nginx #配置安装目录 #编译:  make #安装: sudo make install #启动: sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,能够经过-h查看帮助命令。 #查看进程: ps -ef | grep nginx #查看当前运行的进行,若是nginx已经运行,能够经过0.0.0.0:80 进行访问了
 以上都是最友好的过程,请看下面安装过程遇到的坑

  

三、安装过程踩的坑nginx

一、 一开始,安装完成时,启动nginx ,会提示没法绑定80端口。 其实就是被占用了,so 
 1 killall -9 nginx(先停掉nginx) 2 service nginx restart


 二、make 编译的过程,提示编译有警告变为错误,一直编译不成功
 export CFLAGS = "-Wno-error" 
 我记得export 是获取环境变量的,这个也是对环境变量作一些配置,就能解决这个问题,具体是怎么个原理,哥也不清楚。反正有效果。

 三、还有一个好像是启动nginx时候,提示权限的问题,其实就是用户权限不过,给用户加一个root用户的权限组,或者直接sudo su 切换到root用户便可

  

 2、源码安装python3web

安装老套路,先安装依赖包,而后下载安装包,第三部编译安装sql

一、安装依赖django

  

一、sudo apt-get update  #更新软件源


二、安装依赖
sudo apt-get install -y gcc make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
--------------------- 

  

二、下载源码、解压、配置安装ubuntu

2.1 wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xzvim

2.2 tar -xvf Python-3.7.2.tar.xz

2.3 ./configure --prefix=/usr/local/python3 --enable-optimizations

2.4 make && make install

2.5 删除原有软链接 rm -rf  /usr/bin/python3

2.6 建立新的软链接 ln -s /usr/local/python3/bin/python3 /usr/bin/python3

2.7 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

 

  

三、首先去执行一下python有没有问题,没有问题,去设置永久的环境变量

 

一、rm /usr/bin/python3 #删除原有的软链接
二、添加一个新的软链接 ln -s /usr/python371/bin/python3 /usr/bin/python3
设置一些永久的环境变量
三、vim /etc/profile
二、export PATH=/usr/python3/bin:$PATH
三、source /etc/profile

 

  

3、python 和nginx都安装好了也测试好了,下面是去下载一个django ,而后去执行一下django,看看能不能正常访问

一、使用豆瓣源安装django真的超级快,这个提及来有一个坑,就是我,孕妈下载python的时候,那十几k的下载,我都呀崩溃了

pip install -i https://pypi.doubanio.com/simple/ Django  你可能想问,能不能指定安装版本,我也不知道能不能,妮可google一下。

  

二、启动django 

安装启动django
#建立django项目

django-admin startproject mysite

#修改django  settings.py配置文件
ALLOWED_HOSTS = ['*']
#启动django

python3 manage.py runserver 0.0.0.0:9000


#可能出现的问题
网页访问不到
	解决办法:  iptables -F  
				setenforce 0
	关闭防火墙
	

由于我用的不是啥虚拟机,我直接弄了一开电脑,安装了一个ubuntu ,因此,在指定ip+port时,我用的是ubuntu的实际ip 192.168.0.12:8000.才能访问。若是是虚拟机好像用上面的没啥关系。

  

4、介绍两个好玩的东西,一个是virtualenv模块 ,一个是virtualenvwrapper

一、virtual

先介绍virtualenv  ,从英文上就能看出来就是虚拟环境简写,这个是python的一个模块,可以穿件虚拟环境。

这玩意的原理 ,简单来理解,就是复制出一份python解释器能够执行的一个环境。而后你能够在这个环境下在作一些事情,和你实际的物理环境隔离,相互不影响

安装virtualenv:
	#经过pip3安装
	pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
	#建立虚拟环境 venv(venv就是一个环境命名) 
	virtualenv --no-site-packages --python=python3   venv  后面这个--python=python3 是说指定复制哪个解释器
#激活虚拟环境,进入虚拟环境!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!() 重点,这个虚拟环境不是什么虚拟的linux,只是复制了一份python解释器! 
#激活虚拟环境 source /data/mydjango1.11.15/venv/bin/activate
#退出虚拟环境 decactive
#此时你的环境变量,已经被修改,添加了虚拟环境 能够查看echo $PATH

  

 

二、确保开发环境一致

安装完虚拟环境后,还有一个很是重要的一步,就是这个确保开发环境一致,咱们想一个问题,咱们的django都是在window环境下进行安装的,和写代码的

确保开发环境一致性的操做
	2、确保开发环境的一致性
	1.假设咱们在本地开发环境,准备好了项目+依赖包环境
	2.如今须要将项目上传至服务器,上线发布
	3.那么就要保证服务器的python环境一致性
	复制代码
	解决方案:
	1.经过命令保证环境的一致性,导出当前python环境的包
	pip3 freeze > requirements.txt   #这个文件重定向后,文件的位置在C盘的用户下面,例如我本身的重定向后(C:\Users\gsl)

	这将会建立一个 requirements.txt 文件,其中包含了当前环境中全部包及 各自的版本的简单列表。
	可使用 “pip list”在不产生requirements文件的状况下, 查看已安装包的列表。


	2.上传至服务器后,在服务器下建立virtualenv,在venv中导入项目所需的模块依赖
        须要将这个文件上传到虚拟环境的目录下
        而后执行这条命令
	pip3 install -r requirements.txt

  

三、关于virtualenvwrapper

这个东西就是用来管理虚拟环境的,让咱们使用虚拟环境操做更加简便一些(这个东西有一步安装,哥们直接把python全部依赖都删除掉了,而后我就跪,从新装的系统)

 

一、先建立一个路径用来管理虚拟环境的 mkdir ~/envs

2.vim ~/.bashrc  #打开这个文件,写入下面三行信息(根据本身目录结构修改参数)
export WORKON_HOME=~/envs   #设置virtualenv的统一管理目录
VIRTUALENVWRAPPER_PYTHON=/usrpython371/bin/python3   #赋值一个virtualenvwrapper变量,这个也能够不写,能够经过 mkvirtualenv --python==/usr/bin/python3 ,或者指定本身源码安装的路径
source /opt/python347/bin/virtualenvwrapper.sh     #执行virtualenvwrapper安装脚本

三、source ~/.bashrc #读取一下系统变量,而后永久生效

  

关于virtualenvwrapper的相关命令

基本使用virtualenvwrapper,管理virtualenv

	建立一个虚拟环境,默认会激活当前这个虚拟环境
	mkvirtualenv my_django115

	
	#任意切换不一样的虚拟环境,workon提供tab补全功能,很是方便
	
	workon   my_django115
	
	workon   my_django2 
	这个命令很是方便的用法就是,在物理环境下,快速进入虚拟环境
	
	固然也能够手动中止虚拟环境
	deactivate
	

        删除虚拟环境,须要先退出虚拟环境
        rmvirtualenv my_django115

        lsvirtualenv

        列举全部的环境。
        cdvirtualenv
        导航到当前激活的虚拟环境的目录中,好比说这样您就可以浏览它的 site-packages 。
        cdsitepackages
        和上面的相似,可是是直接进入到 site-packages 目录中。
        lssitepackages
        显示 site-packages 目录中的内容。

完整官网介绍:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html

  

大爷的,就上面这些不断采坑,大概就花了我2天时间

 

4、(开始进入正戏了)安装uwsgi

一、apt-get install uwsgi  (这个是在虚拟环境下安装的)

二、建立uwsgi配置文件  uwsgi.ini (这个文件的路径也只要在虚拟环境下就好,就是一个启动uwsgi的配置文件)
[uwsgi]
#使用nginx链接时使用
socket=0.0.0.0:9000
#不用nginx直接当作web服务器使用
#http=0.0.0.0:9000
#项目目录绝对路径(django项目的绝对路径)
chdir=/root/Envs/django15/mysite15
#wsgi文件路径,在项目底下(django项目下面的wsgi文件)
wsgi-file=mysite15/wsgi.py
#指定解释器目录
home=/root/Envs/django15
processes=4
threads=2
master=True
pidfile=uwsgi.pid

  

5、配置 nginx转发请求到uwsgi

配置nginx支持转发uwsgi请求

主要修改配置以下:
	#负载均衡池 ,这个负载均衡就是nginx分发服务端请求的规则,
         #upstream 后面指定分发的 服务器组 ,里面是具备相同服务的服务器们
         #nginx 负载均衡支持2中,一种是轮询,就是循环分发状况,一种是权重。指定weight。
   upstream django {
    server 0.0.0.0:9000 weight=10;
}
    #gzip  on;
    #虚拟主机标签段,在这定义mytb.com
      
    server {
        listen       80;
        server_name  www.s12django.com;
        location / 
           #访问nginx的根路径时,转发请求给uwsgi的8000端口,这里要和uwsgi.ini写的一致 
            include /opt/nginx1-12/conf/uwsgi_params; 
            uwsgi_pass  django;
            #root   /opt/static/mytb/;
            #index  index.html index.htm;
        }
		#nginx处理静态资源配置 
		location /static  {
        alias /opt/static/django;
}

  

6、nginx配置静态资源

首先咱们如今作的事情是,nginx接到client请求,将请求分发给uwsgiServer进行处理,而咱们说nginx只返回静态文件(html、js、css)因此就要将咱们的静态文件指定的放在nginx的一个能读取到的目录下 ,就是上述的那个 ,nginx 处理静态资源配置的那个路径,这个路径是自定义的。

.配置django项目,收集静态文件(这两步的做用是,将咱们用到的静态文件,放到nginx的静态文件目录下)
	#关闭debug模式
	debug=False

	#收集静态文件的目录,静态文件内容都放这里了(要保证和nginx配置的是一致的路径,否则你的页面很是丑)
	STATIC_ROOT='/opt/static/django'(这个路径须要本身先建立一下)
	STATIC_URL = '/static/'
	STATICFILES_DIRS=[
		os.path.join(BASE_DIR,"static"),
	]
	
.执行命令统一收集静态文件,使得网站正常加载js,css
python3 manage.py collectstatic

  

七、安装一个叫作supervisor的进程管理工具

为何要这个东西是由于,咱们uwsgi是一个webserver ,咱们一直用手工去重启有点麻烦,直接配置这个东西,咱们管理uwsgi简单一些。固然这个东西不是必要的

	一、apt-get supervisor
	
	2.生成supervisor配置文件
	echo_supervisord_conf > /etc/supervisord.conf
	
	3.添加进程管理命令
	[program:my_django15] 给你要管理的usgi起个名字
       #这个地方要配置好 ,就是前面你安装的uwsgi的文件,用这个你本身配置的启动ini文件启动的意思。
	command=/root/Envs/django15/bin/uwsgi --ini /root/Envs/django15/mysite15/uwsgi.ini
	
	4.启动supervosr,管理uwsgi
	supervisord -c /etc/supervisord.conf #启动supervisor
	supervisorctl   #开始进程管理
	start django15
        stop  django15

  

8、若是以上无误,就能够正常访问到了。

有一个地方 ,忘记记录了 ,就是关于nginx虚拟主机设置域名的时候,这个咱们在windows下访问,找到hosts 文件的路径,将域名和ip+端口配置一下要。否则,你访问的域名,解析不到正确额ip会提示访问不到。

相关文章
相关标签/搜索