Ubuntu Server 16.04.3上Moodle 3.3搭建(含PHP7.1编译)

本篇继承了前面的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就可以开始安装了(这是web安装方式,最大缺点是安装时页面呈现冻结状态,无法知道安装过程,也容易出现安装失败,对比步骤12命令行安装方式)。
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 只记录不可恢复的严重错误

修改时区date.timezone = Asia/Shanghai

修改上传允许的文件大小 post_max_size = 200M   和  upload_max_filesize = 200M 以便可以上传大视频 (moodle中可以在此基础上限定大小)
修改/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); 插入版本号信息即可。

接下来,出现插件检测界面。

12、命令行方式安装

先用 sudo rm -rf 方式删除/var/www/moodledata 和 /var/www/html/moodle 目录,mysql -u sjg -p 登录, drop database moodle,就可以清理干净原来的。

参照 https://docs.moodle.org/33/en/Installation_quick_guide#Install_Moodle

CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  创建 moodle 数据库

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodleuser'@'localhost';  为 moodle 用户授权对 moodle 数据库的访问(我们 moodle 账户已经存在了,所以,不需要后面的IDENTIFIED BY 部分

cd   /var/www/html  切换到准备放 moodle 的目录, sudo tar xvzf ~/moodle-latest-33.tgz 释放到当前目录

sudo mkdir /var/www/moodledata 创建数据目录, ps -aux  | grep  apache2  可以发现apache2 web server的账户为 www-data,所以 sudo chown -hR www-data:www-data /var/www/moodledata/  将moodledata目录及其子目录拥有者都改成www-data (-h选项表示符号链接的拥有者改变,但不改变目标对象的拥有者,-R表示递归)


sudo chmod 0777 -R /var/www/moodledata/  暂时改为 0777权限,不然安装程序无法在里面写入数据

sudo chmod 0777 -R /var/www/html/moodle/ 暂时改为 0777 权限,不然安装程序无法生成 config.php 文件

php admin/cli/install.php,选语言zh_cn,数据目录权限0750,网站地址 http://10.5.10.74/moodle,数据目录缺省/var/www/moodledata,

-----------------------------------------------------------

>您必须手动下载下载<a href="https://download.moodle.org/download.php/langpack/3.3/zh_cn.zip">https://download.moodle.org/download.php/langpack/3.3/zh_cn.zip</a> ,拷贝至服务器上的“/var/www/moodledata/lang”并解压至此。</p>  ----------->如果出现此提示是因为出外网需要身份验证

------------------------------------------------------------------------

数据库引擎mariadb,数据库主机默认localhost,数据库名默认moodle,表前缀默认mdl_,端口默认,unix socket使用指定的/var/run/mysqld/mysqld.sock,数据库用户moodle,密码s****3,网站全名和短名都用LiveMoodle,管理员账户用户名默认admin,密码s****3,Email地址sjg20010414#qq.com,升级key默认,同意版权y

接下来安装程序就开始安装数据库(非常耗时,但过一些时间就可以看到安装的每一步提示,感觉比web方式安装体验要好一点),直到出现“安装圆满成功”

将权限改掉

sudo chmod 0750 -R /var/www/moodledata/

sudo chmod 0755 -R /var/www/html/moodle/

13、从浏览器 http://10.5.10.74/moodle登录并使用吧!

moodle中设置选项非常多,而且可以将原来系统中的课备份、下载,然后上传、恢复到新的系统中,并且可以仔细选择需要备份哪些内容,还原哪些内容。

14、按照 https://docs.moodle.org/33/en/Installation_quick_guide#Install_Moodle 的说法,必须配置cron

sudo nano /etc/crontab  配置系统级别的cron任务,添加下面的行(可以查看admin/cli/cron.php文件,它的用法是sudo -u  www-data  /usr/bin/php admin/cli/cron.php)

*/1 *   * * *   www-data        php /var/www/html/moodle/admin/cli/cron.php > /dev/null

sudo service cron restart

tail /var/log/syslog 查看系统日志,可以看到类似以下的行 Nov  6 15:44:01 ubuntu-server-16 CRON[12001]: (www-data) CMD (php /var/www/html/moodle/admin/cli/cron.php > /dev/null)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值