返回总目录页

10-flask博客项目

centos7 编译安装python3.7.1

 安装步骤

centos7自带python2,由于执行yum需要python2,所以即使安装了python3也不能删除python2
1.安装依赖包
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 libffi-devel

2.下载自己需要的python版本,例如python3.7.1,下载要花费一段时间,要耐心等待

yum -y install wget
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz

 

3.新建一个文件夹存放python3
mkdir /usr/local/python3 

 

4.把安装包移动到该新建文件夹下,解压安装包,安装python3,依次执行以下命令,花费时间较长,耐心等待

mv Python-3.7.1.tar.xz /usr/local/python3
tar -xvJf  Python-3.7.1.tar.xz
cd Python-3.7.1
./configure --prefix=/usr/local/python3
make  
make install

 

5.创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

6.此时python3已经装好,在命令行中输入python3测试


7.修改yum配置文件,python2与python3共存
vi /usr/bin/yum

把#! /usr/bin/python修改为#! /usr/bin/python2(配置文件第一行)
同理
vi /usr/libexec/urlgrabber-ext-down

把文件里面的#! /usr/bin/python 也修改为#! /usr/bin/python2
此时完成python3安装,且实现与python2共存,保持yum命令可用

下面是Ubuntu配置:

sudo apt-get install gcc

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

安装好之后将一些文件开头改成系统的python版本,避免冲突

vim /usr/lib/command-not-found

vim /usr/bin/gnome-terminal

 

安装过程详解

centos7自带python2,由于执行yum需要python2,所以即使安装了python3也不能删除python2
1.安装依赖包
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 libffi-devel

开发工具包组没安装上,下面的包都装上了

2.下载自己需要的python版本,例如python3.7.1,下载要花费一段时间,要耐心等待

yum -y install wget
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz

 

3.新建一个文件夹存放python3
mkdir /usr/local/python3 

 

4.把安装包移动到该新建文件夹下,解压安装包,安装python3,依次执行以下命令,花费时间较长,耐心等待

mv Python-3.7.1.tar.xz /usr/local/python3

cd  /usr/local/python3
tar -xJf  Python-3.7.1.tar.xz
cd Python-3.7.1
./configure --prefix=/usr/local/python3
make  
make install

 

 

 

5.创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

6.此时python3已经装好,在命令行中输入python3测试

7.(可选,我没做)修改yum配置文件,python2与python3共存
vi /usr/bin/yum

把#! /usr/bin/python修改为#! /usr/bin/python2(配置文件第一行)
同理
vi /usr/libexec/urlgrabber-ext-down

把文件里面的#! /usr/bin/python 也修改为#! /usr/bin/python2
此时完成python3安装,且实现与python2共存,保持yum命令可用

下面是Ubuntu配置:

sudo apt-get install gcc

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

安装好之后将一些文件开头改成系统的python版本,避免冲突

vim /usr/lib/command-not-found

vim /usr/bin/gnome-terminal

 8、将编译好的python3迁移到主机2中使用

查看主机2,确认没有

 只需要编译安装产生的文件,不需要压缩包和解压文件

 新主机中检查没有python3,创建软连接。

 还是没有

 链接错地方了,额,我是放到opt下面了。重新创建链接就可以了。

 写个程序都是正常执行

 上面那个开发包组没装上,也可能我安装系统时添加了的,所以并没有收到影响

 Linux上创建python虚拟环境步骤总结

1、安装virtualenv\virtualenvwrapper
pip3 install virtualenv
pip3 install virtualenvwrapper

2、进入.bashrc文件中,定义virtualenwrapper路径
vim ~/.bashrc 
在文末张填入以下代码并保存

VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3 #指定virtualenvwrapper执行的python版本
export WORKON_HOME=$HOME/.virtualenvs #指定虚拟黄金存放目录,.virtualenvs目录名可自拟
source /usr/local/bin/virtualenvwrapper.sh #virtualenvwrapper.sh所在目录

3、运行.bashrc文件
source ~/.bashrc

4、创建虚拟环境

mkvirtualenv mcwenv1

也可指定虚拟环境的python版本
mkvirtualenv --python=/usr/bin/python3 mcwenv2

 Linux上创建和使用python虚拟环境详情

配置虚拟环境

如果pip3版本太低,可以先更新一下

[root@mcw01 python3]# pip3 -V
pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
[root@mcw01 python3]# pip3 install --upgrade pip 
Collecting pip
  Downloading https://files.pythonhosted.org/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl (2.1MB)
    100% |????????????????????????????????| 2.1MB 1.5MB/s 
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-22.3.1
[root@mcw01 python3]# 

查看当前安装的包

1、安装virtualenv\virtualenvwrapper
pip3 install virtualenv
pip3 install virtualenvwrapper

2、进入.bashrc文件中,定义virtualenwrapper路径
vim ~/.bashrc
在文末张填入以下代码并保存

VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3 #指定virtualenvwrapper执行的python版本
export WORKON_HOME=$HOME/.virtualenvs #指定虚拟黄金存放目录,.virtualenvs目录名可自拟
source /usr/local/bin/virtualenvwrapper.sh #virtualenvwrapper.sh所在目录

3、运行.bashrc文件
source ~/.bashrc

4、创建虚拟环境

mkvirtualenv mcwenv1

也可指定虚拟环境的python版本
mkvirtualenv --python=/usr/bin/python3 mcwenv2

5. 查看虚拟环境和进入虚拟环境

 

 

Linux中创建python虚拟环境

workon  #查看建立的虚拟环境

 

创建虚拟环境和查看虚拟环境。创建的虚拟环境根据我们的配置,是创建在这个目录下,按照虚拟环境的名称创建一个目录,下面有bin和lib目录,lib目录只有安装包目录,安装包中只有部分包

 对比查看新建的虚拟环境包情况。前面带有括号,括号里面有名字的,就是当前进入了python虚拟环境中,括号里面名字就是虚拟环境名字。

pycharm中使用linux中的python解释器环境

 在虚拟环境中直接用python3,是找的虚拟环境的python3

创建一个新项目,我们不选择笔记本上的解释器,选择更多里面的

 

 弹出框中,我们不少点击虚拟环境,而是选择ssh解释器。将Linux远程服务器ssh方式连接的地址信息写上。点击下一步。

 输入服务器密码,点击下一步

 我们先选择使用安装的python3的解释器,没有使用虚拟环境的解释器

我们可以看到创建项目那里 ,就有了远程的python3解释器,有sftp连接,ip端口路径等信息。远程项目目录位置,这里远程服务器目前tmp目录下没有这个目录,我们点击创建,会同时在服务器这个设置的tmp目录下创建一个目录,存放我们创建的项目

 报错了,它可能是找的pip,而不是pip3,而我们这里是没有pip的

 但是目录已经创建成功了

 我们先做个链接试试

第一次是上传失败,做完软链接给pip后,就成功在本地创建了项目文件,并将本地项目文件上传上去和在远程Linux主机上创建了目录,项目结构是相同的。当前项目下的两个目录都还没有文件

 我们查看一下终端,还是在我们的windows上

虽然解释器已经是显示Linux上的了,但是终端上并不能操作,还是windows的

 

 此时我们在pycharm设置中安装pymysql

 报错了,可是我用的就是这个python解释器的呀

 直接在服务器上也是可以安装的

 重新刷新pycharm上的包,可以看到刚刚从Linux上安装的requests

 我在其它项目中也无法使用安装,可能跟pychram这里有关,它找的pip可能是pycharm里面的pip

 

讲解
PyCharm 依赖于 --build-dir 安装第三方库,但该标志在 20.2 版本以后的版中已被删除。

解决办法
命令行中切换到虚拟环境的路径,并使用 activate 切换为虚拟环境。
输入命令 python -m pip install pip==20.2.4 来切换 pip 的版本。如下图所示:

 在远程服务器上给pip降低版本

 在这个项目中再次点击安装

我们可以看到在pycharm设置中安装,成功将包安装到远程Linux服务器上

 在Linux服务器上我们可以看到,跟之前相比已经多了pymysql了

pycharm中查看远程主机的的信息

可参考下面链接 pycharm 连接远程主机的过程  https://www.jianshu.com/p/342d9f2cc257

我们也可以在pycharm中直接连接上Linux服务器

 随便选一个点击更多

 可以测试连通性,查看连接信息

 查看映射目录,本地路径是windows上项目目录

 点击第二个可以看到,显示出部署目录,也就是Linux远程服务器中创建的项目目录

在add解释器时,我们可以设置是否sudo使用root权限执行,是否自动生成项目文件到服务器

pycharm中使用linux中的python虚拟环境以及配置空目录也能上传的设置

 创建新项目,和前面的一样,只是使用python虚拟环境解释器

 使用虚拟环境中的python解释器

指定虚拟环境中的python解释器,服务器tmp下面没有xiaomaguohe目录,让新建的项目在在tmp下创建这个目录并存放我们的项目

pip版本高于22.2.我们再降级,给它。防止pycharm使用pip出现问题

 python -m pip install pip==20.2.4

 先查看一下当前环境。虚拟环境中python3是python的软件链接,python是python3安装目录中python3.7的软连接。环境中的pip和pip3都不是软连接,是文件。也就是pip是可以单独升级,python解释器是不能单独按照虚拟环境来升级

 成功给pip降版本

 然后在pycharm那里点击创建项目,项目在pycharm中创建成功,但是Linux远程服务器上创建了目录但是没有创建程项目文件

 我右击上传试试

 报错了

 选中项目目录试试

 还是报错

 我自己的设置了自动同步的

 我这里设置从根设置成Linux项目目录,结果上传了一个app文件上去,明显不行的

 这样配置也是不行

 我们也可以在工具里面打开配置和点击上传下载

 也可以在项目目录右击里面点上传下载

点击同步,只同步一个文件

看一下部署选项

 勾选一下创建空目录

 再次点击上传,会将选中的空目录创建出来

 我们在服务器中可以看到已经创建了空目录了

 当我们选中项目文件名,点击工具部署中的上传,会将项目目录下的所有文件都上传,是空目录的会也会创建空目录。而由上面可知,如果选中的是项目目录下的某个目录,即使是空目录,也是会创建空目录的。

 

 

 我们修改后没有自动上传,我们手动上传试试

 上面那个不行,点击下面这个试试

 它会标出异同点,我点击上传

 然后看到服务器上已经改了

 我点击上传试试

 可以看到上传成功

执行一下,没有模块

我们是使用的虚拟环境解释器

 所以我们需要进入虚拟环境去执行,可以正常运行

或者是直接使用虚拟环境解释器去启动也是可以成功的

python虚拟环境增删查进退管理

创建虚拟环境(如果不指定,使用我们配置的虚拟环境解释器吧。应该是VIRTUALENVWRAPPER_PYTHON)

  • mkvirtualenv --python=/usr/bin/python3 虚拟环境名

删除虚拟环境

  •  rmvirtualenv 虚拟环境名

查看虚拟环境

  • workon
  • lsvirtualenv

进入虚拟环境(激活虚拟环境)

  • workon 虚拟环境名称
  • source activate  虚拟环境名称  (activate如果不能在路径里找的,那得使用全路径。不接虚拟环境,默认进入第一个)

退出虚拟环境

  • deactivate

下面是查看,进入和退出

 

查看有两种方式

 创建和删除虚拟环境。创建好虚拟环境,默认会进入这个虚拟环境,要想删除这个虚拟环境,需要退出虚拟环境再进行删除。

激活命令activate,虚拟环境里面有这个命令,python环境没有看到

 

 

 将博客项目上传到服务器上

生成项目依赖包文件
将项目需要的依赖包查出来,将包数据追加生成到一个文件中去,里面就是包名==版本号的方式
pip freeze > requirements.txt

pip install -r requirements.txt

 已经生成文件

 不过它好像是把你这个环境下的所有包都写到文件中去了。不会说你在这个环境中安装了很多个跟项目无关的包,比如wxpython,它就不会将这些包写入到文件中去

 

 

 这样子的话,我感觉还不如直接复制粘贴包目录来的划算,当然,如果你是想将源码提供给别人,那么用这种方式比较合适,自己不需要传输很多包。如果是自己部署,直接复制包 过去感觉更快,方便。

先在Linux上创建虚拟环境

 

 查看虚拟环境和项目想要存放的目录

放解释器目录,添加项目想要存放目录的映射

 

 如果不删除旧的,那么两个一起

 降级,让服务端pip支持pycharm使用

勾选上,点击完成

这里远程服务器没有文件,直接覆盖

 连接失败

重启之后

 之前装的pycharm组件生效了,文件名是蓝色了。但是有些黄色底色,有的是我根据本地文件安装的包,有点区别

 当我把这些不规则有错误提示的包删除,都黄了。下面先是显示构建索引,然后是自动上传文件

 我们看到只上传了一个文件显示不对

 之前勾选过了部署里的选项了,好像不是全局修改,我再勾选一次创建空目录试试

 勾选后,自动显示安装某个包了

 没自动上传了,我手动点击上传一下

 成功上传了

 然后安装包

有个安装失败了,

 这里我直接用自己上传的包吧。将原来的备份,使用上传过去的,将原有包覆盖过去到新建的包目录,

 再次查看,我电脑上就是100多个

 虚拟环境中,从这里也能看到,已经同步过了包了

在pycharm中 新建一个测试页

 我没有手动上传,它直接自动上传到服务器上了

 当我修改内容后,也自动同步到服务器中了

 当我点击删除后,也是自动同步到服务器中了

 数据库我们可以用navcat迁移过去,或者用其它备份恢复方式也可以。再修改数据库配置,是生产还是开发环境等配置信息,然后就可以在Linux上启动服务了。

 navicat迁移博客数据库

 我们需要将笔记本上的博客数据库迁移到VMware虚拟机上面。

 右击创建数据库

点中要迁移的数据库,右击或者工具中选中数据同步。选择连接的目标数据库,全选,点击开始。下面点错了,不是数据同步,是数据传输

 点击全选,点击开始,确认开始,报错

 上面选错了,不是数据同步,是数据传输。使用选择出来的

 成功传输,有啥传输啥,目前只有8个表

 这下虚拟机上有数据库表了。刷新库没出来,刷新表出来的

 修改一下库名

 项目文件和数据库都迁移到Linux后,启动项目,检测项目正常访问

可以看到博客正常访问,因为数据库中直接迁移的数据,所以也不需要linux上做数据迁移命令,生成表了。

uwsgi原理

参考:https://blog.csdn.net/loveangel1/article/details/89333873

1. 整体架构

各部分简介:

Nginx
Nginx 是一个反向代理服务器,负责静态资源处理、动态请求转发以及结果的回复。
uWSGI
uWSGI 是一个Web服务器,负责接收 Nginx 请求,转发并处理后发给 Django 以及
接收 Django 返回信息转发给 Nginx。uWSGI是 实现了uwsgi协议,WSGI规范和HTTP协议的 一个C语言实现的软件。
Django
Django 是一个Web应用框架,在收到请求后进行逻辑和数据处理,然后响应结果给 uWSGI 服务器。

2. 通信关系

2.1 交互流程

首先客户端请求服务资源
Nginx作为反向代理服务器,也是直接对外的服务接口,接收客户端发送过来的Http请求并对请求进行解包和分析
如果是静态文件请求,Nginx会根据其配置的静态文件目录,返回请求的资源
如果是动态的请求,Nginx会把请求(HTTP协议)转换uwsgi协议传递给uWSGI,uWSGI将接收到的包进行处理,并转发给WSGI
WSGI根据请求调 Django工程的某个文件或函数,处理完后Django将返回值交给WSGI
WSGI将返回值进行打包,转发给uWSGI
uWSGI接收后转发给Nginx,Nginx最终将返回值返回给客户端(如浏览器)。

2.2 协议简介

wsgi

WSGI, 全称Web Server Gateway Interface 一种Web服务器和应用程序间的通信规范,是为python语言定义Web服务器和Web应用程序之间的一种简单通用接口

就像是精通中英文的翻译,将数据流翻译成对方识别的数据

uWSGI

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议,把HTTP协议转化成语言支持的网络协议供python使用。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

uwsgi

它是一个二进制协议,可以携带任何类型的数据。一个uwsgi分组的头4个字节描述了这个分组包含的数据类型。
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信;

uwsgi配置

django 服务器 
    runserver
    wsgi
uwsgi : web服务器,多线程处理的不错
    1. pip install uwsgi
    2. 工程目录下创建uwsgi.ini 配置文件
    3. 书写配置信息
    4. 使用uwsgi服务器
        - 启动        uwsgi    --ini    uwsgi.ini
        - 停止        uwsgi    --stop    uwsgi.pid

nginx配置
    location /static{
        alias  xxx/static/;
    }
    location / {
        include uwsgi_params;
        uwsgi_pass localhost:8000;
    }

 

proxy_pass  URL;            反向代理转发地址,默认不转发header,需要转发header则设置
                    proxy_set_header HOST $host;
proxy_method  POST;        转发的方法名

proxy_hide_header Cache-Control;    指定头部不被转发        

proxy_pass_header Cache-Control;    设置哪些头部转发

proxy_pass_request_header on;    设置转发http请求头

proxy_pass_request_body on;    设置转发请求体

 

负载均衡模块,通过一个简单的调度算法来实现客户ip到后端服务器的负载平衡

写法 upstream  myproject{
    ip_hash;
              server 127.0.0.1:8000;
    server 127.0.0.1:8001 down;
    server 127.0.0.1:8002 weight=3;
    server 127.0.0.1:8003 backup;
    fair;
          }
负载均衡算法
    weight     负载权重
    down    当前server不参与负载均衡
    backup    其它机器全down掉或满载使用此服务
    ip_hash    按每个请求的hash结果分配
    fair    按后端响应时间来分(第三方的)

 

 

 

uwsgi架构

 

uwsgi、wsgi和nginx的区别和关系

python项目使用uWSGI作为web服务启动

 uwsgi安装

在我们的博客虚拟环境中安装uwsgi

pip3 install uwsgi

 

2. 工程目录下创建uwsgi.ini 配置文件

(mcwblog) [root@mcw01 myblog]# ls
app.py  exts        __pycache__       settings.py    static     touxiang2.jpg
apps    migrations  requirements.txt  site-packages  templates  七牛云存储.py
(mcwblog) [root@mcw01 myblog]# touch uwsgi.ini
(mcwblog) [root@mcw01 myblog]# vim uwsgi.ini 
(mcwblog) [root@mcw01 myblog]# cat uwsgi.ini 
[uwsgi]
# 使用nginx连接时,使用
socket = 0.0.0.0:8080

# 直接作为web服务器使用
# http=0.0.0.0:8080
# 配置工程目录
chdir = /root/myblog/

# 配置项目的wsgi目录,相对于工程目录
# wsgi-file = OnlineStore/wsgi.py

# 适用于flask项目部署
wsgi-file = manage.py
# router
callable = app

# 配置进程,线程信息
processes = 4
threads = 10
enable-threads = True
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log 
(mcwblog) [root@mcw01 myblog]# 

3. 书写配置信息

工程目录就是我们的项目目录 。先不用nginx注释掉socket,先用直接作为web服务器使用打开http。wsgi-file = OnlineStore/wsgi.py是django项目使用的,下面标记的是flask项目部署配置的文件,wsgi-file就是项目的启动文件,我们这里是使用的app.py。路由flask项目这里用的是app,因为我们app.py启动文件,里面创建的是app对象,运行的是app,其它程序也是在装饰app。

我们现在来根据实际情况来配置

(mcwblog) [root@mcw01 myblog]# vim uwsgi.ini 
(mcwblog) [root@mcw01 myblog]# ls
app.py  exts        __pycache__       settings.py    static     touxiang2.jpg  七牛云存储.py
apps    migrations  requirements.txt  site-packages  templates  uwsgi.ini
(mcwblog) [root@mcw01 myblog]# 
(mcwblog) [root@mcw01 myblog]# cat uwsgi.ini 
[uwsgi]
# 使用nginx连接时,使用
# socket = 0.0.0.0:8080

# 直接作为web服务器使用
http=0.0.0.0:8080
# 配置工程目录
chdir = /root/myblog/

# 配置项目的wsgi目录,相对于工程目录
# wsgi-file = OnlineStore/wsgi.py

# 适用于flask项目部署
wsgi-file = app.py
# router
callable = app

# 配置进程,线程信息
processes = 4
threads = 10
enable-threads = True
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log 
(mcwblog) [root@mcw01 myblog]# pwd
/tmp/myblog
(mcwblog) [root@mcw01 myblog]# 

4. 使用uwsgi服务器

- 启动 uwsgi --ini uwsgi.ini
- 停止 uwsgi --stop uwsgi.pid

 

uwsgi命令,指定配置文件启动

目录写错了,没起来,我们是放到tmp目录下了

 我们可以看到,启动之后可以成功访问到了

 根据pid文件停止服务

 使用uwsgi测试网站功能是正常使用的

 python项目uWSGI启动,对接nginx

 准备nginx环境

(mcwblog) [root@mcw01 myblog]# yum install -y nginx

配置nginx

(mcwblog) [root@mcw01 myblog]# ls /etc/nginx/
conf.d        fastcgi.conf.default    koi-utf     mime.types.default  scgi_params          uwsgi_params.default
default.d     fastcgi_params          koi-win     nginx.conf          scgi_params.default  win-utf
fastcgi.conf  fastcgi_params.default  mime.types  nginx.conf.default  uwsgi_params
  • 通过nginx做动静分离。如果静态文件都经过uWSGI去网站找,那么uWSGI压力会比较大,因此做动静分离,静态文件就不会经过uWSGI了,也是提高了web服务器的并发能力。
  • nginx需要配置root项目根目录,
  • location 静态路由static的访问地址。静态文件的匹配,里面使用alias别名方式,让匹配到静态路径的去静态路径查找文件。
  • location根目录就让它include uwsgi的参数配置,并且有uWSGI_pass 通道,后面接ip端口;而后面ip端口是我们uWSGI方式启动的flask项目的访问地址。应该是因为是http方式,这里也没有写后端使用的协议。nginx和uWSGI服务器就是通过这里配置进行对接。
  • 好像是这样的:我们的web服务就是uWSGI启动,nginx配置静态访问地址,又配置动态访问地址,动态访问的就相当于uwsgi,通过uwsgi实现nginx和uWSGI启动的网站进行通信。
  • 跟nginx.conf同级下,就有uwsgi_params文件,属于uwsgi的配置,所以后端是python项目,要让nginx主配置文件访问后端时,include添加上uwsgi的配置。就像php找后端也要添加上这个目录下的网关接口快速网关接口一样。只要发送请求就需要uwsgi_params作为桥梁去沟通
        root         /tmp/myblog/;

        location /static {
          alias /tmp/myblog/static;
        }
        location / {
        include   /etc/nginx/uwsgi_params;
        uwsgi_pass localhost:8080;
        }
(mcwblog) [root@mcw01 myblog]# cat uwsgi.ini 
[uwsgi]
# 使用nginx连接时,使用
socket = 0.0.0.0:8080

# 直接作为web服务器使用
# http=0.0.0.0:8080
(mcwblog) [root@mcw01 myblog]# ls /etc/nginx/
conf.d        fastcgi.conf.default    koi-utf     mime.types.default  nginx.confbak2      scgi_params.default   win-utf
default.d     fastcgi_params          koi-win     nginx.conf          nginx.conf.default  uwsgi_params
fastcgi.conf  fastcgi_params.default  mime.types  nginx.confbak       scgi_params         uwsgi_params.default

我们在uwsgi.ini也要做修改,把直接作为web服务器使用的http配置关掉,把使用nginx连接时使用的配置socket打开。这样nginx中的uwsgi_pass才能成功来访问到

nginx修改前

(mcwblog) [root@mcw01 myblog]# cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
(mcwblog) [root@mcw01 myblog]# egrep -v "^#|^$| *#" /etc/nginx/nginx.confbak >/etc/nginx/nginx.conf
(mcwblog) [root@mcw01 myblog]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        include /etc/nginx/default.d/*.conf;
        error_page 404 /404.html;
        location = /404.html {
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}
(mcwblog) [root@mcw01 myblog]# 

nginx和uwsgi.ini修改后

(mcwblog) [root@mcw01 myblog]# vim /etc/nginx/nginx.conf
(mcwblog) [root@mcw01 myblog]# vim uwsgi.ini 
(mcwblog) [root@mcw01 myblog]# pwd
/tmp/myblog
(mcwblog) [root@mcw01 myblog]# ls /tmp/myblog/
app.py  exts        __pycache__       settings.py    static     touxiang2.jpg  uwsgi.log  七牛云存储.py
apps    migrations  requirements.txt  site-packages  templates  uwsgi.ini      uwsgi.pid
(mcwblog) [root@mcw01 myblog]# ls /etc/nginx/
conf.d        fastcgi.conf.default    koi-utf     mime.types.default  nginx.confbak2      scgi_params.default   win-utf
default.d     fastcgi_params          koi-win     nginx.conf          nginx.conf.default  uwsgi_params
fastcgi.conf  fastcgi_params.default  mime.types  nginx.confbak       scgi_params         uwsgi_params.default
(mcwblog) [root@mcw01 myblog]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /tmp/myblog/;
        include /etc/nginx/default.d/*.conf;
        error_page 404 /404.html;
        location /static {
          alias /tmp/myblog/static;
        }
        location / {
        include   /etc/nginx/uwsgi_params;
        uwsgi_pass localhost:8080;
        }
        location = /404.html {
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}
(mcwblog) [root@mcw01 myblog]# 
(mcwblog) [root@mcw01 myblog]# cat uwsgi.ini 
[uwsgi]
# 使用nginx连接时,使用
socket = 0.0.0.0:8080

# 直接作为web服务器使用
# http=0.0.0.0:8080
# 配置工程目录
chdir = /tmp/myblog/

# 配置项目的wsgi目录,相对于工程目录
# wsgi-file = OnlineStore/wsgi.py

# 适用于flask项目部署
wsgi-file = app.py
# router
callable = app

# 配置进程,线程信息
processes = 4
threads = 10
enable-threads = True
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log 
(mcwblog) [root@mcw01 myblog]# 

检查配置并启动

(mcwblog) [root@mcw01 myblog]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(mcwblog) [root@mcw01 myblog]# nginx 
(mcwblog) [root@mcw01 myblog]# uwsgi --ini /tmp/myblog/uwsgi.ini 
[uWSGI] getting INI configuration from /tmp/myblog/uwsgi.ini
(mcwblog) [root@mcw01 myblog]# 

检查启动情况

(mcwblog) [root@mcw01 myblog]# ps -ef|grep nginx
root      59101      1  0 10:33 ?        00:00:00 nginx: master process nginx
nginx     59102  59101  0 10:33 ?        00:00:00 nginx: worker process
root      59163  48170  0 10:42 pts/2    00:00:00 grep --color=auto nginx
(mcwblog) [root@mcw01 myblog]# ps -ef|grep uwsgi
root      59117      1  0 10:33 ?        00:00:01 uwsgi --ini /tmp/myblog/uwsgi.ini
root      59120  59117  0 10:33 ?        00:00:00 uwsgi --ini /tmp/myblog/uwsgi.ini
root      59121  59117  0 10:33 ?        00:00:00 uwsgi --ini /tmp/myblog/uwsgi.ini
root      59122  59117  0 10:33 ?        00:00:00 uwsgi --ini /tmp/myblog/uwsgi.ini
root      59123  59117  0 10:33 ?        00:00:00 uwsgi --ini /tmp/myblog/uwsgi.ini
root      59165  48170  0 10:42 pts/2    00:00:00 grep --color=auto uwsgi
(mcwblog) [root@mcw01 myblog]# netstat -lntup|grep 80
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      59117/uwsgi         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      59101/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      59101/nginx: master 
(mcwblog) [root@mcw01 myblog]# netstat -lntup|grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      59117/uwsgi         
(mcwblog) [root@mcw01 myblog]# 

检查页面访问情况:

首页正常访问

 背景图访问

 发表一篇文章,正常访问

 pycharm下载服务器项目数据,做同步

我直接在服务器上做修改,不会同步到我笔记本pycharm中。服务器上已经被修改了,我在pycharm修改还是能自动同步到服务器中,但是两者之间有差别的,应该把服务器上的异常点同步到pycharm中。。

 

 右击部署下载

 先是收集数据,然后一个个地询问是否覆盖

 不知道为啥项目就多了很多它的包文件了,在项目目录下。结果下载的时候是同步了,这个我们不需要的包目录也下载了,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-12-08 15:56  马昌伟  阅读(105)  评论(0编辑  收藏  举报
博主链接地址:https://www.cnblogs.com/machangwei-8/