1、项目位置
https://github.com/mylxsw/wizard
简要介绍:Wizard是一款开源文档管理系统,目前支持三种类型的文档管理:Markdown,Swager,Table。主要功能有文档版本管理、用户权限管理、项目分组管理、文档搜索、分享、评论等。
2、软件列表?
软件列表 | 版本号 | MySQL | 5.7.33 | PHP | 7.2.3 | Nginx | 1.19.6 | Redhat操作系统 | 7.7 |
3、原理介绍
搭建wizard项目依赖LNMP架构,所以首先要把LNMP基础环境搭建好。
3.1 LNMP架构
LNMP代表的就是:Linux+Nginx+MySQL+PHP这种网站服务器架构。 ? ? ?Linux:是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。 ? ? ?Nginx:是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 ? ? ?Mysql:是一个中小型关系型数据库管理系统。 ? ? ?PHP:是一种在服务器端执行的嵌入HTML文档的脚本语言。 这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。 ?
?架构图
处理流程:
1、用户通过浏览器输入域名请求Nginx Web服务,如果请求是静态资源,则由Nginx解析返回给用户;
2、如果是动态请求(.php结尾),那么Nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析
3、如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户。
在lnmp中关键性的就两点:?
????????1.nginx接收客户端发来的请求后找到对应的执行脚本文件再用php-fpm来解释执行脚本文件并将结果返回给客户端
????????2.php通过php扩展pdo、mysql、或者mysqli来操作mysql数据库实现对数据的存储
CGI:
????????CGI的全称为“通用网关接口”(Common Gateway Interface),为web服务器与web应用程序通信的一种协议
????????传统CGI接口方式的主要缺点是性能较差,因为每次web服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给web服务器。这在处理高并发访问时几乎是不可用的,因此就诞生了FastCGI。另外,传统的CGI接口方式安全性也很差,现在已经很少被使用。?????
FastCGI:
????????FastCGI?(Fast Common Gateway Interface)全称是“快速通用网关接口”,是一个可伸缩的,高速地在web server和脚本语言间交互的接口。FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。具有如下特点:
- 可把动态语言解析和HTTP服务器分离开。
- Nginx,Apache,Lighttpd,以及多数动态语言都支持FastCGI。
- FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)
- PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgi process mangement))
- HTTP服务器通过(例如Nginx fastcgi_pass)FastCGI客户端和动态语言FastCGI服务器端通信(例如php-fpm)
?PHP-FPM
????????PHP-FPM使用PHP编写的PHP-FastCGI管理器,是用于调度、管理PHP解析器php-cgi的管理程序。它负责管理一个进程池,处理来自Web服务器的请求。
????????早期的PHP-FPM是作为PHP源码的补丁而使用的,在PHP调的5.3.2版本中直接整合到了PHP-FPM分支,目前主流的PHP5.5,PHP5.6,PHP5.7已经集成了该功能(被官方收录),在配置时使用--enable-fpm参数即可开启PHP-FPM。
简要概括:
①CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。 ②FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同 样, SCGI 协议与 FastCGI 类似。 ③PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。 ④PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。 ⑤WEB 中,Web Server 一般指Apache、Nginx、IIS、Lighttpd、Tomcat等服务器。 ⑥Web Application 一般指PHP、Java、Asp.net等应用程序。
参考:
1、关于CGI和FastCGI的理解 - 天生帅才 - 博客园 (cnblogs.com)
2、CGI、FastCGI和PHP-FPM区别和关系详解(包含图解)_ssiyla的博客-CSDN博客
4、搭建步骤
1、安装mysql数据库
2、安装php,重点是线程池的配置文件
[wizard] #进程池的名字
listen = var/run/wizard.sock #指定监听的ip:port或者socket,一会在nginx的配置中会用到
user = nginx #指定php-fpm进程用户
group = nginx #指定php-fpm进程用户组
listen.owner = nginx #用户设置对socket的权限
listen.group = nginx
listen.backlog = -1
listen.mode = 0666
listen.allowed_clients = 127.0.0.1 #允许FastCGI客户端连接的IPV4地址
chdir = /www/wizard/public #设置启动目录,启动时会自动chdir到该目录,必须时绝对路径
pm = dynamic #选择进程池管理器如何控制字进程的数量
pm.max_children = 50 #同一时刻能够存活的最大子进程的数量
pm.start_servers = 2 #在启动时启动的子进程的数量
pm.min_spare_servers = 1 #最小空闲子进程数量
pm.max_spare_servers = 3 #最大空闲子进程数量
pm.max_requests = 500
参考:https://www.cnblogs.com/linuxk/p/10382178.html
3、nginx的配置文件
server {
listen 80;
server_name zhishiku.cslc.com;
#client_max_body_size 100m;
#charset koi8-r;
root /www/wizard/public;
index index.php;
#access_log logs/host.access.log main;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.(gif|jpg|png|bmp|swf|js|css)$ {
try_files $uri =302;
}
location ~ .*\.php$ {
# php-fpm 监听地址,这里用了socket方式
fastcgi_pass unix:/usr/local/php/var/run/wizard.sock;
fastcgi_param SCRIPT_FILENAME /www/wizard/public$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
4、下载wizard项目,放置与路径/www/下,资源位置为/www/wizard/public。主要看下配置文件/www/wizard/.env,这个是知识库的配置
# 应用名称
APP_NAME="测试中心知识库"
# 环境,正式请使用 production
APP_ENV=production
APP_KEY=base64:9ZqHD9ABVYkfN1il53mBYAqN/ZqEeSvUz3zPt2z3KFM=
# 调试和日志级别
APP_DEBUG=false
APP_LOG_LEVEL=debug
# 应用服务地址
APP_URL=http://104.21.0.205
# 数据库连接配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=knowledgeroot
DB_USERNAME=cslc
DB_PASSWORD=cslc
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
# Redis 连接配置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
# 邮件服务器配置
MAIL_DRIVER=smtp
MAIL_HOST=172.16.0.22
MAIL_PORT=25
MAIL_USERNAME='uatsvn@cslc.com.cn'
MAIL_PASSWORD='pass@word123'
MAIL_ENCRYPTION=false
MAIL_FROM_NAME=测试中心
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
APP_TIMEZONE=Asia/Shanghai
# 评论功能
# 是否启用评论功能
WIZARD_REPLY_SUPPORT=true
# 默认主题,支持 default/dark
WIZARD_DEFAULT_THEME=default
# 表格文档配置
WIZARD_SPREEDSHEET_MAX_ROWS=100
WIZARD_SPREEDSHEET_MAX_COLS=26
# 用户帐号是否需要邮件激活
WIZARD_NEED_ACTIVATE=false
# 加密密钥
WIZARD_JWT_SECRET=5Dck4izVEXsP52AOcVxaFUsTzA8uwUiP
# 当前版本,目前的作用是刷新静态资源缓存
WIZARD_RESOURCE_VERSION=202103221014
# 是否启用 LDAP 登录
WIZARD_USE_LDAP=false
# 是否开启 LDAP 日志
LDAP_LOGGING=true
# LDAP 帐号前缀/后缀
LDAP_ACCOUNT_PREFIX=
LDAP_ACCOUNT_SUFFIX=
# LDAP 服务地址
LDAP_HOSTS=
LDAP_PORT=
# LDAP Base DN
LDAP_BASE_DN=
# LDAP 授权帐号
LDAP_USERNAME=
LDAP_PASSWORD=
# LDAP 连接安全配置
LDAP_USE_SSL=false
LDAP_USE_TLS=false
# 同步 LDAP 密码到本地
LDAP_PASSWORD_SYNC=true
# 如果 LDAP 登录失败,是否使用本地帐号密码登录
LDAP_LOGIN_FALLBACK=true
# LDAP 信息中,用哪个字段作为用户的名称,比如 displayname, cn 等
LDAP_SYNC_NAME_ATTR=cn
# LDAP 限制只允许属于该成员的用户登录
WIZARD_LDAP_ONLY_MEMBER_OF=
# 是否必须登录才能查看文档
WIZARD_MUST_LOGIN=yes
# 管理员公共页面是否展示所有项目
WIZARD_ADMIN_SEE_ALL=true
# 是否启用 CDN 加速
CDN_ENABLED=false
# CDN 服务器域名
CDN_URL=http://cdn.example.com
# 版本检查
WIZARD_VERSION_CHECK=false
# 是否自动添加 TOC/TOCM 标签到 Markdown 文档,可选值为空、TOC、TOCM,为空时不启用该功能
# 如果文档中包含手写的 TOC 和 TOCM,也不会自动添加
WIZARD_MARKDOWN_TOC_DEFAULT=TOCM
# 是否启用 Markdown 严格模式,默认为 true,如果你的文档存在兼容性问题,则可以修改此项
WIZARD_MARKDOWN_STRICT=true
# 是否启用邀请注册机制
# 启用后,用户注册时必须提供邀请码
WIZARD_REGISTER_INVITATION=false
# 静态邀请码,所有用户注册时必须提供此邀请码,邀请码对所有用户固定不变
WIZARD_REGISTER_INVITATION_STATIC=eb092be4a8970338c06a37900a7116f1
修改配置后使配置生效:php artisan config:cache
|