版本介绍
Centos7.9
Python版本:python3.8.12
flask2.0.2
以下操作使用ROOT权限执行
一、 更新系统系统软件包
1 yum update -y
二、安装软件管理包和可能使用的依赖
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
三、安装Python
1. 下载Pyhton3到/usr/local 目录
cd /usr/local
wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
2. 解压并进入解压的文件夹
tar -zxvf Python-3.8.12.tgz
cd Python-3.8.12
3. 编译安装到指定路径
./configure --prefix=/usr/local/python3
4. 安装python3
make && make install
5. 建立软链接直接使用python3和pip
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3
6. (可选步骤)覆盖掉原来的python2.7的软链接直接使用python3和python3的pip
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip
注意:本步骤操作需要删除python2.7的软连接原有的文件,不然会报:“ln: failed to create symbolic link ‘/usr/bin/python’: File exists” 错误,提示已经存在。
7. 输入命令查看是否安装成功,成功后会显示版本
Python3
pip3 -v
四、安装virtualenv ,方便不同版本项目管理。
1. 安装virtualenv
pip3 install virtualenv
2. 建立软链接、
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
3. 安装成功在根目录data文件夹下建立两个文件夹,主要用于存放env和网站文件的。
mkdir -p /data/env
mkdir -p /data/wwwroot
4. 切换到/data/env/下,创建指定版本的虚拟环境。
cd /data/env/
virtualenv --python=/usr/bin/python3 pyweb
5. 启动虚拟环境
cd /data/env/pyweb/bin
source activate
6.当最左边出现(pyweb),说明是已经进入虚拟环境。
五、安装uwsgi
pip3 install uwsgi
注意:uwsgi要安装两次,系统和虚拟环境都要安装。
六、 将flask项目上传到服务器
1. 导出本地flask依赖包(在本地项目操作)
pip freeze >requirements.txt
2. 将项目文件上传到服务器,我这里用到的是Xftp直接将所有文件到 “/data/wwwroot”
3. 在虚拟环境安装包
requirements.txt 所在文件夹
pip install -r requirements.txt
七、虚拟机运行flask
python app.py
八、 配置uwsgi
1. 任意位置编写uwsgi配置文件,我是在项目根目录创建的 uwsgi.ini 文件
[uwsgi]
# localhost port 端口自定义
http=127.0.0.1:9000
# uwsgi 管理的项目入口文件
wsgi-file=/data/wwwroot/chati/app.py
# 管理的flask对象app
callable=app
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
2. 令启动运行uwsgi
uwsgi --ini uwsgi.ini
显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功
可能通过ps -ef|grep uwsgi 查看确认是否uwsgi启动.
**uwsgi常用命令:
#停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid
#重启uwsgi
uwsgi --reload uwsgi.pid
#后台运行,日志输出到指定文件
uwsgi --ini uwsgi.ini --daemonize /var/log/uwsgi.log
九、 安装nginx和配置nginx.conf文件
1. 下载,我这里下载的是1.21.6 你也可以去 http://nginx.org/ 查看更多你想要的版本
cd /home/
wget http://nginx.org/download/nginx-1.21.6.tar.gz
2. 解压
tar -zxvf nginx-1.21.6.tar.gz
3. 安装
cd nginx-1.21.6
./configure
make && make install
4.备份 nginx.conf, nginx一般默认安装好的路径为/usr/local/nginx,在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
5. 然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.(你的域名或直接改成服务器ip).com;
location / { # 将访问 / url时转发到下面的url,与前面设置的uwsgi端口一致
proxy_pass http://127.0.0.1:9000;
}
location /static/ {
alias /data/wwwroot/chati/static/; #静态资源路径
}
}
}
6. 启动nginx
cd /usr/local/nginx/sbin/
#你可以先执行下面命令检查配置文件是否有错,没有错就执行以下命令
./nginx -t
#执行启动nginx命令
./nginx
终端没有任何提示就证明nginx启动成功。你可以使用浏览器输入你的域名或者服务器ip查看网页是不是显示出来了。
**nginx常用命令
nginx -t #命令检查Nginx配置是否有错误
nginx -c /usr/local/nginx/nginx.conf #重新加载Nginx配置文件
service nginx restart #重启服务
nginx -s stop #快速停止或关闭Nginx
nginx -s quit #正常停止或关闭Nginx
nginx -s reload #配置文件修改重装载命令
**配置过程中可能会用到Linux命令
# 查看端口运行的进程任务 进程pid
lsof -i :80
# 杀死进程
kill -9 pid
# 杀死运行的服务
pkill -9 nginx(服务名)
# 管道过滤查询
ps -ef | grep nginx
九、flask启用SSL证书(https域名)
1. 进入之前我们下载nginx的源码目录
cd /home/nginx-1.21.6/
2. 安装PCRE库
yum -y install pcre
3. 安装SSL
yum -y install openssl openssl-devel
4. 依次执行下面两行代码重新编译一下
./configure
./configure --with-http_ssl_module --with-http_v2_module
5. 执行make
make
注意:是make而不是make install
6. 备份原来的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
7. 将新的 nginx 覆盖旧安装目录
cp objs/nginx /usr/local/nginx/sbin/nginx
如果报错,刚用执行下面的命令覆盖
cp -rfp objs/nginx /usr/local/nginx/sbin/nginx
注意:提醒 “cp: overwrite ‘/usr/local/nginx/sbin/nginx’?” 输入y 回车
8. ssl证书下载后有两个文件。一个是扩展名为.pem的文件,一个是扩展名为.key的文件。.pem文件中已经包含服务器证书和CA中间证书,第一段为服务器证书,第二段为CA中间证书,可以使用文本编辑器自行提取。.key文件是证书私钥。这里我们直接把域名证书复制到网站根目录里去就行。
9. 配置nginx.conf文件。
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 443 ssl http2;
server_name www.你的域名.com 你的域名.com;
root /data/wwwroot/chati;#项目路径
charset utf-8;
ssl_certificate /data/wwwroot/chati/你的pem文件.pem;#.pem证书路径
ssl_certificate_key /data/wwwroot/chati/你的key文件key;#.key证书路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
location / { # 将访问 / url时转发到下面的url
proxy_pass http://127.0.0.1:9000;
}
location /static/ {
alias /data/wwwroot/chati/static/; #静态资源路径
}
access_log /data/wwwroot/chati/nginx.log;
error_log /data/wwwroot/chati/nginx.error.log;
}
}
注意证书的路径,需要将原来的80端口,修改成443,然后再加一些SSL证书配置,对比前面的nginx的配置进。
10、测试配置文件是否正确
/usr/local/nginx/sbin/nginx -t
如果没有报错则重启nginx即可。
/usr/local/nginx/sbin/nginx -s reload
注意:使用https时,要开启服务器的443端口,如果开启了服务器还不能访问,可能需要到服务器提供商后台安全组给端口放行。
本文是我自己一点一点通过自己服务器测试出来,然后编写步骤,我踩了很多坑才调试成功,如有哪些地方错误请在下方留言。
如果你觉得我的文章写的很好请帮我点赞谢谢!!