选择云服务器部署的优点:
注意: 云服务器刚开始需要创建一个快照:保存当前的状态,可以利用快照还原到当前正常的状态。还需要将云服务器的常用的端口打开(安全组规则部分),常用端口包括:
前面这部分是使用阿里云服务器的前期注意事项,后面的项目部署到阿里云服务器和本地服务器操作都一样。
Xshell 是一个强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。主要用于连接服务器。
安装依赖包
# 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
下载 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
安装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
# 安装虚拟环境库
sudo apt-get install python3-pip
pip3 install pipenv
# 创建项目的虚拟环境
mkdir flask-project
cd flask-project
pipenv shell
FileZilla是用于从本地项目文件上传到服务器中的一个可视化工具APP,同样的也可以使用git工具将项目代码文件推送到github或者码云gitee上面,再使用服务器从github或者gitee上面下载下来。FileZilla相比较来说简单。
# 到导出本地虚拟环境中需要安装的库
pip freeze > requirements.txt
此时requirements.txt文件也已经上传完成
# 将本地环境安装到服务器上
pip install -r requirements.txt
会自动执行安装完成所有虚拟环境中的版本库
# 创建数据库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
此时映射成功,但是数据库中没有数据,可以将测试数据导出到服务器中:
上传本地数据库导出的文件bbs.sql
# 执行导入bbs.sql的文件数据
source /home/jingwan/Documents/bbs.sql
# 需要先设置端口和host
vim bbs.py
# 项目启动
python bbs.py
设置端口和host
# bbs.py
if __name__ == '__main__':
app.run(debug=True, port=开放端口, host=0.0.0.0)
目前项目启动正常运行,但是现在的项目的运行能力太弱,访问量提升之后就会崩溃,因为是单线程运行的项目,为了提高项目的并发能力,此时需要使用到nginx和uwsgi
uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成, 他也可以充当静态文件服务器,但不是他的强项。通过
pip3 install uwsgi
安装就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。然后创建一个叫做uwsgi.ini的配置文件:
依赖环境:
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
uwsgi --ini uwsgi.ini
安装运行过程中出现的问题可以参考:https://blog.csdn.net/weixin_42118531/article/details/106505594
虽然uwsgi可以正常的部署我们的项目了。但我们还是依然要采用nginx来作为web服务器。使用nginx来作为web
服务器有以下好处:
安装
通过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
路径:/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
# /etc/nginx/nginx.conf
sudo vim /etc/nginx/nginx.conf
# xxx是本机的root权限的用户名
user xxx;
开启redis服务,用于验证码存储
# 开启redis
redis-server
每次修改完了配置文件,都要记得运行
# 重启nginx
systemctl restart nginx
# 运行项目
uwsgi --ini uwsgi.ini