apache+flask详解

博客说明:
2020年4月26日11:53:58(过长时间后,仅供参考),以下内容仅为我个人理解,而且有可能存在转化为博客以后会删减东西,还有上传的时候有书写错误的问题,所以只用来为大家提供参考,接下来会以为自己的理解,详细讲解,可以参考我的理解,不可全当成知识来使用,否则被误人子弟概不负责,还有欢迎各位有问题随时帮我指出,有疑问也可以留言…

环境说明:
Centos6.6 + apache2.2 +python2.6+mod_wsgi+flask

文档说明
以下操作均在root权限下,之后如果有操作权限问题,请自己解决
‘#’ 开头一率为下面命令的具体注释
& 开头为Linux命令
\ 开头为配置文件要插入语句

背景说明:
公司之前使用apache2.2部署有项目,我这里需要把py文件放在项目上并运行,在尽量不影响到之前项目的情况下,部署并详解一下

## 这里首先说明下,apache使用yum安装和源码安装的目录等完全不一样,我们这里着重说明yum安装的Apache,因为之前公司已经安装好apache,所以我这里只是写出我知道的默认目录,如果有不一样的之后可以参考自己设置##

apache目录说明
/etc/httpd/ == apache主目录
/etc/htttpd/logs == apache日志目录(一般放错误日志,之后我们也可以把自己的日志文件输出在这里)
/etc/httpd/modules == apache所加载的模块目录(之后mod_wsgi成功加载的话,也会在里面)
/etc/httpd/conf == apache 默认配置存放目录
/etc/htttp/conf/httpd.conf == apache默认主配置文件
/etc/httpd/conf.d/ == apache主配置文件中默认设置的引用配置目录
/var/www/html == apache默认项目目录

路径说明:
路径 /开头 一般是绝对路径,
未以 /开头 的一般是相对路径。
以上并非绝对,请自己判断,并注意路径

其他目录说明:
/usr/local/python3 == python3.6安装位置(这里是自己设置的)
/usr/bin/ == 默认链接目录(之后我们要在这里建立很多的连接,相当于windows的环境变量)
/usr/bin/python == 默认python连接(centos自带的python2.6的连接)
/usr/bin/pip == 默认python的pip连接
/usr/lib64/ == 一些程序模块加载的路径(之后我们安装python,可能也要做部分模块替换)
/usr/yum/ == centos的yum目录
/usr/yum.conf == centos的yum某些配置文件
/usr/yum.repos.d/ == centos的yum某些下载配置相关目录(类似于window中,你可以设置用迅雷还是用别的啥下载)
/usr/local/ == 用户的本地目录(大部分情况下,我们将包和我们自己下载的程序放在此目录下)
/usr/local/python3/lib/python3.6/site-packages/ == python3的pip包管理地址
/usr/bin/yum == yum连接(含要连接的python连接配置)
/usr/sbin/apxs == apache默认连接(环境变量)

下载命令说明
yum 为centos的系统安装命令,依赖于centos自带的python版本和centos版本,也就是说我们使用yum命令下载的python相关的,都是于centos自带python版本相关联的,我们这里centos6.6自带的是python2.6
wget为源码获取的命令,后面跟网页(window中我们的下载地址),因为是源码包下载,所以下载完成
后一般都要进行4个步骤,

vi命令说明:
& vi /路径/文件 == 打开此文件,如不存在,最后保存后将创建
/** == 查看此文件 **所在位置,按n为下一个
i == 进入文件后,输入 i 进入编辑模式
:wq == 编辑完成后,按esc按键,进入查看模式,在查看模式下输入:wq保存并退出

  1. tar(解包)
  2. ./configure(配置),一般会有2个主要使用的参数
    #安装位置参数
    –prefix = ‘/这里写入要放的路径/’
    #与其他程序关联
    –with–xxx = ‘这里写入路径/xxx’
  3. make(编译)
  4. make install(使用编译好的安装)

#以上步骤报错,要使用make clean清空以后,从新进行

一、安装Apache

#先yum下载apache文件,确保我们存在,存在会显示版本,并且nothing to do
或者使用其他命令查看是否安装

& yum install httpd 

#环境文件

& yum install httpd-devel 

二、安装python3.6.10

#由于flask官方文档已经说明不再支持python2.6和3.3,个人测试使用了python3.6,所以这里我们wget获取下源码,下载并安装,如果网页失效的话,请自行寻找相关网址
#我们将包下载在此目录下

& cd /usr/local
& wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz

如上述网页无效,请点击进入python官方自己寻找相关版本

#下载gcc编译器,这里使用centos自带yum下载,gcc目前是linnux系统中适用大部分软件的编译器

& yum install gcc

#下载python环境包,没有环境和依赖,python也没办法适用

& yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

#该下的都下了,我们可以ll python* 查看下,Python-3.6.10.tgz.xz应该已经下载好了。
#下面开始解压
注意:
1.这里是个xz包,所以我会先xz解压为tar包,再tar 解压,xz notfound可以yum install下载下
2.这里我们配置 -fPIC命令,指定python编译的时候执行

& xz -d Python-3.6.10.tar.xz   #生成一个.tar代替了.tar.xz
& tar -xvf Python-3.6.10.tar   #生成一个包
& cd Python-3.6.10  
& ./configure --prefix=/usr/local/python3 --enable-shared  CFLAGS=-fPIC  #指定目录和编译命令
& make #这里一定要检查有没有错误,出错继续安装,可能到最后你都找不到问题
& make install  #以上出错请make clean,并查找错误原因重来
#Collecting setuptools
#Collecting pip
#Installing collected packages: setuptools, pip
#在make install的最后会自动安装 pip工具和setuptools,如果用了别的源请自行下载这两个工具

到这里我们python3.6和pip就已经有了,但是还没结束

创建软连接
#上面已经说了,相当于windows的环境变量,如果创建连接中提示已存在,就将存在的变量mv ** **.bak存为备份,我们再次设置软连接
在这里注意
/usr/bin/python 之前默认指定2.6,centos的yum是依赖于他的,还有服务器如果之前有脚本,应该也是依赖于此变量,所以如果这里修改连接,则需要修改已经部署的脚本读取路径和yum中的读取路径

& ln -s /usr/local/python3/bin/python3 /usr/bin/python3
#& ln -s /usr/local/python3/bin/python3 /usr/bin/python
& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

#这个时候输入python和pip-V确认以上一切ok,如果输入python出现如下错误
#python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No #such file or directory
#原因是因为python运行时没有加载到libpython3.6m.so.1.0 这个库文件,将其复制到响应目录就可以了

#& cp /usr/local/python3/lib/libpython3.6m.so.1.0    /usr/lib64/

#如修改/usr/bin/python/请修改yum配置读取路径,其余脚本自行修改

#& vi /usr/bin/yum
#将文件头  /usr/bin/python   修改为  /usr/bin/python2.6
#让其继续连接之前的python2.6
#& yum list **   #查看下是否修改正确

输入python和python3确认连接和版本无误

& python3
#Python 3.6.10 (default, Apr 26 2020, 15:54:23) 
#[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
#Type "help", "copyright", "credits" or "license" for more information.
#>>>

查看pip和pip3连接

& pip-V
#pip 18.1 from /usr/local/python3/lib/python3.6/site-packages/pip (python 3.6)

以上 python相关安装完毕
再更新下pip,不然一直提醒,也有可能以后装包会出问题

& python3 -m pip install --upgrade pip

三、mod_wsgi安装

#由于centos yum安装的mod_wsgi是python2.6指定版本的,python3.6将不能使用,所以我们这里wget获取源下载或者pip install 来安装对应3.6版本的mod_wsgi
这里 pip和wget都讲下
1.pip

& pip install mod_wsgi
#Successfully installed mod-wsgi-4.7.1
#如果出现gcc错误的报错,说明之前python3.6的编译有问题,请重新编译安装python3.6

2.wget
源失效请点击此处寻找相应版本

& cd /usr/local/
& wget https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.7.1
& tar -zxvf 4.7.1
& cd mod_wsgi-4.7.1/

#配置、编译、安装
#配置的时候,指定要关联的apache和python
不知道apxs在哪,可以通过whereis apxs查到对应位置

& ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python3
& make
& make install
#注意,如果配置和make错误,请make clean重新来过
#如果继续出错,说明很可能python编译有误,请重新编译(一般是连接apxs或者python出错)

到这里我们就离成功很近了,所有刚需配备齐全,只剩下软件配置

四、配置apache部署

& cd /etc/httpd/conf    #此目录上面有讲解
& vi httpd.conf    #找到此目录

使用vi 查找模式,确认我们需求的配置都有

/Listen    找到  Listen 80 的位置,确认前面是否有#,也就是是否开启监听80端口
/Include  找到  Include conf.d/*.conf,确认前面是否有#,也就是是否有开启辅助配置目录conf.d,在此目录中以.conf结尾可以被识别**

#以上2个都打开

& cd /etc/httpd/conf.d/   #此目录上面有讲解
& touch  python.conf    #我们自己创建一个配置文件
& vi python.conf

#编辑我们自己创建的Apache虚拟主机配置
注意\开头表示为需要编辑的配置语句

#这里表示加载mod_wsgi   后面跟着绝对路径,此为我们安装的mod_wsgi地址
\LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so
#这里表示wsgi使用的python路径,因为我们之前编译有指定,我这里没开启使用
\#WSGIPythonHome /usr/bin/python
#表示配置虚拟主机80端口,写法一般为VirtualHost Ip:80,*可以代替所有ip
\<VirtualHost *:80>
#项目根目录
\    DocumentRoot "/var/www/html/"
#域名 :一般写ip或者www.**.com,这里我因为之前其他配置有部署,所以不再开启
\#ServerName localhost   	 
#WSGIScriptAlias有两个路径
# :第一个路径,表示访问后面文件的时候,在serverName的基础上,+什么来访问
#    举例:我这里如果写/123,那我们访问的时候,就是网址栏 域名 +/123 +**(**.wsgi对应的url)
# :第二个路径,就是你wsgi文件放的位置,这个自己放,填好对应位置,我们通过上面url就可以调用
\    WSGIScriptAlias / "/var/www/html/python/test.wsgi"
#这是一个关于进程,线程的设定,我这里没有设置启用
\#WSGIDaemonProcess wxsrv  threads=5
#ErrorLog:错误日志,后跟文件地址,没有的时候会自动生成
\    ErrorLog /etc/httpd/logs/python-error_log
#项目权限管理,这里只对python目录进行一个管理
\<Directory "/var/www/html/python/">
#注意,这里是2.2的语法,apache2.4会有稍微不同
#第一句是,先检查禁止设定,再决定允许设备(deny,allow先后顺序决定了谁先谁后)
\    Order deny,allow
#没有禁止,全部允许,注意:(这里如果改成deny from all 就会全部禁止了,感兴趣的可以了解下权限)
\    Allow from All
\</Directory>
\</VirtualHost>

保存退出

这样,1个简单的启动python脚本的配置就编写好了。mod_wsgi还有许多其他配置参数,感兴趣的话,后面也可以自己查找下,我们这里只配置了必要的

五、flask.py

#来到我们的项目目录下

& cd /var/www/html/python/
& touch flask_test.py
& vi flask_test.py
# coding=utf-8
\from flask import Flask

\app = Flask(__name__)
#注意,这里设置url为word
\@app.route('/word')
\def login():
\    return 'hello word'

\if __name__ == '__main__':
    app.run()

保存退出

六、**.wsgi

#WSGIScriptAlias / “/var/www/html/python/test.wsgi”

& touch test.wsgi
& vi test.wsgi
\import sys
\sys.path.insert(0, "/var/www/html/python/")
#从我们上面编辑的测试py中,导入app,并命名为application
#注意,mod_wsgi只能用application来开始启用
\from flask_test import app as application
\if __name__ == '__main__':
\    app.run()

到这里所有准备工作完成了,至于需要pip安装flask啊,或者pymsql等等的安装包,我就不再写了,

& service httpd stop   #apache关闭
& service httpd start   #apacha启动
#& service httpd restart  #apache重启,一般重启会加载配置较慢,不推荐

让我们打开浏览器,输入
http://servname(我们配置的域名)/123(WSGIScriptAlias的第一个路径)/word(flask_test的url)
看看,浏览器会提示我们什么吧 ^ - ^

七、问题解决

not found : 说明你的配置 和 你输入的url没匹配到
内部服务器错误: 打开我们python-error_log 好好去看看日志为啥错了
查看错误信息或者错误日志,解决大部分配置出错问题,无日志问题为下

  1. Ip限制,防火墙限制会导致拒绝访问或无响应
  2. 端口限制:
    例如:阿里云服务器需要后台开启端口,否则无响应
    端口占用:其他程序占用80端口

致言

写的很啰嗦,不喜欢的只看主要代码片就行,有问题可以联系我或者留言。
进来的谢谢捧场,喜欢的麻烦点个赞,您的点赞是对我最大的支持。
上文是开启了http访问的服务,这里推荐下我自己https访问的设置,嘿嘿
apache配置https详解

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值