共计 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
