1.php7源码安装
1).获取源码
wget http://59.80.44.98/cn2.php.net/distributions/php-7.3.2.tar.gz
2).解压
tar -xjf php-7.2.10.tar.bz2
cd php-7.2.10
3).配置
./configure --prefix=/usr/local/php
遇到问题:
yum install libxml2-devel -y
4).make && make install
5).设置PHP的执行方式 取别名
a.Linux下环境变量配置
(1).修改/etc/profile文件
vim /etc/profile
export PATH=$PATH:/usr/local/php/bin
source /etc/profile
(2).修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别
vim /root/.bashrc
export PATH=$PATH:/usr/local/php/bin
source /root/.bashrc
####################################################################################
/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
########################################################################################
这里采用
vi ~/.bash_profile
alias php=/usr/local/php/bin/php
source ~/.bash_profile//通知一下这个文件
6).踩坑
a.首先要有gcc autoconfig
b.php.ini的位置
使用 php -i|grep php.ini 查找PHP使用的配置文件在哪
cp 源码目录/php.ini-production /usr/local/php/lib/php.ini
cp 源码目录/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
2.安装swoole扩展
1).获取源码
没有Git 先安装 yum install git-core
git clone https://gitee.com/swoole/swoole.git
2).进入swoole源码目录 生成configure
执行
/usr/local/php/bin/phpize
3).配置
./configure --with-php-config=/usr/local/php/bin/php-config
遇到问题:
a.configure: error: C++ preprocessor "/lib/cpp" fails sanity check
解决办法:
yum install glibc-headers
yum install gcc-c++
b.Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
解决办法:yum -y install autoconf
4).make && make install
5).修改
vi php.ini
6).测试
a.命令行测试
cd /data/soft/swoole/examples/server
php echo.php
##############################################################
查看端口占用
提前安装
yum install net-tools
执行命令
netstat -anp|grep 9501
b.把虚拟机Linux目录映射到windows里 写代码测试
(1).利用samba服务器映射
安装
yum install samba* --skip-broken
配置
vi /etc/samba/smb.conf
[web]
path = /data/www
browseable = yes
writable = Yes
重启
service smb restart
设置跟随系统重启
3.创建tcp服务
1).写好服务文件
php tcp.php
2).查看服务是否启动
a.方式一
netstat -anp|grep 9501
b.方式二 、启动新客户端
telnet 127.0.0.1 9501
##################################################
先检查是否安装: telnet-server和xinetd
(1).rpm -qa telnet-server
(2).rpm -qa xinetd
没有则安装
(1).yum list |grep telnet
(2).yum list |grep xinetd
执行安装:
(1).yum -y install telnet-server.x86_64
(2).yum -y install telnet.x86_64
(3).yum -y install xinetd.x86_64
设置开机启动:
(1).systemctl enable xinetd.service
(2).systemctl enable telnet.socket
开启service:
(1).systemctl start telnet.socket
(2).systemctl start xinetd
开启防火墙端口:
(1).firewall-cmd --permanent --add-port=23/tcp
(2).firewall-cmd --reload
########################################################
3).关闭服务
netstat -anp|grep 9501
kill 29309
4.tcp客户端
1).查看服务端开启了几个进程
ps aft|grep tcp.php
5.UDP服务
1).启动udp服务
2).测试是否启动成功
先安装nc
yum -y install nc
nc -u 127.0.0.1 9502
3).用浏览器访问
a.firewall-cmd --permanent --add-port=23/tcp
b.firewall-cmd --reload
c.192.168.1.16:8811
6.webSocket服务
1).
7.异步redis
1.安装redis
1).下载redis
http://120.52.51.19/download.redis.io/releases/redis-5.0.3.tar.gz
tar -xvf redis-5.0.3.tar.gz
cd redis-5.0.3
make
cd src
nohup ./redis-server & // 启动服务
2.hiredis 库
1).下载hiredis
https://github.com/redis/hiredis/archive/v0.14.0.tar.gz
tar -xzvf v0.14.0.tar.gz
cd hiredis-0.14.0
make -j
make install
3.从新编译swoole
1).从新下载最新 https://github.com/swoole/swoole-src/releases
a.https://github.com/swoole/swoole-src/archive/v4.2.12.tar.gz
tar -xzvf v4.2.12.tar.gz
cd swoole-src-4.2.12
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-async-redis
make clean
make -j
make install
8.Nginx代理
server {
root /data/www/es;
server_name es.com;
location / {
proxy_http_version 1.1;
proxy_set_header Connection “keep-alive”;
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
}
9.重新编译 开启OpenSSL
cd swoole-src-4.2.13
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-async-redis --enable-openssl
make clean
make -j
make install
10.mongodb
1).获取源码 安装MongoDB
参考文章 https://blog.youkuaiyun.com/lu8000/article/details/83149063
a.基本安装 & 配置
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.1.8.tgz
tar -xzvf xxx
mongodb-src-r4.1.8
//将解压后的文件移动到 安装目录下
mv mongodb-src-r4.1.8 /usr/local/mongodb
//添加到 PATH
vi /etc/profile
最后追加
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
source /etc/profile(立即生效)
b.创建数据相关目录
创建数据根目录
mkdir /usr/local/mongodb/mongodb_data
创建数据目录
mkdir /usr/local/mongodb/mongodb_data/data
创建日志目录
mkdir /usr/local/mongodb/mongodb_data/log
创建配置目录
mkdir /usr/local/mongodb/mongodb_data/conf
cd conf
vim mongo.conf
配置内容:
dbpath=/usr/local/mongodb/mongodb_data/data #数据文件存放目录
logpath=/usr/local/mongodb/mongodb_data/log/mongod.log #日志文件存放目录
port=201910 #端口,默认201910,可以自定义
logappend=true #开启日志追加添加日志
fork=true #以守护程序的方式启用,即在后台运行
bind_ip=0.0.0.0 #本地监听IP,0.0.0.0表示本地所有IP
auth=true #是否需要验证权限登录(用户名和密码)
c.启动
cd /usr/local/mongodb
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb_data/conf/mongo.conf
d.关闭
pkill mongod
2).安装mongodb php 扩展
参考文章https://blog.youkuaiyun.com/u010615629/article/details/80757079
1).去https://pecl.php.net/package/mongodb 下载最新的扩展包
这里下载了
wget https://pecl.php.net/get/mongodb-1.6.0alpha1.tgz
tar -xzvf mongodb-1.6.0alpha1.tgz
cd mongodb-1.6.0alpha1/
//编译协程
vim src/libmongoc/src/libmongoc/src/mongoc/mongoc-socket.c
#include "mongoc/mongoc-counters-private.h"
#include "mongoc/mongoc-errno-private.h"
#include "mongoc/mongoc-socket-private.h"
#include "mongoc/mongoc-host-list.h"
#include "mongoc/mongoc-socket-private.h"
#include "mongoc/mongoc-trace-private.h"
#ifdef _WIN32
#include <Mstcpip.h>
#include <process.h>
#endif
#include "swoole/include/socket_hook.h" //加入这行
//PHP配置
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make -j
make install
vi /usr/local/php/lib/php.ini
在extension=swoole.so下方加入extension=mongodb.so
3).连接使用
a.使用mongo自带的mongo 来登录数据库
./bin/mongo 127.0.0.1:27017
*退出登录
(1).kill -15 进程号 关闭client
(2).
use admin//切换到admin数据库
db.shutdownServer()
*基本命令
//查看当前数据库中有哪些数据库
show dbs
//删除数据库
use test
db.dropDatabase()
//创建数据库
use test_jqx
//向集合写入数据
db.coupon.insert({title:'yifu'})
//查看数据库中有哪些集合
show collections
//查看数据
db.coupon.find()
//插入指定 _id 的数据
db.coupon.insert({title:'yifu',_id:1})
//条件查询
db.coupon.find({title:'yifu'})
//使用js语法操作数据库插入多条数据
for(let i=3;i<100;i++) {
db.coupon.insert({title:'yifu'+i})
}
//统计数据
db.coupon.find().count()
//分页 排序
db.coupon.find().skip(3).limit(5).sort({title:1})
//更新 只会更新第一条查找到的数据
db.activity.update({price:10},{price:12})//会覆盖其它字段
db.activity.update({price:10},{$set:{info1:15}}) //其它字段不变 只改变Sset的字段
db.activity.update({price:14},{prcie:25,info:48},true) //更新一条不存在的数据时 true 自动改为插入
//更新所有的文档
db.activity.update({prcie:25},{$set:{info:45,info1:31}},false,true) //更新字段只能在$set 下 args4 = true;
//数据的删除
db.activity.remove({price:12}) //删除一条
//清空表
db.activity.drop() //用show tables 看不到 activity
*索引
//查看索引
db.coupon.getIndexes()
//创建索引
db.coupon.ensureIndex({size:-1}) // 最好在创建数据表之前就创建好索引
//索引的种类
单建索引 多建索引
db.coupon.insert({title:'maozi',size:[1,2,3,4,5]}) //size 多建索引
//复合索引
db.coupon.insert({title:'pidai',size:[2,5],width:[8,9],color:'red'})
db.coupon.ensureIndex({size:1,color:-1},{name:attr}) //创建复合索引
//过期索引 索引过期后数据会被删除 可以代替session
db.user.insert({logintime:new Date(),name:'hh'}) //登陆一段时间后的索引logintime
db.user.ensureIndex({logintime:1},{expireAfterSeconds:1000}) //1000秒后过期 logintime必须是 ISODate 数据类型 或者 ISODate数组,[ISODate1,ISODate2,ISODate3],按其最小时间进行过期删除,不能是复合索引,有时间误差60s
//全文索引
db.article.insert({author:'longge',title:'我是祖国的花朵哦',content:'花朵啥的算啥'})
db.article.ensureIndex({author:'text'}) //创建一个字段的索引
db.article.ensureIndex({author:'text',title:'text'}) // 多个字段的索引
db.article.ensureIndex({"$**":'text'}) //全局的索引
//索引的属性
db.coupon.ensureIndex({size:1,color:-1},{name:attr}) //给索引指定名字
db.coupon.ensureIndex({size:1,color:-1},{unique:true/false}) // 唯一性
db.coupon.ensureIndex({width:1},{sparse:true/false}) //稀疏性 稀疏性用来处理 索引存在但文档中不存在的处理方法 [比如 第一条数据包含 color 第二条不包含 color 当sparse=true就不必为第二条创建索引]
//$exists 属性存在的文档记录
db.coupon.find({width:{$exists:1}})
db.coupon.find({width:{$exists:1}}).hint("width_1") //强制使用索引
db.coupon.find({width:{$exists:0}}).hint("width_1")//返回结果空 不能再稀疏索引上查找不存在的值
//地理位置索引 2D平面索引 & 球面 2Dsphere索引 点
db.location.createIndex({w:'2d'})//创建位置索引
//$near 查询 距离某个点附近的点 $maxDistance 限制距离
db.location.find({w:{$near:[1,1],$maxDistance:10}})
//$geoWithin 查询某个形状内的点
db.location.find({w:{$geoWithin:{$box:[[0,1],[1,20]]}}}) //$box 矩形内
db.location.find({w:{$geoWithin:{$center:[[2,30],10]}}}) //$center 圆圈内的点
db.location.find({w:{$geoWithin:{$polygon:[[0,0],[20,20],[90,40]]}}}) //$polygon 多边形查询
//geoNear 高级查询 db.runCommand
db.runCommand(
{
geoNear: "location",
near: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
spherical: true,
minDistance: 1,
maxDistance: 100
}
)
//2Dsphere索引
*索引的合理评判
1.使用工具 mongostat 查看mongo的状态
2.profile集合
3.日志
4.explain分析
//mongostat 开两个窗口 来测试
./mongostat -h 127.0.0.1:27017 //实时抓取
//
./mongo 127.0.0.1:27017 //写个循环插入
for(i=0;i<10000;i++) {
db.
}
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 1.43G 61.0M 0|0 1|0 159b 65.8k 2 Feb 16 22:04:13.175
80 *0 *0 *0 0 1|0 0.0% 0.0% 0 1.43G 63.0M 0|0 1|0 12.6k 66.3k 2 Feb 16 22:04:14.218
513 *0 *0 *0 0 2|0 0.0% 0.1% 0 1.43G 67.0M 0|0 1|0 80.2k 91.5k 2 Feb 16 22:04:15.173
425 *0 *0 *0 0 1|0 0.1% 0.1% 0 1.43G 75.0M 0|0 1|0 66.5k 82.5k 2 Feb 16 22:04:16.205
439 *0 *0 *0 0 2|0 0.1% 0.1% 0 1.43G 81.0M 0|0 1|0 69.1k 85.6k 2 Feb 16 22:04:17.198
403 *0 *0 *0 0 2|0 0.1% 0.1% 0 1.43G 87.0M 0|0 1|0 63.4k 83.9k 2 Feb 16 22:04:18.193
467 *0 *0 *0 0 1|0 0.2% 0.2% 0 1.43G 87.0M 0|0 1|0 73.6k 86.2k 2 Feb 16 22:04:19.197
472 *0 *0 *0 0 2|0 0.2% 0.2% 1 1.43G 87.0M 0|0 1|0 74.4k 87.6k 2 Feb 16 22:04:20.183
474 *0 *0 *0 0 2|0 0.2% 0.2% 0 1.43G 87.0M 0|0 1|0 74.6k 86.7k 2 Feb 16 22:04:21.183
462 *0 *0 *0 0 2|0 0.2% 0.2% 0 1.43G 87.0M 0|0 1|0 72.8k 86.8k 2 Feb 16 22:04:22.173
//profile 操作日志集合 用于测试阶段
db.getProfilingLevel() //查看记录日志的级别 0 :不记录 1 :记录超过slows值得记录 2:记录所有
db.setProfilingLevel(2)
//系统日志 mongo.log
在mongo.conf
verbose vvvvv //1~5 个 v 代表日志的详细程度
//explain()
db.user.find().explain()
*安全隔离
*创建用户
参考文章:https://www.cnblogs.com/xiaopingfeng/p/7602439.html
//添加
db.createUser({user:'root',pwd:'root',roles:[{role:'userAdmin',db:"admin"},{role:'read',db:'test_jqx'}]})
//聚抢先的用户
db.createUser({user:'jqxadmin',pwd:'adfddfa13396491234_!',roles:[{role:'userAdmin',db:"admin"},{role:'dbOwner',db:'jqx'}]})
//修改
db.updateUser('jqxadmin',{roles:[{role:'userAdmin',db:"admin"},{role:'dbOwner',db:'jqx'},{role:'dbOwner',db:'quan'},{role:'dbOwner',db:'seller'}]})
//修改密码
db.changeUserPassword("jqxadmin","adfddfa13396491234_!")
4). //加载php的MongoDB驱动
composer mongo/mongo
遇到的问题 http://www.ericphp.cn/?p=336 参考文章
1.删除操作系统中ipv6解析,删除/etc/hosts'中的'::1 localhost, 这一行
11.安装mbstring扩展
1).进入PHP7源码目录
/data/soft/php-7.2.10/ext/mbstring
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
/迁移*******/
导出
./mongodump -h 127.0.0.1 -d jqx -o /data/
导入
./mongorestore -h 127.0.0.1 -d jqx --dir /data/jqx
修改redis 内存
maxmemory =
maxmemory-policy volatile-lru
nohup /usr/local/redis-5.0.3/src/redis-server &
/*****************启动命令/
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb_data/conf/mongo.conf
systemctl restart mysqld.service
nohup /data/soft/redis-5.0.3/src/redis-server &
/usr/local/nginx/sbin/nginx
php /data/www/es/easyswoole start