Nginx+uwsgi部署flask应用

一、准备工作
1.ubuntu 14.04
2.python 2.7
3.nginx 1.4.6(apt-get install安装)
4.uwsgi(apt-get install安装)
5.flask(pip install安装)

二、配置
1.nginx配置
cd到nginx安装目录,ubuntu下使用apt-get安装默认路径是 /etc/nginx
nginx的配置文件为nginx.conf
看到最后面两行
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/
;
发现 nginx配置了启动时夹在conf.d下面的配置文件
2.在conf.d下新建一个配置文件为 zhou.conf(命名随意)
加入如下内容:

1
2
3
4
5
6
7
8
9
10
# zhou.conf
# configuration of the server
server {
listen 80;

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
}

保存,退出。
重新载入nginx配置文件 nginx -s reload

3.启动uwsgi
cd到应用根目录,比如 /root/www
执行命令:
uwsgi –socket 127.0.0.1:8001 –wsgi-file hello.py –callable app –processes 4 –threads 2 –stats 127.0.0.1:9191

解释:–wsgi-file hello.py 其中hello.py为应用入口文件
若要让uwsgi以守护进程运行,可添加参数 –daemonize /var/log/uwsgi.log

参考:
[1]http://heipark.iteye.com/blog/1847421
[2]http://docs.jinkan.org/docs/flask/deploying/uwsgi.html

linux下配置VPN

前置依赖
软件:pptpd、ppp
官网:http://www.poptop.org/
下载地址:http://poptop.sourceforge.net/yum/stable/rhel6Server/x86_64/
下载地址:http://poptop.sourceforge.net/yum/stable/rhel6Server/x86_64/ppp-2.4.5-33.0.rhel6.x86_64.rpm
安装时会提示 ppp = 2.4.5 is needed by pptpd-1.4.0-1.el6.x86_64
下载 pptpd-1.4.0-1.el6.x86_64.rpm 使用rpm命令安装

配置pptpd
1.修改主配置文件/etc/pptpd.conf 在最后添加:
localip 118.23.2.144 #这行是给VPN服务器设置一个隧道ip
remoteip 192.168.1.1-254 #自动分配给客户端ip地址范围

2.修改配置文件/etc/ppp/options.pptpd设定分配给客户端的dns
把ms-dns前的注释号去掉,改成可用dns 如ms-dns 8.8.8.8
为了方便查看调试信息,把debug行前面的注释取消即可。Dump前的注释也取消。

3.添加pptpd账号,编辑文件/etc/ppp/chap-secrets
编辑内容为(IP中*号代表所有):

1
2
3
4
5
# Secrets for authentication using CHAP
# client server secret IP addresses
用户名 pptpd 密码 \*
用户名 pptpd 密码 192.168.0.3
用户名 pptpd 密码 192.168.0.4

4.运行pptpd 执行命令service pptpd start

5.设置路由转发
按照以上步骤配置完vpn服务器后,通过客户端连接vpn服务器是不能直接访问vpn所在私有网络或者通过vpn访问互联网,需要设置路由转发。
(一)开启ip转发功能:修改配置文件/etc/sysctl.conf,使net.ipv4.iph_forward = 1
(二)写个脚本文件,实现路由,其内容大致如下:

1
2
3
4
5
[root@max-vpn ~]# more /usr/local/bin/vpn_route.sh   
#!/bin/bash
/sbin/iptables -t nat -A POSTROUTING -s 192.168.195.0/24 -o eth0 -j SNAT --to-source 118.23.2.144
/sbin/iptables -t nat -A POSTROUTING -s 172.16.195.0/24 -o eth1 -j SNAT --to-source 192.168.195.166
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

目标网络/vpn的内部网络为192.168.195.0/24,vpn服务器有2个网卡,其中一个连接公网(eth0),ip地址是61.135.251.51,另外一个网卡连私有网络,ip是192.168.195.166。这样就能正常地路由所涉及的网络了。手动执行一下这个脚本,看客户端(windows)是否能访问目标网络里的机器:最简单的方法就是ping,假定目标网络里有一个192.168.195.100的机器,并请允许icmp通过,ping 192.168.195.100 ,正常的话,再进一步访问这个服务器(如远程登录)。没有问题的话,把它加在开机自启里面。为安全起见,你可以在这个脚本里加更多的iptables规则。
这样就可以在CentOS安装pptpd了。大家可以顺利的使用pptpd了。

6.linux系统电脑连接vpn服务器
配置pptp client 地址:http://pptpclient.sourceforge.net/

参考链接

  1. http://www.cnblogs.com/sixiweb/archive/2012/11/20/2778732.html

Python笔记

1.input()和raw_input()的区别?

两个都是接受输入的函数,input()接受的是一个合法的表达式,而raw_input()输入的数据都为字符串类型。

2.函数式编程

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

3.Python内存管理和垃圾回收

当Python的某个对象的引用计数为0时,说明没有引用指向该对象,该对象就要成为被回收的对象了。例如,某个新建的对象被分配给某个应用,对象的引用计数为1。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收了。如下代码:

1
2
a = [1, 2, 3]
del a

4.Python深拷贝与浅拷贝

Python是一门面向对象语言。任何在Python中创建的变量,最后都指向一个对象。指向这个对象的其实是一个引用。如果对于这个对象进行复制,一般只是增加了一个引用指向这个对象,没有复制对象本身。如果要复制对象的话,就涉及Python深拷贝的操作。
一、利用切片操作和工厂方法list方法拷贝就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
二、利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。但是对于数字,字符串和其他原子类型对象等,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。

5.Python字符串反转or列表反转

python内置了丰富的操作字符串的函数。下面就以s = ‘abc’为例,介绍几个常用的字符串操作函数。
一、列表转换成字符串
a = list(s) b = ‘’.join(a)
二、字符串反转
1.a = list(s) a.reverse() s = ‘’.join(a)
2.s = s[::-1]
三、分隔字符串
a.split() #括号里添加参数,如’#‘表示字符串以‘#’分开
面试题
a = ‘i am superman’将这个字符串按照每个单词反转输出,即a = ‘superman am i’
x = a.split(‘ ‘)
y = x[::-1]
z = ‘ ‘.join(y)
ps:这是我亲身经历过的题,很遗憾我是用最最原始的方法来做的,f*k,让面试官感到我不是一个接地气的pythoner

配置Sublime Text2下Python的build system

1.找到并点击Preferences->Browse Packages… 在打开的文件夹中找到python,打开这个文件夹,找到并打开文件python.sublime-build
2.添加修改文件:

1
2
3
4
5
6
{
"cmd": ["python", "-u", "$file"],
"path":"D:/Python27",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}

添加python安装目录的path路径,保存退出。
Ctrl+B运行python代码

玩转树莓派

简介

看到网上有很多人在玩Raspberry Pi(树莓派),于是我也买了一个准备玩玩。关于树莓派的介绍就不多说了,想了解的自己gogole或者请戳 -> http://www.raspberrypi.org/

这是我从淘宝上买的树莓派和一些相关的附件

(一张来自2020年的配图,配件还有一块电源适配器)

整个树莓派就一块很小的电路板,大小跟一张信用卡差不多。我买的是树莓派基金会最新出的Raspberry Pi B+版本,CPU是Broadcom BCM2835 700MHz ARM1176JZFS 内存:512M 4个USB接口 一个10/100 BaseT RJ45网口 一个HDMI接口 一个音频输出口 15路MPI CSI-2连接器 和 一个MicroSD卡插槽

来自2020年的说明:我的这个树莓派已经是早期的型号了,现在新出的内存都已经上8GB了。

给树莓派安装系统

  1. 从官网下载树莓派系统 http://www.raspberrypi.org/downloads/ 我下载的是raspbian
  2. 下载Win32DiskImager,将raspbian系统烧录到SD卡上
  3. 将SD卡插入树莓派卡槽
  4. 将树莓派连接到路由器上面,登录路由器查看客户端列表,找到树莓派的ip,一般树莓派客户端名是raspberrypi。
  5. 使用SSH连接到树莓派,这里我是用windows自带的CMD。
    在CMD中输入:ssh pi@树莓派的ip,输入密码raspberry,登录到树莓派。
  6. 安装树莓派图形化界面
    在有网络的情况下,输入sudo apt-get install xrdp
  7. 安装完成后,使用windows自带的远程桌面连接工具,运行mstsc,打开远程桌面连接,输入树莓派的ip,再输入用户名pi和密码raspberry即可登陆到树莓派的桌面。