Linux+nginx+mysql+php实战nexusPHP

最近要求搭建Linux+nginx+mysql+php以下简称(lnmp)环境来实现校内资源网,,事情来的太过于突然,重点是对以上的平台并不是特别的了解,于是开始了折腾的道路,以下记录了我这三天来的搭建实例,可复现。

开始之前先科普一下上述中的基本知识。

**Linux:**采用的是VMware12版本开启的是Ubuntu16.04版本,64位。

nginx: 采用Ubuntu apt-get 安装方式安装的1.10.3版本

MySQL 也是Ubuntu apt-get 安装方式,版本为5.7.20

php 同上 版本为5.6

nexusPHP: 这是NexusPHP由来自浙江大学的Nexus团队发起并开发完成。它的目标是代替TBSource项目,提供一个完整的、有序的、重视用户信誉和知识的资源分享社区的解决方案。
这是一个比较老的BT开源项目,2010年开源的。源码库:源码镜像


介绍完毕,开始干活!

安装Linux

  • 下载VMware
    因为采用的是VMware平台所以,首先下载VMware12pro,推荐腾讯高速下载地址,速度很快,几分钟完事。然后安装好VMware。

  • 下载Linux
    推荐阿里云镜像网站,选择ubuntu-releases,然后选择Ubuntu版本,下载速度很快,10分钟解决。

然后请参照网络教程配好VMware+Linux环境,这里不再赘述。

安装MySQL

虚拟机Linux环境:

  • 开始安装MySQL
sudo apt-get update
sudo apt-get install mysql-server
sudo apt install libmysqlclient-dev

补充: sudo apt-get install mysql-server
上述命令会安装以下包:
apparmor
mysql-client-5.7 //MySQL的命令行工具
mysql-common
mysql-server
mysql-server-5.7
mysql-server-core-5.7
因此无需再安装mysql-client等。安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql。

上面的libmysqlclient-dev 官方解释是Connector/C (libmysqlclient) is a client library for C development.

• 启动和关闭mysql服务器:
service mysql start
service mysql stop

安装成功后可以通过下面的命令测试是否安装成功:

sudo netstat -tap | grep mysql

这里写图片描述

开启MySQL
这里写图片描述

出现以下错误
Enter password:
ERROR 1698 (28000): Access denied for user ‘root’@'localhost’

使用sudo解决权限问题

sudo mysql –u root -p

查看MySQL字符集,不懂的可以查看我以前的MySQL文章

这里写图片描述

使用以下命令

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]下添加一行 character_set_server=utf8
(则上面的character_set_servercharacter_set_database 将会设置为uft8,
同理添加[mysql]组中的default_character_set=utf8,
则character_set_client、character_set_connection以及character_set_results
将会被修改为utf8,因为已设置所以忽略)

这里写图片描述

重启MySQL服务。service mysql restart

登陆MySQL,并查看MySQL目前设置的编码show variables like “char%”;
成功!

这里写图片描述

如果安装失败建议卸载干净,重新来过。

下面回顾一下安装过程中我遇到的问题:

1、安装到Renaming removed key_buffer and myisam-recover options (if present)就卡住了,而且ctrl+C 也无法退出,最后我关闭了终端强制退出了,但是我发现运用sudo netstat -tap | grep mysql 居然显示是启动成功的,可是进入shell界面就会出现问题,提示**ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password:YES)**网上找了一堆方法,都无法解决。

无奈考虑卸载重装:
sudo apt-get autoremove mysql --purge*
s udo apt-get remove apparmor //这个apparmor是在装mysql-server时装上的,和安全有关
2、重启电脑后(很多时候重启是法宝),再次利用命令apt-get安装mysql-server,运行到Renaming removed key_buffer and myisam-recover options (if present)仍然卡住了,我再次中止了终端,发现启动也是成功的,尝试进入shell界面,出现另一种新的错误:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2), 然后又是找了很多国内外资料,国内百度无法搜索出和这个错误完全相关的,还是老实FQ上谷歌,提出的方案是需要删除一些重复的配置文件,但是我连这个/var/run/mysqld/mysqld.sock没有,因此仍然无法解决。
再次卸载。考虑一定要卸载非常彻底。
sudo apt-get autoremove mysql --purge*
sudo apt-get remove apparmor
sudo rm /var/lib/mysql/ -R //非常重要
sudo rm /etc/mysql/ -R //非常重要
3、重启电脑,再次利用命令sudo apt-get install mysql-server 顺利安装成功!

ps:
附上vi编辑要点:点击i进入编辑模式,在按esc键输入:wq!(保存并退出vi编辑模式)

写一个简单的程序来访问该数据库,实现 show tables 功能:

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;
    char server[] = "localhost";
    char user[] = "root";
    char password[] = "mima";
    char database[] = "mysql";
    
    conn = mysql_init(NULL);
    
    if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) 
    {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }
    
    if (mysql_query(conn, "show tables")) 
    {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }
    
    res = mysql_use_result(conn);
    
    printf("MySQL Tables in mysql database:\n");
    
    while ((row = mysql_fetch_row(res)) != NULL)
    {
        printf("%s \n", row[0]);
    }
    
    mysql_free_result(res);
    mysql_close(conn);
    
    printf("finish! \n");
    return 0;
}

编译代码的时候需要链接mysql的库,可以通过如下方式编译:
g++ -Wall mysql_test.cpp -o mysql_test -lmsqlclient
然后运行编译好的代码:

这里写图片描述

怎么样,是不是很酷!

安装nginx

Nginx安装:
nginx的核心是http路由,但是还有反向代理、负载均衡甚至邮件服务器等功能。

nginx的安装有两种方式:其一,源代码安装; **其二,linux packages安装。**从linux packages安装方便简洁。

先来说一说Linux—packages安装方法:

1、首先添加nginx_signing.key(必须,否则出错)

$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

2、添加]Nginx](http://nginx.org/)官方提供的源

$ echo "deb http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list

$ echo "deb-src http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list

3、更新源并安装Nginx

$ sudo apt-get update

$ sudo apt-get install nginx

4、安装Nginx完成后可查看版本号,输入

$ /usr/sbin/nginx -v

查看端口:

sudo lsof -i :80

浏览器输入localhost 出现如下则表示成功

这里写图片描述

Ubuntu安装之后的文件结构大致为:

一、通过apt-get安装:
• 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
• 程序文件在/usr/sbin/nginx
• 日志放在了/var/log/nginx中
• 并已经在/etc/init.d/下创建了启动脚本nginx
• 默认的虚拟主机的目录设置在了/var/www/nginx-default
二、通过源码安装。
而自己利用默认配置编译的,则放在/usr/local/nginx下,以下是目录结构:
• /usr/local/nginx/conf 配置目录
• /usr/local/nginx/html 默认的网站根目录
• /usr/local/nginx/logs 日志和pid文件目录
• /usr/local/nginx/sbin 执行文件目录

Ubuntu apt-get安装请运行:

sudo service nginx restart

源码安装请运行:

sudo /usr/local/nginx/sbin/nginx

建议:源码安装是一个坑,建议ubuntu自带的apt-get install nginx,当然如果您喜欢折腾,完全可以使用源码安装,只是希望您能够没有我当时的倒霉运气,源码安装可参考Ubuntu16.04.1 安装Nginx

安装PHP5.6

  • PHP安装记录:

安装PHP5.6

1、添加PPA

$ sudo apt-get install python-software-properties software-properties-common

$ sudo add-apt-repository ppa:ondrej/php

$ sudo apt-get update

2、安装PHP5.6以及所需的一些扩展

$ sudo apt-get install php5.6-fpm php5.6-mysql php5.6-common php5.6-curl php5.6-cli php5.6-mcrypt php5.6-mbstring php5.6-dom

3、配置PHP5.6

打开php.ini配置文件:

$ sudo gedit /etc/php/5.6/fpm/php.ini

找到cgi.fix_pathinfo选项,去掉注释;,然后将值设置为0:

cgi.fix_pathinfo = 0;

display_errors  =  on

  • 配置nginx
sudo gedit /etc/nginx/sites-available/default

找到以下内容,并修改为如下所示

location ~ \.php$ {
          # include snippets/fastcgi-php.conf;
         #
          # # With php7.0-cgi alone:
        # fastcgi_pass 127.0.0.1:9000;
         # # With php7.0-fpm:
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  fastcgi_pass unix:/run/php/php5.6-fpm.sock;
                  fastcgi_index index.php;
                  include fastcgi_params;
}
  • 重启php5.6
sudo service php5.6-fpm restart
  • 重启nignx
sudo service nginx restart

测试是否安装nginx和php5.6成功

  • 在**/var/www/html** 目录下创建test.php文件,测试PHP
    输入以下内容
<?php

phpinfo();

?>
  • 重启nginx和php5.6-fpm
    打开浏览器输入localhost/test.php 出现以下内容则表示成功

这里写图片描述

普及一下,讲一讲default文件的基本知识:

  1. default文件中,找到
    index index.html index.htm;
    这行,加入成
    index index.html index.htm index.php;
    这就可以用php文件做默认主页
    2.default文件中,在server{}指示符的 location / {} 指示符内,加入
    autoindex on;
    当文件夹内没有index文件,就会自动索引文件。
  2. server{} 指示符的 root 行是文件根目录,自行修改就能把那个文件夹作为网站根目录

这里写图片描述

如果想要更深层次的了解nginx+php原理,可以移步nginx+php的配置与原理

开始nexusPHP安装实战

特别说明一下 的是搭建NexusPHP需要memcache支持,

安装MemCache

MemCache虽然被称为”分布式缓存”,但是MemCache本身完全不具备分布式的功能

Memcache 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。 MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。
这里写图片描述

Ubuntu 下安装 MemCache

使用命令 sudo apt-get install -y memcached 来安装memcache
安装完成后默认会在 localhost:11211 上启动一个默认实例
使用命令 ps aux | grep memcached 来查看是否正常运行
这里写图片描述

查看安装
dpkg -s memcached

使用命令 telnet localhost 11211 来连接memcache实例

这里写图片描述

安装Memcache的PHP扩展

sudo apt-get install php-memcache

3.上述安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/

无法找到的可以去php.ini中寻找 ,我的是在 extension_dir=/usr/lib/php/20131226/

4.把php.ini中的extension_dir = "./"修改为
extension_dir = “/usr/lib/php/20131226/”

5.添加一行来载入memcache扩展:extension=memcache.so

  • Memcache环境测试:
    (在**/var/www/html/下创建memcached.php文件),我的是在/var/www/html/test/memcached.php运行下面的php文件,如果有输出This is a test!**,就表示环境搭建成功。开始领略Memcache的魅力把!
< ?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'This is a test!', 0, 60);
$val = $mem->get('key');
echo $val;
?>

这里写图片描述

安装Pear和HTTP_Request2

root@unclelu:~# apt-get install php-pear
root@unclelu:~# pear config-set preferred_state alpha
root@unclelu:~# pear install HTTP_Request2
安装Postfix

root@unclelu:~# apt-get install postfix

安装:phpmyadmin

可以借鉴 (ubuntu安装phpmyadmin)
安装过程中没有nginx选项,可以跳过。

建立软连接

这里写图片描述

重启nginx

sudo service nginx restart

然后打开浏览器访问 localhost/phpmyadmin/index.php 出现如下界面则表示成功。

这里写图片描述

开始nexusPHP(Nexusphp)

首先从NexusPHP官网下载源码程序,源码库:源码镜像

恢复原网站msyqldump文件

导入数据库文件,(根目录_db下的dbstructure.sql文件)

经过分析发现源备份mysql版本为5.1,存储引擎默认为MyISAM,字符集为utf8,而安装的MySQL版本如下:

这里写图片描述

查阅资料可知MySQL自5.5版本后已经存储引擎更改为InnoDB,故而首先更改会话存储引擎(注意:这个只是当前会话更改,下次重启还是InnoDB存储引擎,想要永久更改请修改my.cnf文件)
这里写图片描述

因为之前已经更改过了字符集为utf8,故不再赘述。

之后先创建一个以前备份过同名数据库,然后开始执行dump后的sql文件(\. 或者source

注意:!!!

使用空密码是无法和php连接的,故而需要修改MySQL密码。

修改MySQL(版本5.7.20)密码注意大小写

这里写图片描述

这里写图片描述

执行修改密码操作!

**1、**首先将my.ini中加入在[mysqld]节点上加skip-grant-tables
主要作用是:跳过表中的验证,可以无密码登陆。
**2、**登录之后查询plugin字段值:

mysql> select plugin from user where user = ‘root’;

执行结果plugin字段为空。
**3、**更新plugin字段为mysql默认值:

mysql>update user set plugin=“mysql_native_password” where User=‘root’

**4、**更新成功,继续执行更新密码操作:

mysql> update user set authentication_string=password(’******’) where user=‘root’ and host=‘localhost’;

**5、**刷新权限:

mysql> flush privileges;

**6、**将my.ini中的skip-grant-tables注释掉或者删掉
重启mysql,密码更新成功

切记一定不要忘记 这条语句 否则密码依旧会更改失败

update user set plugin="mysql_native_password" where User='root';

这里写图片描述

重启MySQL

service mysql restart

重启nginx

 service nginx restart

重启php-fpm

 service php5.6-fpm restart

然后导入数据库文件,(根目录_db下的dbstructure.sql文件)导入完毕后修改配置文件,在config文件下下面有一个allconfig.php 的文件,修改下面的内容:

‘SITENAME’ => ‘站点名称’
‘baseURL’ => ‘网站URL’
‘announce_url’ => ‘localhost/announce.php’(announce的url地址)
‘mysql_host’ => ‘MySQL主机’
‘mysql_user’ => ‘数据库用户名’
‘mysql_pass’ => ‘数据库密码’
‘mysql_db’ => ‘数据库名’

值得注意的是(修改’classes\class_cache.php’中的localhost为127.0.0.1)好像是为了避免出现下面这个错误的**(如果没有错误则不需要修改)**:

**Warning: Memcache::connect() [memcache.connect]: Can’t connect to localhost: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 **

最后配置

想将网站目录权限设置为777
root@unclelu:~# chmod -R 777 /var/www
上传nexusphp的所有文件到/var/www 再将config目录权限为777,否则最后无法更新网站配置
root@unclelu:~# chmod -R 777 /var/www/config

接下来是设置管理员

首先自己访问网站然后注册一个用户名,接着进入数据库管理(phpMyAdmin),在users表里面找到你注册的用户,编辑它的class属性为16

还可以通过下面的方法设置:

1.使用正常方式在网站注册一个新用户,假设用户名为admin。

2.输入以下命令进入MySQL命令行管理工具: mysql -u root -p nexusrocks -h localhost 注意:将’root’,’nexusrocks’,’localhost’分别替换成你的MySQL用户名、密码、主机地址。

2.在MySQL命令行管理工具输入以下命令: USE nexus; UPDATE users SET class=’16′ WHERE username=’admin’; 注意:将以上命令中的’nexus’替换成你的数据库名,将’admin’替换成你注册的用户名。

3.退出MySQL命令行管理工具:

到这里PT基本上就架设完毕了,现在只需要利用管理员帐号对站点进行设置和调整就可以了。

测试是否可以正常使用

浏览器输入localhost/nexusphp/login.php 出现如下页面则表示成功。

这里写图片描述

如果验证码无法加载

如果出现验证码无法加载的情况,多半是php的扩展没有安装完全。
无非是GD库没有加载,或者是session写入权限问题。

① GD库没有加载

  • 安装gd库
sudo apt-get install php5.6-gd

修改php.ini

extension_dir="/usr/lib/php/20*********" 

再添加一行

	extension=gd.so

重启nginx

sudo service nginx restart

② session写入权限问题

首先通过php测试脚本获取到session的保存路径,然后赋予该文件路径权限777

<?php
  $sessionpath = session_save_path();
  //获取当前session的保存路径  
  echo $sessionpath;
?>

修改权限为777.

小结

呼~,终于在规定的时间内完成了这项艰巨的任务,一开始的环境搭建其实是充满着非常多的坑的,建议如果是着急时间的话最好采取最简单可行的办法去完成(能apt-get就不要源码安装),否则你也会像楼主一样有那么一段焦躁的时间,果然《黑客与画家》里面讲的几点原则是对的,首先什么都不要管,最要紧的是如何在最短的时间里做出成果,哪怕是简陋版的也行,只要运行起来就可以了,后期再逐渐完善就好了,弄完之后,心得很多,感触最多的就是虚拟机真好,在此期间重装过很多次系统,因为总是有那么一点点强迫症,还有特别感谢阿里云镜像的Ubuntu系统,十分钟下完系统也是没谁了,不过最应该感谢的还是自己,养成了一个开干过程中每进行一个阶段就赶紧记录的好习惯,这也是完成这篇博文的原因之一,更多的好戏还在后头,希望能够在更短的时间内完成更多的任务,为世界继续发挥我的光与热!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值