11-02 生产环境部署 部署微电影网站
生产环境部署
关键点:
- 安装依赖包
- 关闭调试模式 app.debug = False
- 修改mysql数据库连接,导入数据
- 开启多个端口后台运行
- 配置nginx反向代理
安装依赖包
步骤1: 获取依赖包 在开发环境中通过freeze工具导出依赖包文件. 建议文件改为txt格式.
pip3 freeze > req.txt
步骤2: 将依赖包文件传入项目部署环境
步骤3: 安装依赖包
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt
依赖包内容如下:
click==7.1.1 Flask==1.1.1 Flask-Bootstrap==3.3.7.1 Flask-Cors==3.0.8 flask-redis==0.4.0 Flask-Script==2.0.6 Flask-Session==0.3.1 flask-sqlacodegen==1.1.7 Flask-SQLAlchemy==2.4.3 Flask-WTF==0.14.3 itsdangerous==1.1.0 Jinja2==2.11.1 PyMySQL==1.0.2 SQLAlchemy==1.3.22 Werkzeug==1.0.1 WTForms==2.2.1
导入数据
参见: Flask 数据生成/数据迁移/数据事件 操作
创建数据表后注意查看"movie2101/app/__init__.py"中配置的mySQL的连接密码,库名之类是否正确.
导入数据的sql:
CREATE TABLE auth (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100), url VARCHAR(255), addtime DATETIME, PRIMARY KEY (id), UNIQUE (name), UNIQUE (url) );CREATE INDEX ix_auth_addtime ON auth (addtime);CREATE TABLE preview (id INTEGER NOT NULL AUTO_INCREMENT, title VARCHAR(255), logo VARCHAR(255), addtime DATETIME, PRIMARY KEY (id), UNIQUE (logo), UNIQUE (title) );CREATE INDEX ix_preview_addtime ON preview (addtime);CREATE TABLE `role` (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100), auths VARCHAR(255), addtime DATETIME, PRIMARY KEY (id), UNIQUE (auths), UNIQUE (name) );CREATE INDEX ix_role_addtime ON `role` (addtime);CREATE TABLE tag (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100), addtime DATETIME, PRIMARY KEY (id), UNIQUE (name) );CREATE INDEX ix_tag_addtime ON tag (addtime);CREATE TABLE user (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100), pwd VARCHAR(100), email VARCHAR(100), phone VARCHAR(100), info TEXT, face VARCHAR(255), addtime DATETIME, uuid VARCHAR(255), PRIMARY KEY (id), UNIQUE (email), UNIQUE (name), UNIQUE (phone), UNIQUE (uuid) );CREATE INDEX ix_user_addtime ON user (addtime);CREATE TABLE `admin` (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(100), pwd VARCHAR(100), is_super SMALLINT, role_id INTEGER, addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(role_id) REFERENCES `role` (id), UNIQUE (name) );CREATE INDEX ix_admin_addtime ON `admin` (addtime);CREATE TABLE movie (id INTEGER NOT NULL AUTO_INCREMENT, title VARCHAR(255), url VARCHAR(255), info TEXT, logo VARCHAR(255), star SMALLINT, playnum BIGINT, commentnum BIGINT, tag_id INTEGER, area VARCHAR(255), release_time DATE, length VARCHAR(100), addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(tag_id) REFERENCES tag (id), UNIQUE (logo), UNIQUE (title), UNIQUE (url) );CREATE INDEX ix_movie_addtime ON movie (addtime);CREATE TABLE userlog (id INTEGER NOT NULL AUTO_INCREMENT, user_id INTEGER, ip VARCHAR(100), addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(user_id) REFERENCES user (id) );CREATE INDEX ix_userlog_addtime ON userlog (addtime);CREATE TABLE adminlog (id INTEGER NOT NULL AUTO_INCREMENT, admin_id INTEGER, ip VARCHAR(100), addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(admin_id) REFERENCES `admin` (id) );CREATE INDEX ix_adminlog_addtime ON adminlog (addtime);CREATE TABLE comment (id INTEGER NOT NULL AUTO_INCREMENT, content TEXT, movie_id INTEGER, user_id INTEGER, addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(movie_id) REFERENCES movie (id), FOREIGN KEY(user_id) REFERENCES user (id) );CREATE INDEX ix_comment_addtime ON comment (addtime);CREATE TABLE moviecol (id INTEGER NOT NULL AUTO_INCREMENT, movie_id INTEGER, user_id INTEGER, addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(movie_id) REFERENCES movie (id), FOREIGN KEY(user_id) REFERENCES user (id) );CREATE INDEX ix_moviecol_addtime ON moviecol (addtime);CREATE TABLE oplog (id INTEGER NOT NULL AUTO_INCREMENT, admin_id INTEGER, ip VARCHAR(100), reason VARCHAR(255), addtime DATETIME, PRIMARY KEY (id), FOREIGN KEY(admin_id) REFERENCES `admin` (id) );CREATE INDEX ix_oplog_addtime ON oplog (addtime);INSERT INTO alembic_version (version_num) VALUES ('4b511af486dc');
后台管理员默认账户添加
可以在停止程序,用一个另外的model.py文件为后台加入管理员用户
注意:
1 使用的是 db.creat_all()
2 创建的用户名以及密码为 admin1 123456
部署代码以及反向代理
步骤1: 将代码考入/usr/local/nginx/html/下 (是为了下一步进行nginx反向代理使用)
步骤2: 返回/usr/local/nginx/html/下项目根目录下即可运行代码
# 我的开发使用的python3, centos中的python3需要用python3调用
python3 magage.py # 项目需要python3来启动
或
python magage.py # 项目需要python2来启动
启动示例:
访问: 使用curl命令即可访问该网站网址
curl http://127.0.0.1:5000/home/1
步骤2: 将nginx配置文件导入/usr/local/nginx/conf/下. 内容如下
#user nobody; worker_processes 4; events {worker_connections 1024; }http { #upstream模块包含在http模块下include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream movie{ #定义upstream名字,下面会引用server 127.0.0.1:5000; # 可以指定多个后端服务器地址或对应端口server 127.0.0.1:5001;server 127.0.0.1:5002;server 127.0.0.1:5003;}server {listen 80;server_name localhost;location / {root html;index index.html index.htm;proxy_pass http://movie; #引用upstream}location ~ \.flv$ {flv;limit_conn addr 1; # 限制连接数,有的nginx可能不支持limit_rate 1024k; #限制下载速率rewrite ^/static/uploads/(.+?).flv$ /movie2101/app/static/uploads/$1.flv permanent;}# 以下内容为访问链接和下载速率控制location ~ \.mp4$ {mp4;limit_conn addr 1; # 限制连接数,有的nginx可能不支持limit_rate 1024k; #限制下载速率rewrite ^/static/uploads/(.+?).mp4$ /movie2101/app/static/uploads/$1.mp4 permanent;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} }
步骤3: 停掉nginx后再启动nginx
nginx -s stop
nginx
netstat -anptu | grep nginx
步骤4: 进入代码中manage.py文件所在目录, 再运行程序代码
python3 manage.py# 后台运行
nohup python manage.py runserver -h 127.0.0.1 -p 5001# 过多核处理器 可开启多个进程nohup python manage.py runserver -h 127.0.0.1 -p 5002 & [1] 26438
步骤5: 访问
前台home访问: 在本地浏览器访问 "http://192.168.31.216:80/home/1" 即可访问到页面, 如下图所示. 图中一些资源没有显示,需要进一步配置nginx.conf文件中的静态资源路径.
后台admin访问:在本地浏览器访问 "http://192.168.31.216:80/admin" 即可访问到页面 使用之前创建的用户信息 " admin1 123456 " 即可登录
后台上传电影文件报错
在添加电影页面添加电影时会报错如下, 是上传文件大小被限制了,nginx默认上传传文件的大小限制是1M,在nginx的配置中添加参数"client_max_body_size 100m;"后可解决此问题。
413 Request Entity Too Large
添加示例:
流媒体访问限制
视频流量要求较高, 如果无限制访问则服务器无法承担访问量,因此需要作出限制. 通过nginx反向代理可以限制连接数,下载速率等.
1. 限制单个ip发起的连接:
limit_conn addr 1
2. 限制视频速率:
limit_rate 1024k
3. 刷新nginx:
nginx -s reload
完整测试
- 登录后台, 添加标签, 测试ok
- 添加电影, 发现刚才添加的标签无法出现. 查询数据库发现标签已经添加, 刷新电影添加页面发现还是无法获取标签. 此时重启项目发现在电影添加页面才能发现标签.
11-02 生产环境部署 部署微电影网站相关推荐
- 【转】在生产环境中部署前端代码
在生产环境中部署前端代码 本文章前端代码是基于vue+webpack开发的 Nginx是一款轻量级的Web 服务器/反向代理服务器 首先,webpack配置如下 在开发过程中,我们是通过npm run ...
- 你知道怎么在生产环境下部署tomcat吗?
享学课堂特邀作者:老顾 转载请声明出处! 一.前言 小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动.其实在生产环境中怎么部署,和网上介绍的有很大区别.这篇文章老顾就带 ...
- Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署
近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题.
- Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群
说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...
- vue服务端渲染——项目搭建、开发、生产环境的部署、浏览渲染、SEO优化
几个月前,公司要求(服务端渲染)--用vue-ssr做了个服务端渲染,从起搭建.开发.部署.浏览器渲染到优化,希望对有需要的小伙伴有帮助,若是有不足之处,望指出,一起讨论学习.--几个月过去了,公司又 ...
- Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例
1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台.它在单个平台上紧密集成了KVM虚拟机管理程序和LXC,软件定义的存储以及网络 ...
- ubuntu搭建nodejs生产环境——快速部署手册
为什么不用CentOS而用Ubuntu作为生产环境的运行平台?这个我也比较好奇,公司订的只能沿用传统,从使用成本的角度来说,此举也是值得肯定的. 测试环境 腾讯云 Ubuntu 16.04 阿里云 U ...
- 生产环境Docker部署ELK跨区访问kafka不通问题的解决
由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...
- 生产环境hotfix部署流程
针对生产环境发布新版本后有bug需要紧急修复的情况,协作流程思路:新建对应的hotfix补丁分支,相关开发人员基于hotfix分支进行bug修复,修复完毕验证无误后,同样通过Merge Request ...
- Python开发【项目】:生产环境下实时统计网站访问日志信息
日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...
最新文章
- 赠书 | 图像分类问题建模方案探索实践
- 【原创】WinCE下流驱动开发流程
- 通过Keepalived实现Redis Failover自动故障切换功能[实践分享] =转载
- 从CVPR 2013看计算机视觉的研究领域和趋势 [CVPR 2013] Three Trending Computer Vision Research Areas
- 关于布线设计方案+网络产品的一个网站
- [云炬创业基础笔记]第六章商业模式测试8
- 如何正确使用Windows的Ping命令
- python可视化水平双向箭头_python数据可视化第二弹
- lm358在哪个库里_库里8和aj35哪个好 库里8是安德玛的吗
- C++11 并发指南六(atomic 类型详解三 std::atomic (续))
- python企业微信特定用户_python3调用企业微信api!开发一款属于自己的企业微信...
- 云计算产生的新生事物一云桌
- GNS3 1.5.2 无法上传文件的解决办法
- selenium webdriver中的常用鼠标操作
- 计算机专业c语言讲解,1计算机科学与技术专业本科C语言程序设计期末复习题1讲解.doc...
- 单片机涡轮流量传感器_青天仪表为您介绍安装涡轮流量计需要注意问题
- 程序员必备的10个B站优质UP主!
- C++控制输出对齐---setw()函数
- 键盘侠小心了!微博或将推出“杠精”示众功能
- 一篇学完:王道考研408计算机网络(全)