本篇继承了前面的Ubuntu Server 14.04上moodle搭建的经验,在 Ubuntu Server 16.04.3上使用了目前最新版本的moodle 3.3和最新稳定版的PHP7.1(为了支持apache2的mpm_event模型,自己编译为线程安全的版本)
部分参考资料
http://www.jianshu.com/p/b6cc91740e90
http://www.jb51.net/article/109677.htm
http://blog.csdn.net/lijingshan34/article/details/70215455
https://segmentfault.com/q/1010000006138364/a-1020000006138874/revision
1、ubuntu 16.04.3安装(语言选英语,地区选中国),用户sjg,密码s***3,除了标准工具,选择装上openSSH Server
2、修改dns:修改 /etc/resolvconf/resolv.conf.d/base文件(本身为空),加入 nameserver <dns ip>,sudo resolvconf -u刷新,nslookup www.163.com验证
3、ftp命令方式下载自己编写的autologin.sh脚本,以便实现身份验证:./autologin.sh <id> <pwd>
4、sudo apt-get update先,然后sudo apt-get install apache2安装apache2,sudo apt install mariadb-server安装mariadb10.0(service --status-all查看服务名还是MysqL),sudo MysqL -u root -p可以连接(默认root没有密码!!见后面说明)
5、将PHP源码和moodle源码拷贝到服务器,在linux下执行 scp PHP-7.1.11.tar.gz sjg@10.5.10.74:PHP-7.1.11.tar.gz 和 scp moodle-latest-33.tgz sjg@10.5.10.74:moodle-latest-33.tgz
6、ssh sjg@10.5.10.74 登录到服务器,用 tar xvzf 解开两个源码,cd PHP-7.1.11,先安装依赖包
sudo apt-get install gcc
sudo apt-get install make
sudo apt-get install libxml2
sudo apt-get install libxml2-dev
sudo apt-get install autoconf
sudo apt-get install apache2-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib 防止出现configure: error: Cannot find OpenSSL's libraries
sudo apt-get install curl libcurl4-gnutls-dev
sudo apt-get install libjpeg-dev libpng-dev
7、编译配置,./configure --help查看帮助,
moodle必须的扩展有:
./configure --prefix=/usr/local/PHP
--enable-mbstring
--with-curl
--with-openssl
--with-xmlrpc
--enable-soap
--enable-zip
--with-zlib
--with-gd
--enable-intl
--with-mhash
--without-sqlite3
--without-pdo-sqlite
--with-MysqLi
--with-pdo-MysqL
额外需要(如apache2使用event模型需要):
--with-apxs2=/usr/bin/apxs2
--enable-maintainer-zts
--with-config-file-path=/etc/PHP7/apache2
--with-config-file-scan-dir=/etc/PHP7/apache2/conf.d
个人考虑添加的扩展:
--enable-bcmath
--enable-calendar
--enable-dba=shared
--enable-exif
--enable-gd-native-ttf
--with-gettext
--enable-sockets
--enable-ftp
不添加的扩展:
--with-bz2
--with-readline
--enable-shmop
--enable-sysvmsg
--enable-wddx
这一步很关键,如果少依赖包,必须安装好,保证配置通过
8、make clean
make & sudo make install
遇到cc: error: ext/date/.libs/PHP_date.o: No such file or directory
Makefile:152: recipe for target 'libPHP7.la' Failed
make: *** [libPHP7.la] Error 1
不清楚是否 当前目录 或 ext/data目录下的 .libs子目录权限问题,
后来,sudo make clean后,重新 make 居然可以了(make时间要10分钟左右)。
然后 make test(make test要20几分钟,可能有失败的测试让你提交报告),sudo make install安装
-----------------------------------------------------------------------
Installing PHP SAPI module: apache2handler
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' libPHP7.la /usr/lib/apache2/modules
/usr/share/apr-1.0/build/libtool --mode=install install libPHP7.la /usr/lib/apache2/modules/
libtool: install: install .libs/libPHP7.so /usr/lib/apache2/modules/libPHP7.so
libtool: install: install .libs/libPHP7.lai /usr/lib/apache2/modules/libPHP7.la
libtool: install: warning: remember to run `libtool --finish /home/sjg/PHP-7.1.11/libs'
chmod 644 /usr/lib/apache2/modules/libPHP7.so
[preparing module `PHP7' in /etc/apache2/mods-available/PHP7.load]
Enabling module PHP7.
To activate the new configuration,you need to run:
service apache2 restart
Installing shared extensions: /usr/local/PHP/lib/PHP/extensions/no-debug-zts-20160303/
Installing PHP CLI binary: /usr/local/PHP/bin/
Installing PHP CLI man page: /usr/local/PHP/PHP/man/man1/
Installing PHPdbg binary: /usr/local/PHP/bin/
Installing PHPdbg man page: /usr/local/PHP/PHP/man/man1/
Installing PHP CGI binary: /usr/local/PHP/bin/
Installing PHP CGI man page: /usr/local/PHP/PHP/man/man1/
Installing build environment: /usr/local/PHP/lib/PHP/build/
Installing header files: /usr/local/PHP/include/PHP/
Installing helper programs: /usr/local/PHP/bin/
program: PHPize
program: PHP-config
Installing man pages: /usr/local/PHP/PHP/man/man1/
page: PHPize.1
page: PHP-config.1
Installing PEAR environment: /usr/local/PHP/lib/PHP/
[PEAR] Archive_Tar - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util - installed: 1.4.2
[PEAR] PEAR - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/PHP/etc/pear.conf
You may want to add: /usr/local/PHP/lib/PHP to your PHP.ini include_path
/home/sjg/PHP-7.1.11/build/shtool install -c ext/phar/phar.phar /usr/local/PHP/bin
ln -s -f phar.phar /usr/local/PHP/bin/phar
Installing PDO headers: /usr/local/PHP/include/PHP/ext/pdo/
----------------------------------------------------------------------------------------------
9、ls /etc/apache2/mods-enabled/mpm* 发现apache2已经启用了mpm_event模块(如果启用的不是mpm_event,就用sudo a2dismod <old mpm>,sudo a2enmod mpm_event),重新启动apache2服务 sudo service apache2 restart,但建立测试文件/var/www/html/test.PHP,发现不能解析PHP,但/etc/apache2/mods-enabled中已经有了PHP7.load的,看来是apache2没有把PHP文件“另眼相看”,sudo nano /etc/apache2/mods-enabled/mime.conf,在
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-bzip2 .bz2
下面加上 AddType application/x-httpd-PHP .PHP,同时确认 dir.conf 中已经将 index.PHP 作为 DirectoryIndex,再次运行测试文件 test.PHP,成功解析,PHPinfo() 输出中包含了 Thread Safetyenabled
但Loaded Configuration File一行为空,创建目录/etc/PHP7/apache2,再 sudo cp ~/PHP-7.1.11/PHP.ini-production /etc/PHP7/apache2/PHP.ini,重启apache2服务,发现可以导入PHP.ini配置文件了
10、测试程序test.PHP中写入用MysqLi连接数据库的代码,结果 测试出现(HY000/2002): No such file or directory,尝试根据之前ubuntu14.04上装moodle的知识解决,失败(错误1698),参考 https://superuser.com/questions/957708/MysqL-mariadb-error-1698-28000-access-denied-for-user-rootlocalhost 和 https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/,那意思是在mariadb10中,数据库root账户密码本来就是空的,并且必须 sudo MysqL -u root 才能登录(之前已经发现了这一点,一开始不明白是unix socket验证插件搞的鬼)。
cat /etc/MysqL/mariadb.conf.d/50-server.cnf 中 socket= /var/run/MysqLd/MysqLd.sock
修改/etc/PHP7/apache2/PHP.ini(确保和上面指向同一个socket文件):
MysqLi.default_socket = /var/run/MysqLd/MysqLd.sock
pdo_MysqL.default_socket=/var/run/MysqLd/MysqLd.sock
添加sjg,用unix_socket方式连接(Scripts should run as a user have the required grants and be identified via unix_socket.)
sudo MysqL -u root
CREATE USER sjg IDENTIFIED VIA unix_socket;
quit
MysqL -u sjg 可以不带 sudo 执行了,但这个 sjg 没有什么权限(查看MysqL.user表,它是 sjg在%,权限都是N)
参考 /usr/share/doc/mariadb-server-10.0/README.Debian.gz,用
sudo /usr/bin/MysqL -e "GRANT ALL ON *.* TO '$USER'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION"
可以将本地用户sjg登记为额外的数据库管理员(查看MysqL.user表,它是sjg@localhost,权限都是Y)
MysqL -u sjg登录后,CREATE DATABASE moodle 创建moodle数据库,然后quit
执行下面的语句创建数据库账户moodle,密码s****3:
sudo /usr/bin/MysqL -e "GRANT ALL ON moodle.* TO 'moodle'@'localhost' IDENTIFIED BY 's****3'"
用 MysqL -u moodle -p登录,可以发现不可以use MysqL,但可以use moodle,说明权限正确。
使用下面的测试文件test.PHP:
<?PHP
$MysqLi = new MysqLi('localhost','moodle','s****3');
if ($MysqLi->connect_error) {
exit('Connect error ('. $MysqLi->connect_errno.')'.$MysqLi->connect_error);
}
echo 'Success...'.$MysqLi->host_info."\n";
$MysqLi->close();
最后浏览器返回 Success...Localhost via UNIX socket 说明连接成功(从显示看是用了unix socket,因为linux下主机为localhost时默认用unix socket连接,而主机为127.0.0.1则默认用TCP回环连接,windows下都用后者)
11、sudo mv ./moodle /var/www/html/moodle,浏览器输入 http://<ip>/moodle就可以开始安装了。
sudo mkdir moodledata
sudo chmod a+rw moodledata/
cd /var/www/html/moodle
touch config.PHP,sudo nano config.PHP将配置信息粘贴保存
检查服务器时,发现几项检查未通过的设置(1)未开启opc(2)数据库未使用Barracuda文件格式(3)MysqL配置需要innodb_file_per_table为ON(4)网站未使用https
(4)暂时不考虑解决,其余参考以前的优化工作
直接在[opcache]下添加
zend_extension=opcache.so
opcache.enable=1
opcache.huge_code_pages=1
opcache.file_cache=/tmp
修改 error_reporting = E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR 只记录不可恢复的严重错误
修改/etc/sysctl.conf修改,添加 vm.nr_hugepages=256, sysctl -p生效,cat /proc/meminfo | grep -i page 查看,应该Hugepagesize为2MB,AnonHugePages为2MB×256=512MB (最后这个数据不一样,具体以后了解)
参考 http://blog.csdn.net/zhihaoma/article/details/52810424,结合自己摸索,进行以下设置:
sudo nano /etc/MysqL/mariadb.conf.d/50-server.cnf,在innodb部分添加(原来几乎是空的,只用注释提示有很多可以设置)
innodb_file_format=barracuda
innodb_file_format_max=barracuda
innodb_file_per_table=ON
innodb_large_prefix=ON
如果安装出错,可以删除数据库moodle,重新建立数据库进行重新安装(配置文件似乎不用重新生成了),总的来说,安装时间比较长(数据库184个表)。
实际本次安装,还是出现一个错误,根据提示,似乎是版本号没有写入 mdl_config 表,根据提示,用INSERT INTO mdl_config (name,value) VALUES('version',2017051502.12); 插入版本号信息即可。
接下来,出现插件检测界面。
原文链接:https://www.f2er.com/ubuntu/350676.html