写在前面
本学期软件工程课程,老师要求我们写一个大作业,我们小组选择做一个资源分享的网站平台。现在工作已经结束,我打算从头开始回顾,并将其过程写为多篇连载的博客。
工具选择
开发最重要的准备工作就是环境搭建,我们小组本次选择使用apache+mysql+php开发这个网站,并且将网站部署在Linux机上。所以我们需要准备的东西有:VMware虚拟机、Centos7镜像文件。安装一个centos虚拟机后在虚拟机上安装apache、mysql和php环境。(ps:亲身实践,感觉VMware比virtual box好用)
安装过程
现在我的pc上已经安装好了一个centos7的虚拟机(具体过程可以搜索教程)
现在打开虚拟机,我的虚拟机上只添加了一块硬盘(20G,建议大一点,后来我安装mysql时发现硬盘空间不够用又加了一块20G硬盘,具体什么东西占用了我的空间我还没找到),分为两个分区(swap交换分区,大小4G,剩下的空间全部设为根分区,其中根分区挂载到了根目录下)。首先在根目录下创建一个web目录,作为apache、mysql、php源代码存放路径,因为我将要使用源代码方式安装这三个软件。
apache的安装
使用源代码方式安装的不好之处在于,需要自己解决软件安装过程中的全部依赖,而且下载源代码包解压缩后需要经过编译才能安装,好处在于可以自己进行一些配置。我之所以选择源代码安装方式是因为后面涉及到php的扩展时需要源代码。
那么安装apache之前我们需要获取apache和其依赖软件的源代码:
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目录中,然后准备一一安装。
- apr依赖的安装:进入/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源码没有什么影响。
yum install gcc* #安装gcc
- apr-util依赖的安装:回到/web目录
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
- prec依赖的安装
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
- apache安装
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安装对应的依赖即可
①安装libxml2-devel
[root@test_01 ~]# yum install -y libxml2-devel
②删除apr-util目录并且重新编译安装(将/web目录下的apr-util删除,重新解压缩编译)
③重新编译安装httpd,成功解决。
apache已经安装完成(如果编译安装过程出现其他错误,我也不知道该怎么办,因为我没有遇到),那么接下在就是开启apache服务,配置apache的配置文件。
- 开启apache服务:apache的服务程序是/usr/local/apache24/bin的httpd,双击httpd即可开启apache服务,当然使用图形界面并不是Linux系统的风格,甚至当租用服务器时,根本就没有图形界面。那么如何通过终端操作开启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的配置文件
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的安装
因为mysql被收购了,所以centos7中不在集成mysql了,而是集成mariadb,所以需要先卸载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和boost下载
mysql源代码下载网址:https://dev.mysql.com/downloa...
- 在Select Operationg System中选择Source Code;
- 在下面的Select OS Version选择Generic Linux(Architecture Independent);
- 然后再下面的部分可以看到Compressed TAR Archive,单击后面的Download;
- 在弹出的界面中选择最下面的No thanks, just start my download就可以开始下载了。
mysql依赖软件boost下载网址:http://www.boost.org/users/do... 。
- 我选择的是8.0.16版本的额mysql,与其对应的boost是1.69.0版本,如果你的mysql跟我的版本不一样,在后面cmake编译mysql的时候会提示你应该使用哪个版本的boost。
将下载得到的mysql源码和boots源码复制到/web目录下
使用yum安装其他的依赖项:yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel
- 解压缩mysql和boots
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编译目录
- 编译安装mysql
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然后安装,
- 安装cmake3(需要GCC的支持,如果没有GCC,可以先yum install gcc*安装gcc)
地址: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。
- 安装devtoolset和5.3版本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编译文件)。
- 在当前目录下使用make命令进行编译(编译过程很慢,不要着急,可能得花几个小时)
- 安装mysql:执行make install(由于磁盘空间不够了,所以我删除了apache以及它的宜依赖文件的源代码还给虚拟机加了一块20G硬盘挂载到/mnt目录上,新添加的硬盘用于之后可能用到的软件,php、mysql、apache都放在第一块硬盘),记住只能删源代码包,/usr/local/apr和/usr/local/pcre都不能删,如果觉得源代码安装麻烦,可以使用yum安装,因为apache和mysql的源代码并不重要,我这里是为了体验一下编译安装。
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
- 配置mysql启动文件
#将/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
#第一次登录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官网下载,我选择了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.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和php测试
之前我们在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中设置的路径
总结
总结部分主要讲安装过程时需要哪些依赖,安装过程中遇见了哪些错误
- apache
依赖:apr、apr-util、pcre
错误:/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_GetErrorCode'
- mysql
依赖:卸载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.”
- php
依赖:无
错误:
“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方式安装,可能之后你会有很多东西自己涨不到位置。一键安装虽然好,但是初学时不建议使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。