Flask-3实战高阶

291 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

环境搭建

虚拟环境pycharm连接

SSH 连接远程环境

教程:

image-20210127200156966

设置

image-20210127212257509

image-20210127204107813

image-20210127204115047

image-20210127204332900

image-20210127204338389

连接虚拟环境

选择虚拟环境的解释器:/root/workspaces/flask/bin/python

博客迁移

打包依赖

(flask) C:\Users\q2723\PycharmProjects\flaskProject9>pip freeze >requirements.txt

建虚拟环境

mkvirtualenv myblog
(myblog) [root@izbp1i7e0dqxcb89vkdgc3z ~]# which python
/root/workspaces/myblog/bin/python
[root@izbp1i7e0dqxcb89vkdgc3z tmp]# mkdir myproject
[root@izbp1i7e0dqxcb89vkdgc3z tmp]# cd myproject/
[root@izbp1i7e0dqxcb89vkdgc3z myproject]# mkdir flask_blog
[root@izbp1i7e0dqxcb89vkdgc3z myproject]# pwd
/tmp/myproject

设置 ssh 配置

image-20210127213501190image-20210127213503853

image-20210127213658469

他会自动同步

安装依赖

(myblog) [root@izbp1i7e0dqxcb89vkdgc3z flask_blog]# pip install -r requirements.txt 
(myblog) [root@izbp1i7e0dqxcb89vkdgc3z flask_blog]# pip list
Package          Version
---------------- ---------
alembic          1.4.3
antiorm          1.2.1
certifi          2020.12.5
chardet          4.0.0
.........

配置数据库

可以删除原来的 migration 文件夹

原来的项目没有设置 host

可以在启动的时候,加 -h

python app.py runserver -h 0.0.0.0

使用navicat迁移数据库(可选)

image-20210127220204364

需要提前在服务器建好同名数据库

我的阿里云服务器已经安装mysql5.7

[root@izbp1i7e0dqxcb89vkdgc3z ~]# cd /usr/local/mysql
[root@izbp1i7e0dqxcb89vkdgc3z mysql]# mysql
-bash: mysql: command not found
[root@izbp1i7e0dqxcb89vkdgc3z mysql]# alias mysql=/usr/local/mysql/bin/mysql
[root@izbp1i7e0dqxcb89vkdgc3z mysql]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@izbp1i7e0dqxcb89vkdgc3z mysql]# mysql -u root -p
Enter password: 

[root@izbp1i7e0dqxcb89vkdgc3z mysql]# sudo grep mysql_root_passwd /root/env.txt
mysql_root_passwd:xxxxxxxxx

mysql> create database flask;
Query OK, 1 row affected (0.00 sec)

#因为原来model文件article content数据类型不对
用mysql 语句修改
mysql> alter table article modify column content blob
    -> ;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

允许远程连接mysql

mysql> use mysql;
Database changed

mysql> select host from user where user='root';
+-----------+
| host      |
+-----------+
| localhost |
+-----------+
1 row in set (0.00 sec)

mysql> SET SQL_SAFE_UPDATES = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> update user set host = '%' where user ='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SET SQL_SAFE_UPDATES = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

需要更改 settings.py 文件

nohup命令说明:

  用途:不挂断地运行命令。

  语法:nohup Command [ Arg ... ] [ & ]

不建议使用

Nginx

image-20210128092658005

Nginx 是一个高性能的 HTTP 和方向代理服务器,也是一个 IMAP/POP3/SMTP 服务器

Nginx 也是一个轻量级服务器(Tomcat 属于重量级,Java 一般部署在 Tomcat)

Apache、Tomcat、Nginx

Tomcat:应用(Java)服务器,只是一个 Servlet 容器,可以认为是 Apache 的扩展,可以独立于 Apache 运行

Apache:

Nginx:

image-20210128095205120

  • 俄罗斯人编写轻量级 HTTP 服务器,发音‘engine X’
  • 抗并发,nginx 处理请求是异步非阻塞
  • 高度模块化
  • 反向代理,接受外网请求,转发给内网服务器,再将结果返回给外网请求的客户端
  • 负载均衡,通过方向代理服务器来优化网站的负载

作者:嘶吼

这三者统一的功能是都有网络代理服务,我想侧重于先说一下nginx。然后因为apache和tomcat都是以由apache组织开发,所以我会从几个方面来看看nginx与apache的部分区别。

Nginx

nginx是由一位来自俄罗斯的程序员Igor Sysoe所编写的十分轻量级的HTTP服务器。nginx,它的发音为“engine X”。是一个高性能基于HTTP和反向代理的服务器,当只有静态资源的时候,就可以使用nginx来做服务器,现在很流行的动静分离(普遍情况下,是需要动态资源和静态资源分开,将静态资源部署在nginx上,当如果是静态资源的请求来时,就直接到nginx配置的静态资源目录下面获取资源;如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离)就能通过nginx来实现。

· 具备高性能反向代理服务并属于轻量级的web服务器

反向代理

简单说就是利用代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时的代理服务器对外表现就属于一个反向代理服务器。

· 良好的扩展性,可以通过模块方式来进行功能扩展

· 较为灵活的负载均衡策略

轮询(默认)算法:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,则自动剔除故障机器,使用户访问不受到影响,个人觉得这个是最好的方法,但也有成本就是消耗机器的成本!实际情况中也验证了这一点,移动段的token!

· 抗并发的能力很强

Apache

Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

Tomcat

是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

如果请求是静态网页则由Apache处理,并将结果返回;如果是动态请求,Apache会将解析工作转发给Tomcat处理,Tomcat处理后将结果通过Apache返回。这样可以达到分工合作,实现负载均衡,提高系统的性能。

Apache和Nginx的部分功能相比较

异步能力:apache中也有异步模块支持异步功能,不过是阻塞性异步,而nginx是非阻塞性异步。

抗并发:nginx因为软件体积小,消耗主机资源少,抗并发能力是apache的3倍以上。

重量等级:apache配置相对nginx复杂,自身不支持动态页面。

漏洞缺陷:apache相对nginx的bug会少很多。

Nginx 以轻量的优点在慢慢取带重量级的Apache ,现在已经是主流。

正反向代理

img

  • 正向代理:翻墙就是正向代理
  • 反向代理:服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定

安装

image-20210128100926851

my.oschina.net/yueshengwuj…

#查找安装路径,默认都是这个路径
[root@izbp1i7e0dqxcb89vkdgc3z nginx-1.18.0]# whereis nginx
nginx: /usr/local/nginx
  • nginx 端口80

    /usr/local/nginx

    开机自启

  • apache 端口 8080

    cd /usr/local/apache

    开机自启

systemctl问题解决

# 问题
[root@izbp1i7e0dqxcb89vkdgc3z sbin]# systemctl restart ./nginx
Failed to restart .-nginx.service: Unit not found.

# 解决方法
在/etc/init.d/目录下新建文件,文件名为nginx;或者用命令在根目录下执"行:# vim /etc/init.d/nginx (注意vim旁边有一个空格),随后插入代码:

#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2
esac

# 接下来就依次操作以下命令:
cd /etc/init.d

chmod 755 /etc/init.d/nginx

chkconfig --add nginx

nginx控制

这样解决之后可以通过系统管理

systemctl status nginx 查看nginx状态

systemctl start nginx 启动

systemctl stop nginx 关闭

systemctl enable nginx 设置开机自启

systemctl disable nginx 禁止开机自启

或者进入 /usr/local/nginx 目录通过文件控制

image-20210128154944387

image-20210128155832300