使用Gunicorn+Nginx部署Flask项目

部署-开发机上的准备工作

  1. 确认项目没有bug。
  2. 用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便部署的时候安装。
  3. 将项目上传到服务器上的/srv目录下。这里以git为例。使用git比其他上传方式(比如使用pycharm)更加的安全,因为git有版本管理的功能,以后如果想要回退到之前的版本,git轻而易举就可以做到。
  4. 在https://git-scm.com/downloads下载Windows版本的客户端。然后双击一顿点击下一步安装即可。
  5. 然后使用码云,在码云上创建一个项目。码云地址:https://gitee.com/
  6. 然后进入到项目中,使用以下命令做代码提交:
# 初始化一个仓库
$ git init 
# 添加远程的仓库地址
$ git remote add origin xxx.git
# 添加所有的代码到缓存区
$ git add .
# 将代码提交到本地仓库
$ git commit -m 'first commit'
# 将本地仓库中的代码提交到远程服务器的master分支上
$ git push origin main

二、在服务器上的准备工作:

1. 安装SSH服务:
为了方便通过Xshell或者CRT等软件远程连接云服务器,建议安装OpenSSH等类似软件,不过一般云服务器上都安装好了,如果没有安装,则通过以下命令安装:

sudo apt install openssh-server openssh-client
service ssh restart

2. 安装Vim:
Vim是Linux下的通用文本编辑器,后续我们需要用Vim做一些文本编辑工作。通过以下命令安装:

sudo apt install vim

3. 安装MySQL并设置密码:
如果是中大型网站,或者是公司的商业网站,建议单独购买云MySQL服务器,他有更稳定的运行保障,有更安全的数据备份机制,缺点就是要多花点钱,但数据是一个网站的命脉,所以对于商业网站来说,强烈建议购买单独的云MySQL服务器,而不是把MySQL也运行网站服务器上。

为了低成本学习部署,我们这里以直接在网站服务器上安装MySQL为例进行讲解。首先通过以下命令安装mysql-server和mysql-client:

sudo apt install mysql-server mysql-client

然后再修改root密码。

第一步: 首先查看MySQL默认生成的随机密码:

sudo cat /etc/mysql/debian.cnf

可以看到有类似如下输出:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = CnoJI9sJ9rT12345
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = CnoJI9sJ9rT12345
socket   = /var/run/mysqld/mysqld.sock

第二步: 然后使用以上的user和password进行登录:

mysql -u debian-sys-maint -p

输入以上password的值后登录成功。

第三步: 修改root密码:

alter user "root"@"localhost" identified with mysql_native_password by "root密码";
flush privileges;

即可启动root账号的密码。

4. 安装Redis:
因为我们服务器用到了Redis,因此需要通过以下命令安装Redis:

$ sudo apt install redis-server

还是那句话,如果是一个商业网站,那么也建议单独购买云Redis服务器。

5. 安装Virtualenvwrapper:
部署的时候需要用到虚拟环境,因此需要先安装virtualenvwrapper,通过以下命令安装:

pip install virtualenvwrapper
  • 首先通过which virtualenvwrapper.sh命令查看virtualenvwrapper.sh文件所在的路径。
  • 在当前用户目录下创建.virtualenv文件夹,用来存放所有的虚拟环境目录。
  • 在当前用户目录下编辑.bashrc文件,添加以下代码:
$ export WORKON_HOME=$HOME/.virtualenvs
$ source /usr/local/bin/virtualenvwrapper.sh
  • 然后退出bashrc文件,输入命令source ~/.bashrc。

在虚拟环境安装完成后,就可以通过以下命令创建虚拟环境了:

$ mkvirtualenv pythonbbs

6. 安装Git:
我们项目还在Git服务器上,因此需要在服务器上安装Git,然后通过相关命令把代码pull下来。安装Git的命令如下:

 sudo apt install git

7. 从Git服务器下载代码:
现在我们的代码还在Git服务器上,需要通过以下命令把代码下载好:

$ git init
$ git remote add origin [repository url]
$ git pull origin main

8. 进入mysql数据库中,创建好项目的数据库。

$ mysql -uroot -p
mysql> create database pythonbbs charset utf8mb4;

9. 安装项目依赖包:
使用pip install -r requirements.txt将项目依赖的包都安装好。

10. 映射ORM模型到数据库中:
使用flask db upgrade将之前项目中生成的迁移脚本,映射到数据库中,生成表。

11. 用开发服务器运行项目:
使用python app.py将项目运行起来,并且先确定项目没有bug,保证能正常运行。

三、安装和配置Gunicorn:

我们之前使用python app.py,或者是在开发机上使用Pycharm运行项目,其实都是借助Werkzeug的开发服务器,这个服务器同一时刻只能有一个用户访问,这肯定是不行的,因此我们需要借助一些专门的应用服务器。用得最多的应用服务器就是Gunicorn和uWsgi,而Gunicorn的使用和配置是最方便的,并且还支持异步部署,这里我们就选择用Gunicorn来部署项目。首先通过以下命令安装Gunicorn:

$ pip install gunicorn

接下来再到项目根路径下,创建一个gunicorn.conf.py文件,然后填入以下配置项:

import multiprocessingbind = "127.0.0.1:5000"
workers = multiprocessing.cpu_count()*2 + 1
threads = 10
accesslog = "/var/log/pythonbbs/gunicorn_access.log"
errorlogb = "/var/log/pythonbbs/gunicorn_error.log"
preload_app = True
daemon = True

然后我们使用gunicorn app:app即可使用gunicorn运行项目了。在浏览器中输入:http://[ip]:[5000],即可访问到网站了。

在这里插入图片描述

四、安装和配置Nginx:

虽然Gunicorn可以正常的部署我们的项目了。但我们还是依然要采用nginx来作为web服务器。使用nginx来作为web服务器有以下好处:

  1. gunicorn对静态文件资源处理并不好,包括响应速度,缓存等。
  2. nginx作为专业的web服务器,暴露在公网上会比gunicorn更加安全一点。
  3. 运维起来更加方便。比如要将某些IP写入黑名单,nginx可以非常方便的写进去。而gunicorn可能还要写一大段代码才能实现。

1.安装Nginx:
通过apt install nginx即可安装。
2. nginx简单操作命令:

  • 启动:service nginx start
  • 关闭:service nginx stop
  • 重启:service nginx restart
  • 测试配置文件:service nginx configtest

3. nginx配置文件:
我们在/etc/nginx/conf.d下创建一个pythonbbs.conf文件,然后填入以下代码:

upstream pythonbbs{server 127.0.0.1:5000; 
}# 配置服务器
server {# 监听的端口号listen      80;# 域名      外网ipserver_name [服务器域名]; charset     utf-8;# 最大的文件上传尺寸client_max_body_size 75M;# 在对应的地方创建该日志文件 access_log /var/log/pythonbbs/nginx_access.log;error_log /var/log/pythonbbs/nginx_error.log;# 静态文件访问的urllocation /static {# 静态文件地址alias /srv/pythonbbs/static; }location /media {# 上传的文件地址alias /srv/pythonbbs/media; }# 最后,发送所有非静态文件请求到gunicornlocation / {proxy_pass  http://pythonbbs;# uwsgi_params文件地址include     /etc/nginx/uwsgi_params; }
}

在这里插入图片描述

在这里插入图片描述

写完配置文件后,为了测试配置文件是否设置成功,运行命令:

$ service nginx configtest

如果不报错,说明成功。 每次修改完了配置文件,都要记得运行service nginx restart。
在这里插入图片描述

gunicorn app:app

再名称为app的模块下面寻找app对象
如果不叫app,比如a 则是 a:app

部署-将域名映射到阿里云服务器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

项目细节处理

不是员工则跳转到首页

在这里插入图片描述

在这里插入图片描述

development

NODE_ENV = development
VUE_APP_SERVER_HOST = http://127.0.0.1:5000

production

NODE_ENV = production

在这里插入图片描述

// 配置文件
// .env
// .env.[mode]// mode:development、test、production// npm run server:用的是development模式
// npm run build:默认用的是production模式
// npm run build -- --mode [模式,比如:development]来指定具体的模式// 不同的模式,会读取对应模式下的配置参数
// development模式:.env.development配置文件
// production模式:.env.development配置文件// 在配置文件中,只能有三种类型的配置项:NODE_ENV,BASE_URL,VUE_APP_开头的
// 比如:VUE_APP_SERVER_HOST// 配置项中,只能是字符串,不能填一些js代码。比如window.location.origin
// 这样去写,实际上是一个"window.location.origin"

给网站初始化一个用户,否则也进入不了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

阿里云服务器部署 要开放端口

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/75418.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全进阶学习第九课——SQL注入介绍

文章目录 一、什么是注入二、什么是SQL注入三、SQL注入产生的原因四、SQL注入的危害五、SQL注入在渗透中的利用1、绕过登录验证:使用万能密码登录网站后台等。2、获取敏感数据3、文件系统操作4、注册表操作5、执行系统命令 六、如何挖掘SQL注入1、SQL注入漏洞分类按…

微信小程序wx.getlocation接口权限申请总结

先附上申请通过截图 插播内容:可代开通,保证通过。wx.getLocation接口(获取当前的地址位置) qq: 308205428 如何申请 当申请微信小程序的wx.getLocation接口权限时,你可以…

8.4 day05软件学习

文章目录 微服务的概念微服务的原则微服务的特征:集群介绍 spring aop 在家学习效率真不高,下午好兄弟喊出去玩,一直到晚上才回来,赶紧总结一下早上学习的内容。 继续看java基础进阶的思想,之前学的很多都忘了。 微服…

SQL基础复习与进阶

SQL进阶 文章目录 SQL进阶关键字复习ALLANYEXISTS 内置函数ROUND(四舍五入)TRUNCATE(截断函数)SEILING(向上取整)FLOOR(向下取整)ABS(获取绝对值)RAND&#x…

谷歌联合CMU提出全新语义金字塔概念,无需额外训练使LLMs学会执行视觉任务

​ 论文链接:https://arxiv.org/abs/2306.17842 代码仓库:https://github.com/google-research/magvit/ 在目前的大模型社区中,发展较为成熟的当属以ChatGPT为代表的纯语言模型(LLMs),以GPT-4为代表的多模态…

iOS——Block one

块类似于匿名函数或闭包,在许多其他编程语言中也存在类似的概念。 可以访问上下文,运行效率高 Block 以下是块的一些基本知识: 块的定义:块是由一对花括号 {} 包围的代码片段,可以包含一段可执行的代码。块的定义使…

银河麒麟v10 vnc环境配置

方法一、启用自带远程桌面 银河麒麟默认已经自带远程桌面,如下图。此时即可用Realvnc Viewer访问该终端,仔细查看后自带的远程桌面是开源组件gnome-remote-desktopGNOME / gnome-remote-desktop GitLabhttps://gitlab.gnome.org/GNOME/gnome-remote-de…

13个ChatGPT类实用AI工具汇总

在ChatGPT爆火后,各种工具如同雨后春笋一般层出不穷。以下汇总了13种ChatGPT类实用工具,可以帮助学习、教学和科研。 01 / ChatGPT for google/ 一个浏览器插件,可搭配现有的搜索引擎来使用 最大化搜索效率,对搜索体验的提升相…

Kindling the Darkness: A Practical Low-light Image Enhancer论文阅读笔记

这是ACMMM2019的一篇有监督暗图增强的论文,KinD其网络结构如下图所示: 首先是一个分解网络分解出R和L分量,然后有Restoration-Net和Adjustment-Net分别去对R分量和L分量进一步处理,最终将处理好的R分量和L分量融合回去。这倒是很常…

【机器学习】Gradient Descent for Logistic Regression

Gradient Descent for Logistic Regression 1. 数据集(多变量)2. 逻辑梯度下降3. 梯度下降的实现及代码描述3.1 计算梯度3.2 梯度下降 4. 数据集(单变量)附录 导入所需的库 import copy, math import numpy as np %matplotlib wi…

备战秋招 | 笔试强训19

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、二分查找的时间复杂度() A. O(N*log(N)) B. O(N) C. O(log(N)) D. O(N^2) 2、有一个单向链表中有一个A、B两个相邻元素,有一个指针p指向元素A,现将…

谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

台式机/工控机通过网线共享笔记本电脑无线网络linux系统下 usb网卡的驱动安装

一、台式机/工控机通过网线共享笔记本电脑无线网络 1、 将台式机通过网线和笔记本连接。 2、 将笔记本的“本地连接”和“无线网络连接”的ipv4均设置为自动获取。 4.修改台式机的IP地址为如下(对应笔记本信息) IP地址为192.168.XXX.12 子网掩码为255.2…

弘扬“两弹一星”精神,勇攀科学技术高峰——道本科技商业大学党日活动圆满落幕

2023年8月2日,道本科技与商业大学携手举办了一场主题为“弘扬‘两弹一星’精神,勇攀科学技术高峰”的党日活动。本次活动旨在了解党领导下的中国核工业发展历程,传承和弘扬“两弹一星”精神,同时展示道本科技创新产品,…

【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…

如何使用vue ui创建一个项目?

首先打开cmd 输入vue ui 等待浏览器打开一个窗口,按照下图操作 在"功能页面"中,各个插件代表以下意思: Babel:Babel是一个JavaScript编译器,用于将ES6代码转换为向后兼容的JavaScript版本,以确保…

【计算机网络】数据链路层

文章目录 1. 数据链路层1.1 数据链路层简介1.2 数据链路层做了什么 2. 以太网协议2.1 以太网2.2 以太网帧的格式2.3 MAC地址2.4 MTU 3. 数据跨网络传输的整体过程4. ARP协议4.1 认识ARP协议4.2 ARP协议的格式4.3 ARP协议的工作流程 1. 数据链路层 1.1 数据链路层简介 数据链路…

ELK 企业级日志分析系统

ELK 企业级日志分析系统 一、ELK 概述1.ELK 简介2.日志分析系统 二、为什么要使用 ELK1.原因:2.完整日志系统基本特征3.ELK 的工作原理 三、部署ELK1.ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)2.部署 Elasticsearch 软件&#x…

自然语言处理学习笔记(二)————语料库与开源工具

目录 1.语料库 2.语料库建设 (1)规范制定 (2)人员培训 (3)人工标注 3.中文处理中的常见语料库 (1)中文分词语料库 (2)词性标注语料库 (3…

刷题笔记 day7

力扣 209 长度最小的子数组 解法:滑动指针(对同向双指针区间内的数据处理) 1)先初始化 两个指针 left ,right。 2)右移指针right的同时使用sum记录指针right处的值,并判断sum的值是否满足要求&…