写在前面
本学期软件工程课程,老师要求咱们写一个大做业,咱们小组选择作一个资源分享的网站平台。如今工做已经结束,我打算从头开始回顾,并将其过程写为多篇连载的博客。php
工具选择
开发最重要的准备工做就是环境搭建,咱们小组本次选择使用apache+mysql+php开发这个网站,而且将网站部署在Linux机上。因此咱们须要准备的东西有:VMware虚拟机、Centos7镜像文件。安装一个centos虚拟机后在虚拟机上安装apache、mysql和php环境。(ps:亲身实践,感受VMware比virtual box好用)html
安装过程
如今个人pc上已经安装好了一个centos7的虚拟机(具体过程能够搜索教程)node
如今打开虚拟机,个人虚拟机上只添加了一块硬盘(20G,建议大一点,后来我安装mysql时发现硬盘空间不够用又加了一块20G硬盘,具体什么东西占用了个人空间我还没找到),分为两个分区(swap交换分区,大小4G,剩下的空间所有设为根分区,其中根分区挂载到了根目录下)。首先在根目录下建立一个web目录,做为apache、mysql、php源代码存放路径,由于我将要使用源代码方式安装这三个软件。mysql
使用源代码方式安装的很差之处在于,须要本身解决软件安装过程当中的所有依赖,并且下载源代码包解压缩后须要通过编译才能安装,好处在于能够本身进行一些配置。我之因此选择源代码安装方式是由于后面涉及到php的扩展时须要源代码。c++
那么安装apache以前咱们须要获取apache和其依赖软件的源代码:git
1. apache2.4: wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.37.tar.gz 2. apr-1.6.5.tar.gz:http://www.apache.org/dist/apr/ 3. apr-util-1.6.1.tar.gz:http://www.apache.org/dist/apr/ 4. pcre-8.42.tar.gz:wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
第一个和第四个在虚拟机终端中直接输入该命令便可下载,第二个和第三个须要到这个网站中去下载。无论怎么样,将下载获得四个压缩包都放入根目录下的web目录中,而后准备一一安装。web
tar -zxvf apr-1.46.tar.gz cd apr-1.46 ./configure --prefix=/usr/local/apr #生成makefile编译文件 make #编译源代码 make install #安装
在生成编译文件或编译源代码的时候,可能会报错,告诉咱们gcc没有安装,此时安装一下gcc便可,虽然咱们不用yum安装apache,可是能够用它来安装其余依赖文件,这样对咱们的apache源码没有什么影响。sql
yum install gcc* #安装gcc
tar -zxvf apr-util-1.5.1.tar.gz cd apr-util-1.5.1 ./configure --with-apr=/usr/local/apr make make install
编译过程当中可能会出现这个错误:xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
只须要安装expat-devel就好了数据库
yum install expat-devel
tar -zxvf pcre-8.32.tar.gz cd pcre-8.32 ./configure --prefix=/usr/local/pcre(此处出现configure: error: You need a C++ compiler for C++ support sudo yum install gcc-c++) #因为以前安装过gcc,因此不会出现这个错误 make make install
tar -zxvf httpd-2.4.37.tar.gz cd httpd-2.4.37 ./configure --prefix=/usr/local/apache24 --enable-so --with-apr=/usr/local/apr/ --with-apr-til=/usr/local/apr/ --with-pcre=/usr/local/pcre/ make make install
若是进行make编译的时候,出现这个错误:/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_GetErrorCode',是因为缺乏xml的相关支持,使用yum安装对应的依赖便可apache
①安装libxml2-devel [root@test_01 ~]# yum install -y libxml2-devel ②删除apr-util目录而且从新编译安装(将/web目录下的apr-util删除,从新解压缩编译) ③从新编译安装httpd,成功解决。
apache已经安装完成(若是编译安装过程出现其余错误,我也不知道该怎么办,由于我没有遇到),那么接下在就是开启apache服务,配置apache的配置文件。
[root@bogon ~]cd /usr/local/apache24/bin [root@bogon bin] ./apachectl start #开启apache服务 [root@bogon bin] lsof -i:80 #查询80端口是否被httpd服务占用 [root@bogon bin] ./apachectl stop #关闭apache服务
这样的话,每一次启动服务都必须执行复杂的命令,有一种方法能够将apache服务加入系统服务以后使用service httpd start便可开启服务,这种方式这里不作介绍。
接下来在浏览器中访问apache服务,打开firefox在地址栏输入:localhost,若是能够看到It works即表示服务启动成功。
apache配置文件的路径:/usr/local/apache24/conf/httpd.conf
须要配置apache的web站点路径、apache的端口号(默认为80端口,能够不用改)
#配置web站点 vim /usr/local/apache24/conf/httpd.conf #找到DocumentRoot,将这个路径修改成你的web站点路径,同时下面的Directory标签也须要作相应的修改 #我将web项目放在第二块硬盘上,也就是/mnt目录下,项目名为tshare Docuement "/mnt/tshare"
由于mysql被收购了,因此centos7中不在集成mysql了,而是集成mariadb,因此须要先卸载mariadb
#列出安装的mysql。 rpm -qa | grep mariadb ###显示mariadb-libs-5.5.56-2.el7.x86_64 #卸载 rpm -e mariadb-libs-5.5.56-2.el7.x86_64 ####会报以下错误 error: Failed dependencies: libmysqlclient.so.18()(64bit) is needed by (installed) postfix-2:2.10.1-6.el7.x86_64 libmysqlclient.so.18(libmysqlclient_18)(64bit) is needed by (installed) postfix-2:2.10.1-6.el7.x86_64 #强制卸载 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 #检查是否有遗留文件。若是有删除便可。 ls /etc/my.cnf ll /var/lib/mysql/ ll /var/lib64/mysql(64位)
mysql源代码下载网址:https://dev.mysql.com/downloa...
mysql依赖软件boost下载网址:http://www.boost.org/users/do... 。
将下载获得的mysql源码和boots源码复制到/web目录下
使用yum安装其余的依赖项:yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel
cd /web tar -zxvf mysql-8.0.16.tar.gz #解压缩mysql源码包 mv boost_1_69_0.tar.gz mysql-8.0.16 #将boost移动到解压后的mysql目录中 cd mysql-8.0.16 #进入mysql解压目录 tar -zxvf boost_1_69_0.tar.gz #解压boost mkdir configure #建立cmake编译目录
cd configure #进入cmake编译目录 #下面这么多行属于同一条指令里面的(#是注释,不须要) cmake .. -DBUILD_CONFIG=mysql_release \ -DINSTALL_LAYOUT=STANDALONE \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DENABLE_DTRACE=OFF \ -DWITH_EMBEDDED_SERVER=OFF \ -DWITH_INNODB_MEMCACHED=ON \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_PAM=ON \ -DCMAKE_INSTALL_PREFIX=/var/mysql/ \ -DINSTALL_PLUGINDIR="/var/mysql/lib/plugin" \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EDITLINE=bundled \ -DFEATURE_SET=community \ -DCOMPILATION_COMMENT="MySQL Server (GPL)" \ -DWITH_DEBUG=OFF \ -DWITH_BOOST=..
最后一个参数“-DWITH_BOOST”的值表示boost所在的目录,若是按上面的步骤来,此处不用修改(可是若是你发现仍是报错的话,那最好把这里改成绝对路径),你能够把boost解压到其余目录而后在此处写上路径。
固然编译过程不可能这么顺利,首先须要面对的问题就是cmake的版本问题,若是编译出错而且告诉你须要高版本的cmake,那么你须要去下载高版本cmake而后安装,
地址:https://cmake.org/files/v3.10...
[root@localhost ~]# tar -zxvf cmake-3.10.2.tar.gz [root@localhost ~]# cd cmake-3.10.2 [root@localhost cmake-3.10.2]# ./bootstrap --prefix=/usr/local [root@localhost cmake-3.10.2]# gmake [root@localhost cmake-3.10.2]# make install
解决cmake版本问题后,再次使用cmake编译,若是报错告诉你/usr/bin/cmake不存在,那么你就写上cmake的绝对路径。以后再次cmake编译,可能会出现GCC版本问题,centos使用yum安装的gcc是4.8版本的,编译mysql-8.0.16时须要5.3版本的gcc,须要下载devtoolset来安装高版本gcc。
yum install centos-release-scl-rh centos-release-scl yum check-update yum install devtoolset-4-gcc devtoolset-4-gcc-c++ source /opt/rh/devtoolset-4/enable gcc -v #查看gcc版本
在此终端查看gcc版本为5.3,可是其余终端查看你的gcc版本仍为4.8(我没有研究是什么缘由),因此不要关闭这个终端,咱们就在这个终端下编译mysql。再次使用cmake编译,若是出现“Cannot find appropriate system libraries for WITH_SSL=system”、“CMake Error at cmake/ssl.cmake:68 (MESSAGE):Please install the appropriate openssl developer package.”这样的错误,那么须要安装ssl(yum install ncurses-devel 和 yum install openssl-devel)
再次执行cmake编译
/usr/local/bin/cmake .. -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=STANDALONE -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_DTRACE=OFF -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_MEMCACHED=ON -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_PAM=ON -DCMAKE_INSTALL_PREFIX=/var/mysql/ -DINSTALL_PLUGINDIR="/var/mysql/lib/plugin" -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EDITLINE=bundled -DFEATURE_SET=community -DCOMPILATION_COMMENT="MySQL Server (GPL)" -DWITH_DEBUG=OFF -DWITH_BOOST=/usr/local/boost
我把新的cmake3安装在/usr/local/bin/,因此最开始使用这个路径下的cmake,因为我最开始下载的是boost-1.70版本,因此后来从新下载了一个1.69版本的,把它放在了/usr/local目录下,因此最后的-DWITH_BOOST的值设为了这个(若是你一开始就下载的1.69版本的boost,那么就不必修改这个值)。这些错误解决后我没有遇到其余的错误了,那么最后的编译结果以下:
能看到这两个“done”表示咱们cmake编译成功了(其实是生成了Makefile编译文件)。
mysql安装就完成了,接下来配置mysql用户以及日志文件
useradd -s /sbin/nologin mysql #添加名为mysql的用户 #建立mysql的数据和日志目录,考虑到第一块硬盘空间不够,因此将数据文件放在第二块硬盘上。 #mkdir不能建立多层目录,须要分开建立 mkdir /mnt/mysql_data mkdir /var/mysql/log chown -R mysql:mysql /mnt/mysql_data/ chown -R mysql:mysql /var/mysql/log
vim /etc/my.cnf #输入以下内容 [mysqld] port=3306 datadir=/mnt/mysql_data log_error=/var/mysql/log/error.log basedir=/var/mysql #basedir只能是这个目录,由于mysql启动时须要/var/mysql/bin/mysqld_safe文件
/var/mysql/bin/mysqld --initialize --user=mysql
ll /mnt/mysql_data #显示以下内容 -rw-r-----. 1 mysql mysql 56 May 28 08:04 auto.cnf -rw-------. 1 mysql mysql 1676 May 28 08:04 ca-key.pem -rw-r--r--. 1 mysql mysql 1112 May 28 08:04 ca.pem -rw-r--r--. 1 mysql mysql 1112 May 28 08:04 client-cert.pem -rw-------. 1 mysql mysql 1680 May 28 08:04 client-key.pem -rw-r-----. 1 mysql mysql 5284 May 28 08:05 ib_buffer_pool -rw-r-----. 1 mysql mysql 12582912 May 28 08:05 ibdata1 -rw-r-----. 1 mysql mysql 50331648 May 28 08:05 ib_logfile0 -rw-r-----. 1 mysql mysql 50331648 May 28 08:04 ib_logfile1 drwxr-x---. 2 mysql mysql 4096 May 28 08:05 #innodb_temp drwxr-x---. 2 mysql mysql 4096 May 28 08:04 mysql -rw-r-----. 1 mysql mysql 24117248 May 28 08:05 mysql.ibd drwxr-x---. 2 mysql mysql 4096 May 28 08:04 performance_schema -rw-------. 1 mysql mysql 1676 May 28 08:04 private_key.pem -rw-r--r--. 1 mysql mysql 452 May 28 08:04 public_key.pem -rw-r--r--. 1 mysql mysql 1112 May 28 08:04 server-cert.pem -rw-------. 1 mysql mysql 1676 May 28 08:04 server-key.pem drwxr-x---. 2 mysql mysql 4096 May 28 08:04 sys -rw-r-----. 1 mysql mysql 10485760 May 28 08:05 undo_001 -rw-r-----. 1 mysql mysql 10485760 May 28 08:05 undo_002 ll /mnt/mysql/log #显示以下内容 -rw-r-----. 1 mysql mysql 1091 May 28 08:04 error.log
#将/var/mysql/support-files/mysql.server复制到/etc/init.d下并重命名为mysqld cp /var/mysql/support-files/mysql.server /etc/init.d/mysqld #修改mysqld中的basedir和datadir为上面你设置的目录 vim mysqld
/etc/init.d/mysqld start #能够增长环境变量使得在任何路径下都能启动服务,此处不作介绍
#第一次登陆mysql时有一个默认密码,能够查看 cat /var/mysql/log/error.log |grep 'A temporary password' #显示以下一行内容,其中“:”后面的就是密码即密码为“=?Jj.HhPk8hW” 2019-05-28T11:01:46.013790Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: =?Jj.HhPk8hW #登陆mysql,因为/usr/bin并无mysql命令,因此使用绝对路径/var/mysql/bin/mysql登陆,而后输入密码 /var/mysql/bin/mysql -uroot -p #修改密码,将your_password替换为你的密码便可 alter user 'root'@'localhost' identified by 'your_password'; #退出从新登陆,确认密码修改完成 exit /var/mysql/bin/mysql -uroot -p
php源代码下载:php官网下载,我选择了php-7.3.5版本(php-7.3.5.tar.gz)
将下载获得的压缩包移动到/web目录下进行解压缩,这个源代码即便在编译安装完后也不要删,后面会须要它内部的扩展文件
cd /web tar -zxvf php-7.3.5.tar.gz cd php-7.3.5 #下面这么多行为一条命令,和mysql编译时差很少,此处开启了php的一些扩展,例如zip、mysqli ./configure --prefix=/usr/local/php7 \ --with-apxs2=/usr/local/apache24/bin/apxs \ --with-config-file-path=/etc/php.ini \ --with-curl \ --with-freetype-dir \ --with-gd \ --with-gettext \ --with-iconv-dir \ --with-kerberos \ --with-libdir=lib64 \ --with-libxml-dir \ --with-mysqli \ --with-openssl \ --with-pcre-regex \ --with-pdo-mysql \ --with-pdo-sqlite \ --with-pear \ --with-png-dir \ --with-xmlrpc \ --with-xsl \ --with-zlib \ --enable-fpm \ --enable-bcmath \ --enable-libxml \ --enable-inline-optimization \ --enable-mbregex \ --enable-mbstring \ --enable-opcache \ --enable-pcntl \ --enable-shmop \ --enable-soap \ --enable-sockets \ --enable-sysvsem \ --enable-xml \ --enable-zip
第一行的--prefix设置的是php的安装路径,最好放在usr/local下
第二行的--with-apxs2的值若是是按照前面个人方式安装的apache,那么这个值是对的,若是你是用其余方式安装的apache,那么你须要找到它的安装目录下的apxs文件
第三行的--with-config-file-path的值是设置php.ini的路径,方便配置php
ps:在执行./configure命令生成php的编译文件时,若是缺乏某些依赖项,而须要编译安装(以下面的curl和libzip安装等等),请从新开一个终端,在/web目录下安装这些依赖项,千万不要在php编译目录下安装这些依赖
执行./configure时若是出现“checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support”错误,则说明curl版本低,须要安装高版本。
wget https://curl.haxx.se/download/curl-7.20.0.tar.gz #获取curl源代码包 tar -zxvf curl-7.20.0.tar.gz #解压缩 cd curl-7.20.0 ./configure --prefix=/usr/local/curl #生成Makefile文件,并将安装目录设置为/usr/local/curl make #编译 make install #安装
从新执行./configure命令,此时须要修改一下第三行的--with-curl的值为/usr/local/curl
./configure --prefix=/usr/local/php7 \ --with-apxs2=/usr/local/apache24/bin/apxs \ --with-config-file-path=/etc/php.ini \ --with-curl=/usr/local/curl \ --with-freetype-dir \ --with-gd \ --with-gettext \ --with-iconv-dir \ --with-kerberos \ --with-libdir=lib64 \ --with-libxml-dir \ --with-mysqli \ --with-openssl \ --with-pcre-regex \ --with-pdo-mysql \ --with-pdo-sqlite \ --with-pear \ --with-png-dir \ --with-xmlrpc \ --with-xsl \ --with-zlib \ --enable-fpm \ --enable-bcmath \ --enable-libxml \ --enable-inline-optimization \ --enable-mbregex \ --enable-mbstring \ --enable-opcache \ --enable-pcntl \ --enable-shmop \ --enable-soap \ --enable-sockets \ --enable-sysvsem \ --enable-xml \ --enable-zip
若是有“configure: error: png.h not found.”的错误信息,说明libpng以及devel没有安装,安装便可
yum install libpng yum install libpng-devel
再次执行./configure命令,若是出现“configure: error: freetype-config not found.”错误,执行yum install freetype-devel命令安装便可。
然后再次执行./configure命令,若是出现“configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution”错误,执行yum -y install libxslt libxslt-devel命令安装便可。
然后再次执行./configure命令,若是出现“configure: error: Please reinstall the libzip distribution”错误,则须要安装libzip-devel,执行yum install libzip-devel命令安装便可。
再次执行./configure命令,提示libzip版本太低,下载编译安装高版本libzip
yum remove libzip -y #删除旧版本libzip wget https://nih.at/libzip/libzip-1.2.0.tar.gz tar -zxvf libzip-1.2.0.tar.gz cd libzip-1.2.0 ./configure make && make install
再次执行./configure命令,若是出现“configure: error: off_t undefined; check your library configuration”错误,则修改一下指定文件
vim /etc/ld.so.conf #添加以下几行 /usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64 #保存退出 :wq ldconfig -v # 使之生效
再次执行./configure,执行成功(可能会有一个警告信息,能够不用管,也能够把它指定的扩展项删除,从新执行一次./configure)
最后执行编译和安装
make #编译 make test make install
若是make的时候,出现zipconf.h找不到错误,则把/usr/local/lib/libzip/zipconf.h移动到指定文件夹。
执行php -v命令查看php版本,若是可以看到php 7.3.5则表示php已经安装成功(若是提示php is not command则表示没有配置php的环境变量,此时只能用usr/local/php7/bin/php才能调用php命令,不过这个命令咱们也不经常使用,能够不配置)
#查看php版本 .usr/local/php7/bin/php -v
php.ini是php的配置文件,能够在apache的httpd.conf中设置这个文件的路径
vim /usr/local/apache24/conf/httpd.conf #在最后加入下面这一行 PHPIniDir /etc/php.ini
而后在源代码目录/web/php-7.3.5/build目录下找到php.ini-development,复制到/etc下并重命名为php.ini
cp /web/php-7.3.5/build/php.ini-development /etc/php.ini
以前咱们在apache配置文件中将web站点设在了/mnt/tshare,如今咱们进入这个目录,新建一个index.php
cd /mnt/tshare vim index.php #开始编辑 <?php phpinfo(); ?> #保存退出 :wq #重启apache服务,而后访问:localhost/index.php /usr/local/apache24/bin/apachectl restart
若是浏览器没有解析php代码,而是将代码打印出来了,说明apache配置不完善
#配置httpd.conf vim /usr/local/apache24/conf/httpd.conf #找到<IfModule mine_module>标签 #插入以下两句 AddType application/x-httpd-php .html .htm .php AddType application/x-httpd-php-source .phps #保存退出并重启apache服务,再次访问浏览器,就能看到php.ini中的配置信息了
“Loaded Configuration File”表示实际加载的php.ini文件,也就咱们在httpd.conf中设置的路径
总结部分主要讲安装过程时须要哪些依赖,安装过程当中碰见了哪些错误
依赖:apr、apr-util、pcre 错误:/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_GetErrorCode'
依赖:卸载mariadb、cmake、boost 错误: cmake版本太低 gcc版本太低 “Cannot find appropriate system libraries for WITH_SSL=system” “CMake Error at cmake/ssl.cmake:68 (MESSAGE):Please install the appropriate openssl developer package.”
依赖:无 错误: “checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support” “configure: error: png.h not found.” “configure: error: freetype-config not found.” “configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution” “configure: error: Please reinstall the libzip distribution” “configure: error: off_t undefined; check your library configuration”
若是是第一本身配置环境,建议使用我这种方式一步一步来,若是使用rpm或者yum方式安装,可能以后你会有不少东西本身涨不到位置。一键安装虽然好,可是初学时不建议使用。