Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)

1、服务器

选择云服务器部署的优点:

  • 为了固定的IP
  • 本地的IP是一个动态分配的IP地址,重启路由之后可能会变
    Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第1张图片

注意: 云服务器刚开始需要创建一个快照:保存当前的状态,可以利用快照还原到当前正常的状态。还需要将云服务器的常用的端口打开(安全组规则部分),常用端口包括:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第2张图片

  • 3306端口是用于数据库MySQL的连接;
  • 6379是Redis数据库的连接;
  • 22端口一般是服务器连接的端口;
  • 80端口在默认情况下是WWW服务的端口;
  • 23端口是远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的操作系统;
  • 3389端口超级终端;
  • 同时需要开放自己项目中设置的端口号;
    Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第3张图片

前面这部分是使用阿里云服务器的前期注意事项,后面的项目部署到阿里云服务器和本地服务器操作都一样。

Xshell软件使用

Xshell 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。主要用于连接服务器。

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第4张图片
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第5张图片
输入账号密码后连接成功服务器。

2、安装配置服务器环境

1. 安装Python3.7(非必须的)

安装依赖包

# Centos系统服务器安装命令
yum install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

# Ubuntu系统服务器安装命令
apt-get install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

下载Python源码并安装

# Centos系统服务器安装命令
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz 
tar -xzvf Python-3.7.3.tgz -C /tmp 
cd /tmp/Python-3.7.3

把Python3.7安装到 /usr/local目录

# Centos系统服务器
./configure --prefix=/usr/local make make altinstall # 这一步比较耗时

更改/usr/bin/python链接

# Centos系统服务器
ln -s /usr/local/bin/python3.7 /usr/bin/python3 ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

Ubuntu系统服务器安装Python命令

# Ubuntu系统服务器安装命令
# 1.安装依赖库,命令行输入:
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
# 创建文件夹
mkdir -p /etc/python3.7
# 进入文件夹
cd /etc/python3.7
# 下载文件
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
# 解压文件
sudo tar xzf Python-3.7.3.tgz
# 编译python源
cd Python-3.7.3
sudo ./configure --enable-optimizations --prefix=/etc/python3.7
sudo make altinstall
# 建立python3.7的软链接
ln -s /etc/python3.7/bin/python3.7 /usr/bin/python3.7
ln -s /etc/python3.7/bin/pip3.7 /usr/bin/pip3.7
# 将/etc/python3.7/bin加入PATH
vim ~/.bash_profile
# 进入指定文件后,键盘按下 i 进入 insert 模式,添加如下内容,然后键盘按下 ESC ,再输入 ZZ (注意是大写)
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/etc/python3.7/bin
export PATH

激活配置

# 激活配置
source ~/.bash_profile
# 查看Python的版本:
python3.6
# 检测pip3是否存在
pip3 -V

2. 安装MySQL和Redis

1. Centos系统安装MySQL、Redis

下载 MySQL yum包

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

安装MySQL源

rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

安装MySQL服务端,需要等待一些时间

yum install -y mysql-community-server

启动MySQL

# Centos系统服务器
systemctl start mysqld.service

检查是否启动成功

# Centos系统服务器
systemctl status mysqld.service

获取临时密码,MySQL5.7为root用户随机生成了一个密码

# Centos系统服务器
grep 'temporary password' /var/log/mysqld.log

通过临时密码登录MySQL,进行修改密码操作

mysql -uroot -p

因为MySQL的密码规则需要很复杂,我们一般自己设置的不会设置成这样,所以我们全局修改一下

# Centos系统服务器
mysql> set global validate_password_policy=0; 
mysql> set global validate_password_length=1; 
# 修改密码 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';

授权其他机器远程登录

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION; 
# 刷新权限
FLUSH PRIVILEGES;

设置MySQL的字符集为UTF-8,令其支持中文

# Centos系统服务器
vim /etc/my.cnf 

[mysql] default-character-set=utf8

重启MySQL,查看MySQL运行状态

# 重启MySQL
systemctl restart mysqld.service
# 查看MySQL运行状态
ps -aux|grep mysqld

安装Redis

# Centos系统服务器
# 安装redis
yum install redis 
# 开启redis
systemctl start redis

# Ubuntu系统服务器
sudo apt-get install redis 

连接Redis

redis-server
redis-cli

2. Ubuntu 系统安装MySQL、Redis

安装MySQL源

Ubuntu系统需要先添加MySQL APT仓库,参考:[Ubuntu安装Mysql](https://www.cnblogs.com/zxhyJack/p/8596864.html)
```shell
# Ubuntu系统服务器
先在http://dev.mysql.com/downloads/repo/apt/.下载MySQL APT repository 文件
# 用命令安装刚才下载的文件(需要进入文件所在的目录)
sudo dpkg -i mysql-apt-config_0.8.9-1_all.deb
#在软件包安装过程中要选择MySQL服务器和其他组件的版本,这里选择ok即可
sudo apt-get update
sudo apt-get upgrade

安装MySQL服务端,需要等待一些时间

# Ubuntu系统服务器
sudo apt-get install mysql-server mysql-client

启动MySQL

# Ubuntu系统服务器
sudo service mysql start

# 查看状态
sudo service mysql status

登录MySQL查看状态

mysql -uroot -p

授权其他机器远程登录

# 修改绑定ip
sudo vim /etc/mysql/my.cnf.d/my.cnf
bing  0.0.0.0          # 初始信息绑定的是127.0.0.1

# 授权其他ip
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION; 
# 刷新权限
FLUSH PRIVILEGES;

设置MySQL的字符集为UTF-8,令其支持中文

# Ubuntu系统服务器
sudo stop mysql
sudo pip install vim
sudo vim /etc/mysql/my.cnf.d/my.cnf

# 【mysqld】在 /etc/mysql/mysql.conf.d/mysqld.cnf
在 【mysqld】下追加:
character-set-server=utf8
# 【mysql】 在 /etc/mysql/conf.d/mysql.cnf
在 【mysql】 下追加:
default-character-set=utf8

重启MySQL,查看MySQL运行状态

# 重启MySQL
service mysql restart
# 查看字符集修改设置
mysql -u root -p
show variables like '%character%';

# 另一种查询mysql的状态
ps -aux|grep mysql

安装Redis

# Ubuntu系统服务器
sudo apt-get install redis 

连接Redis

redis-server
redis-cli

3、安装项目虚拟环境

# 安装虚拟环境库
sudo apt-get install python3-pip
pip3 install pipenv 

# 创建项目的虚拟环境
mkdir flask-project
cd flask-project
pipenv shell

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第6张图片

4、FileZilla上传项目文件

FileZilla是用于从本地项目文件上传到服务器中的一个可视化工具APP,同样的也可以使用git工具将项目代码文件推送到github或者码云gitee上面,再使用服务器从github或者gitee上面下载下来。FileZilla相比较来说简单。

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第7张图片
将本地的环境导出,以便在服务器上安装

# 到导出本地虚拟环境中需要安装的库
pip freeze > requirements.txt

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第8张图片
使用FileZilla上传所有项目文件:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第9张图片

1. 本地环境安装到服务器上

此时requirements.txt文件也已经上传完成

# 将本地环境安装到服务器上
pip install -r requirements.txt

会自动执行安装完成所有虚拟环境中的版本库

注意此时必须要先进入虚拟环境才行:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第10张图片

2.创建数据库demo_bbs,删除之前存在的映射记录文件,重新映射

# 创建数据库demo_bbs
create database demo_bbs charset=utf8;

# 删除原有的映射文件 
rm -rf migrations/ 


# 重新映射数据库
python manage.py db init 
python manage.py db migrate 
python manage.py db upgrade

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第11张图片
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第12张图片
此时映射成功,但是数据库中没有数据,可以将测试数据导出到服务器中:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第13张图片
上传本地数据库导出的文件bbs.sql
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第14张图片

3.导入bbs.sql的文件数据

# 执行导入bbs.sql的文件数据
source /home/jingwan/Documents/bbs.sql

4. 运行项目

# 需要先设置端口和host
vim bbs.py

# 项目启动
python bbs.py

设置端口和host

# bbs.py
if __name__ == '__main__':
    app.run(debug=True, port=开放端口, host=0.0.0.0)

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第15张图片
项目启动效果如下,正常运行:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第16张图片

5、nginx、uwsgi

目前项目启动正常运行,但是现在的项目的运行能力太弱,访问量提升之后就会崩溃,因为是单线程运行的项目,为了提高项目的并发能力,此时需要使用到nginx和uwsgi

1. 安装uwsgi

uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成, 他也可以充当静态文件服务器,但不是他的强项。通过

pip3 install uwsgi

安装就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。然后创建一个叫做uwsgi.ini的配置文件:
Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第17张图片
依赖环境:

sudo apt-get install -y gcc* pcre-devel openssl-devel

创建uwsgi.ini文件,即启动项目文件
路径:/home/jingwan/Documents/flask_test_project/Flask项目实战-BBS/ (注意是虚拟环境下)

# 创建uwsgi.ini,此时需要在虚拟环境中创建修改
sudo vim uwsgi.ini


# 将下面内容添加到uwsgi.ini中,下面的配置路径是我自己项目的路径,不同项目路径自己进行修改

[uwsgi] 
# 必须全部为绝对路径 
# 项目的路径 ,pwd指令中显示的路径
chdir = /home/jingwan/Documents/flask_test_project/Flask项目实战-BBS
# flask的wsgi文件 
wsgi-file = /home/jingwan/Documents/flask_test_project/Flask项目实战-BBS/bbs.py 
# 回调的app对象 
callable = app 
# Python虚拟环境的路径 , 进入到虚拟环境目录里面执行pipenv --venv得到 
home = /home/jingwan/.local/share/virtualenvs/flask_test_project-HkfaWnAB
# 进程相关的设置 
# 主进程 
master = true 
# 最大数量的工作进程 
processes = 10
# 项目中使用的端口 
http = :8886
# 设置socket的权限 最大权限是777
chmod-socket = 666 
# 退出的时候是否清理环境 
vacuum = true

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第18张图片
启动执行uwsgi.ini文件,同时项目也是启动状态:

uwsgi --ini uwsgi.ini

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第19张图片
安装运行过程中出现的问题可以参考:https://blog.csdn.net/weixin_42118531/article/details/106505594

2. 安装nginx

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

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

安装
通过sudo apt-get install nginx即可安装

# nginx简单操作命令
启动:sudo systemctl start nginx
关闭:sudo systemctl stop nginx
重启:sudo systemctl restart nginx

添加配置文件
/etc/nginx/conf.d目录下,新建一个文件,叫做bbs.conf

sudo vim /etc/nginx/conf.d/bbs.conf

然后将以下代码粘贴进去:

upstream bbs{ server 127.0.0.1:8886; }
# 配置服务器 
server {
        # 监听的端口号 
        listen 80;
        # 域名
        server_name 112.95.150.130;
        charset utf-8;
        # 最大的文件上传尺寸
        client_max_body_size 75M;
        # 静态文件访问的url 
        location /static {
        # 静态文件地址 
        alias /home/jingwan/Documents/flask_test_project/Flask项目实战-BBS/static;
        }
        # 最后,发送所有非静态文件请求到flask服务器
        location / {
        uwsgi_pass 127.0.0.1:8886;
        # uwsgi_params文件地址 
        include /etc/nginx/uwsgi_params;
        }
}

sudo nginx -t

在这里插入图片描述

如果不报错,说明成功。 每次修改完了配置文件,都要记得运行

systemctl start nginx

安装运行过程中出现的问题可以参考:https://blog.csdn.net/weixin_42118531/article/details/106505594

3. 修改所有配置

1----修改uwsgi.ini文件

路径:/home/jingwan/Documents/flask_test_project/Flask项目实战-BBS/ (注意是虚拟环境下)

[uwsgi] 
# 必须全部为绝对路径 
# 项目的路径 ,pwd指令中显示的路径
chdir = /home/jingwan/Documents/flask_test_project/Flask项目实战-BBS
# flask的wsgi文件 
wsgi-file = /home/jingwan/Documents/flask_test_project/Flask项目实战-BBS/bbs.py 
# 回调的app对象 
callable = app 
# Python虚拟环境的路径 , 进入到虚拟环境目录里面执行pipenv --venv得到 
home = /home/jingwan/.local/share/virtualenvs/flask_test_project-HkfaWnAB
# 进程相关的设置 
# 主进程 
master = true 
# 最大数量的工作进程 
processes = 10
# 项目中使用的端口 
# http = :8886
# 使用socket通信
socket  = 127.0.0.1:8886
# 设置socket的权限 最大权限是777
chmod-socket = 666 
# 退出的时候是否清理环境 
vacuum = true

2----修改配置文件/etc/nginx/nginx.conf参数

# /etc/nginx/nginx.conf

sudo vim /etc/nginx/nginx.conf 

# xxx是本机的root权限的用户名
user xxx;

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第20张图片

3----通过nginx运行启动项目

开启redis服务,用于验证码存储

# 开启redis
redis-server

每次修改完了配置文件,都要记得运行

# 重启nginx
systemctl restart nginx


# 运行项目
uwsgi --ini uwsgi.ini

Flask项目实战——13—(项目部署到阿里云服务器和本地服务器)_第21张图片

你可能感兴趣的:(Flask项目实战)