Firefly开源社区
标题: [玩转Firefly-RK3399]搭建LNMP服务环境 [打印本页]
作者: ZZP 时间: 2017-6-21 09:31
标题: [玩转Firefly-RK3399]搭建LNMP服务环境
本帖最后由 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、安装mysql数据库
- sudo apt-get install mysql-server
复制代码
说明:安装过程会提示设置root超级用户密码
2、安装nginx和php
- #添加nginx和php的ppa源
- sudo apt-add-repository ppa:nginx/stable
- sudo apt-add-repository ppa:ondrej/php
- sudo apt-get update
-
- #安装nginx和php
- sudo apt-get install nginx
- 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管理器
4.修改配置文件
a、修改php-fpm配置文件
- sudo vim /etc/php/7.1/fpm/pool.d/www.conf
复制代码
- #nginx 和fastcgi通信有2种方式,一种是TCP方式,还有种是UNIX Socket方式
- #默认是socket方式
- listen = /run/php/php7.1-fpm.sock
- #TCP方式
- #listen = 127.0.0.1:9000
复制代码
可以用如下方式检查下配置文件是否有错误
修改完www.conf配置文件,需要重启下 php-fpm7.1
- sudo service php-fpm7.1 restart
复制代码
b、修改nginx配置文件
- 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
- sudo service nginx restart
复制代码
nginx 检查配置文件命令是
说明:可以根据自己项目环境进行配置
5、测试 php
我们在/var/www目录下,新建个index.php测试下看看
解决问题:
此时我们发现,在浏览器里边测试localhost/index.php显示空白,经过百度找到解决方案如下:
由于nginx与PHP-fpm之间的一个小bug,会导致这样的现象: 网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码, 但实际输出给浏览器的页面内容却是空白。
简而言之,原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析,相当于php-fpm接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。 为了解决这个问题,需要改动nginx默认的fastcgiparams配置文件:
- sudo vim /etc/nginx/fastcgi_params
复制代码
在文件的最后增加两行:
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param PATH_INFO $fastcgi_script_name;
复制代码
然后重启Firefly,重新访问localhost/index.php即可显示如图:
6、显示上图说明已配置成功,默认安装php缺少很多拓展库,可以根据需要自行安装
a、查看PHP已安装的拓展库[php -m]:
- firefly@firefly:~$ php -m
- [PHP Modules]
- calendar
- Core
- ctype
- date
- exif
- fileinfo
- ...
-
复制代码
b、安装拓展库,例如php-mysql
- firefly@firefly:~$ php apt-get install php-mysql
复制代码
7、安装phpMyAdmin
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。
a、安装phpmyadmin之前,先安装mysql,搭建LNMP环境时候已经安装过mysql可以跳过此步骤:
- $ sudo apt-get install mysql-server
- $ sudo apt-get install mysql-client
复制代码
说明:安装过程中需要输入root用户密码
b、安装phpmyadmin
- $ sudo apt-get install phpmyadmin
- $ sudo apt-get install php-mbstring
- $ sudo apt-get install php-gettext
复制代码
安装时选择自动配置数据库,输入数据库root帐号的密码
c、建立/var/www 下的软链接
- $ 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 直接解决
作者: ZZP 时间: 2017-6-21 09:42
to:论坛网站开发人员,重新编辑主题后,发现插入代码标签会自动添加 <font color="rgb(51, 51, 51)"><font face="""></font></font> 标记,体验非常不好
作者: 追求 时间: 2017-7-1 21:26
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
合作可以共同壮大市场,轻松生活;封闭即便不能累死人也能饿死人
作者: myfirefly 时间: 2017-7-2 19:24
支持楼主好帖
作者: ZZP 时间: 2017-7-21 16:55
本帖最后由 ZZP 于 2017-7-22 17:32 编辑
修正一个问题:
重启下 php-fpm7.1
- sudo service php-fpm7.1 restart
复制代码
执行失败,改用下边:
- sudo /etc/init.d/php7.1-fpm restart
复制代码
作者: ZZP 时间: 2017-7-21 17:03
修正:
安装拓展库,例如php-mysql
firefly@firefly:~$ sudo apt-get install php-mysql
作者: 追求 时间: 2017-8-12 11:03
不能通过局域网连接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
作者: 追求 时间: 2017-8-12 11:05
已经尝试过各种权限设置:
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;
作者: 追求 时间: 2017-8-24 06:56
问题找到了,要远程连接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
然后重启系统,再次远程连接应该可以成功
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) |
Powered by Discuz! X3.1 |