生产环境部署

关键点:

  1. 安装依赖包
  2. 关闭调试模式   app.debug = False
  3. 修改mysql数据库连接,导入数据
  4. 开启多个端口后台运行
  5. 配置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

完整测试

  1. 登录后台, 添加标签, 测试ok
  2. 添加电影, 发现刚才添加的标签无法出现.  查询数据库发现标签已经添加, 刷新电影添加页面发现还是无法获取标签. 此时重启项目发现在电影添加页面才能发现标签.

11-02 生产环境部署 部署微电影网站相关推荐

  1. 【转】在生产环境中部署前端代码

    在生产环境中部署前端代码 本文章前端代码是基于vue+webpack开发的 Nginx是一款轻量级的Web 服务器/反向代理服务器 首先,webpack配置如下 在开发过程中,我们是通过npm run ...

  2. 你知道怎么在生产环境下部署tomcat吗?

    享学课堂特邀作者:老顾 转载请声明出处! 一.前言 小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动.其实在生产环境中怎么部署,和网上介绍的有很大区别.这篇文章老顾就带 ...

  3. Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署

    近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题.

  4. Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群

    说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...

  5. vue服务端渲染——项目搭建、开发、生产环境的部署、浏览渲染、SEO优化

    几个月前,公司要求(服务端渲染)--用vue-ssr做了个服务端渲染,从起搭建.开发.部署.浏览器渲染到优化,希望对有需要的小伙伴有帮助,若是有不足之处,望指出,一起讨论学习.--几个月过去了,公司又 ...

  6. Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台.它在单个平台上紧密集成了KVM虚拟机管理程序和LXC,软件定义的存储以及网络 ...

  7. ubuntu搭建nodejs生产环境——快速部署手册

    为什么不用CentOS而用Ubuntu作为生产环境的运行平台?这个我也比较好奇,公司订的只能沿用传统,从使用成本的角度来说,此举也是值得肯定的. 测试环境 腾讯云 Ubuntu 16.04 阿里云 U ...

  8. 生产环境Docker部署ELK跨区访问kafka不通问题的解决

    由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...

  9. 生产环境hotfix部署流程

    针对生产环境发布新版本后有bug需要紧急修复的情况,协作流程思路:新建对应的hotfix补丁分支,相关开发人员基于hotfix分支进行bug修复,修复完毕验证无误后,同样通过Merge Request ...

  10. Python开发【项目】:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

最新文章

  1. 赠书 | 图像分类问题建模方案探索实践
  2. 【原创】WinCE下流驱动开发流程
  3. 通过Keepalived实现Redis Failover自动故障切换功能[实践分享] =转载
  4. 从CVPR 2013看计算机视觉的研究领域和趋势 [CVPR 2013] Three Trending Computer Vision Research Areas
  5. 关于布线设计方案+网络产品的一个网站
  6. [云炬创业基础笔记]第六章商业模式测试8
  7. 如何正确使用Windows的Ping命令
  8. python可视化水平双向箭头_python数据可视化第二弹
  9. lm358在哪个库里_库里8和aj35哪个好 库里8是安德玛的吗
  10. C++11 并发指南六(atomic 类型详解三 std::atomic (续))
  11. python企业微信特定用户_python3调用企业微信api!开发一款属于自己的企业微信...
  12. 云计算产生的新生事物一云桌
  13. GNS3 1.5.2 无法上传文件的解决办法
  14. selenium webdriver中的常用鼠标操作
  15. 计算机专业c语言讲解,1计算机科学与技术专业本科C语言程序设计期末复习题1讲解.doc...
  16. 单片机涡轮流量传感器_青天仪表为您介绍安装涡轮流量计需要注意问题
  17. 程序员必备的10个B站优质UP主!
  18. C++控制输出对齐---setw()函数
  19. 键盘侠小心了!微博或将推出“杠精”示众功能
  20. 一篇学完:王道考研408计算机网络(全)

热门文章

  1. 【新观点】孙悟空其实是太上老君炼的丹药变成的
  2. 数据吞吐高达 21 亿条!实时计算在贝壳找房的应用实践
  3. linux 内存性能调优
  4. gdal库之ecw光栅图像支持
  5. 爱奇艺视频显示列表CSS实现
  6. 《MySQL必知必会》学习笔记——组合查询、全文本搜索
  7. 一些获取免费域名的方法
  8. 手机网站开发必修课[1]:手机浏览器
  9. 从微软下载Windows11操作系统镜像
  10. WindowsAPI编程 简单的计算器