从0到1搭建个人网站 二-轻松几步完成基本网站框架搭建
安装开发和运行的基本环境
首先,python是必须的,我们选择python2.7,没有安装可以根据不同的操作系统安装,如果是rhel或centos可以用yum install python,如果是ubuntu可以用apt-get install python,如果是mac可以用brew install python,如果以上都不行可以直接下官方包安装(https://www.python.org/downloads/)
然后,安装django相关组件(当前最新版是1.11):
pip install django
安装web容器:
pip install uwsgi
小技巧:如果使用pip install安装库比较慢,可以用豆瓣的镜像,方法类似下面:
pip install django -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
创建开源代码库
在github中创建仓库shareditor,并在本地创建空仓库提交
github库在:https://github.com/lcdevelop/shareditor
本地仓库如下:
[lichuang@localhost:~/Developer/shareditor $] ls
README.md
[lichuang@localhost:~/Developer/shareditor $] pwd
/Users/lichuang/Developer/shareditor
创建django工程
在安装django时已经自动帮我们安装了django-admin工具,执行如下命令自动创建一个完整的工程目录(其中最后一个参数是工程目录,倒数第二个参数是工程名):
django-admin startproject shareditor /Users/lichuang/Developer/shareditor
这时能够找到自动创建的manage.py文件(一个工具脚本,不需要修改),和工程总目录shareditor(里面包含了配置文件settings.py、总路由配置urls.py、wsgi协议配置文件wsgi.py)
下面我们在这个工程里创建我们网站app:
django-admin startapp web
我们看到它自动创建了web目录,并且自动帮我们组织了一些文件,包括:
admin.py:数据库表的后台管理类一般定义在这里
apps.py:这个app的配置信息,这个文件一般不动
migrations目录:存储数据库迁移相关的临时文件,不需要动
models.py:和数据库对应的model类一般定义在这里
tests.py:自动化脚本
views.py:视图层脚本,我一般会把控制逻辑写到这里
这些文件全都看不懂也没有关系,到现在为止,我们的网站已经可以运行了,执行:
python manage.py runserver
我们可以看到一些提示,直接访问http://127.0.0.1:8000/就可以访问网页了,如下:
上面的页面是django展示的默认页面,下面我们稍作修改来看看django框架是怎么按照我们的指示工作的
helloworld
修改web/views.py,增加如下函数:
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World!')
这仅仅是定义一个函数,然并卵
我们来修改一下我们的路由规则,修改shareditor/urls.py,把内容改成:
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index)
]
下面我们重新执行python manage.py runserver,并打开浏览器看看是不是看到了高大上的Hello World!
让网站更专业
上面执行的python manage.py runserver实际上只是django的一个用于开发和调试的方法,它只是一个进程一个线程在运行,无法支持网站的高并发访问,下面我们介绍一下如何部署一个专业的网站。
首先我们配置好我们的web容器,在shareditor目录下创建uwsgi.ini,内容如下:
[uwsgi]
chdir = /Users/lichuang/Developer/shareditor
http = 127.0.0.1:8080
http-keepalive = 1
module = shareditor.wsgi:application
master = true
processes = 4
daemonize = /Users/lichuang/Developer/shareditor/logs/uwsgi.log
disable-logging = 1
buffer-size = 16384
harakiri = 5
post-buffering = 8192
post-buffering-bufsize = 65536
pidfile = /Users/lichuang/Developer/shareditor/logs/uwsgi.pid
enable-threads = true
single-interpreter = true
这里的目录要随着你部署的目录做相应修改
因为logs目录还不存在,所以我们手工mkdir创建一个
下面执行启动命令:
uwsgi --ini shareditor/uwsgi.ini
这时我们可以查看一下logs/uwsgi.log文件,如果没有异常信息说明网站已经部署成功了,我们ps ux|grep uwsgi看一下进程:
lichuang 13390 0.4 0.0 2425088 300 s004 S+ 10:19下午 0:00.00 grep --color uwsgi
lichuang 13307 0.0 0.0 2491336 924 ?? S 10:18下午 0:00.00 uwsgi --ini shareditor/uwsgi.ini
lichuang 13306 0.0 0.0 2491336 2540 ?? S 10:18下午 0:00.00 uwsgi --ini shareditor/uwsgi.ini
lichuang 13305 0.0 0.0 2491336 2520 ?? S 10:18下午 0:00.00 uwsgi --ini shareditor/uwsgi.ini
lichuang 13304 0.0 0.0 2491336 2484 ?? S 10:18下午 0:00.00 uwsgi --ini shareditor/uwsgi.ini
可以看到启动了4个进程,其中一个守护进程用来接收和分发请求,3个子进程(对应配置文件里的processes = 4)用来处理请求
这时我们打开浏览器访问:http://127.0.0.1:8080/又能看到Hello World!了
高可用性部署(新手可略过)
另外为了让我们的网站具有高可用性(高可用就是挂掉一台机器不影响服务),一台机器启动服务还不行,我们至少要部署两台完全对等的web服务来同时提供服务,那么用户在浏览器里访问时到底访问的是哪个机器呢?这里有两种实现方案,一种是配置DNS记录,同一个域名对应多个ip,那么当一个ip不可用时浏览器会自动尝试另外的ip,还有一种方法就是通过稳定的代理服务器(如nginx、apache httpd等)来配置成一个负载均衡代理,对外暴露的一个ip,对内连接到多台web服务器