前言:项目部署采用Django+Nginx+Uwsgi+SQLite3架构,而Django处理数据的架构为MVC。
第一、安装最新版本Ubuntu Desktop 18.04.1 LTS(特别繁琐,大神略过)(大神可选Ubuntu Server 18.04.1 LTS)
1、创建新虚拟机。
2、设置登录用户(随便设置,记住密码,后期我们切换到root用户登录,才有权限)。
3、分给Ubuntu默认资源。
4、Ubuntu自动开机(超级久,建议泡壶茶慢慢等)。
5、以Root权限登录Ubuntu。
第二、更新操作系统和安装依赖包(全部root权限操作)
#更新操作系统软件库 sudo apt-get update sudo apt-get upgrade #安装上传rz、下载sz工具 sudo apt-get install lrzsz #安装gcc g++的依赖库 sudo apt-get install build-essential sudo apt-get install libtool #安装 pcre依赖库 sudo apt-get install libpcre3 libpcre3-dev #安装 pcre依赖库 sudo apt-get install zlib1g-dev #安装 ssl依赖库 sudo apt-get install openssl
#安装Python3和PIP3 sudo apt install python3 sudo apt install python3-pip
#安装virtualenv
sudo pip3 install virtualenv
#创建空文件夹
sudo mkdir -p /data/env # 放虚拟环境
sudo midir -p /data/www # 放本地项目
第三、本地项目部署到Ubuntu服务器
1、导出本地数据库文件。
python3.7 manage.py dumpdata > data.json
2、导出本地环境依赖包到requirements.txt文件。
pip3 freeze > requirements.txt
3、把项目源码压缩打包并上传到码云。
wudeMacBook-Pro:~ Wubz$ cd /Users/Wubz/PycharmProjects/mysite2019 # cd到本地项目目录下 wudeMacBook-Pro:mysite2019 Wubz$ git init #本地项目初始化git项目,git需要自己安装(本机虚拟机各种安装一次)
wudeMacBook-Pro:mysite2019 Wubz$ git remote add origin https://gitee.com/wubz/mysite2019.git
#将初始化的git项目与码云平台的个人账户关联,准备上传本地项目到码云
wudeMacBook-Pro:mysite2019 Wubz$ git pull origin master #提交项目4步骤
wudeMacBook-Pro:mysite2019 Wubz$ git add .
wudeMacBook-Pro:mysite2019 Wubz$ git commit -m "第一次提交"
wudeMacBook-Pro:mysite2019 Wubz$ git push origin master
wudeMacBook-Pro:mysite2019 Wubz$ git push -u origin master -f #强制提交并覆盖原有分支
4、码云平台查看自己提交的项目。
5、将码云平台的项目下载到Ubumtu服务器中(假设Ubuntu服务器地理位置在浙江杭州,所以才需要上传&下载,这般折腾)。
root@ubuntu:/data/env# sudo apt-get install git #安装git
root@ubuntu:~# cd /data/www
root@ubuntu:/data/www# git clone https://gitee.com/wubz/mysite2019.git Cloning into 'mysite2019'... Username for 'https://gitee.com': 982240803@qq.com Password for 'https://982240803@qq.com@gitee.com': *********** #项目代码,暂不公布,需者私联
....
.....
root@ubuntu:/data/www# cd mysite2019
root@ubuntu:/data/www/mysite2019# ls #下载完成
blog data.json db.sqlite3 DjangoUeditor manage.py media mysite2019 mysite2019env __pycache__ README.md requirements.txt static templates
6、安装项目依赖包并启动项目。
root@ubuntu:/data/www/mysite2019#cd /data/env
root@ubuntu:/data/env# sudo virtualenv -p /usr/bin/python3 web #创建虚拟环境包
root@ubuntu:/data/env# source /data/env/web/bin/activate #启动虚拟环境
(web) root@ubuntu:/data/env# #进入到虚拟环境中
(web) root@ubuntu:/data/env# cd /data/www/mysite2019
(web) root@ubuntu:/data/www/mysite2019# sudo pip3 install -r requirements.txt
(web) root@ubuntu:/data/www/mysite2019# python3 manage.py runserver 127.0.0.1:80 #启动项目,失败,按照提示安装依赖包
(web) root@ubuntu:/data/www/mysite2019# pip3 install django
(web) root@ubuntu:/data/www/mysite2019# pip3 install pymysql
(web) root@ubuntu:/data/www/mysite2019# pip3 install pillow
(web) root@ubuntu:/data/www/mysite2019# python3 manage.py runserver 127.0.0.1:80 #再次启动项目,成功!
Performing system checks...
System check identified no issues (0 silenced).
January 29, 2019 - 00:20:03
Django version 2.1.5, using settings 'mysite2019.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
7、安装Uwsgi应用服务器(处理动态请求,例如音视频流) 。
root@ubuntu:~# pip3 install uwsgi #系统级别下安装一次Uwsgi root@ubuntu:~# source /data/env/web/bin/activate #进入虚拟环境env目录下再安装一次 (web) root@ubuntu:/data/env# pip3 install uwsgi
安装成功之后,我们进入项目根目录cd /data/www/mysite2019/新建一个 uwsgi.xml文件,编写代码
<uwsgi>
<socket>127.0.0.1:8080</socket><!-- 内部端口,自定义 --> <chdir>/data/www/mysite2019/</chdir><!-- 项目路径 --> <module>mysite2019.wsgi</module><!-- mysite2019为wsgi.py文件所在目录-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>
8、安装并配置Nginx应用服务器。
(web) root@ubuntu:/usr/local# wget http://nginx.org/download/nginx-1.13.7.tar.gz #下载nginx源码 (web) root@ubuntu:/usr/local# tar -zxvf nginx-1.13.7.tar.gz #解压 (web) root@ubuntu:/usr/local# cd nginx-1.13.7 (web) root@ubuntu:/usr/local/nginx-1.13.7# sudo ./configure (web) root@ubuntu:/usr/local/nginx-1.13.7# sudo make (web) root@ubuntu:/usr/local/nginx-1.13.7# sudo make install (web) root@ubuntu:/usr/local/nginx-1.13.7# cd /usr/local/nginx/conf/ (web) root@ubuntu:/usr/local/nginx/conf# sudo cp nginx.conf nginx.conf.bak
(web) root@ubuntu:/usr/local/nginx/conf# nano nginx.conf 打开nginx.conf文件,把里面的内容全部删除,输入下面代码: events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 4443; server_name www.hackers.free.idcfengye.com charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; uwsgi_param UWSGI_SCRIPT mysite2019.wsgi; uwsgi_param UWSGI_CHDIR /data/www/mysite2019/; #项目路径 } location /static/ { alias /data/www/mysite2019/static/; #静态资源路径 } } } (web) root@ubuntu:/usr/local/nginx/conf# cd /usr/local/nginx/sbin/ (web) root@ubuntu:/usr/local/nginx/sbin# ./nginx -t
(web) root@ubuntu:/usr/local/nginx/sbin# ./nginx #终端没有任何提示就证明nginx启动成功。
(web) root@ubuntu:/usr/local/nginx/sbin# cd /data/www/mysite2019
(web) root@ubuntu:/data/www/mysite2019# uwsgi -x uwsgi.xml
(web) root@ubuntu:/data/www/mysite2019# cd /usr/local/nginx/sbin/
(web) root@ubuntu:/usr/local/nginx/sbin# ./nginx -s reload #平滑重启nginx。
第四、内网穿透,项目部署到公网
1、 租用*服务器,开通隧道(有免费,不稳定)。
2、在Ubuntu服务器开启ngrok隧道,实现内网流量转发。
3、在Ubuntu上开启Nginx应用服务器(虚拟环境内root权限开启)。
4、在Ubuntu上运行项目(虚拟环境内root权限运行)。
5、在MacBookPro Safari浏览器中浏览我们上线到公网上的“Hacker学院”网站(需要访问网站者,请评论“访问网站”,我将开启隧道服务,届时浏览器打开http://hackers.vipgz1.idcfengye.com)。
6、在iPad浏览器访问“Hacker学院”网站(图片加载异常缓慢)。
7、在华为Mate8手机浏览器访问“Hacker学院”网站(接受不了图片加载龟速慢者,可付费租用Ngrok*服务器)。
第五、网站安全防护(根据本站做安全分析,主要存在3点安全漏洞:DDOS攻击、SQL注入、后台弱口令)
1、DDOS攻击与防御。
A distributed denial of service (DDoS) attack is a malicious attempt to disrupt the normal flow of a target server, service, or network through a large amount of Internet traffic overwhelming the target or its surrounding infrastructure. DDoS attacks are effective by leveraging multiple compromised computer systems as a source of attack traffic. Machines that are utilized may include computers and other network resources, such as IoT devices. At a high level, DDoS attacks are like traffic jams that block highways, preventing regular traffic from reaching its desired destination.
分布式拒绝服务(DDoS)攻击是一种恶意企图,通过大量互联网流量压倒目标或其周围的基础架构来破坏目标服务器,服务或网络的正常流量。DDoS攻击通过利用多个受损计算机系统作为攻击流量来源来实现有效性。被利用的机器可以包括计算机和其他网络资源,例如物联网设备。从高层次来看,DDoS攻击就像堵塞高速公路的交通堵塞,阻止了常规交通到达其所需的目的地。
主要防御手段:
(1) 减少公开暴露。对于企业而言, 减少不必要的分开曝光是十分有效的防御DDoS攻击的一种方式, 及时关闭不必要的服务, 设置安全群组和私有网络, 禁止对主机的非开放服务, 限制打开最大SYN连接数, 限制特定IP地址的访问。通过这些方式可以减少受到攻击的可能性。
(2) 报文过滤。针对源地址进行欺骗的DDoS攻击, 可以通过对报文源IP地址进行检测, 根据IP地址的真假对报文进行过滤防御。入口过滤在攻击源端的边界路由上起作用, 当数据包进入到网络时, 检查报文IP地址是否符合通告的网络标准, 如果不满足就丢弃这个数据包。
(3) 提升网络带宽保证能力。网络带宽直接决定抗DDoS攻击的能力, 如果带宽仅仅只能10M的话, 无论如何都不能抵御DDoS攻击。理论上讲网络带宽越大越好, 但是考虑到经济原因, 不可能无限制地将网络带宽提高, 要在经济能力允许的范围内尽量提高网络带宽的保证能力。
(4) 分布式资源共享服务器。将数据和程序分布在多个服务器上, 建立分布式资源共享服务器。分布式资源共享服务器有利于协调整个系统共同解决问题, 进行更加优化的资源分配。能够克服传统的资源紧张与响应瓶颈的缺陷, 分布式规模越大, 防御攻击也就更加容易。
(5) 监控系统性能。对系统性能进行监控也是预防DDoS攻击的一种重要方式, 不合理的服务器配置会使得系统容易被DDoS攻击, 对API、CDN和DNS等第三方服务进行监控, 对网络节点进行监视, 及时发现并清理可能出现的漏洞。当这些性能出现异常后, 及时进行维护。对网络日志进行定期查阅, 看是否有异常入侵, 及时做好防范工作。
(6)IP地址溯源。在攻击过程中, 可以根据攻击来源来设定过滤, 将攻击来源处的流量进行过滤达到降低攻击强度的效果;另外, 还可以将收集到的信息作为法律证据对攻击者进行法律制裁。IP地址溯源技术主要有:连接测试、随机采样、登录分析等。
(7)Anycast DDoS流量清洗。横跨全球的分布式数据中心拥有超过4Tbps的防御带宽,利用知道创宇全球Anycast流量攻击清洗机制,可以完美防御SYN Flood、ACK Flood、ICMP Flood、UDP Flood、NTP Flood 、SSDP Flood、DNS Flood、HTTP Flood、CC(ChallengeCollapsar)攻击。
2、SQL注入攻击与防御。
SQL injection is to insert SQL commands into the Web form and submit them to the page request (query string), in order to spoof the server to execute malicious SQL commands. It uses existing applications, inserts SQL statements into the database, and executes SQL statements that are not in accordance with the designer's intent.
SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。
主要防御手段:
(1) 不信任用户输入。对用户的输入进行校验,通过正则表达式,或限制长度;对单引号和双"-"进行转换等,在客户端和服务端都进行恶意代码检测。
(2) 关闭网页的异常提示。使用自定义的错误信息对原始错误信息进行包装或不显示,避免黑客利用错误分析数据库名、表名、列名。
(3) 禁止使用管理员权限的数据库连接。为每个应用使用单独的权限有限的数据库连接,严格授权。如果数据库是SQL Server,就可以用有名字的参数了,格式是“@”字符加上参数。
(4) 用户账户密码等敏感信息加密储存。切勿把机密信息明文存储,加密敏感信息或者hash掉密码。
3、后台弱口令(可参考此前文章:Hydra&Metasploit暴力破解SSH登录口令)。
至此,网站开发部署上线完毕!
谢谢观看,㊗️君新春快乐!