SharEDITor

从0到1搭建个人网站 二-轻松几步完成基本网站框架搭建

全栈技术 从0到1搭建个人网站 发表于 2017-07-11 14:52:24 阅读2097次


流行的web框架都有简单易用的原型搭建工具,本节我们利用django工具搭建最基本的运行环境

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

安装开发和运行的基本环境

首先,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/warmheartli/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!')

这仅仅是定义一个函数,然并卵

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

我们来修改一下我们的路由规则,修改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服务器