从头制作一个网站,首先需要一台服务器,可以自行搭建或者从云服务商处租赁。
这里推荐租赁的方式。
其次,要考虑网站使用的软件。包括网络服务软件、网站框架和数据库。
1、更新系统
与Ubuntu不同的是,CentOS使用yum包管理器进行软件的安装、删除与更新等操作。
命令 sudo yum update 和 sudo yum upgrade都可以进行系统及软件的更新。但是值得注意的是,update命令会同时更新系统和内核,而upgrade则只更新系统,因此,为了系统的稳定性,尽量使用upgrade进行更新。
2、安装mysql
由于已经安装有mysql,因而本次配置过程中没有重新安装。已安装的mysql版本为5.1.73。
3、安装httpd (apache)
同样,httpd也已经安装,因而没有重新安装,已安装版本为2.2.15.
4、安装python3
系统自带了python2.7,但由于我们需要使用Django 2.0+,因此需要安装python3.0+。在这里选择了最新版的python3.6.6。没有使用python3.7是考虑到它可能有我们不了解的新特性。
5、为python3.6安装必要的包
通过pip工具,为python3.6安装必要的包
django: pip install Django==2.0.6
pymysql: pip install pymysql
tqdm: pip install tqdm
6、安装mod-wsgi
mod-wsgi是httpd与Django关联的工具,它是一个统一的python接口标准(PEP 3333),描述了python应用如何与web服务器实现通信。
在CentOS中,mod-wsgi可以以两种方式引入
6.1:下载源码后,作为httpd的一个模块编译到httpd的环境中
6.2:作为python的一个包,安装到python的环境中去
这里的疑问是:以6.1的方式引入需要在编译完成后,在httpd.conf中添加语句LoadModule wsgi_module { python-site-packages-path }/mod_wsgi.so。不知道是否以6.2的方式也需要这一语句?
我们使用的6.2的方式安装了mod-wsgi的包。但是在httpd.conf文件中,本来就存在一条语句 LoadModule wsgi_module modules/mod_wsgi.so,但是这里的mod_wsgi.so并不是我们刚刚安装的包。以这种方式启动httpd出现了错误,于是我们把这里的mod_wsgi.so修改到了我们刚刚安装的mod_wsgi.so,解决了问题。
7、配置httpd
这里需要说明的是,在nanshan这台服务器上已经运行了老版本的WDSP Database和WDSP Predictor,现在我们需要配置WDSP Database 2.0上去。我们希望达到的效果是,浏览器默认的80端口指向WDSP Database 2.0,8000端口指向老版本的WDSP Database,8080指向老版本的WDSP Predictor。为了达到这一目的,我们使用httpd的VirtualHost来进行设置。
7.1在httpd.conf文件中,首先增加监听端口
Httpd.conf的位置 /etc/httpd/conf/httpd.conf
Listen 3000
Listen 3030
7.2引入mod_wsgi模块
LoadModule wsgi_module /usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIPythonHome “/usr/local”
#这句指定使用的python解释器,必须要加
7.3 注释掉ServerName,DocumentRoot等语句
这是因为要在VirtualHost中重新设定
7.4 VirtualHost的设置
在最后添加语句
NameVirtualHost *:3030
ServerAdmin webmaster@dumy-host.example.com #这里填写网站管理员的邮箱
DocumentRoot /var/www #这里填写网站的根目录
ServerName xxxxxxxxxxxxx #这里填写server name,可以填写域名或者IP地址
ErrorLog logs/xxxxxxxxxlog #这里指定该网站的错误日志
CustomLog logs/xxxxxxxxxxlog common #这里指定网站的正常日志,但是最后的common不知道什么意思?
NameVirtualHost *:3000
DocumentRoot /var/xxxxxx #指定网站根目录
Order allow,deny
Allow from all
WSGIScriptAlias / /var/xxxxxxx/wsgi.py #这一步非常重要,指定Django项目中的wsgi设置的脚本
Order allow,deny
Allow from all
ServerName xxxxxxxxxxx
ServerAdmin xxxxxx@xxxx
ErrorLog logs/xxxxxxxx_log
CustomLog logs/xxxxxxxxx_log common
8、配置Django项目
Httpd与Django的交互还需要Django做一定的配合,这里需要在Django项目的setting.py和wsgi.py中作必要的修改。
setting.py
在 ALLOWED_HOSTS中添加域名,这样Django才允许通过这个IP地址访问网站,如果有其他域名的话,也需要在这里添加。
将DATABASES设置修改成nanshan的数据库信息。注意,要多添加一行’OPTIONS’:{‘isolation_level’:None}
wsgi.py
这个文件需要改成
import os
这个文件配置的目的也是为了让httpd找到Django工程的位置
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0,PROJECT_DIR)
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “xxxxx.settings”)
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()