Linux:配置SSL遇到的问题

问题是这样的

环境:Centos,Flask,Let’s Encrypt.

使用下面的方式,来安装SSL,发现在Wordpress程序上没有任何问题,而在安装Flask程序时,则出现了问题。具体往下看。

在Flask程序上申请SSL证书,出现下面的提示:

Failed authorization procedure.
The following errors were reported by the server

众所周知,Flask的目录结构是:

Flask项目目录结构

在使用

命令之后,如果输入的是/flaskxxx这个目录,那么就会生成红色框内的目录(Let’s Encrypt会在网站根目录生成一个目录里面会放一个验证程序[类似于验证文件],随后程序会进行访问相关地址进行匹配),用过Flask的都知道,这个红色的目录肯定是不对的(Flask一般读取templates目录下面的文件)。

所以,在Flask上申请SSL的时候,就遇到了这个问题。

我们只能从侧面去解决这个问题。

Linux+Nginx+PHP+MySQL

解决方案

在你的Flask文件中加入下面的代码,然后再次执行

就可以实现验证,也就可以申请到SSL证书了。

修改Python文件之后,如果使用的是uwsgi+nginx架构,只需要重启uwsgi即可.

折腾一下午这个问题……

另外,下午将目前的几个站全都升级了SSL。只是遗憾的是,国内的淘宝联盟不支持SSL,代码只能显示空白了。(百度统计,CNZZ都支持SSL,而51LA目前还不支持SSL),还好GG支持SSL,直接就可以用了。

Python:清除文件内容

问题

在Linux或者Windows服务器下面(当然,个人电脑可能也存在此问题),有时候系统运行时间长了,会存在很多日志文件(或者其它缓存文件)。而这些文件,可能在不同的目录中。当然,这时,也可以直接删除相关日志文件和目录,那么这样会导致一个问题——程序可能会因为找不到日志目录而报错。因此,想到一个更简单的办法:

只清除指定目录下面的所有文件的内容(但还是要注意配置目录,数据无价),而不对目录、文件进行删改(只清除文件内容)操作。

python Logo

源码

**********数据无价,请谨慎操作*********
*********针对程序的使用,不承担任何责任***********

请注意以下几点:

  1. 程序需要配置需要清除的目录(请谨慎配置)、日志文件(默认当前目录)地址
  2. 程序基于Python3(我使用Python3.6)
  3. 程序提供日志功能,可自行修改相关代码配置格式.

源码如下:

Linux 定时任务参考:

5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

Python:抓取One每天一句话作为随机名言

在很多年前…

我以前看到过不少随机名言,但是碍于当时没有技术不会做,虽然很喜欢.但是也不知道怎么去实现.还好现在技术可以实现,而且也有一个比较好的平台.提供了每天一句话.刚好就用来作名言的数据源了.[地址]

如果要查看效果,可以在页面底部看到相应效果(每次刷新显示的内容都不一样).

还需要…

因为使用了Python的两个库,因此必须安装:requests,BeautifulSoup.这两个库.

安装如下:

安装之后,就可以使用了.

python Logo
image-2482

简单说一下…

首先,这个程序并没有做到非常”智能”,有些地方使用了print(大概是两个地方).因此,你需要自行复制到某个地方,在继续…..

简单说一下核心的一个函数:

没错上面这个就是核心函数了,

  1. 首先使用了for循环对数据进行循环读取(self.start_index,self.end_index分别是开始的期号和结束的期号,可以自己设定,具体要看源码(源码在下面)..).
  2. 定义了一个messagedata的dict,dict的key存的是相应期号,value存的是名言内容.(好像这一句才是第一步…)
  3. 在循环中,动态定义url,并且使用了requests第三方库进行网页的获取网页内容.[关于requests]
  4. 拿到内容之后,基本就放心了.
  5. 然后使用了BeautifulSoup对HTML进行解析,话说……BeautifulSoup是个很神奇,很厉害,很霸气的HTML解析库..(反正,正反就是很厉害)
  6. 使用了Python自带的HTML解析引擎,”html.parser”,也有很多第三方的可选.[关于BeautifulSoup]
  7. 这一句可能是最复杂的,message = (str(soup.select(“.one-cita”)[0].contents[0])).strip(),这一句首先是从soup对象中select了class=”.one-cita”的div的数据(select函数是BeautifulSoup提供的使用HTML的class方式选取内容,这一点就方便了很多,select返回的是list,因此使用了[0]获取第一个,跟着使用contents来获取其中的内容,contents继续返回list,接着继续获取[0]),获取到数据之后,str函数将其转换为str类型,并且使用strip()函数对其特殊符号(比如:\t,\n,空格)这些进行清理.返回一个干干净净的文本..OYeah.
  8. 然后就是将期号作为key,名言内容作为value放到dict里面.
  9. 说完了.

源码

源码使用如下:

必须安装requests和BeautifulSoup这两个库,否则..运行不了.

使用步骤如下:

懒得写了,直接看源码里面的吧.

另外,我已经生成了一个了.可以直接用的.

调用方式,将下面的内容保存成mingyan.js,然后在页面中创建一个<p id=”showMingyan”></p>,然后使用js:$(“#showMingYan”).html(getMingYanHref());进行调用即可.

到此.

Python:简单操作一下SQLite3

SQLite3

关于SQLite,下面引用:

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。[更多]

以下引用自网络:

SQLite3 可使用 sqlite3 模块与 Python 进行集成。sqlite3 模块是由 Gerhard Haring 编写的。它提供了一个与 PEP 249 描述的 DB-API 2.0 规范兼容的 SQL 接口。您不需要单独安装该模块,因为 Python 2.5.x 以上版本默认自带了该模块。
为了使用 sqlite3 模块,您首先必须创建一个表示数据库的连接对象,然后您可以有选择地创建光标对象,这将帮助您执行所有的 SQL 语句。[更多]

其实,上面这一堆,只是说明:Python 2.5+的版本,自带了SQLite.你可以直接使用!

python Logo
image-2438

简单工具

抽了一小会时间,简单写了个工具,只是简单封装了一下增删改查.在文件下面有示例,使用Python 3.5.

Flask:在Centos上配置两个Flask项目

源于

一开始我是只有一个项目的,非常好配置,而且也简单。但是后来发现,又有一个新项目需要新增上去。结果配置搞了好几天,今天终于搞定。(在网上的提问

其实精髓很简单,配置两个类似的就行,端口,日志文件,项目路径分开就行。

在这里不谈如何安装环境,关于安装环境可以参考(地址)。

Python flask
image-2417

开始操作

这里使用:Nginx + Uwsgi + virtualenv 进行配置操作.

首先是要配置Nginx,那么安装好之后,Nginx一般是在/usr/local/nginx这个目录下面,配置文件则在/usr/local/nginx/conf下面,因为我们需要配置多个站点,因此需要新建/usr/local/nginx/conf/vhost目录,然后把相关文件放在这个目录下面即可.

首先看nginx.conf的文件[/usr/local/nginx/conf/nginx.conf]:
下面这个配置文件基本只是改动了几个地方,第一行需要注意,这是使用www用户进行操作.所以需要新建用户.另外就是
include /usr/local/nginx/conf/vhost/*.conf;很关键,这一行表示加载vhost目录下面所有conf结尾的文件(在Nginx上配置子站点就是这样操作的).

下面是子站点A的conf[目录:/usr/local/nginx/conf/vhost/A.conf]:

下面是子站点B的conf[目录:/usr/local/nginx/conf/vhost/B.conf]:

配置文件都搞定之后,新建/var/www/venv目录,使用mkdir /var/www/venv -p.之后virtualenv A 创建虚拟环境A,完成之后,virtualenv B创建虚拟环境B.都依次创建完之后,分别在项目根目录[就是A,B两个目录]里面新建一个main.py文件.

切换到A目录,使用cd A .

main.py[目录:/var/www/venv/A]:

之后需要创建一个xml配置文件,指出如何初始化A项目.
文件:app_config.xml[目录:/var/www/venv/A/]
下面的文件不能有空格,切记切记!!!

至此,A项目创建完成.

接着来B项目.切换到B目录,使用cd ../B

main.py[目录:/var/www/venv/B]:

之后需要创建一个xml配置文件,指出如何初始化B项目.
文件:app_config.xml[目录:/var/www/venv/B/]
下面的文件不能有空格,切记切记!!!

至此,B项目创建完成.

都搞定之后,可以写一个启动脚本.
如下[startserver.sh]:

之后使用chmod +x startserver.sh 即可启动.

总结

一共使用了如下目录或文件:

Nginx

服务器配置文件:
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/vhost/A.conf
/usr/local/nginx/conf/vhost/B.conf

Flask

项目文件[项目中还有其它自动生成的文件,忽略不计]:
/var/www/venv/A/app_config.xml
/var/www/venv/A/main.py
/var/www/venv/B/main.py
/var/www/venv/B/app_config.xml

之后就是启动脚本了,可以放在你想放的地方,比如/pyscript/startserver.sh,到此,大功告成!

参考: