1. 简介
其实,我这里也没想好一个比较完整的稍微大一点的项目,大家都写管理系统,总不能我又去写个管理系统....吧,管理系统就一个web+mysql,然后,对mysql的数据进行增删改查,然后,完了。
其实,我就是想将前面的所写到的内容整合起来,然后将在一些常用的开源库能够较好的整合上来,例如celery定时任务和任务队列、redies缓存机制、标准北向接口和AK/SK鉴权等都写下来,当然,mysql也会用到的。
这个项目,搭建一个web框架,以mysql作为数据存储机制,结合上一章节用到的爬虫,定时触发爬取对应的域名进行分析,然后展示在页面上。
先上图,看下效果,最后有一键化安装脚本:
2. 需求
需求如上简介中所示,主要有如下几点。
- 一个基础的web框架,通过用户名和密码登录后可以使用web的相关功能。
- 增加用户管理模块,能够创建删除管理员用户。
- Web的主要业务在于定时爬虫收集数据。
- 除了能够定时收集外,还能够立即收集。
- 增加爬虫关键字管理页面,能够删除和新增。
- 增加日志管理页面,记录管理员的操作。
- 后台能够记录错误日志和关键日志。
需求之后,就是一个交互设计,在开发之前应该有个原型,就知道大概开发出来要是个什么样子,这里就直接看最后实现后的效果了。
3. 实现思路
基于需求,讲需求拆分之后,就知道具体的一步一步需要做哪些东西了。
- 环境搭建
nginx + django + uwsgi
mysql数据库
redies开源库
celery开源库
- 功能设计
Web cgi开发(前后台交互接口)
用户管理、用户认证模块
爬虫配置管理模块
日志管理模块
后台日志模块
爬虫功能
定时任务模块
4. 环境搭建
4.1 快速搭建(django+nginx)
安装环境 : centos 7 (能上网)
安装包 :
链接:https://pan.baidu.com/s/1KxJUbvocrS8SFZ_2jiGKdQ
提取码:mew2
将百度云盘的几个文件和下面的django_install.sh脚本拷贝到centos任意目录,chmod a+x django_install.sh; ./django_install.sh 即可完成nginx+django的安装,如下图 :
安装成功后提示 :
安装后的效果如下 :
如果对django、nginx等安装配置了然于胸,可以直接用该脚本安装完就可以了,无需看后面的解释章节。
4.2 详细步骤(django+nginx)
4.2.1 安装相关依赖
yum -y install gcc-c++
yum -y install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel
yum -y install libxml*
4.2.2 离线安装python3
tar xvf Python-3.7.0.tar.xz
cd Python-3.7.0
./configure --prefix=/usr/local/python3.7 --enable-shared CFLAGS=-fPIC
make
make install
上述命令为离线编译安装python3
mv -i /usr/bin/python /usr/bin/python.bak
mv -i /usr/bin/pip /usr/bin/pip.bak
ln -sv /usr/local/python3.7/bin/python3 /usr/bin/python
ln -sv /usr/local/python3.7/bin/pip3 /usr/bin/pip
由于centos7自带python2.7,默认的python为2.7,将默认python改为python3
echo "/usr/local/python3.7/lib" >> /etc/ld.so.conf.d/python.conf
ldconfig
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=600
由于yum是基于python2开发的,所以需要将yum的pytho应用改成python2
4.2.3 安装django+uwsgi
pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=600
pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=600
ln -s /usr/local/python3.7/bin/uwsgi /usr/bin/uwsgi3
ln -s /usr/local/python3.7/bin/django-admin /usr/bin/django-admin
ln -s /usr/local/python3.7/bin/uwsgi /usr/bin/uwsgi
4.2.4 更新sqlite
由于python引用的是sqlite3,所有需要离线安装sqlite3,并设置为默认的
- 编译安装
tar -zxvf sqlite-autoconf-3270200.tar.gz
cd /home/django/sqlite-autoconf-3270200
./configure --prefix=/usr/local
make
make install
- 修改默认sqlite
/usr/local/bin/sqlite3 --version
/usr/bin/sqlite3 --version
mv /usr/bin/sqlite3 /usr/bin/sqlite3_3.7.17
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
/usr/bin/sqlite3 --version
echo "export LD_LIBRARY_PATH="/usr/local/lib"" >> ~/.bashrc
source ~/.bashrc
4.2.5 安装nginx
- 编译安装
tar -zxvf nginx-1.13.7.tar.gz
cd /home/django/nginx-1.13.7
./configure
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
4.2.6 Web配置
- 创建一个django项目
mkdir -p /data/
mkdir -p /data/website
cd /data/website
django-admin startproject mysite
cd /data/website/mysite
python manage.py startapp testweb
mkdir -p /data/website/mysite/static
mkdir -p /data/website/mysite/templates
- 修改配置文件(/data/website/mysite/mysite/settings.py)
- Django url请求的具体实现 (/data/website/mysite/testweb/views.py) :
生成一个测试页面
echo "Django测试页面" > /data/website/mysite/templates/index.html
- mysite.xml(/data/website/mysite/mysite.xml)
<uwsgi>
<socket>127.0.0.1:8997</socket><!-- 内部端口,自定义 -->
<chdir>/data/wwwroot/mysite/</chdir><!-- 项目路径 -->
<module>mysite.wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
- nginx配置
- 配置校验、进程启动
加载xml配置
cd /data/website/mysite/
uwsgi -x mysite.xml
校验nginx配置正确性,并启动
nginx -t
nginx
nginx -s reload
- 效果
4.3 快速搭建(mysql)
-
- 快速搭建(mysql)
安装环境 : centos 7 (能上网)
安装脚本 : 没法上传文件,这里就直接贴shell代码了,创建一个mysql_install.sh脚本保存即可
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
systemctl daemon-reload
mysql_pwd=`cat /var/log/mysqld.log | grep "generated for root@localhost:" | awk -F 'root@localhost: ' '{print $2}'`
echo "mysql临时密码为 : $mysql_pwd"
mysql --connect-expired-password -uroot -p$mysql_pwd -e "set global validate_password_policy=0;set global validate_password_length=1;"
mysql --connect-expired-password -uroot -p$mysql_pwd -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';"
echo "mysql新密码为 : 123456"
echo "开放3306远程mysql端口"
mysql --connect-expired-password -uroot -p123456 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;"
将mysql_install.sh脚本拷贝到centos任意目录,chmod a+x mysql_install.sh; ./mysql_install.sh 即可完成mysql的安装,如下图 :
安装成功后提示 :
安装后的效果如下 : 密码设置为123456
下面章节可看可不看,mysql安装比较简单,可大致过一遍即可(mysql的精华在于表设计,不在python学习范畴)。
4.4 详细步骤(mysql)
4.4.1 安装mysql
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
systemctl daemon-reload
Mysql安装后设置了一个随机默认密码,通过如下命令可以打印出来
cat /var/log/mysqld.log | grep "generated for root@localhost:" | awk -F 'root@localhost: ' '{print $2}'
4.4.2 mysql初始化的一些设置
使用mysql -uroot -p默认密码登录
- 设置密码策略
set global validate_password_policy=0;
set global validate_password_length=1;
- 设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
- 开放3306远程mysql端口
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;