Lnmp.org访问Laravel5.5 + 配置
1.首先说一下,Lnmp包里需要自己的是CentOS7.1.1503,断点需要自己安装Xdebug,如果访问Laravel框架或者ThinkPHP主流框架,需要自己再配置一些东西,因为包内遵循的是
.user.ini
访问规范,直接访问/public/index.php
是访问不到的!
2.下载安装包网址 lnmp.org-download 官方有wget安装命令
3.github地址 github - licess/lnmp 文档写的很直观
【安装LNMP1.4稳定版】
wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp
【安装LNMP1.5稳定版】
wget http://soft.vpser.net/lnmp/lnmp1.5beta.tar.gz -cO lnmp1.5beta.tar.gz && tar zxf lnmp1.5beta.tar.gz && cd lnmp1.5 && ./install.sh lnmp
【PHP7.2,Mysql5.7】
wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && LNMP_Auto="y" DBSelect="4" DB_Root_Password="123456" InstallInnodb="y" PHPSelect="8" SelectMalloc="1" ./install.sh lnmp
安装步骤解释请阅读官方网址的安装,这里就不废话了
【查看lnmp内置命令】sudo lnmp -list
【删除.user.ini命令】chattr -i ./.user.*
+-------------------------------------------+
| Manager for LNMP, Written by Licess |
+-------------------------------------------+
| https://lnmp.org |
+-------------------------------------------+
Usage: lnmp {start|stop|reload|restart|kill|status}
Usage: lnmp {nginx|mysql|mariadb|php-fpm|pureftpd} {start|stop|reload|restart|kill|status}
Usage: lnmp vhost {add|list|del}
Usage: lnmp database {add|list|edit|del}
Usage: lnmp ftp {add|list|edit|del|show}
Usage: lnmp ssl add
安装完我们先生成vhost.conf域名访问文件
[vagrant@localhost] sudo lnmp vhost add
- 解决
.user.ini
的问题
[vagrant@localhost] sudo chattr -i ./.user.*
[vagrant@localhost] sudo rm -rf .user.ini
[vagrant@localhost] sudo lnmp restart
我们进入PHP目录/usr/local/php/etc,找到php.ini文件,先把错误提示打开
[vagrant@localhost] sudo vi /usr/local/php/etc/php.ini 修改 display_errors = On;
保存退出后,重启下lnmp
[vagrant@localhost] sudo lnmp restart
再次访问的时候,没有500错误了,显示了另外一个错误提示:
Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/sfabric.nginx/bootstrap/autoload.php) is not within the allowed path(s): (/home/wwwroot/sfabric.nginx/public/:/tmp/:/proc/) in /home/wwwroot/sfabric.nginx/public/index.php on line 21
Warning: require(/home/wwwroot/sfabric.nginx/bootstrap/autoload.php): failed to open stream: Operation not permitted in /home/wwwroot/sfabric.nginx/public/index.php on line 21
Fatal error: require(): Failed opening required '/home/wwwroot/sfabric.nginx/public/../bootstrap/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/sfabric.nginx/public/index.php on line 21
这个错误提示是php执行权限的问题:
我们先找到在哪个文件设置了open_basedir
进入到/usr/local/nginx/conf目录下,打开fastcgi.conf文件,在这个文件里面最后一行设置了open_basedir:
[vagrant@localhost] sudo vi /usr/local/nginx/conf/fastcgi.conf
保存退出,重启
[vagrant@localhost] sudo lnmp restart
你发现项目还是打不开,500未找到。需要你去vhost配置域名的地方加下面代码
location / {
try_files $uri $uri/ /index.php?$query_string;
}
这是nginx的原因
开始对项目调试:
当你开心的打开看到Laravel的画面是,别鸡冻。
1.composer的时候还是会报错的
2.项目权限用户属租也会报错的
(这里线上服务器需要修改下用户属组chown -R www:www laravel55/
)
(如果是laravel.log日志报错执行sudo chmod -R 777 storage
)
打开php配置文件
[vagrant@localhost] sudo vi /usr/local/php/etc/php.ini
如果还报错Laravel 致命错误:找不到Class'Illuminate \ Foundation \ Application'
运行一下composer update
即可解决
什么?还不行? emmmmm ~
运行一下php artisan key:generate
重新生成项目的key一下
下面的这个报错,我解决了好久。一开始没看仔细以为是文件权限属组问题
其实是 php-fpm以root身份运行感谢CSDN解决我的疑惑
查看权限ps aux | grep php-fpm
修改/usr/local/php/etc/php-fpm.conf
文件给vagrnat的属组
CentOS.7 安装 Xdebug
下载Xdebug网址 xdebug.org-download
安装到/usr/local:用户级的程序目录
cd到/usr/local 执行 sudo mkdir ./xdebug
【-p指定安装下载】sudo wget http://xdebug.org/files/xdebug-2.6.0.tgz -p /usr/local/xdebug/
【进入下载后的文件】cd /usr/local/xdebug/xdebug.org/files/
【拷贝到创建的目录】sudo cp xdebug-2.6.0.tgz /usr/local/xdebug/
【解压文件】sudo tar -xzf xdebug-2.6.0.tgz
【进入文件】cd xdebug-2.6.0
【执行】sudo /usr/local/php/bin/phpize
【配置】sudo ./configure --with-php-config=/usr/local/php/bin/php-config
【开始编译】sudo make install
成功后,会提示你:Installing shared extensions: /usr/local/php/lib/php/extensions... ...
【查询下xdebug.so路径】sudo find / -name xdebug.so
【打开php.ini】sudo vi /usr/local/php/etc/php.ini
【末尾添加代码】
[xDebug]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
【重启lnmp】lnmp restart
【检测是否安装成功Xdebug】php -m | grep xdebug
安装 fileinfo 上传文件扩展
- 检测PHP是否安装
php -i|grep fileinfo // 看是否已安装fileinfo扩展,若没有,则进行下一步
- 安装到PHP目录
cd /usr/local/php && php -v
- 对应自己的
PHP版本
下载扩展
wget -O php-7.1.18.tar.gz http://cn2.php.net/get/php-7.1.18.tar.gz/from/this/mirror
tar -zxvf php-7.1.18.tar.gz
- 执行安装 和 编译
// >[执行phpize命令]注意,该命令一定要在上面说到的fileinfo目录下执行
cd /usr/local/php/php-7.1.18/ext/fileinfo && /usr/local/php/bin/phpize
# 如果执行成功,会有类似下面的信息
# Configuring for:
# PHP Api Version: 20160303
# Zend Module Api No: 20160303
# Zend Extension Api No: 320160303
// 配置php-config路径,以自己服务器的实际路径为准
./configure --with-php-config=/usr/local/php7/bin/php-config
// 编译安装
make && make install
- 最后
php.ini
添加以下代码并重启lnmp
extension=fileinfo.so
// 记得 lnmp restart
安装 Redis
整理的内容借鉴博客 Redis安装与卸载
- 下载并编译(手动启动)
cd /usr/local && mkdir redis && cd /usr/local/redis
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
tar xzf redis-4.0.10.tar.gz
cd redis-4.0.10
make
make install
redis-server # 看到这个界面的话,就表示安装成功了
- 配置redis后台启动
cd /usr/local/redis/redis-4.0.10 && vim redis.conf
daemonize no
修改为:
daemonize yes
- 设置redis服务器开机自动启动:
cd utils/
将 utils/redis_init_script 复制到 /etc/init.d目录下 并 命名为redis
cp redis_init_script /etc/init.d/redis && ll /etc/init.d/redis
- 继续编辑启动文件,修改其中指定的pid和配置文件
vim /etc/init.d/redis
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
修改为
PIDFILE=/var/redis/run/redis_${REDISPORT}.pid
CONF="/etc/redis/redis.conf"
- 创建存放pid的目录为/var/redis/run
cd /var/ && mkdir redis && cd redis && mkdir run && ls -al
- 接下来,我们需要把配置文件复制一份到/etc/redis这个目录下面去
cd /etc && mkdir redis && cd redis && cp /usr/local/redis/redis-4.0.10/redis.conf ./ && ls -al && pwd
# (如果报错,检测一下 `/etc/` 目录下有没有叫 `redis` 的这个文件目录)
- 修改配置文件中的pid为前面配置的pid
vim redis.conf
pidfile /var/run/redis_6379.pid
修改为
pidfile /var/redis/run/redis_6379.pid
- 至此为止,我们已经可以通过service redis start/stop来启动和关闭redis服务了
最后只需要通过
chkconfig redis on
命令来设置开机启动即可。如果提示redis 服务不支持 chkconfig
的话,只需要在/etc/init.d/redis
这个启动脚本的第二行后面加上下面的内容即可。
[root@localhost ~]chkconfig redis on
redis 服务不支持 chkconfig
只需要在`/etc/init.d/redis`这个启动脚本的第二行后面加上下面的内容即可:
# chkconfig:2345 90 10
#
# description:Redis is a persistent key-value database
- 然后再设置开机启动
[root@localhost ~]chkconfig redis on
- 查看
redis
是否启动
ps aux | grep redis
root 9495 0.0 0.7 41672 7572 ? Ssl 12:08 0:00 /usr/local/bin/redis-server 127.0.0.1:6379
Lnmp - Redis 自动安装
好了,上面是讲的
手动安装
,什么?有手动安装肯定有自动安装?Oh!Sorry,下面说一条命令全自动安装,作者不是故意坏,是让小伙伴们过一下流程然后再用傻瓜式自动安装/坏笑/斜眼笑
扩展插件 (去lnmp安装目录下执行):
【安装redis】./addons.sh install redis
【配置全局redis-cli】cp /usr/local/redis/bin/redis-cli /usr/local/bin/
./addons.sh {install|uninstall} {eaccelerator|xcache|memcached|opcache|redis|apcu|imagemagick|ioncube}
Redis报错(丢失文件)
[root@localhost ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
【解决】: 删除
rm -rf /var/redis/
(为了清除前期配置过的文件)
执行cd /var/ && mkdir redis && cd redis && mkdir run && ls -al
(重新创建目录)
运行一遍service redis start
(启动)
查看进程是否启动:ps aux | grep redis
linux下切换用户出现This account is currently not available
【查看所有用户】cat /etc/passwd
【启动www】将/sbin /nologin 改成 /bin/bash
修改默认ssh 22
端口
注意:别忘了去安全组添加自己想要修改的端口号
【打开ssh配置文件】vim /etc/ssh/sshd_config
修改 Post 22值 或者添加再添加一个 Post xxxx
【重启ssh】systemctl restart sshd.service
【查看ssh状态】systemctl status sshd.service
lnmp1.5 开启extension=php_fileinfo.dll 报错处理方法
CSDN-php_fileinfo.dll 报错处理
配置域名转发端口
在
vhost
创建一个文件touch http.conf
server {
listen 80;
server_name xxxx.com www.xxxx.art;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Access-Control-Allow-Origin *;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}}
server {
listen 80;
server_name api.xxxx.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Access-Control-Allow-Origin *;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}}
server {
listen 80;
server_name web.xxxx.com;
location / {
proxy_pass http://127.0.0.1:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Access-Control-Allow-Origin *;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}}
*附 CentOS7防火墙命令操作
【查看防火墙是否开启 dead是没开启】systemctl status firewalld
【查看9000端口是否开启】firewall-cmd --permanent --query-port=9000/tcp
【查看端口的监听】netstat -aptn
【重启防火墙】firewall-cmd --reload
【临时关闭】systemctl stop firewalld
【禁止开机启动】systemctl disable firewalld
【添加9000端口写入配置文件】
firewall-cmd --zone=public --add-port=9000/tcp --permanent
【命令含义:】
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
*附解释 虚拟主机配置文件内容
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name [www.ha97.com](http://www.ha97.com/) ha97.com;
index index.html index.htm index.php;
root /data/www/ha97;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$
{
expires 1h;
}
#日志格式设定
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定义本虚拟主机的访问日志
access_log /var/log/nginx/ha97access.log access;
#对 "/" 启用反向代理
location / {
proxy_pass [http://127.0.0.1:88](http://127.0.0.1:88/);
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
}
#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或resin处理
location ~ .(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080/);
}
#所有静态文件由nginx直接读取不经过tomcat或resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
}
}
*服务器踩坑
【first blood】安全用户组80端口
提示我的PHP 7版本太高,不符合composer.json需要的版本,但是在PHP 7下应该也是可以运行的,composer可以设置忽略版本匹配,命令是:
composer install --ignore-platform-reqs
【DNS解析】Ping 不通 baidu.com
sudo vim /etc/resolv.conf 修改成下面
# Generated by NetworkManager
nameserver 114.114.114.114