Linux
可以使用虚拟机挂载使用Centos、Debian、Ubunto等的一些镜像,有条件的话可以使用阿里云的系统,本文使用的就是阿里云的 x86_64 x86_64 x86_64 GNU/Linux系统,虚拟机安装不做详解,可以自行搜索,或者有疑问可以提出一起探讨
安装PHP
1、下载解压
wget http://cn2.php.net/distributions/php-7.2.8.tar.gz
tar -xzf php-7.2.8.tar.gz
- 错误提示
ERROR: The certificate of ‘www.python.org’ is not trusted.
ERROR: The certificate of ‘www.python.org’ hasn't got a known issuer.
- 解决方案
加 –no-check-certificate
wget --no-check-certificate https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
2、编译安装
cd php-7.2.8
./configure --prefix=/usr/local/php7280 --with-curl --with-jpeg-dir --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libxml-dir --with-mysqli=mysqlnd --with-openssl --with-pcre-regex --with-pdo-mysql=mysqlnd --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --with-pdo-mysql --with-fpm-user=nginx --with-fpm-group=nginx --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-mysqlnd --enable-maintainer-zts
其中 –prefix=/usr/local/php7280 编译在此目录下,方便寻找
- 遇到的问题
configure: error: Cannot find OpenSSL's <evp.h>
- 解决方案
网上方法基本都是说安装openssl或者是说安装mysqlnd扩展报错的,需要在配置文件configure加
export PHP_OPENSSL_DIR=yes
./configure --with-php-config=/home/php/bin/php-config --enable-mysqlnd
我这边实际上是OpenSSL版本的问题
(sudo) yum downgrade openssl //降级
(sudo) yum install openssl-devel
其他遇到的的问题复制百度寻找答案即可基本上是服务器缺少对应的依赖
如
configure: error: libxml2 not found. Please check your libxml2 installation
解决
yum install libxml2-devel
然后执行如下命令
make && make install
以上php就安装好了,接下来进行配置
3、配置
- 在编译执行configure的地方执行如下命令
cp php.ini-production /usr/local/php7/etc/php.inicd /usr/local/php7/etc/ //查看是否有了 php.ini
- 在接着执行如下命令
cp php-fpm.conf.default php-fpm.conf
- 在进入这个目录 cd php-fpm.d/ 在继续执行如下命令
cp www.conf.default www.conf
- 最后在这个目录 /usr/local/php7/sbin 执行如下命令启动php
./php-fpm
- 遇到问题
cannot get uid for user 'nginx'或者please specify user and group other
- 解决方案
将配置文件www.conf中的user和group改成自己的系统名字或者不知道可以改成nobody即可
原因分析,在编译时指定了参数*–with-fpm-group=nginx* 前面可去除这参数
最后使用netstat -tunlp可看到php已成功启动
- 设置全局php访问(否则需要指定目录才能访问)全局目录在*/usr/bin*
ln -s /usr/local/php7280/bin/php /usr/bin/php
- 添加永久环境变量,影响范围所有用户
vim /etc/profile
- 在文档最后,添加如下命令;sbin 为php-fpm 所在,bin 为php客户端所在
export PATH="/usr/local/php7/sbin:/usr/local/php7/bin:$PATH"
- 保持退出 然后运行
source /etc/profile
需要注意的点为PATH后面的等号不允许存在空格,否则会报错误
export `=' not a valid identifier
4、安装拓展
curl.so
- 进入源码目录
-
找到对应库的目录 curl 进入
-
执行生成so文件编译模式
/usr/local/php7280/bin/phpize
- 编译curl扩展
./configure --with-php-config=/usr/local/php7280/bin/php-config
- 执行安装
make && make install
- 进入生成的扩展陌路
/usr/local/php7280/lib/php/extensions/no-debug-zts-20170718
- 最后编辑php.ini文件 增加extension=curl.so扩展即可
服务启动/重启/停止
service php-fpm start
可能出现的问题
Redirecting to /bin/systemctl start php-fpm.serviceFailed to start php-fpm.service: Unit not found.
原因分析
service启动是自动访问*/etc/init.d目录下的脚本,所以需要去安装目录下的sapi/fpm文件夹里面的init.d.php-fpm*拷贝一份到该目录下
可以查看该文件的位置(全局搜索)
find / -name 'init.d.php-fpm'
拷贝
cp /root/php-7.2.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
赋予权限(读和写权限)
ps: chmod 777 /etc/init.d/php-fpm 也是可以的
chmod a+x /etc/init.d/php-fpm
最后重启
可能又会发现问题
ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in useERROR: FPM initialization failed
解决方案
查看端口占用情况
netstat -tunlp | grep 9000
其实就是php本身进程,清除即可
ps: kill -9 php-fpm 也是可以的
killall php-fpm
启动/重启/停止
service php-fpm start|restart|stop
查看php 相关进程
ps aux | grep php
查看php版本
php -v
安装完成!
安装Nginx
1、建系统组别与用户
//添加nginx用户组groupadd nginx
//添加nginx用户useradd nginx -g nginx -s /sbin/nologin -M说明:-s表示指定用户所用的shell,此处为/sbin/nologin,表示不登录。-M表示不创建用户主目录。-g表示指定用户的组名为nginx。
2、下载解压
wget http://nginx.org/download/nginx-1.15.8.tar.gztar zxf nginx-1.15.8.tar.gzcd nginx-1.15.8
编译前保证依赖库和编译软件的存在,没有最好需要提前安装
yum install gcc gcc-c++ glibc -yyum install pcre-devel -yyum install zlib-devel -yyum install openssl-devel -y
3、编译安装
相关指定的参数可复制百度搜索其意义,基本上是指定安装的路径和一些访问日志错误日志临时文件等的存放位置
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
输出nginx的配置信息
最后执行如下
make && make install
执行完成可查看配置信息
修改启动软连
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
查看是否能成功启动
nginx -t
此提示下则启动成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
若出现以下情况,自行创建对应文件夹即可
启动nginx服务
nginx -s reload
若出现有提示
nginx: [alert] kill(17615, 1) failed (3: No such process)
指定配置文件地址后再重启即可
/usr/bin/nginx -c /usr/local/nginx/conf/nginx.conf
安装Mysql
选用的版本是5.7.35
1、下载mysql安装包并解压
由于在linux环境编译安装,因此选取的是源码-通用linux版本
2、安装boost
下载boost.1.59及以上版本(MySQL5.7所需)
wget https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
解压后执行(安装目录统一都在*/usr/local/src*)
tar -zxvf boost_1_59_0.tar.gzcd boost_1_59_0./bootstrap.sh./b2./b2 install
3、编译安装mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/mydata -DSYSCONFDIR=/usr/local/mysql/conf -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_DEBUG=0 -DMYSQL_MAINTAINER_MODE=0 -DWITH_SSL:STRING=bundled -DWITH_SSL=system -DWITH_ZLIB:STRING=bundled -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost -DWITH_BOOST=/usr/local/src
基本的参数说明
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 设置安装目录-DMYSQL_DATADIR=/usr/local/mysql/mydata 设置数据库存放目录-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock 设置UNIX socket 目录-DMYSQL_USER=mysql 设置运行用户-DDEFAULT_CHARSET=utf8 设置默认字符集,默认latin1-DEFAULT_COLLATION=utf8_general_ci 设置默认校对规则,默认latin1_general_ci-DWITH_INNOBASE_STORAGE_ENGINE=1 添加InnoDB引擎支持-DENABLE_DOWNLOADS=1 自动下载可选文件,比如自动下载谷歌的测试包-DMYSQL_TCP_PORT=3306 设置服务器监听端口,默认3306-DSYSCONFDIR=/usr/local/mysql/conf 设置my.cnf所在目录,默认为安装目录更多参数执行 # cmake . -LH 或者查看官方说明
可能出现的问题
1)Cannot find appropriate system libraries for WITH_SSL=system.Make sure you have specified a supported SSL version.解决方案yum install -y openssl openssl-devel //大致网上的解答都是这个 问题还未处理-DWITH_SSL=system //编译时增加此参数 问题处理2)CMake Error at cmake/boost.cmake:81 (MESSAGE)解决方案-DWITH_BOOST=/usr/local/src //编译是指定前面安装的boost依赖地址即可3)Package ‘libtirpc‘, required by ‘virtual:world‘, not found-- Checking for module ‘libtirpc‘-- Package ‘libtirpc‘, required by ‘virtual:world‘, not foundCMake Error at cmake/rpc.cmake:65 (MESSAGE):Could not find rpc/rpc.h in /usr/include or /usr/include/tirpcCall Stack (most recent call first)解决方案yum install -y libtirpc-devel4)Could not find rpcgenCMake Error at rapid/plugin/group_replication/rpcgen.cmake:93 (MESSAGE):Could not find rpcgenCall Stack (most recent call first):rapid/plugin/group_replication/CMakeLists.txt:29 (INCLUDE)解决方案(安装编译rpcsvc)wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.1/rpcsvc-proto-1.4.1.tar.xzxz -d rpcsvc-proto-1.4.1.tar.xztar -xvf rpcsvc-proto-1.4.1.tarcd rpcsvc-proto-1.4.1./configuremakemake instal5)-bash: cmake: command not found解决方案yum install cmake -y
编译与安装
make && make install
4、为了安全,需要创建mysql用户组 和mysql用户来运行mysql
groupadd mysql useradd -r -g mysql -s /bin/false mysql //不用登录 //或者 chown -R mysql:mysql /usr/local/mysql/
5、赋予相关权限
mkdir -p /usr/local/mysql/mydata mkdir -p /usr/local/mysql/conf chown -R mysql:mysql /usr/local/mysql
6、将 mysql 的 bin 目录加入环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profilesource /etc/profile
7、初始化
mysqld --initialize --user=mysql
8、初由于MySQL5.7 需要自己创建 my.cnf 文件夹, mysql 默认会启动 /etc/my.cnf 这里的文件。但是位置是可以调整的
[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datapid-file=/usr/local/mysql/data/mysqld.pidsocket=/usr/local/mysql/mysql.socklog_error=/usr/local/mysql/data/mysql.erruser=mysqlexplicit_defaults_for_timestamp=trueskip-grant-tables
9、复制启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqlchmod +x /etc/init.d/mysql //增加权限
10、启动服务
service mysql start
可能存在的问题
启动失败Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/data/mysqld.pid).解决方案通过日志mysql.err进行分析如[ERROR] Can't start server: Bind on TCP/IP port: Address already in use[ERROR] Do you already have another mysqld server running on port: 3306?说明存在端口占用情况netstat -anp | grep 3306kill -s 9 端口号再重新启动即可Could not create unix socket lock file /usr/local/mysql/mysql.sock.lock.权限问题mkdir -p /usr/local/mysql/chown -R mysql:mysql /usr/local/mysql/ 即可解决
启动成功
Starting MySQL. [ OK ]
输入mysql即可使用
注:参考文章
https://www.cnblogs.com/dump/p/10329850.html