共计 10393 个字符,预计需要花费 26 分钟才能阅读完成。
前言:在这里将介绍如何在 CentOS 下搭建 LAMP 环境(全部使用源码编译安装),用于 web 服务器开发。
- LAMP: Linux + Apache + PHP + MySQL。
- 系统: CentOS 7,64 位。
CentOS 安装
我选取了 64 位的 CentOS 7 这个 Linux 系统,安装过程也很简单,不再过多叙述,只稍微介绍一下我的分区情况:
分区名 | 大小 |
---|---|
/boot | 200MB |
/swap | 8GB(不大于物理分区即可) |
/ | 20GB |
/home | 剩余空间 |
Apache 编译安装
我选择了 httpd 2.2 这个版本,可以参考官方说明文档。
安装依赖:
安装依赖需要用到的 gcc、g++ 编译器:
########gcc、g++
sudo yum install gcc
sudo yum install gcc-c++
下面两个是 apache 的优化工具:
########apr
wget http://labfile.oss.aliyuncs.com/apr-1.5.1.tar.gz
tar -zxvf apr-1.5.1.tar.gz
cd apr-1.5.1/
./configure --prefix=/opt/apr
sudo make && make install
########apr-util
cd Downloads/
wget http://labfile.oss.aliyuncs.com/apr-util-1.5.4.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/opt/apr-util --with-apr=/opt/apr
sudo make && make install
Perl 库,兼容正则表达式库:
cd Downloads/
wget http://labfile.oss.aliyuncs.com/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure --prefix=/opt/pcre
sudo make && make install
安装 apache:
cd Downloads/
wget http://labfile.oss.aliyuncs.com/httpd-2.2.29.tar.gz
tar -zxvf httpd-2.2.29.tar.gz
cd httpd-2.2.29
./configure --prefix=/opt/apache --with-apr=/opt/apr --with-apr-util=/opt/apr-util --with-pcre=/opt/pcre
sudo make && make install
sudo sed -i 's/^#ServerName.*/ServerName localhost/' /opt/apache/conf/httpd.conf
测试:
启动:
sudo /opt/apache/bin/apachectl start
获取服务器回应(安装 apache 最后一步已经将服务器设为 localhost):
curl -I 127.0.0.1
若安装成功则如下:
关闭:
sudo /opt/apache/bin/apachectl stop
MySQL 编译安装
安装依赖:
注意: MySQL5.5 之后的版本使用 cmake 进行编译。
######## 若先前编译过,则需要删除刚才编译生成的 CMakeCache.txt 文件
rm -f CMakeCache.txt
sudo yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake cmake-gui libaio-devel bison-devel make
编译安装(时间较长):
cd Downloads/
wget http://labfile.oss.aliyuncs.com/mysql-5.6.24.tar.gz
tar -zxvf mysql-5.6.24.tar.gz
cd mysql-5.6.24
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_DATADIR=/opt/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1
sudo make
sudo make install
创建 mysql 用户:
id mysql > /dev/null 2>&1 || sudo useradd -r -s /sbin/nologin -M -d /opt/mysql/data mysql
初始化数据目录:
sudo chown -R mysql:mysql /opt/mysql/data
sudo /opt/mysql/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql --defaults-file=/opt/mysql/support-files/my-default.cnf
修改配置文件:
sudo sh -c 'cat >> /opt/mysql/my.cnf <<EOF
basedir = /opt/mysql
datadir = /opt/mysql/data
log-error = /opt/mysql/data/error.log
pid-file = /opt/mysql/data/mysql.pid
port = 3306
EOF'
清除残留文件:
sudo sh -c 'for file in /etc/mysql/my.cnf /etc/my.cnf ; do [-f $file ] && rm -f $file ; done'
启动:
sudo /opt/mysql/support-files/mysql.server start
成功则显示:
测试:
/opt/mysql/bin/mysqladmin ping
成功则显示:
查看数据库:
/opt/mysql/bin/mysql -u root -e 'show databases;'
关闭:
sudo /opt/mysql/support-files/mysql.server stop
成功则显示:
PHP 编译安装
安装依赖:
最后三个文件可以从下面的链接下载。
—————————————— 分割线 ——————————————
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2015 年资料 / 9 月 / 3 日 /Linux 中文 man 离线手册 CHM/
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
—————————————— 分割线 ——————————————
cd Downloads/
sudo yum install zlib1g-dev libbz2-dev libcurl4-gnutls-dev libjpeg-dev libpng12-dev libfreetype6-dev libmcrypt-dev libxml2-dev
sudo yum install bzip2-devel.x86_64 -y
sudo yum -y install curl-devel
sudo yum install openssl.x86_64 openssl-devel.x86_64 -y
sudo yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
sudo yum install libjpeg libjpeg-devel libpng libpng-devel
######## 安装 Libmcrypt
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
sudo make
sudo make install 说明:libmcript 默认安装在 /usr/local
######## 安装 mhash
cd ..
tar -zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
sudo make
sudo make install
######### 安装 mcrypt
cd ..
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
LD_LIBRARY_PATH=/usr/local/lib ./configure
sudo make
sudo make install
编译安装:
cd Downloads/
wget http://labfile.oss.aliyuncs.com/php-5.5.21.tar.gz
tar -zxvf php-5.5.21.tar.gz
cd php-5.5.21
./configure --prefix=/opt/php --with-bz2 --with-curl --with-jpeg-dir --with-gd --enable-shared --enable-mbstring --with-mcrypt --with-mysql=/opt/mysql --with-pdo-mysql=/opt/mysql --with-mysqli=/opt/mysql/bin/mysql_config --enable-fpm --enable-phar --enable-bcmath --with-zlib --enable-zip --enable-ftp --with-gettext --enable-sockets --with-freetype-dir --with-config-file-path=/opt/php/etc/php.ini --with-config-file-scan-dir=/opt/php/etc/conf.d --with-apxs2=/opt/apache/bin/apxs
sudo make
sudo make install
sudo cp php.ini-production /opt/php/etc/php.ini
检查 php 是否支持 mysql:
/opt/php/bin/php -m | grep mysql
若支持则显示:
修改 apache 配置文件,添加 php 的支持配置:
sudo sh -c 'cat >> /opt/apache/conf/httpd.conf <<EOF
<IfModule mime_module>
AddType application/x-httpd-php .php
</IfModule>
EOF'
若关闭则开启 apache,否则重新启动 apache:
sudo /opt/apache/bin/apachectl -k restart
测试:
sudo sh -c 'echo"<?php echo phpinfo(); ?>"> /opt/apache/htdocs/test.php'
在浏览器输入:
http://localhost/test.php
配置成功则显示 php 信息:
添加第三方模块
使用 apxs 手动编译 Apache 模块:
关于 apxs 的一些介绍及参数详见这里。
这里以 metadata 模块为例:
cd ~/Downloads/httpd-2.2.29/modules/metadata
sudo /opt/apache/bin/apxs -i -a -c mod_headers.c
###########################################################
-c:此选项表示需要执行编译操作。它首先会编译 C 源程序(.c)files 为对应的目标代码文件(.o),然后,连接这些目标代码和 files 中其余的目标代码文件(.o and .a),以生成动态共享对象 dsofile。如果没有指定 - o 选项,则此输出文件名由 files 中的第一个文件名推测得到,所以,缺省时,它一般会是 mod_name.so
-i:此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的 modules 目录中。-a:此选项自动在 httpd.conf 文件中增加一个 LoadModule 行,以激活此模 ## 标题 ## 块,或者,如果此行已经存在,则启用之。###########################################################
使用 phpize 手动编译 PHP 模块:
cd ~/Downloads/php-5.5.21/ext/ftp
/opt/php/bin/phpize
./configure --with-php-config=/opt/php/bin/php-config
sudo make
sudo make install
在 php.ini 中加载模块:
sudo sh -c 'echo"extension=ftp.so">> /opt/php/etc/php.ini'
LAMP 配置
php 配置:
配置文件 /opt/php/etc/php.ini:
### 常规配置
engine = On
short_open_tag = Off #tags 识别
asp_tags = Off #asp tags 识别
precision = 14 # 浮点类型数显示时的有效位数
output_buffering = 4096 # 输出缓存允许你在输出正文内容之后发送 header
implicit_flush = Off # 告诉输出层在每个输出块之后自动刷新自身数据
disable_functions = # 关闭特定函数
display_errors = Off # 显示错误信息
log_errors = On # 在日志文件里记录错误
request_order = "GP" #GET POST
register_argc_argv = On # 是否声明 argv 和 argc 变量
post_max_size = 8M # 最大 POST 大小
file_uploads = On # 是否允许 HTTP 方式文件上载
upload_tmp_dir = # 用于 HTTP 上载的文件的临时目录
upload_max_filesize = 2M # 上载文件的最大大小
max_file_uploads = 20 # 每次最大上传文件个数
allow_url_fopen = On # 是否允许把 URLs 当作 http:.. 或把文件当作 ftp:...
default_socket_timeout = 60 # 默认 socker 超时时间
#MySQL 相关
mysql.allow_persistent = On # 允许持久连接
mysql.cache_size = 2000 # 缓存大小
mysql.max_persistent = -1 # 持久连接的最大数目 - 1 不限制
mysql.max_links = -1 # 最大链接
mysql.connect_timeout = 60 # 连接超时时间
#session 相关
session.save_handler = files # 用于保存 / 取回数据的控制方式
session.use_cookies = 1 # 是否使用 cookies
session.name = PHPSESSID # 设置 cookies 名
session.use_only_cookies = 1 # 强制 SESSION ID 必须以 COOKIE 传递
session.auto_start = 0 # 在请求启动时初始化 session
session.cookie_lifetime = 0 #cookies 保持时间
#session 垃圾回收参数
session.gc_probability = 1 # 按百分比整理
session.gc_divisor = 1000 # 每次请求时有 1 /1000 的机会启动 "垃圾回收" 进程
#Session ID 传递参数
session.use_trans_sid = 0 # 使用 URL 的方式传递 session id
session.hash_function = 0 # 生成 SID MD5 算法
session.hash_bits_per_character = 5 # 指定在 SID 字符串中的每个字符内保存多少 bit
# 常用配置参数
max_execution_time 30 # 一个脚本可使用多少 CPU 秒
max_input_time 60 # 一个脚本等待输入数据的时间有多长(秒)
memory_limit 32M # 在被取消之前,一个脚本可使用多少内存(字节)
output_buffering 4096 # 数据发送给客户机之前,有多少数据(字节)需要缓存
apache 配置:
apache 主配置文件 /opt/apache/conf/httpd.conf:
#apache 服务根目录
ServerRoot "/opt/apache"
# 服务管理员
ServerAdmin you@example.com
# 监听端口
Listen 80
# 默认首页
DirectoryIndex index.php
# 加载 php 模块
LoadModule php5_module modules/libphp5.so
# 解析 php
AddType application/x-httpd-php .php
# 目录权限参数
DocumentRoot "/opt/apache/htdocs" #WEB 文件根目录
<Directory "/opt/apache/htdocs">
# 官方文档链接 http://httpd.apache.org/docs/2.2/mod/core.html
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all #允许所有请求
</Directory>
AllowOverride 参数详解:
- none 不允许.htaccess 使用任何指令。
- AuthConfig 允许使用所有的权限指令,包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require。
- FileInfo 允许使用文件控制类型的指令。包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority。
- Indexes 允许使用目录控制类型的指令。包括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName。
- Limit 允许使用权限控制指令。包括 Allow Deny 和 Order。
- Options 允许使用控制目录特征的指令,包括 Options 和 XBitHack。
Options 参数详解:
- All 表示除 MultiViews 之外的所有特性。这也是 Options 指令的默认设置。
- None 表示不启用任何的服务器特性。
- FollowSymLinks 服务器允许在此目录中使用符号连接。如果该配置选项位于配置段中,将会被忽略。
- Indexes 如果输入的网址对应服务器上的一个文件目录,而此目录中又没有 DirectoryIndex 指令
- MultiViews 允许使用 mod_negotiation 模块提供内容协商的”多重视图”。如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。
- SymLinksIfOwnerMatch 服务器仅在符号连接与目标文件或目录的所有者具有相同的用户 ID 时才使用它。只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。
- ExecCGI 允许使用 mod_cgi 模块执行 CGI 脚本。
- Includes 允许使用 mod_include 模块提供的服务器端包含功能
- IncludesNOEXEC 允许服务器端包含,但禁用”#exec cmd”和”#exec cgi”。但仍可以从 ScriptAlias 目录使用”#include virtual”虚拟 CGI 脚本。
# 日志配置参数
ErrorLog "logs/error_log"
LogLevel warn # 错误日志记录等级
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\"%>s %b" common # 自定义日志 名为 common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"%I %O" combinedio
</IfModule>
CustomLog "logs/access_log" common #日志路径 使用名为 common 的自定义格式
</IfModule>
LogLevel 记录日志等级:
- error 错误情况。
- warn 警告情况。
- info 普通信息。
- debug 出错级别信息。
日志格式:
1. %h – 客户端的 ip 地址或主机名。
2. %l – The 这是由客户端 identd 判断的 RFC 1413 身份,输出中的符号“-”表示此处信息无效。
3. %u – 由 HTTP 认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号“-”表示此处信息无效。
4. %t – 服务器完成对请求的处理时的时间。
5.“%r”– 引号中是客户发出的包含了许多有用信息的请求内容。
6. %>s – 这个是服务器返回给客户端的状态码。
7. %b – 最后这项是返回给客户端的不包括响应头的字节数。
8.“%{Referer}i”– 此项指明了该请求是从被哪个网页提交过来的。
9.“%{User-Agent}i”– 此项是客户浏览器提供的浏览器识别信息。
# 实际访问日志
192.168.1.166 - - [04/Feb/2015:12:52:35 +0800] "GET / HTTP/1.1" 200 25
# 基于域名的虚拟主机
<VirtualHost *:80>
DocumentRoot /web1
ServerName web1.com
ErrorLog /app/apache/logs/error_log
CustomLog /app/apache/logs/access_log combined
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /web2
ServerName web2.com
</VirtualHost>
# 基于 IP 的虚拟主机
<VirtualHost 210.20.30.40>
DocumentRoot /web1
ServerName web1.com
</VirtualHost>
<VirtualHost 210.20.30.50>
DocumentRoot web2
ServerName web2.com
</VirtualHost>
# 基于端口的虚拟主机
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
<VirtualHost 172.20.30.40:80>
DocumentRoot /web1
ServerName web1.com
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
DocumentRoot /web2
ServerName web2.com
</VirtualHost>
#perfork 工作模式参数
StartServers 50 # 预创建 50 个进程
MinSpareServers 15 # 保持最小空闲进程
MaxSpareServers 30 # 保持最大空闲进程
MaxClients 225 # 最大进程数
MaxRequestsPerChild 4000 # 用来控制每个进程在处理了多少次请求之后自动销毁
注意:设置 perfork 工作模式参数时,需要使用 ps aux 查看进程占用内存数,以此调整实际环境中的参数,防止此消耗所有的资源。
下面关于 LAMP 相关 的内容你可能也喜欢:
LAMP 平台安装 Xcache 和 Memcached 加速网站运行 http://www.linuxidc.com/Linux/2015-06/118835.htm
CentOS 7 下搭建 LAMP 平台环境 http://www.linuxidc.com/Linux/2015-06/118818.htm
CentOS 6.5 系统安装配置 LAMP(Apache+PHP5+MySQL)服务器环境 http://www.linuxidc.com/Linux/2014-12/111030.htm
Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9)开发环境 http://www.linuxidc.com/Linux/2014-10/107924.htm
Ubuntu 14.10 下安装 LAMP 服务图文详解 http://www.linuxidc.com/Linux/2014-12/110082.htm
LAMP 结合 NFS 构建小型博客站点 http://www.linuxidc.com/Linux/2015-08/121029.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123465.htm