LNMP架构
LNMP架构
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
- 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连接数据库
- 测试连接成功
- 部署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