Firefly开源社区

[玩转Firefly-RK3399]搭建LNMP服务环境

回帖奖励 3 灯泡 回复本帖可获得 1 灯泡奖励! 每人限 1 次

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2017-6-21 09:31:50     
本帖最后由 ZZP 于 2017-6-21 09:39 编辑

一、什么是LNMP

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。


二、开始搭建环境

开始之前先更新系统源


  1. sudo apt-get update
复制代码



1、安装mysql数据库


  1. sudo apt-get install mysql-server
复制代码


说明:安装过程会提示设置root超级用户密码


2、安装nginx和php


  1. #添加nginx和php的ppa源
  2. sudo apt-add-repository ppa:nginx/stable
  3. sudo apt-add-repository ppa:ondrej/php
  4. sudo apt-get update

  5. #安装nginx和php
  6. sudo apt-get install nginx
  7. sudo apt-get install php
复制代码


说明:安装好nginx,打开浏览器输入 http://localhost    看到 Welcome to nginx! 说明安装成功了。

当前默认安装的版本: nginx对应1.12.0, php对应7.1 (通常是向下兼容,根据特殊需要,可以制定版本安装,例如 sudo apt-get install php5.6)



3、安装PHPFastCGI管理器


  1. sudo apt install php-fpm
复制代码


4.修改配置文件

a、修改php-fpm配置文件


  1. sudo vim /etc/php/7.1/fpm/pool.d/www.conf
复制代码


  1. #nginx 和fastcgi通信有2种方式,一种是TCP方式,还有种是UNIX Socket方式
  2. #默认是socket方式
  3. listen = /run/php/php7.1-fpm.sock

  4. #TCP方式
  5. #listen = 127.0.0.1:9000
复制代码


可以用如下方式检查下配置文件是否有错误
  1. sudo php-fpm7.1 -t
复制代码

修改完www.conf配置文件,需要重启下 php-fpm7.1
  1. sudo service php-fpm7.1 restart
复制代码




b、修改nginx配置文件

  1. sudo vim /etc/nginx/sites-enabled/default
复制代码


================================

#指定localhost默认路径
root /var/www;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

#找到 location ~ \.php$ { ,取消注释,并修改里面内容如下:

       location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #  socket 方式 必须和上面socket的listen路径一样
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #  TCP方式
        #       fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
        }


====================================
说明:

1)特别注意红色标记部分为修改或添加部分;
2)不管用那种方式,通信方式一定要对应。


修改重启下 nginx

  1. sudo service nginx restart
复制代码

nginx 检查配置文件命令是
  1. sudo nginx -t
复制代码



说明:可以根据自己项目环境进行配置



5、测试 php

我们在/var/www目录下,新建个index.php测试下看看


  1. <?php
  2.     phpinfo();
  3. ?>
复制代码


解决问题:

此时我们发现,在浏览器里边测试localhost/index.php显示空白,经过百度找到解决方案如下:

   由于nginx与PHP-fpm之间的一个小bug,会导致这样的现象: 网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码, 但实际输出给浏览器的页面内容却是空白。

   简而言之,原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析,相当于php-fpm接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。 为了解决这个问题,需要改动nginx默认的fastcgiparams配置文件:


  1. sudo vim /etc/nginx/fastcgi_params
复制代码

    在文件的最后增加两行:


  1. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
  2. fastcgi_param PATH_INFO                $fastcgi_script_name;  
复制代码


然后重启Firefly,重新访问localhost/index.php即可显示如图:

php显示.png


6、显示上图说明已配置成功,默认安装php缺少很多拓展库,可以根据需要自行安装

a、查看PHP已安装的拓展库[php -m]:

  1. firefly@firefly:~$ php -m
  2. [PHP Modules]
  3. calendar
  4. Core
  5. ctype
  6. date
  7. exif
  8. fileinfo
  9. ...
复制代码




b、安装拓展库,例如php-mysql

  1. firefly@firefly:~$ php apt-get install php-mysql
复制代码


7、安装phpMyAdmin

    phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。


a、安装phpmyadmin之前,先安装mysql,搭建LNMP环境时候已经安装过mysql可以跳过此步骤:


  1. $ sudo apt-get install mysql-server
  2. $ sudo apt-get install mysql-client
复制代码

说明:安装过程中需要输入root用户密码


b、安装phpmyadmin


  1. $ sudo apt-get install phpmyadmin
  2. $ sudo apt-get install php-mbstring
  3. $ sudo apt-get install php-gettext
复制代码


安装时选择自动配置数据库,输入数据库root帐号的密码


c、建立/var/www 下的软链接


  1. $ sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
复制代码


配置成功后可通过 localhost/phpmyadmin 进行访问,默认帐号为root,密码为安装phpmyadmin时设置的初始密码


说明:如果web服务器是apache,则需要修改PHP配置文件





[附录] 一些引用和常见问题

1、安装lnmp环境
http://www.cnblogs.com/ddling/p/5906109.html


2、nginx+php-fpm配置后页面显示空白的解决方法
http://blog.csdn.net/feiniao8651/article/details/52768911



3、重启 php-fpm7.1用这个:sudo service /etc/init.d/php-fpm7.1 restart
不知为何报错:Failed to restart etc-init.d-php\x2dfpm7.1.service.mount: Unit etc-init.d-php\x2dfpm7.1.service.mount not found.

解决,改用重启:/etc/init.d/php7.1-fpm restart


4、phpmyadmin 提示:The mbstring extension is missing. Please check your PHP configuration.
https://jingyan.baidu.com/article/c14654139b65ae0bfcfc4cf8.html

php -m 查看,没有对应模块
sudo apt-get install php7.1-mbstring 还需要手动添加扩展


5、phpmyadmin 提示:
The mysqli extension is missing. Please check your PHP configuration. See our documentation for more information.
http://www.cnblogs.com/pualus/p/6829644.html

sudo apt-get install php7.1-mysql 直接解决



回复

使用道具 举报

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2017-6-21 09:42:03     
to:论坛网站开发人员,重新编辑主题后,发现插入代码标签会自动添加 <font color="rgb(51, 51, 51)"><font face="&quot;"></font></font> 标记,体验非常不好
回复

使用道具 举报

134

积分

0

威望

0

贡献

技术小白

Rank: 1

积分
134
发表于 2017-7-1 21:26:17     

回帖奖励 +1 灯泡

debian系统中可能不支持apt-add-repository命令,添加系统源需要直接修改sources.list文件或者在sources.list.d/目录下新建文件;

执行如下两命令后:
sudo apt-add-repository ppa:nginx/stable
sudo apt-add-repository ppa:ondrej/php
会在/etc/apt/sources.list.d$目录下生成三个文件:
nginx-ubuntu-stable-xenial.list      
ondrej-ubuntu-php-xenial.list
nginx-ubuntu-stable-xenial.list.save
这几个文件中的内容分别为:
nginx-ubuntu-stable-xenial.list :
deb http://ppa.launchpad.net/nginx/stable/ubuntu xenial main
# deb-src http://ppa.launchpad.net/nginx/stable/ubuntu xenial main


ondrej-ubuntu-php-xenial.list:
deb http://ppa.launchpad.net/ondrej/php/ubuntu xenial main
# deb-src http://ppa.launchpad.net/ondrej/php/ubuntu xenial main

nginx-ubuntu-stable-xenial.list.save:
deb http://ppa.launchpad.net/nginx/stable/ubuntu xenial main
# deb-src http://ppa.launchpad.net/nginx/stable/ubuntu xenial main

合作可以共同壮大市场,轻松生活;封闭即便不能累死人也能饿死人
回复

使用道具 举报

14

积分

0

威望

0

贡献

技术小白

Rank: 1

积分
14
发表于 2017-7-2 19:24:21     

回帖奖励 +1 灯泡

支持楼主好帖
回复

使用道具 举报

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2017-7-21 16:55:06     
本帖最后由 ZZP 于 2017-7-22 17:32 编辑

修正一个问题:
重启下 php-fpm7.1
  1. sudo service php-fpm7.1 restart
复制代码

执行失败,改用下边:
  1. sudo /etc/init.d/php7.1-fpm restart
复制代码





回复

使用道具 举报

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2017-7-21 17:03:41     
修正:
安装拓展库,例如php-mysql
firefly@firefly:~$ sudo apt-get install php-mysql
回复

使用道具 举报

134

积分

0

威望

0

贡献

技术小白

Rank: 1

积分
134
发表于 2017-8-12 11:03:45     
不能通过局域网连接mysql呢?

Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
        at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:590)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:57)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1606)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:633)
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219)
        at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
        ... 29 more
Caused by: com.mysql.cj.core.exceptions.CJCommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
        at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:93)
        at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:133)
        at com.mysql.cj.core.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:149)
        at com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:83)
        at com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:122)
        at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1726)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1596)
        ... 33 more
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at com.mysql.cj.core.io.StandardSocketFactory.connect(StandardSocketFactory.java:202)
        at com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57)
        ... 36 more
回复

使用道具 举报

134

积分

0

威望

0

贡献

技术小白

Rank: 1

积分
134
发表于 2017-8-12 11:05:08     
已经尝试过各种权限设置:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.107' IDENTIFIED BY 'myPassword' WITH GRANT OPTION;
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password AS '***';
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE NONE;
回复

使用道具 举报

134

积分

0

威望

0

贡献

技术小白

Rank: 1

积分
134
发表于 2017-8-24 06:56:59     
问题找到了,要远程连接mysql,不管要用sql语句赋权,而且要修改配置文件:
sudo /etc/mysql/mysql.conf.d/mysqld.cnf (mysql)
sudo vi /etc/mysql/my.cnf (mariadb)
注释掉下面一行(开头加"#")
bind-address = 127.0.0.1
修改后变为:
#bind-address = 127.0.0.1

然后重启系统,再次远程连接应该可以成功
回复

使用道具 举报

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表