centos8上第一次安装

CentOS8系统上的安装最终失败了。

centos开启ssh服务

开始:
centos安装LNMP

Nginx已经安装通过,mysql安装已经通过。

mysql在安装时需要注意,执行这个之前:

[root@localhost src]# yum install mysql-community-server

需要先执行这个(但是,在centos7上不用执行这个):

yum module disable mysql

否则会出现错误信息:

未找到匹配的参数:mysql-community-server错误:没有任何匹配

php安装:

安装依赖:libiconv 下载:ftp.gnu.org/pub/gnu/libiconv/

tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make
make install

make 命令如果报错,解决办法看这里:https://blog.csdn.net/weixin_34248705/article/details/92743264

在centos7上重新开始

按照这里从头开始执行,一直到第四步的7,发现/etc目录下没有php-fpm.conf.default文件(该目录是php通过rpm源安装的默认目录,php.ini就在这个文件夹下),此时参照这里,从四、2 开始,即配置php-fpm使nginx能解析php。

可能出现的错误【1】:配置完后重启php-fpm,这时可能无法重启,显示ERROR: [pool www] cannot get uid for user ‘nginx’,此时用这个解决:启动php-fpm报错的解决. 然后继续配置即可。

安装mysql参考博客2面的安装mysql部分即可。

查看初始密码后登陆。(mysql初始密码:dsZlIHhn-0gS)

安装完成后,需要重新设置密码才能使用,博客2中设置的新密码不符合要求,按照mysql的默认密码要求,新设的密码必须要满足8位以上,大小写字母,数字,特殊字符混合,这几个要求。使用新的密码登陆后,可以查看mysql的密码策略并修改策略,使简单密码可用,参考博客3,执行

set global validate_password.policy=LOW;

即可,之后便能够将密码设置为‘123’这种简单的形式。

将CI4框架整合进nginx,参考博客4:只需在nginx.conf的server{}中补充

location /api {alias /var/www/api/public;try_files $uri $uri/ @api;location ~ \.php$ {include fastcgi.conf;fastcgi_param SCRIPT_FILENAME    $request_filename;fastcgi_pass        unix:/run/php/php7.2-fpm.sock;}
}

即可。

参考上文,我的具体设置为:

server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;# these rows are set into # by myself, to avoid to conflict with the next location rowslocation / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /test {alias html/test/MyCIDemo/public;try_files $uri $uri/ @api;location ~ \.php$ {include fastcgi.conf;fastcgi_param SCRIPT_FILENAME $request_filename;fastcgi_pass  127.0.0.1:9000;}
}
# 我将CI4项目目录MyCIDemo放在了/usr/local/nginx/html/test目录下,此处的alias需要设置为public目录(里面放着入口php,即CI自带的index.php)# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#这一段是我从别的博客上拿来的,与CI框架项目无关,可以直接访问单独的某个php文件location ~ \.php$ {root           html/test;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}
}

这样设置之后,在浏览器输入localhost/test/index.php/controller/method即可运行CI框架,

也可以输入localhost/test/xxx.php直接访问(位于html/test/MyCIDemo/public下的)其他PHP文件。

遇到的BUG

1 selinux

在linux环境中,CI框架在nginx上运行时,先进行KaTeX parse error: Undefined control sequence: \Cache at position 66: …异常。【CodeIgniter\̲C̲a̲c̲h̲e̲\Exceptions\Cac…file就是cache的文件夹路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IhPEVNiE-1594629337218)(C:\Users\liyunzeng\AppData\Roaming\Typora\typora-user-images\image-20200706164937686.png)]

看到代码上的注释,猜想需要关闭php的安全模式(在php.ini中令safe_mode=Off),。但是在php5.4之后 就移除了safe_mode,php.ini中就没有safe_mode这一项了,但CI框架还是会读取,我尝试在php.ini中添加上safe_mode=Off。但是不管用。事实证明 DIRECTORY_SEPARATOR===‘/’ 是TRUE的,因此与后面的ini_get(‘safe_mode’)无关。出现异常是因为 is_writable函数返回了false。

函数is_writable找不到函数体(可能是底层函数),其说明为:Returns TRUE if the filename exists and is writable. The filename argument may be a directory name allowing you to check if a directory is writable.
Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often ‘nobody’). Safe mode limitations are not taken into account. (如果文件名存在且可写,则返回TRUE。filename参数可以是允许您检查目录是否可写的目录名。请记住,PHP可能以web服务器运行时的用户id(通常为“nobody”)访问该文件。不考虑安全模式限制。)

猜想可能是在上文提到的错误【1】时设置了php_fpm的用户为nginx,用户组为nginx,这个用户可能没有高的权限导致无法写文件。接下来尝试修改nginx的权限。修改了对应目录(也就是is_writable函数的参数$file,运行时是项目目录下的writable/cache文件夹)的权限为777(所有用户可读可写可执行,最高权限)(或者把这个文件夹的所属用户和用户组改为nginx),但是还是不管用。

原因已找到:linux系统中selinux默认开启的原因,在线上环境中selinux是关闭的。如何设置selinux

修改selinux之后,还需要修改CI框架对cache的目录设置,将这个目录设置为自定义的一个目录(设置为了/data/ci_cache。设为/usr之下或者/tmp之下好像是不行的,即使已经将cache文件夹的权限设为777也不行。这两个目录最好不要设为777的权限,因此自定义一个文件夹来保存cache)

方法:修改app/Config/Cache.php:

public $storePath =  '/data/ci_cache/';

修改/data/ci_cache文件夹的属主和属组为上文提到的错误【1】中设置的php_fpm的用户和用户组。(线上环境中,这个用户和用户组一般是nobody,一个无需自己创建的用户和用户组,没有太高的权限,只给他访问某些文件夹的权限,这样可以保证项目运行的安全性)

2 数据库密码

连接数据库错误【 The server requested authentication method unknown to the client】 的解决办法。(本质上是取消数据库密码的加密,设置为一个简单密码)

过程中可能会因为不满足密码要求而无法修改密码,此时就需要参考博客3更改密码要求。(将password_validate.policy设为LOW即可)

3 大小写问题

在linux中,类似于

echo view('templates/header', $data);
echo view('news/index', $data);
echo view('templates/footer');

这种php CI框架中的代码,view函数的第一个参数是文件夹路径(templates/header代表Templates/Header.php这个文件,剩下两行类似),这个在win中是不区分大小写的,也就是说,文件夹实际名字和参数相比可以有大小写的不一致,但是linux中必须一致,否则报错。

4 form_open函数

CI框架封装了一个 form_open的函数:

php===》 echo form_open(‘email/send’)
等同于
html===》

如果这个函数中传入的字符串参数比如‘email/send’,不是一个完整的url,就会自动补充为完整的url,方式是直接把app/Config/App.php中的以下两个变量拼接。

public $baseURL = 'http://localhost:8080/';public $indexPage = 'index.php';

比如,如果form_open中传入‘email/send’那么最终请求的url为‘http://localhost:8080/index.php/email/send’。

启动方式

启动php-fpm:

  1. service php-fpm start (restart 重启)
  2. php的安装目录下的/sbin下执行./php-fpm

php的配置文件在/etc/php.ini和/etc/php.d 下

php-fpm的配置文件在/etc/php-fpm.conf和/etc/php-fpm.d 下

启动mysql:

  1. service mysqld start
  2. systemctl start mysqld.service

配置文件在/etc/my.conf 和 /etc/my.cnf.d下

启动nginx:

  1. nginx的安装目录下的/sbin下执行./nginx [-t 测试能否启动/ -s reload 重新读取配置文件并重启]
  2. 配置文件在安装目录下的conf/nginx.conf

安装LNMP环境并跑一个CI框架demo相关推荐

  1. CentOS6.9编译安装LNMP环境

    CentOS6.9编译安装LNMP环境 今天尝试一下用编译的方式来搭建lnmp运行环境.所有软件都采用当前最新版本,除了CentOS.这是由于目前企业大多数应该都还在使用CentOS6的缘故,并且Ce ...

  2. 【项目上线】详细步骤03:一键安装lnmp环境,配置Nginx+Node+MongoDB+MySQL+PHP环境...

    Lnmp.org网址:https://lnmp.org/install.html 一.一键安装lnmp环境 第一步: wget -c http://soft.vpser.net/lnmp/lnmp1. ...

  3. 阿里云Ubuntu安装LNMP环境之Mysql

    在QQ群很多朋友问阿里云服务器怎么安装LNMP环境,怎么把项目放到服务器上面去,在这里,我就从头开始教大家怎么在阿里云服务器安装LNMP环境. 在这之前,我们先要知道什么是LNMP. L: 表示的是L ...

  4. 亚马逊AWS EC2云实例AMI安装LNMP环境(1)——Nginx安装

    概括:这里选择亚马逊EC2的Linux AMI实例,该Linux服务器是亚马逊预配置的Linux环境,内置多个YUM源,属于亚马逊首推的稳定Linux服务器.默认登录用户名为ec2-user,执行ro ...

  5. 亚马逊AWS EC2云实例AMI安装LNMP环境(3)——Mysql5.5

    概括:这里选择亚马逊EC2的Linux AMI实例,该Linux服务器是亚马逊预配置的Linux环境,内置多个YUM源,属于亚马逊首推的稳定Linux服务器.默认登录用户名为ec2-user,执行ro ...

  6. tengine简单安装_树莓派使用宝塔面板安装LNMP环境

    书接上回,前面说到我被垃圾Rock 64搞的死去活来,索性在树莓派上装了Ubuntu 20.04 LTS. 为了方便配置V2Ray,我忙活了一天终于把LNMP环境搞定了.下面说说怎么搞的,避免后面再踩 ...

  7. CentOS 6.4用源代码安装LNMP环境

    2019独角兽企业重金招聘Python工程师标准>>> CentOS 6.4用源代码安装LNMP环境 对于在Linux系统中安装web服务其实都是差不多的,只是软件的选择不一样,不过 ...

  8. ansible----playbook安装lnmp环境

    一.ansible--playbook介绍 playbook是由一个或多个"play"组成的列表.play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task ...

  9. 处理一键安装LNMP环境之后,phpinfo.php打开不显示内容的问题

    ############################################################################################# ##本文内容 ...

最新文章

  1. 7.pip工具的使用
  2. 一招一式, 成就“霸业”必做的9件大事
  3. 用 UrlRewriteFilter 实现 URL 重写
  4. Action+Service +Dao三层的功能划分
  5. 让我们用 SQL 开发一个图形数据库吧
  6. 37.Linux/Unix 系统编程手册(下) -- DAEMON
  7. 使用MyEclipse的自动提醒功能卡死MyEclipse的激活
  8. 计算机搜不到word了,电脑word找不到路径
  9. Proftpd配置文件
  10. Pygame学习笔记 4 —— 时间与运动
  11. Python 详细教程 —— pyautogui 库 基本用法
  12. 归途表情 哪个get到了你回家的心情
  13. pycharm发送邮件(QQ邮箱和网易163为例)
  14. 为什么插入HDMI线,电脑的音响就没有声音了
  15. fir.im Weekly - 当技术成为一种“武器”
  16. 混沌精英哈里斯鹰优化算法-附代码
  17. 关于操作Excel的各种库及方法
  18. ParagonNTFS15.9.314新版Mac强大的读写工具
  19. UltralSO制作Centos U盘系统盘
  20. 如何按需下载和安装Win10补丁

热门文章

  1. int 到char的正确转换
  2. java的类加载器以及如何自定义类加载器
  3. 动物世界APP的优势以及特色
  4. CBOW模型,源码实现
  5. C#实现HMACSHA256加密算法
  6. 公众号运营小编自制gif动图的方法
  7. H5解决IOS橡皮筋问题(改进Vue)
  8. Flutter项目WanWan之数据库moor
  9. mealy machine和moore machine
  10. 给WORD文档加红色删除线