在租了一台服务器后面对SSH的黑框框,一筹莫展,不知道该干些啥。由于是第一次部署服务器,一切都是新的开始,这篇博文是我自己摸索了一个多星期后终于搭建好之后的一个记录吧,服务器的系统来回重置了二十多次,招的各个文章总有各种各样的问题,不是太适用。 下面步入正题.
由于CentOs自带的Python是2.7的,我们的项目是用Python3写的,所以到安装Python3 首选安装依赖包
yum update yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y安装完依赖包之后,我们下载并解压Python3安装包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz tar -xvJf Python-3.7.0.tar.xz进入Python-3.7.0文件中
cd Python-3.7.0配置编译参数
./configure --prefix=/usr/python --enable-shared CFLAGS=-fPIC编译安装
make make install进入安装文件,拷贝
cp libpython3.7m.so.1.0 /usr/lib64制作软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3到这里,Python就安装完成了,大家可以输入
python3 --version来查看是否安装成功
下面我们安装虚拟环境
sudo pip3 install virtualenv sudo pip3 install virtualenvwrapper下面我们创建虚拟环境,切换到项目的文件夹
virtualenv env1 source env1/bin/activate安装flask以及依赖
pip3 install flask pip3 install uwsgi安装项目的拓展包,在项目组导出requirments.txt
pip3 freeze >requirements.txt在服务器上安装
pip3 install -r requirements.txt然后进行一些简单的测试,测试flask和uwgsi是否能够正常运作
我们先在项目目录下创建个简单的flask文件,如下hello.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World" if __name__ == "__main__": app.run(host='0.0.0.0')然后我们运行python3 hello.py 这时在浏览器中输入你服务器ip:5000,如果显示Hello World,则Flask是正常工作了 下面我测试uwsgi
我们使用uwsgi --socket 0.0.0.0:5000 --protocol=http -p 3 -w hello:app来启动uwsgi。 这时在浏览器中输入你服务器ip:5000,如果显示Hello World,则uwsgi是正常工作的。
下面我们来安装配置nginx,首先安装nginx
pip3 install nginx这样安装的nginx一般是在/usr/local/nginx下的 安装完我们进行配置,使用uwsgi+Nginx来部署flask项目 首先在项目目录下创建uwsgi.ini文件,并编辑
module = hello:app master = true processes = 3 chdir = /home/myproject/ socket = /home/myproject//myproject.sock socket = 127.0.0.1:5000 logto = /home/myproject/myproject.log chmod-socket = 660 vacuum = true然后通过配置文件的方式启动uwsgi: uwsgi --ini uwsgi.in 启动好之后我们这样是无法访问的,因为我们部署的是127.0.0.1:5000,需要用nginx来反向代理。我们来配置Nginx配置文件,创建nginx.ini并编辑
worker_processes 4; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; server { listen 80; server_name # 这里填你的域名,如果没有,可以把这行删掉 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; } } }在这里千万不要忘记在项目文件下创建一个uwsgi_params文件,同时编辑:
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_ADDR $server_addr; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;这是基本固定的,但是不能漏,一开始我部署的时候就是uwsgi可以正常使用,nginx也可以,两个加到一起就无法使用,这就是因为没写这个文件的缘故。 好了这就Nginx配置好了,我们启动Nginx
/usr/local/nginx/sbin/nginx -c /home/myproject/nginx.ini由于我们监听的是80端口,这时候你打开你服务器ip或者域名的时候,你就会看到Hello World. 这就是Flask+uwsgi+nginx+CentOS的一个简单的部署。
亓官劼 认证博客专家 Python 全栈 数据结构与算法 大家好,我是亓官劼(qí guān jié),在博客中分享数据结构与算法、Python全栈开发、Java后端开发、前端、OJ题解及各类报错信息解决方案等经验。一起加油,用知识改变命运,未来可期。若有事项需联系博主,可通过微信:qiguanjie2015 进行联系,有空会回复。