Loading

LNMP架构

LNMP架构

image

LNMP是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=Python

首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。

  • 静态请求:请求的内容是静态文件就是静态请求
    • 1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
    • 2)html就是一个标准的静态文件
  • 动态请求:请求的内容是动态的就是动态请求
    • 1)不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据

    当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过uwsgi协议转交给后端的Python程序处理

UWSGI服务部署

因为nginx不支持wsgi协议,无法直接调用py开发的webApp

  • 在nginx+uwsgi+Django的框架里,nginx代理+webServer,uwsgi是wsgiServer,Django是webApp
  • nginx接收用户请求,并判定哪些转发到uWsgi,uWsgi再去调用pyWebApp。
    1、创建用户
    groupadd django -g 888
    useradd django -u 888 -g 888 -r -M -s /bin/sh
    
    2、安装依赖软件
    yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y
    
    3、安装Django和uwsgi
    pip3 install uwsgi django
    
    4、创建项目
    cd /opt
    django-admin startproject linux
    cd linux
    django-admin startapp app01
    4.1、修改配置文件
    vim /opt/linux/linux/settings.py
    ALLOWED_HOSTS = ['*']  # 所有网站都可以访问
    DATABASES = {} # 清空
    4.2、测试 (测试上面的步骤)
    [root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000
    
    5、编辑项目配置文件
    [root@web01 ~]# vim /opt/linux/myweb_uwsgi.ini 
    [uwsgi]
    # 端口号
    socket          = :8000
    # 指定项目的目录
    chdir           = /opt/linux
    # wsgi文件路径
    wsgi-file       = linux/wsgi.py
    # 模块wsgi路径
    module          = linux.wsgi
    # 是否开启master进程,用来监控worker进程
    master          = true
    # 工作进程的最大数目,worker数量
    processes       = 4
    # 结束后是否清理文件
    vacuum          = true
    
    6、启动uwsgi
    uwsgi -d --ini myweb_uwsgi.ini   --uid 666
    -d:守护进程进行
    --ini:指定配置文件路径
    --uid:指定uid  # 使用root启动会给一个警告!
    
    7、编辑Nginx配置文件
    [root@web01 ~]# vim /etc/nginx/conf.d/python.conf 
    server {
        listen 80;
        server_name py.test.com;
        location / { 
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8000;
            uwsgi_read_timeout 2;
            uwsgi_param UWSGI_SCRIPT linux.wsgi;
            uwsgi_param UWSGI_CHDIR /opt/linux;
            index  index.html index.htm;
            client_max_body_size 35m;
        }
    }
    8、域名解析 windows下
    
    9、测试配置文件
    nginx -t
    
    10、重启Nginx配置
    systemctl restart nginx
    
    
    ps:压测
        python3 manage.py runserver 0.0.0.0:8001
        curl -I -H'Host: py.test.com' 127.16.1.7
        ab -n 10000 -c 100 http://www.py.test.com/
    
  • uwsgi怎么启动停止

    uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

    • uWSGI 启动:
      uwsgi --ini xxx.ini
    • uwsgi 重启:
      uwsgi --reload xxx.pid
    • uwsgi 停止:
      uwsgi --stop xxx.pid
    • 如果不行,执行
      sudo pkill -f uwsgi -9
    • 查看进程pid
      ps -ef | grep uwsgi

部署BBS项目

  • 部署数据库
    1、#查看有没有安装MySQL:
    dpkg -l | grep mysql
    2、 安装MySQL:
    sudo apt install mysql-server
    3、检查是否安装成功:
    netstat -tap | grep mysql
    通过上述命令检查之后,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。
    4、登录mysql数据库可以通过如下命令:
    mysql -u root -p
    -u 表示选择登陆的用户名, -p 表示登陆的用户密码,现在是mysql数据库是没有密码的,Enter password:处直接回车,就能够进入mysql数据库。
    然后通过 show databases; 就可以查看当前的所有数据库。
    
  • 启动数据库
    [root@db01 ~]# systemctl start mariadb
    
  • 远程连接MySQL数据
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    Query OK, 1 row affected (0.00 sec)
    
    
    mysql8.0之后版本
    # 创建用户
    create user root@'%' identified by '123456';
    # 授权
    grant all privileges on *.* to root@'%' with grant option;
    # 刷新
    flush privileges;
    
    $ sudo mysql -u root
    连入后修改密码设定
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
    
  • pycharm连接数据库
    image
    image
    image
  • 测试连接成功
    image
  • 部署BBS
    # 上传代码
    [root@db01 ~]# unzip bbs.zip
    [root@db01 ~]# mv bbs /opt/
    
    # 数据库迁移之前清空/opt/bbs/app01/migrations目录下的py文件只留下双下init.py
    [root@web01 migrations]# pwd
    /opt/bbs/app01/migrations
    [root@web01 migrations]# rm -rf 00*
    [root@web01 migrations]# rm -rf __pycache__/
    
    # 切换路径
    [root@web01 migrations]# cd /opt/bbs/
    [root@web01 bbs]# pwd
    /opt/bbs
    
    # 修改Django版本
    [root@web01 bbs]# pip3 uninstall django
    [root@web01 bbs]# pip3 install django==1.11
    
    # 安装MySQL数据库插件
    [root@web01 bbs]# pip3 install pymysql
    
    # 修改数据连接
    [root@web01 bbs]# vim /opt/bbs/bbs/settings.py
    ALLOWED_HOSTS = ['*']
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'bbs',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '172.16.1.61',
            'PORT': 3306,
            'CHARSET': 'utf8'
        }
    }
    # 修改Django版本和安装pymysql插件,修改配置文件,是为了满足创建数据库迁移文件准备
    
    # 创建数据库迁移文件
    [root@web01 bbs]# python3 manage.py makemigrations
    
    # 数据库迁移
    [root@web01 bbs]# python3 manage.py migrate
    # 数据库就有表了
    
  • 配置UWSGI
    [root@web01 bbs]# vim /opt/bbs/myweb_uwsgi.ini 
    [uwsgi]
    # 端口号
    socket            = :8002
    # 指定项目的目录
    chdir           = /opt/bbs
    # wsgi文件路径
    wsgi-file       = bbs/wsgi.py
    # 模块wsgi路径
    module          = bbs.wsgi
    # 是否开启master进程
    master          = true
    # 工作进程的最大数目
    processes       = 4
    # 结束后是否清理文件
    vacuum          = true
    
  • 配置Nginx
    # 配置nginx前,启动uwsgi
    [root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
    
    # 配置Nginx
    [root@web01 bbs]# vim /etc/nginx/conf.d/bbs.conf 
    server {
        listen 80;
        server_name bbs.test.com;
        location / { 
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8002;
            uwsgi_read_timeout 2;
            uwsgi_param UWSGI_SCRIPT bbs.wsgi;
            uwsgi_param UWSGI_CHDIR /opt/bbs;
            index  index.html index.htm;
            client_max_body_size 35m;
        }
    }
    
  • 测试
    # 测试配置文件
    [root@web01 conf.d]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  • 重启服务
    [root@web01 bbs]# systemctl restart nginx
    
  • windows hosts文件域名解析
  • 测试访问bbs
    image
    image
posted @ 2022-10-09 21:06  爱learn  阅读(23)  评论(0编辑  收藏  举报