本文共 10355 字,大约阅读时间需要 34 分钟。
一.LAMP构架的安装与经验技巧(源码安装好处。是便于管理,可以选定参数,可以使用新版本)
相关软件列表:
# ls /soft/ | grep -E "*.gz|*.zip|*.xz|*.bz2"
apr-1.4.5.tar.gz apr-util-1.3.12.tar.gz autoconf-2.61.tar.gz freetype-2.3.12.tar.gz httpd-2.4.18.tar.bz2 jpegsrc.v6b.tar.gz libgd-2.1.1.tar.xz libmcrypt-2.5.8.tar.gz libpng-1.4.1.tar.gz libxml2-2.7.6.tar.gz mysql-5.6.17.tar.gz pcre-8.10.zip php-5.6.18.tar.gz zlib-1.2.5.tar.gz参考解压方式: for n in *.tar.gz; do tar zxf $n;done;
其余用: tar xf filename
apache 的安装与使用经验
动态编译与静态编译(每次启动服务的时候都加载) (apache的扩展插件是通过模块机制扩展的。apache支持PHP是通过编译模块然后加载模块实现的。) (1) apache 需要的相关库文件 apr apr-util pcre(支持rewrite功能) cd apr-1.4.5 ./configure --prefix=/usr/local/apr make && make instal cd apr-util-1.3.12 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config make && make install cd pcre-8.10 ./configure --prefix=/usr/local/pcre make&&make install 下面是功能模块(使apache支持功能起到壮大apache的作用) (2) 安装libxml2 cd libxml2-2.7.6 ./configure --prefix=/usr/local/libxml2 make && make install (3)安装libmcrypt cd libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt make && make install (4)安装zlib cd zlib-1.2.5 ./configure make && make install (5)安装 libpng cd libpng-1.4.1 ./configure --prefix=/usr/local/libpng make && make install (6)安装jpeg6 此安装包无法自动创建目录需要手动添加 mkdir /usr/local/jpeg6 mkdir -p /usr/local/jpeg6/{lib,bin,include} mkdir -p /usr/local/jpeg6/man/man1 cd jpeg-6b ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static make && make install 错误checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized 或者出现make: ./libtool: Command not found 一般原因是 所以来的libtool 库文件版本低或缺失。 解决方法:安装高版本的libtool 然后拷贝2个文件 cp /usr/share/libtool/config/config.sub . cp /usr/share/libtool/config/config.guess . 继续 make && make install (7)安装freetype cd freetype-2.3.12 ./configure --prefix=/usr/local/freetype make && make install (8)安装autoconf cd autoconf-2.61 ./configure make && make install (9)安装GD库 cd libgd-2.1.1 ./configure \ --prefix=/usr/local/gd2/ \ --enable-m4_pattern_allow \ --with-zlib=/usr/local/zlib/ \ --with-jpeg=/usr/local/jpeg6/ \ --with-png=/usr/local/libpng/ \ --with-freetype=/usr/local/freetype/ make && make install 主题(一)apache源码编译安装 cd httpd-2.4.18 ./configure --prefix=/usr/local/apache2 \ --enable-mods-shared=all \ --enable-so \ --enable-proxy-ajp \ --enable-rewrite \ --with-apr=/usr/local/apr \ --with-apr-util=/usr/local/apr-util \ --with-pcre=/usr/local/pcre make && make install # /usr/local/apache2/bin/apachectl start # curl 127.0.0.1 <html><body><h1>It works!</h1></body></html> apache下的的主要目录; bin build cgi-bin conf error htdocs icons include logs man manual modules (1)bin 是一些命令的存放位置。如httpd 提供apache服务管理如启动关闭。 使用:./bin/httpd -k {start |restart|stop} apxs是编译模块相关的命令(PHP模块) apachectl是调用httpd服务的脚本。 例如查看静态编译的模块 # ./bin/apachectl -l Compiled in modules: core.c mod_so.c http_core.c worker.c # ./bin/httpd -l (进一步证实http和apachectl关系) Compiled in modules: core.c mod_so.c http_core.c worker.c) (2) htdocs 这个目录是存放程序员编写的程序的目录 (3) modules 放置apache编译模块的目录。 .so(模块的后缀名) (4) logs 日志文件目录 包含 pid 文件(包含apache父进程) *****ps -ef | grep httpd**** 查看子进程如果出现不连续可能是apache出现问题。出现重新启动。 (5)conf 包含apache的所有配置文件 (6)cgi-bin 提供一些在线表格的功能。如果不需要需要把这个目录下文件清空(减小安全隐患)apache 解析PHP语句http.conf里面的主要参数
DirectoryIndex index.html index.php LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php主题(二)mysql源码编译安装
cd mysql-5.6.17 cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci Mysql编译安装属性值解析 #cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安装路径 -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定mysql数据(库)文件的存放路径 -DSYSCONFDIR=/etc \ #配置文件 -DWITH_MYISAM_STORAGE_ENGINE=1 \ #引擎支持myisam -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #引擎支持 innodb -DWITH_MEMORY_STORAGE_ENGINE=1 \ #引擎支持 memory-storage -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ #指定mysql的sock文件路径 -DMYSQL_TCP_PORT=3306 \ #指定mysql端口号 -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci #指定字符集 错误: CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. 解决办法: yum install ncurses-devel -y \mv \mv CMakeCache.txt /tmp 然后重新 cmake(上面的指令如果没有错误提示) make && make install 查看是否有mysql用户和组没有创建。 useradd mysql -s /sbin/nologin -M 修改mysql权限: chown -R mysql.mysql /usr/local/mysql 进入mysql安装目录下,执行初始化配置脚本,创建系统自带的数据库和表 # ./scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql 启动mysql服务:# ./support-files/mysql.server start 错误提示: Starting MySQL.... ERROR! The server quit without updating PID file (/usr/local/mysql/data/swallow.pid) 可能出现的原因和解决方法: (1).如果是初次安装。可能是初始化没有成功。在执行初始化命令的时候。提示里面包含2个OK (代表成功。这种情况重新初始化 (2)可能原来系统安装过mysql 。可以用ps -ef | grep msyql 查看。然后结束进程:pkill mysql (3)data 目录权限可能不对。 chmod 755 data (4)查看属主或属组 一般 在 创建mysql用户 的后面就会 chown -R mysql:mysql /usr/local/mysql (这个可能性不大) 启动mysql程序: ./bin/mysql 可以产看mysql状态: mysql> status -------------- ./bin/mysql Ver 14.14 Distrib 5.6.17, for Linux (x86_64) using EditLine wrapper Connection id: 1 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.6.17 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 7 min 7 sec Threads: 1 Questions: 5 Slow queries: 0 Opens: 67 Flush tables: 1 Open tables: 60 Queries per second avg: 0.011 -------------- 主题(三) PHP源码编译安装 cd php-5.6.18 ./configure \ --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysql=/usr/local/mysql/ \ --with-libxml-dir=/usr/local/libxml2/ \ --with-png-dir=/usr/local/libpng/ \ --with-jpeg-dir=/usr/local/jpeg6/ \ --with-freetype-dir=/usr/local/freetype/ \ --with-gd=/usr/local/gd2/ \ --with-zlib-dir=/usr/local/zlib/ \ --with-mcrypt=/usr/local/libmcrypt/ \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-xpm-dir=/usr/lib64/ \ --enable-soap \ --enable-mbstring=all \ --enable-sockets 参数详解; ./configure \ --prefix=/usr/local/php \ #安装路径 --with-config-file-path=/usr/local/php/etc \ #PHP的配置文件路径 --with-apxs2=/usr/local/apache2/bin/apxs \ #与apache连接需要的支持模块(工具) --with-mysql=/usr/local/mysql/ \ --with-libxml-dir=/usr/local/libxml2/ \ --with-png-dir=/usr/local/libpng/ \ --with-jpeg-dir=/usr/local/jpeg6/ \ --with-freetype-dir=/usr/local/freetype/ \ --with-gd=/usr/local/gd2/ \ --with-zlib-dir=/usr/local/zlib/ \ --with-mcrypt=/usr/local/libmcrypt/ \ # PHP需要的所有前面安装的连接模块 --with-mysqli=/usr/local/mysql/bin/mysql_config \ #指定PHP程序去连接mysql的方式 #PHP5.3。3以后开发了mysqlnd。是PHP新的连接mysql的驱动配置方式: --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ 如果想把这3种都加载可以把 --with-mysqli=/usr/local/mysql/bin/mysql_config \ 这句换成上面3句。 #这里需要注意的是;mysql的连接mysql方式有3种。分别是:mysql,mysqli和pdo #这里需要关注2个;mysqli 和pdo。(他们是主流的支持高版本的) --with-xpm-dir=/usr/lib64/ \ --enable-soap \ --enable-mbstring=all \ --enable-sockets 错误:configure: error: xpm.h not found. 解决方法:yum install libXpm-devel -y make && make install PHP动态加载模块的方法:如果在静态编译的时候那个模块没有编译进去可以动态加载。 举例:查看源码下的模块目录; cd /soft/php-5.6.18/ext/ 下面的模块都可以通过动态加载,编译进去。以ftp 为例; cd ftp /usr/local/php/bin/phpize (借助这个命令生成所需的configure 等一系列的安装文件) ./configure --with-php-config=/usr/local/php/bin/php-config make && make install 至此,就把ftp这个模块编译安装完成了。然后,需要去加载文件(修改php.ini) cd /usr/local/php/etc/ vim php.ini (初次安装没有这个文件可以去/soft/php-5.6.18/源码目录去拷贝 php.ini-development php.ini-production 一般这两个文件运维常用第二个) 查找到 extension 相关的注释地方 添加一下两句:(模块在PHP程序下的位置{一般编译动态模块后会提示的}和模块的名称) extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20131226/" extension = ftp.so 如果要加载模块需要重新启动apache服务器。 /usr/local/apache2/bin/httpd -k restart 查看PHP模块加载成功与否;可以用php 命令显示看是否有添加 /usr/local/php/bin/php -m 测试lamp是否搭建成功: 在apach2的htdocs目录下新建.php文件 vim ./htdocs/info.php <?php phpinfo(); ?> 浏览器测试:http://192.168.1.140/info.php 结果显示空白。 解决思路:查看 /usr/local/apache2/modules/ 是否含有 libphp5.so这个模块。 (这个模块是apache负责PHP解析的) 修改配置文件:http.conf ServerName loacalhost:80 (仿照这行添加AddType application/x-gzip .gz .tgz) AddType application/x-httpd-php .php 加载pdo-mysql 的错误:make 错误 /soft/php-5.6.18/ext/pdo_mysql/php_pdo_mysql_int.h:27:34: error: ext/mysqlnd/mysqlnd.h: No such file or directory 解决方法:cp -a /soft/php-5.6.18/ext/pdo_mysql /usr/local/php/include/php/ext/ 这里的思路是 :make 是在安装目录下操作。不是在源码目录操作。需要把依赖的文件放置到安装路径下。方便应用。 但是:遗憾的是安装完成后,不可以加载。用常规方法: extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20131226/" extension = pdo_mysql.so 重新启动了好多httpd 也没加载成功。用 bin/php -m 一直没有查看到。我可以确定修改php.ini文件生效,把那个ftp模块注释掉后 就看不到那个模块出现。所以,只好重新编译的。 将编译的--with-mysqli=/usr/local/mysql/bin/mysql_config \ 语句换成了: --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ 这几句。支持3种方式连接mysql。这里mysqlnd是PHP5.3以上的默认连接mysql的引擎 PHP不在支持扩展mysql(mysqli) 编译的时候可以是:--with-pdo-mysql=mysqlnd \ 附上PHP连接的3个脚本 cat mysqli.php mysql-pdo.php mysql.php <?php $conn = mysqli_connect('localhost', 'root', '', 'mysql'); if(!$conn){ die("数据库连接错误" . mysqli_connect_error()); }else{ echo"数据库连接成功"; } ?> <?php try{ $pdo=new pdo("mysql:host=127.0.0.1;dbname=mysql","root",""); }catch(PDDException $e){ echo "数据库连接错误"; } echo "恭喜!数据库连接成功"; ?> <?php $conn = @ mysql_connect("localhost", "root", "") or die("数据库连接错误"); mysql_select_db("bbs", $conn); mysql_query("set names 'utf8'"); echo "数据库连接成功"; ?> 查看 phpinfo() 信息来查看PHP 详细情况。 上传文件关注如下几个参数: post_max_size = 128M upload_max_filesize = 128M #这两个设置一样即可,可以更大但要注意超时 max_execution_time = 30 max_input_time = 600 memory_limit = 32M