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
[[email protected] ~]# 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深拷贝与浅拷贝

一:利用切片操作和工厂方法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代码