Ubuntu Server 14.04 amd64 上 Moodle 搭建尝试

在 VMware ESXi 5 上建立虚拟机,上传Ubuntu Server 14.04 64位镜像iso文件到 datastore1\iso 目录,将iso挂载到虚拟机与VM workstation 类似,无非从 datastore1 选择iso文件。


安装操作系统,无非设置非root的账户,如 sjg,密码 s******3,分区采用了 LVM 方式

选择软件包:SSH Server,LAMP Server   设定MySQL的root密码,如 s*****3


从VSphere Client 进入系统,用命令 sudo ifconfig 查看ip地址(默认是动态地址)

用SSH客户端,如Windows下Putty或者linux直接命令行ssh  sjg@10.5.10.73,连接到Ubuntu,输入密码登录

sudo vim /etc/network/interfaces

auto eth0
iface eth0 inet dhcp

修改为(根据你的网络环境修改)

auto eth0
iface eth0 inet static
address 10.5.10.73
netmask 255.255.255.0
network 10.5.10.0
broadcast 10.5.10.255
gateway 10.5.10.254

如果需要修改DNS服务器,则sudo vim /etc/resolv.conf

nameserver 202.101.172.35

nameserver 202.101.172.47

上述修改再重新启动后会失效(即只能作为临时性的域名解析,文件resolv.conf开头有说明),

需要同时修改:(可参考http://blog.csdn.net/ichsonx/article/details/40040935)

sudo  vim /etc/resolvconf/resolv.conf.d/base
 nameserver 202.101.172.35
 nameserver 202.101.172.47

最后 sudo shutdown -r now 重新启动并再次使用新的静态IP地址SSH连接


Ubuntu Server 是字符界面的,这个稍微感觉有些不便,但更让人恼火的是,学校要出校网,需要先以Web方式验证身份

试了下,curl命令可用,我本以为很简单了,结果,因为校网POST的数据中有中文,这个比较麻烦了,曾试图先写好Windows下的bat,

Ubuntu Server 用ftp获取此bat,然后修改成 shell 脚本,结果提示有非法字符,也尝试过shell脚本的编码改成utf-8或gb2312,都没用

参考了http://www.cnblogs.com/wgw8299/archive/2011/02/04/1949148.html

仔细看了验证页面是用gb2312编码的,所以知道,需要去获得“登录”这两个汉字的gb2312编码,然后采用类似urlencode方式来提交数据

但遇到两个问题,如何取得这两个字的编码,我采用了Windows下ftp路径中包含这两个字,Windows会帮助我们在地址栏显示对应编码。

一开始直接从Windows的bat脚本修改,结果遇到问题,经过研究知道是Windows 和 Linux 的换行符不一样造成,但直接用vi试图删除末尾的\r,但失败了,

后来无奈,只好vi新建一个 shell脚本,如 autologin.sh文件,内容为:curl -v -d "DDDDD=340**&upass=19**10&0MKKey=%B5%C7%20%C2%BC" http://218.75.41.**

终于可以利用此脚本实现自动登录验证,之后 sudo apt-get update 等命令顺利进行


习惯了Deepin的图形,所以给服务器装个图形界面(需要耗费不少硬盘空间,下载也需要一些时间)

sudo apt-get install xinit

sudo apt-get install ubuntu-desktop   (GNOME桌面可以从VSphere使用,但和xrdp存在问题)

sudo apt-get install tightvncserver xrdp

但似乎xrdp对 gnome 支持也不好(参照我的另一个文章和博客http://blog.csdn.net/daniel_ustc/article/details/16845327),改用xfce

sudo apt-get install xubuntu-desktop
echo xfce4-session > ~/.xsession

再设置配置文件
sudo vim /etc/xrdp/startwm.sh

在./etc/X11/Xsession 前一行插入
 xfce4-session

重启xrdp
 sudo service xrdp restart

直接从Windows用mstsc登录,出现闪退现象,并且第二次无法登录,用VSphere从控制台登录后再用mstsc登录,不再闪退。不清楚是否Ubuntu通病,需要服务器先登录才能远程。进入后,直接点桌面的“文件系统”也会闪退,而点击下面的文件管理器主目录可以进入,点击某些图标又会闪退!!!

看来 xrdp 存在不少问题

注:后来sudo apt-get remove 掉 ubuntu-desktop  tightvncserver xrdp  xubuntu-desktop,保留xinit,删除 ~/.xsession文件,从/etc/xrdp/startwm.sh中删去添加的xfce4-session行,然后按照http://www.linuxidc.com/Linux/2015-01/111937.htm 一文安装了x2go,发现xfce和x2go配合,能够较好工作。步骤简记如下:

服务器端步骤如下

sudo apt-get install python-software-properties software-properties-common
sudo apt-add-repository -y ppa:x2go/stable 
sudo apt-get update 
sudo apt-get install x2goserver x2goserver-xsession 
sudo apt-get install xfce4 
(echo "plato" > /etc/hostname 
hostname -F /etc/hostname    这两步不需要,因为cat /etc/hostname查看发现主机名已设)

客户机(deepin 2014.3版)
sudo apt-add-repository ppa:x2go/stable 
sudo apt-get update 
sudo apt-get install x2goclient

运行x2goclient启动客户端,设置会话名moodle-10.5.10.73,ip地址10.5.10.73,使用xfce作为服务器桌面,输入账户sjg,点击输入密码即可连接。x2go有windows的客户端,但还没有测试过。


用apt-get 安装 phpmyadmin,密码 s*****3

下载 moodle 2.9,gz格式,解压 tar  -xvf  *.gz,然后sudo  mv  moodle目录到 /var/www/html下

http://<ip>/moodle 开始安装,提示缺少PHP扩展curl:

sudo  apt-get install  php5-curl

sudo /etc/init.d/apache2 restart  重新启动apache

因为Linux下权限问题,需要手动创建目录并修改moodle上传文件用的目录:

sudo mkdir /var/www/moodledata

sudo chmod  -R  0777  moodledata/   需要0777,0666似乎不行,看源码,它要在此根目录下继续创建子目录

数据库驱动类型选mysqli(默认),配置部分,需要手动复制 config.php 文件内容(utf-8编码),放到 moodle 根目录 /var/www/html/moodle

sudo apt-get install php5-xmlrpc   感觉是安装到了 /usr/share/php5 下面

sudo apt-get install php5-intl

sudo /etc/init.d/apache2 restart  重新启动apache服务器,用探测文件test.php的phpinfo();应该能看到 xmlrpc 扩展 和 intl 扩展了


后续安装似乎失败了,不清楚原因

用phpmyadmin 删除 moodle 数据库,sudo  rm -R  /var/www/html/moodle

然后按前面重新处理

似乎在安装那一步会停留一段时间(显示“安装系统”),之前太心急了,经过相当长时间安装后,出现一些管理账户设置项:

admin,密码要求是强密码:长度大于8,有大小写字母、数字和特殊字符,我们用 s****3!OK  顺利安装完毕

接下来的任务是如何去使用好它的问题了,来日方长,下班走人

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

上传用户方式:用csv文件,utf8编码,格式类似如下(姓名显示的时候是按lastname firstname方式显示的,可能考虑了中文关系,课程要用简称,组名是小组名,如果组不存在会直接创建,角色默认是学生,所以可以不写)

username passwordfirstnamelastnameemailcourse1group1
160301161101 160301161101钱林霞计算机1611160301161101@zime.edu.cn组装实训计算机1611
160301161102 160301161102柳稳稳计算机1611160301161102@zime.edu.cn组装实训计算机1611

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

IBM网站关于LAMP的性能调优(原网站内容略微过时,已根据实际情况调整):

http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-1/

1、调节/etc/sysctl.conf 文件中关于网络的参数

2、禁用文件系统记录atime

http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-2.html

3、使用事件类型的MPM

ls  /etc/apache2/mods-available/mpm*  可以发现apache2.4的3种MPM都是可以被使用的模块了

ls  /etc/apache2/mods-enabled/mpm*  可以发现当前启用的MPM是最古老的prefork方式(进程处理请求)

sudo a2dismod mpm_prefork  成功禁用mpm_prefork模块

sudo a2enmod mpm_event   出现 Considering conflict ....  3句提示,同时 Enabling module mpm_event,用前面的ls再查看,似乎mpm_event模块已经启用,本来想直接service apache2 restart 重新启动apache2服务就可以了

/usr/sbin/apache2  -V  发现最后又 Apache 运行在 threaded MPM,但你的PHP模块没有编译成线程安全的,你需要重新编译PHP

4、自行编译PHP7为线程安全的apache2模块,以便使用事件类型的MPM---------------------------------

参考 http://blog.csdn.net/earbao/article/details/50235413  和  http://www.bkjia.com/Linuxjc/1096474.html

axel -n 2  http://cn2.php.net/distributions/php-7.0.12.tar.bz2  下载PHP7 (已经有PHP7了,而且已经是正式版,所以考虑它)

tar  jxf   php-.... 解压

sudo apt-get update,然后安装(更新)以下包:libxml2-dev  build-essential  openssl   libssl-dev  make  curl  libcurl4-gnutls-dev libjpeg-dev  libpng-dev   libmcrypt-dev  libreadline6   libreadline6-dev 

 sudo apt-get install apache2-dev  只有apache-dev中才有apxs2,将安装到 /usr/bin/apxs2

./configure --with-apxs2=/usr/bin/apxs2  --enable-maintainer-zts   (后续证明必须带上一堆编译选项,不然编译出来的是个“光秃秃”的没几个扩展的东西)

make && make test     不太清楚 make test中产生的那些警告
 make && sudo make install  

  可以看到共享扩展安装到了 /usr/local/lib/php/extensions/no-debug-zts-20151012/,apache2handler会安装到 /usr/lib/apache2/modules/libphp7.so,并且权限修改为644,同时也会修改/etc/apache2/mods-available目录(即自动安装apache2模块,自动配置,唯一剩下需要做的似乎就是重新启动apache2服务)

PHP CLI 和CGI 等安装到了 /usr/local/bin,PEAR环境安装到了/usr/local/lib/php/ (配置文件 /usr/local/etc/pear.conf)

把/etc/apache2/mods-enabled目录下php5开头的2个符号链接删除,然后重新启动apache2服务

Apache2服务成功启动,<ip>/test.php成功显示,但Moodle遭遇到数据库访问问题:

Error: database driver problem detected
The site administrator should verify server configuration
PHP has not been properly configured with the MySQLi extension for it to communicate with MySQL. Please check your php.ini file or recompile PHP.

可以发现 phpinfo()的输入中 Loaded Configuration File 这一项为空

新建目录 /etc/php7/apache2,拷贝 /etc/php5/apache2/php.ini到此目录,但是moodle还是不能访问

仔细检查phpinfo()的输出,才发现默认的编译中,根本就没有mysqli模块,很多模块都没有,本以为默认会把模块都加上!

apt-get -y install libfreetype6-dev

sudo apt-get install libicu-dev

手动下载 bzip2 1.0.6版源代码(.tar.gz格式),  tar  xvzf  ...tar.gz,make && sudo make install    (虽然系统本身带了bzip2,但是就是提示出错,手动编译就不会出错了)

./configure  --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-mbstring  --enable-bcmath --with-bz2  --enable-calendar --with-curl   --enable-dba --enable-exif  --enable-ftp  --with-gd  --with-jpeg-dir --with-png-dir  --with-freetype-dir  --enable-gd-native-ttf  --with-gettext  --enable-intl   --with-mhash  --with-mysqli  --with-openssl  --with-pdo-mysql  --without-pdo-sqlite   --with-readline   --enable-shmop   --enable-soap    --enable-sockets   --without-sqlite3   --enable-sysvmsg  --enable-wddx  --with-xmlrpc   --enable-zip    --with-zlib-dir

直接 make && sudo make install 还是遭遇bzip2的问题,参考

http://yangguanghaojie.blog.163.com/blog/static/1899080520130244240149/

libbz2.a删掉,进入bzip2源码目录,make clean,修改Makefile,CFLAGS最后加上 -fPIC

make -f Makefile-libbz2_so
make clean 
make
sudo make install 

make clean

make

sudo make install

然后到php7源码目录,make clean && make && sudo make install(./configure 那句通过的前提下)

结果,moodle还是无法连接数据库。写了测试文件,测试出现(HY000/2002): No such file or directory ……错误。

参考  http://www.111cn.net/database/mysql/105028.htm,发现mysqli连接中将localhost改为127.0.0.1可以正常访问,

看mysql配置文件,已经配置了unix socket文件,手动在mysqli的连接语句指定mysql.socket文件位置 /var/run/mysqld/mysqld.sock,

使用localhost也可以正常访问了。按此思路,将moodle根目录下的配置文件config.php中,$CFG->dboptions部分的dbsocket参数填入/var/run/mysqld/mysqld.sock,终于,moodle可以连接数据库了。

顺便说,之前还修复了moodle中的一个警告,原因是我用的moodle 2.9版还有PHP4风格的构造函数代码。

参考moodle官网说明:https://docs.moodle.org/dev/Moodle_and_PHP7 ,moodle 2.x 还是存在不少和PHP7不兼容的代码的,另外,因为PHP7.1似乎今天11月份发布,Moodle 3.2版将兼容 PHP7.1,所以还是考虑11月份之后再考虑版本更新的问题吧

事实说明,不把Moodle更新到3.x版本,题库里面不能输入题目,所以考虑升级:

sudo service apache2 stop

mkdir  moodle_2.9backup,cd  moodle_2.9backup

sudo tar  -czvf   moodle.tar.gz   /var/www/html/moodle  备份moodle程序目录

sudo tar  -czvf  moodledata.tar.gz   /var/www/moodledata  备份moodle数据目录

mysqldump  -u  root  -p   moodle  |  gzip  >  moodledb.sql.gz    备份moodle数据库

cd ~

wget   https://download.moodle.org/stable31/moodle-latest-31.tgz    下载moodle程序 (似乎也可以用git下载)

tar  -xvzf  moodle-latest-31.tgz

mv  /var/www/html/moodle  /var/www/html/moodle_2.9old

mv  ./moodle   /var/www/html/moodle

仿照网上的方法,http://<ip>/moodle/admin,会自动提示更新,然后按部就班下去,然后浏览器超时,然后就没有然后了……再去访问,发现moodle提示数据库访问出错。后来的事实说明,升级工作还是用CLI方式干更平滑更靠谱。参考https://docs.moodle.org/31/en/Administration_via_command_line,用下面的命令行修复了:

cd   /var/www/html/moodle

sudo  php  admin/cli/upgrade.php

一句话,无论安装还是升级、日常维护moodle,命令行方式会更直接更可靠(最主要的是及时出错,可以看到更准确的提示,而不是网页上笼统的异常或无法访问)

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

5、php配置文件 /etc/php7/apache2/php.ini 中将错误日志记录改为 error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR,即只记录不可恢复的严重错误

6、参考鸟哥关于PHP7优化的提示:http://www.laruence.com/2015/12/04/3086.html

php.ini中启用opcache,用大页内存(HugePage)保存opcache,也启用临时文件保存opcache:

zend_extension=opcache.so
opcache.enable=1
opcache.huge_code_pages=1
opcache.file_cache=/tmp

修改/etc/sysctl.conf修改,添加 vm.nr_hugepages=256, sysctl  -p生效,cat   /proc/meminfo  | grep -i  page 查看,应该Hugepagesize为2MB,AnonHugePages为2MB×256=512MB

7、数据库调节,从 https://www.ibm.com/developerworks/cn/linux/l-tune-lamp-3.html 不能得到马上可以优化的信息,因为ubuntu的lamp一定程度上已经是为服务器优化的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值