项目部署 1. 环境搭建 不使用 Anaconda 可直接跳到创建虚拟环境 1.1 Anaconda 下载 1.2 Anaconda 安装
下载好后传到Linux
安装 root@iZwz9ijwralw5z37wd16xsZ:~# bash ~/Downloads/Anaconda3-5.3.1-Linux-x86_64.sh
回车安装到默认路径即可
建议输入yes,输入No的话还需要自己手动添加路径,否则conda将无法正常运行
是否安装VSCode,随便,我这里不安装
启动服务 root@iZwz9ijwralw5z37wd16xsZ:~# source ~/.bashrc
输入conda list , 安装成功会显示包名 1.3 环境配置
创建 anaconda 环境
conda create -n name python版本号 root@iZwz9ijwralw5z37wd16xsZ:~# conda create -n MyDjango python=3.6.2 1.4 创建虚拟环境下载虚拟环境pip包 pip install virtualenv pip install virtualenvwrapper 修改 .bashrc 文件 vim ~/.bashrc # 添加下面代码 export WORKON_HOME=$HOME/.virtualenvs export PROJECT_HOME=$HOME/workspace source /usr/local/bin/virtualenvwrapper.sh # 使 .bashrc 生效 source ~/.bashrc
使用 anaconda环境/python环境 创建新虚拟环境 mkvirtualenv --python=‘指定路径’ 环境名称 eg: mkvirtualenv --python='/root/anaconda3/envs/MyDjango/bin/python' MyDjango默认情况下,新创建的环境将会被保存在/Users/<user_name>/anaconda3/env目录下,其中,<user_name>为当前用户的用户名。
进入虚拟环境 workon MyDjango 2. 项目拉到服务器 2.1 项目迁移 2.1.1 方法一(Xftp)通过 Xftp 将项目文件从本机直接拉到服务器 服务器安装git apt-get install git 通过 git clone 命令将仓库克隆到服务器 2.2 安装项目依赖包在本机项目中通过 pip freeze > requirement.txt 命令将项目所需包输出到 requirement.txt 文件中 服务器端项目中。通过 pip install -r requirements.txt 命令安装包 3. uwsgi遵循 wsgi 协议的 web 服务器 pip install uwsgi 3.2 uwsgi 的配置
项目部署时,需要修改 settings.py 文件 DEBUG=FALSE ALLOWED_HOSTS=['*']
在项目中新建一个文件 uwsgi.ini,方便启动/终止 uwsgi 服务 [uwsgi] # 使用nginx链接时使用 # socket=127.0.0.1:8000 # 直接做web服务器使用 python manage.py runserver ip:port http=127.0.0.1:8000 # 项目目录 [pwd查看 直接填,不需要引号] chdir= # 项目中wsgi.py文件的目录,相对于项目目录 wsgi-file= # 指定启动的工作进程数 processes=4 # 指定工作进程中的线程数 threads=2 # 进程中,有一个主进程 master=True # 保存启动之后主进程的pid pidfile=uwsgi.pid # 设置uwsgi后台运行, uwsgi.log 保存日志信息 daemonize=uwsgi.log # 设置虚拟环境的路径 [cd .virtualenvs] virtualenv=下面是我的uwsgi.ini 文件配置,可以参考一下。 [uwsgi] # 使用nginx链接时使用 socket=127.0.0.1:8000 # 直接做web服务器使用 python manage.py runserver ip:port # http=127.0.0.1:8000 # 项目目录 [pwd查看 直接填,不需要引号] chdir=/root/MyDjango # 项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=MyDjango/wsgi.py # 指定启动的工作进程数 processes=4 # 指定工作进程中的线程数 threads=2 # 进程中,有一个主进程 master=True # 保存启动之后主进程的pid pidfile=uwsgi.pid # 设置uwsgi后台运行, uwsgi.log 保存日志信息 daemonize=uwsgi.log # 设置虚拟环境的路径 [cd .virtualenvs] virtualenv=/root/.virtualenvs/MyDjango 3.3 uwsgi 的启动和停止启动: uwsgi --ini 配置文件路径 例如: uwsgi --ini uwsgi.ini 启动后,ps aux | grep uwsgi 命令可以查看uwsgi 进程 停止: uwsgi --stop uwsgi.pid 路径 例如: uwsgi --stop uwsgi.pid 这里有一个小问题,如果遇到可以看一下解决方法 问题: 执行启动后,报错信息 uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory 解决方法: sudo apt-get install libpcre3 libpcre3-dev # 安装需要的包 find / -name libpcre.so.3 # 找到libpcre.so.3(一般在根目录/lib/x86_64-linux-gnu下) 找到 /lib/x86_64-linux-gnu/libpcre.so.3 sudo ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /usr/lib/libpcre.so.1 # 做软链接即可 仅仅使用uwsgi,首页的静态文件不能显示 解决方法: 在uwsgi前面在加一个nginx服务器 nginx中进行配置
如果是动态请求,转交请求给uwsgi
如果是静态请求,提前把项目用到的静态文件放到nginx所在电脑的某个目录中 根据配置,nginx就会去目录下方找到静态文件,直接返回给用户 4. nginx
uwsgi 需要更改配置文件 [uwsgi] # 使用nginx链接时使用 socket=127.0.0.1:8080 # 直接做web服务器使用 python manage.py runserver ip:port # http=127.0.0.1:8080 # 项目目录 [pwd查看 直接填,不需要引号] chdir= # 项目中wsgi.py文件的目录,相对于项目目录 wsgi-file= # 指定启动的工作进程数 processes=4 # 指定工作进程中的线程数 threads=2 # 进程中,有一个主进程 master=True # 保存启动之后主进程的pid pidfile=uwsgi.pid # 设置uwsgi后台运行, uwsgi.log 保存日志信息 daemonize=uwsgi.log # 设置虚拟环境的路径 [cd .virtualenvs] virtualenv=
nginx配置转发请求给 uwsgi,配置路径为 /etc/nginx/sites-available/default http{ server { listen 80; server_name localhost; location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交请求给uwsgi uwsgi_pass 127.0.0.1:8000 # uwsgi服务器的ip:port } } }
下面是我的 default 配置信息,加了静态文件处理【静态文件处理请继续往下看】,可以参考一下 upstream MyDjango { server 127.0.0.1:8000; } server { listen 80; server_name localhost; location / { include uwsgi_params; uwsgi_pass MyDjango; } location /static { alias /var/www/MyDjango/static; } }ps aux | grep nginx # 查看是否有nginx进程 启动nginx /etc/init.d/nginx start 【终止命令为: /etc/init.d/nginx stop】 也可以用如下命令 启动uwsgi uwsgi --ini uwsgi.ini 4.2 nginx配置处理静态文件 http{ server { listen 80; server_name localhost; location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交请求给uwsgi uwsgi_pass 127.0.0.1:8080 # uwsgi服务器的ip:port; } # 请求的路径中以static开头,就匹配下列地址 location /static { # 指定静态文件存放的目录 alias 目录 例如: /var/xxx/static; /var/www/MyDjango/static; } } }
重启nginx服务 /etc/init.d/nginx reload 到这里,项目就部署完成了,还有其他需求可以继续往下看。 4.3 nginx转发请求给另外地址
在 location 对应的配置项中增加 proxy_pass 转发的服务器地址, 如当用户访问 127.0.0.1 时,在nginx 中配置把这个请求转发给 172.10.179.115:80(nginx)服务器,让这台服务器提供静态页面
nginx配置如下: http{ server { listen 80; server_name localhost; location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交请求给uwsgi uwsgi_pass 127.0.0.1:8080 # uwsgi服务器的ip:port; } # 请求的路径中以static开头,就匹配下列地址 location /static { # 指定静态文件存放的目录 alias 目录 例如: /var/xxx/static; } # 等号为精确匹配 location = / { # 传递请求给静态文件服务器上的nginx proxy_pass http://ip; } } } 4.4 nginx 配置 upstream 实现负载均衡
nginx 配置负载均衡时,在 server 配置的前面增加 upstream 配置项 http{ # 名称随便起 upstream ruochen { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name localhost; location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交请求给uwsgi # uwsgi_pass 127.0.0.1:8080 # uwsgi服务器的ip:port; uwsgi_pass ruochen; # 上面名字是啥,这里就是啥 } # 请求的路径中以static开头,就匹配下列地址 location /static { # 指定静态文件存放的目录 alias 目录 例如: /var/xxx/static; } # 等号为精确匹配 location = / { # 传递请求给静态文件服务器上的nginx proxy_pass http://ip; } } }【生长吧!Python】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/278897 (责任编辑:) |