python自学第一单元总结

这个第一单元是我自己划分的。

因为我之前连linux命令、如何装linux都很不熟悉。

多数都是拿来主义,直接买服务器或者VPS,人家都配好系统了。

然后按照项目说明一步一步走,上项目,所以总觉得有瓶颈。

这次狠下心来学习,还是很有收获的。

我的第一单元指的是,从硬件开始,做系统,做虚拟环境,做LINUX系统,做运行环境,测试技术,跑demo程序,实现自己的想法。最重要的是,理解这些事情为什么这么做。

目前的情况:

1、本地台式机win10系统,VMware装centos7,配好防火墙和网络。

这一步,相当于买来的装好系统的VPS。

2、virtualenv 虚拟2个python环境,

(1)环境1,python 3 , 装 djanjo原版,gunicorn 代替 uwsgi,正常跑起来。

django,研究了urls.py 和view.py,明白了M、T、V的机制,知道去哪改。

(2)环境2,python 2,直接pip mezzanine, gunicorn 代替 uwsgi,正常跑起来,supervisor 进行监控。

测试了mezzanine的功能。

3、在两个virtualenv的虚拟环境外,nginx,分别监听2个虚拟环境,绑定2个域名go.com和to.com,正常访问,当然是修改本地hosts文件实现的。。。这2个域名有一个就可以轻松生活了。 实际上,每个虚拟环境内,也可以建无数个django实例,绑定无数域名的。突然想起一个问题,如何实现djanjo的泛解析?思考了一下,其实是nginx的泛解析,不难办。

4、数据库用的是Postgresql。需要多个数据库,直接配就可以。又想到一个问题,Postgresql数据库如何备份?http://blog.csdn.net/licheng6302/article/details/7567523

4、局域网内FTP文件,ssh访问centos7,修改和上传文件。顺带学了下最浅显的markdown写法。还是要实现ftp,不然将来没法多人操作。http://www.centoscn.com/CentosServer/ftp/2015/0502/5335.html

http://www.cnblogs.com/zhi-leaf/p/5983550.html

5、搜集了django的学习资料,和现有的资源。同样搜集了一些python的资源。

6、完成这些,可以做什么?

(1)买个VPS,配置下,可以做多个网站,给多个企业做多个网站,绑定多个域名。

(2)django和Postgresql可以一对多,一对一,或者多对多。有些django可以没有前台,只管后台抓数据,或者做发邮件之类的活就可以。

(3)什么好处?性能更强,能实现更多想法;更充分利用资源,省钱。什么缺点?管理只能自己来了,除非有更好的办法。

6、接下来,学习django,两个途径:快速学习数据库操作,直奔主题,做自己想实现的功能;系统地跟着找到的资源用一个月的时间学通djanjo。两个途径,待定。

7、另外,原定的docker还未尝试,怕一次消化不了。

后续的任务队列和worker部分,还未尝试,等用到的时候再说吧。

 

 

 

一些命令centos7 主要是进程管理

按照端口进行查询:

1
lsof -i :8002

可以查出:

1
2
3
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
uwsgi   2208   tu    4u  IPv4 0x53492abadb5c9659      0t0  TCP *:teradataordbms (LISTEN)
uwsgi   2209   tu    4u  IPv4 0x53492abadb5c9659      0t0  TCP *:teradataordbms (LISTEN)

这时根据 PID 可以用下面的命令 kill 掉相关程序:

1
sudo kill -9 2208 2209

按照程序名称查询:

1
ps aux | grep uwsgi

补充内容:

使用 gunicorn 代替 uwsgi 的方法

1
2
3
4
sudo pip install gunicorn
在项目目录下运行下面的命令进行测试:
gunicorn -w4 -b0.0.0.0:8001 zqxt.wsgi

-w 表示开启多少个worker,-b 表示要使用的ip和port,我们这里用的是 8001,0.0.0.0代表监控电脑的所有 ip。

如果使用了 virtualenv 可以这样

1
/path/to/env/bin/gunicorn --chdir /path/to/project --pythonpath /path/to/env/ -w4 -b0.0.0.0:8017 project.wsgi:application

用 –pythonpath 指定依赖包路径,多个的时候用逗号,隔开,如:’/path/to/lib,/home/tu/lib’

4. 使用supervisor来管理进程

安装 supervisor 软件包

1
(sudo) pip install supervisor

生成 supervisor 默认配置文件,比如我们放在 /etc/supervisord.conf 路径中:

1
(sudo) echo_supervisord_conf > /etc/supervisord.conf

打开 supervisor.conf 在最底部添加(每一行前面不要有空格,防止报错):

1
2
3
4
5
6
7
[program:zqxt]
command=/path/to/uwsgi --http :8003 --chdir /path/to/zqxt --module zqxt.wsgi
directory=/path/to/zqxt
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

command 中写上对应的命令,这样,就可以用 supervisor 来管理了。

启动 supervisor

1
(sudo) supervisord -c /etc/supervisord.conf

重启 zqxt 程序(项目):

1
(sudo) supervisorctl -c /etc/supervisord.conf restart zqxt

启动,停止,或重启 supervisor 管理的某个程序 或 所有程序:

1
(sudo) supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

djanjo建站源码问题

1、’https://github.com/django-oscar/django-oscar

商城系统   官网http://oscarcommerce.com

2、一个国外的CMS

https://github.com/wagtail/wagtail

http://wagtail.io

3、一个教程

This is a tutorial we are using for Django Girls workshops http://tutorial.djangogirls.org/

https://github.com/DjangoGirls/tutorial

4、blog

https://github.com/Fantomas42/django-blog-zinnia

貌似不错

https://demo.django-blog-zinnia.com/blog/

5、shop没演示

https://github.com/awesto/django-shop

6、另一个博客,带有完整一步一步教程

https://github.com/zmrenwu/django-blog-tutorial

DEMO  http://demo.zmrenwu.com/

7、shop

https://github.com/mirumee/saleor

带有demo   https://demo.getsaleor.com/

8、后台模版

https://github.com/darklow/django-suit

demo http://djangosuit.com/admin/

9、django项目库https://djangopackages.org/categories/projects/

10、两套教程

http://python.usyiyi.cn/translate/django_182/index.html

http://www.cnblogs.com/feixuelove1009/p/6029698.html

本地python已配好

在本地配好了。

win10系统,装了WMware, 然后装的centos7系统。

没用docker,按照

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-centos-7

攻略走的。

中间有几个坑,比如VI的操作,nano的操作,防火墙的设置,网络的设置。

最后,攻略中的版本比较旧,实际中目录有所不同,所以走到一半开始有不同。

最后比较严重的nginx一直502,查找错误,发现是.sock文件没有生成。

然后想办法跳过.sock。

不管怎么说,耗时2天,总算配好了。

目前,虚拟机开着,局域网内电脑可以测试。FTP还没装。

接下来应该研究下python下的网站。

等到网站建立自如的时候,再说docker。

 

关于python环境的问题,研究的小结

先补充一点,Gunicorn是替代uwsgi的网页服务器。并且据说比uwsgi快一些,支持gevent。Virtualenv是python的虚拟机,可以多个python不影响。

关于多站点:uwsgi的多站点配置https://www.liaoxuefeng.com/article/001373892270040b645f6f886d94bdfbf57b8dd596f19b3000

用Gunicorn部署web.py应用

http://www.linuxidc.com/Linux/2014-01/95075.htm

Gunicorn运行python的网站太简单啦!

https://www.oschina.net/question/25940_10804

倒是有一篇flask + celery + gunicorn + gevent + nginx + supervisord 实现业务系统的开发及部署。但是因为前面已说过,拒绝flask。

1、是否使用docker

若使用,2个成熟方案

a、Django+PostgreSQL+Nginx+Gunicorn+Celery+RabbitMQ+Supervisor+Virtualenv  + docker

https://github.com/jcalazan/youtube-audio-dl

是一个成品网站布置的环境。可以说是极品。

有安装说明:https://www.calazan.com/using-docker-and-docker-compose-for-local-django-development-replacing-virtualenv/

但稍微感觉有点怕的是,好像安装不是那么详细。

b、研究很久的,

如何使用 Docker 组件开发 Django 项目?

51cto的带图片,是翻译的,原文地址

https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/

原文已更新。 按着步骤操作应该没问题。

顾虑:没有多进程的处理。如果贸然用,以后好不好扩展,牵涉到docker。

2、若不用docker,目前有一篇可以说是最好的,

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-centos-7

再就是之前整理的,另有一篇不完整但很详细的http://www.isaced.com/post-248.html

Python开发基础准备之环境

Django+ Postgresql+uwsgi+ nginx+supervisord+ RabbitMQ+Celery Beat+Celery

主要是Django(python框架)+ Postgresql(数据库)+uwsgi(网站运行环境)+ nginx(网站运行程序)+supervisord(进程管理)

RabbitMQ+Celery Beat+Celery  主要是任务列表,多进程处理等。

python django+uwsgi+nginx 搭建步骤(血一般的教训)

Nginx+PostgreSQL+Django+UWSGI搭建

ubuntu初始化python3+postgresql+uwsgi+nginx+django

阿里云计算:CentOS+nginx+Django+Postgresql web环境搭建 – 林之冬 – 博客园

如何使用 Docker 组件开发 Django 项目?

Python开发基础准备之Postgres

PostgreSQL学习手册(函数和操作符<一>)

http://www.cnblogs.com/stephen-liu74/archive/2012/05/02/2294071.html

完整的学习手册:

http://www.cnblogs.com/stephen-liu74/category/343171.html

在Django上设置postgresql和运行代码

http://blog.csdn.net/GeekLeee/article/details/52780106

http://blog.csdn.net/p106786860/article/details/49877483

http://blog.csdn.net/kongxx/article/details/48622673

如何使用 Docker 组件开发 Django 项目?

http://www.jianshu.com/p/8dbb33914b01

 

Python开发基础准备之Python/Django

Python是种语言,Django是它的开发框架,比较重的框架。

那么一共有哪些框架?

求推荐简单好用的 app 后台框架,最好是 pythonhttps://www.v2ex.com/t/163541

ivenvd2015-01-20 16:22:10 +08:00

@yueyoum 很想知道你是拿什么跟 Django 比才得出这结论的…… LZ 的需求的重点显然是快速上手开发小型项目,而不是在谈哪个功能全,不知道你又是扯性能、又是扯数据库的干嘛……

就上手而言,Django 需要:
1. 读 Django 那个晦涩的文档。
2. pip install django
3. django-admin.py startproject mysite
4. 读文档修改各种配置文件。
5. 读文档开始编程。
6. python manage.py runserver

而随便一个轻量级框架,比如 Flask,只需要:
1. pip install flask
2. 读文档开始编程。
3. ./app.py

结论无需多说。

另外个人推荐 padrino。Flask 可用的积木太少了,质量也一般般。而 padrino 则和 Rails 共享大量的 gem,可轻可重,用来做 API Server 很不错。

接着搜索了一下Padrino ,得到
Padrino 博客开发示例
好像不简单,那么搜下flask,得到

超小团队选择django还是flask? – 知乎https://www.zhihu.com/question/33538127

里边有句话:推荐Django。Flask很多插件都有大坑。Django相比提供了整套的解决方案,而且坑相比不是那么大。
也有欢呼的:

 

 

突然闯进技术的家园

偶然逛到一个湾区日报的博客,看到了一堆不懂的名词,感觉遇到一扇门。

看下面一段话

前面介绍到我用 Slack机器人对话。这机器人就是 Hubot -- 它解析我发出的命令,然后调用我在 Django App 里提供的 REST api 发布文章;当文章的状态由 pending 变成 published后,将触发一些 Celery tasks;每个 task 负责一个渠道的发布任务,比如一个task发布到微博,一个task发布到reddit等。

以及:

所有网站基本都能简化成这个架构:Web App,Datastore,Async Worker,Task Queue,以及 Scheduler。其中,Web App就是跑网站代码接受用户的访问请求,所有耗时间的task(比如发邮件,发微博,数据统计等)都扔到Task Queue上,然后Async Worker从Task Queue抓task过来离线处理;而Scheduler就是定时跑程序,很多网站直接用的Cron。

对于湾区日报,Web App就是Django App,用uwsgi跑N个进程,用supervisord管理进程,前面挂一个 nginx 当 load balancer。Database用的是PostgresRedis  —  其中,大部分需要永久存储的数据都在Postgres中,而Redis存的是文章的访问数与一些只需保留一两天的数据。Task Queue是用RabbitMQ。Scheduler用的是Celery Beat。而Async Worker是Celery。下图是湾区日报后台简单的架构:

还有:

我用家里的 iMac 写代码。Mac OS X 下运行虚拟机 Vagrant + VirtualBox。虚拟机里跑的是 Ubuntu,与 production 里用的操作系统一样。然后通过 Vagrant 的 synced folders 在 Mac OS X 与虚拟机之间共享代码的文件夹。在 Mac OS X 上用 PyCharm 写代码,利用 PyCharm 里的 Vagrant 的支持,在虚拟机里跑服务器。

这才是真正的python程序员

相比之下,用现成的CMS建个网站,修修改改点小代码,感觉很弱啊。

又搜了搜,PHP也有类似的框架,Swoole、zanworkerman等,都可以解决。