红联Linux门户
Linux帮助

源码编译LAMP

发布时间:2009-12-20 19:47:23来源:红联作者:linux.leo
我自己亲手制作的过程。还参考一下网上的资料,自己写的文档。有错误的地方,希望大家能告诉我。论坛里还有一篇源码编译的LAMP帖子,但是我居然看不到实验步骤。只能在这里献丑了,把自己做好的发上来。

LAMP(Linux+Apache+MySQL+PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。


再次要提醒大家的是,规划确实很重要。因为这些配置影响你后期的数据备份,恢复。做一个项目前,肯定都会做项目前的规划。大家一定要养成这个习惯。
透过今天这几次的安装失败,我发现,安装之前规划非常重要。

1. 分区
/boot 100M左右
SWAP 物理内存的2倍(如果你的物理内存大于4G以上,分配4G即可)
/ 15G
/usr/local 20G (用于安装软件)
/data 剩余所有空间

这个视个人硬盘而定。不过我认为,在/boot,/,swap 这些分区分完之后,多出来的分区,就应该做lv。因为这样以后如果空间不够,可以用lvextend加大空间。



MySQL 数据库位置 /data/mysql/data(可按情况设置)

Apache 网站根目录 /data/www/wwwroot(可按情况设置)

Apache 虚拟主机日志根目录 /data/www/logs(可按情况设置)



1.构建安装环境,rpm安装一下几个软件包。

# for i in gcc gcc-c++ flex bison autoconf automake bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel ; do rpm -q $i ;done
使用该语句,就能清楚的显示有什么软件包没有安装,没有安装的软件包都需要装上。



编译GD2

#tar xf gd-××××××.tar.gz

#cd gd-xxxxxxx

#configure --prefix=/usr/local/gd2

#make

#make install



编译libmxml2

#tar xf libxml2******.tar.gz

#cd libxml*****

#./configure --prefix=/usr/local/libxml2

#make

#make install



编译libmcrypt

#tar xf libmcrypt******.tar.gz

#cd libmcrypt*****

#./configure --prefix=/usr/local/libmcrypt

#make && make install



编译OpenSSL

#tar xf openssl******.tar.gz

#cd openssl*******

#./config --prefix=/usr/local/openssl

#make && make test && make install



编译mysql #请事先建立好 /data/mysql/data 目录

#./configure --prefix=/usr/local/mysql --localstatedir=/data/mysql/data --with-mysqld-user=mysql --without-debug --with-big-tables --with-extra-charsets=all --with-pthread --enable-static --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-isam --without-innodb --without-ndb-debug
#make && make install

#useradd mysql

#cd /usr/local/mysq

#bin/mysql_install_db --user=mysql

#chown -R root.mysql .

#chown -R mysql /data/mysql/data

#cp share/mysql/my-huge.cnf /etc/my.cnf

#cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld

#chmod 755 /etc/rc.d/init.d/mysqld

#chkconfig --add mysqld

#/etc/rc.d/init.d/mysqld start

#bin/mysqladmin -u root password 'mysql密码'

//因为是源码编译,你需要做一个软连接,让/usr/local/mysql/bin/mysql 定向到 bin/目录下

#ln -s /usr/local/msyql/bin/mysq bin/



编译apache

# tar xjvf httpd-2.2.4.tar.bz2
# cd httpd-2.2.4
# ./configure \
"--prefix=/usr/local/apache2" \
"--with-included-apr" \
"--enable-so" \
"--enable-deflate=shared" \
"--enable-expires=shared" \
"--enable-rewrite=shared" \
"--enable-static-support" \
"--disable-userdir"
# make
# make install
# echo '/usr/local/apache2/bin/apachectl start >> /etc/rc.local


编译PHP

#tar xf php*******.tar.gz

#cd php******

#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir=/usr/local/libxml2 --with-gd=/usr/local/gd2 --with-jpeg-dir --with-png-dir --with-bz2 --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-openssl=/usr/local/openssl --with-mcrypt=/usr/local/libmcrypt --enable-soap --enable-gd-native-ttf --enable-memory-limit --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --disable-cgi --disable-cli

#make && make install

#mkdir /usr/local/php/etc

#cp php.ini-dist /usr/local/php/etc/php.ini

编译Zend Optimizer‘

#tar xf Zendoptimizer*******.tar.gz

#cd Zendoptimizer

#./install.sh

安装画面出现这里只要改一个地方,当要你输入php.ini目录的时候,指向/usr/local/php/etc/ ,其他都回车好了。



整合Apache与PHP及系统初化配置

# vi /usr/local/apache2/conf/httpd.conf 这里注意,如果改变了日志的存放目录,在httpd.conf中也需要改成你希望把日志存放的目录去。这里,我没有做演示,自己找到logs/ 改为/data/www/logs。

 找到:

  User daemon

  Group daemon

 改为 (不改也可以,就是建立的apache网站目录的组和拥有者必须是daemon用户。)

  User apache

  Group apache
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加
AddType application/x-httpd-php .php

找到:

DirectoryIndex index.html

将该行改为

DirectoryIndex index.html index.htm index.php


找到:
#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-info.conf
#Include conf/extra/httpd-vhosts.conf (虚拟主机配置文件存放目录.)
#Include conf/extra/httpd-default.conf
去掉前面的“#”号,取消注释。
注意:以上 4 个扩展配置文件中的设置请按照相关原则进行合理配置!

以下是做虚拟主机

#vi /usr/local/apache/conf/extra/httpd-vhosts.conf


ServerAdmin root@glory.imbbs.in
DocumentRoot "/data/www/wwwroot/glory.imbbs.in"
ServerName www.glory.imbbs.in
#ServerAlias www.dummy-host.example.com
ErrorLog "/data/www/logs/glory-error_log"
CustomLog "/data/www/logs/glory-access_log" common

Options FollowSymLinks
AllowOverride None
#Order deny,allow
#Deny from all
Order allow,deny
Allow from all
Satisfy all




添加以上语句。然后保存退出

添加apache用户

#groupadd www
#useradd -g www www
#mkdir -p /data/www/wwwroot
#chmod +w /data/www/wwwroot
#chown apache.apache /data/www/wwwroot -R

#mkdir /data/www/wwwroot/glory.imbbs.in

#cd /data/www/wwwroot/glory.imbbs.in/

#mkdir /data/www/logs

#chown -R apache.apache /data/www/logs

#vi phptest.php


phpinfo();

?>

保存退出,确认,glory.imbbs.in目录和phptest.php文件的拥有者和组是否都是属于apache。



完成以后:打开FF浏览器:www.glory.imbbs.in/phptest.php 看能不能正常显示。如果有报错信息一定要去看日志,然后根据错误,在google找相应的答案。



确认PHP能正常工作以后,就要在php.ini中提升PHP的安全性了

#vi /usr/local/php/etc/php.ini

找到:

disable_functions=phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server



DISCUZ 可以安装 discuz和ucenter绑在一起的安装包。我这个是分别下载的。

下载DISCUZ UCENTER

把discuz的upload目录复制到 /data/www/wwwroot/glory.imbbs.in/bbs

把ucenter的upload目录复制到 /data/www/wwwroot/glory.imbbs.in/ucneter

修改相应的权限,这个不用说了吧~~ 拥有者和组都要是apache哦

在这里要给discuz设置数据库,也要给ucenter设置数据库。

#mysql -uroot -pmysql密码

>create database ucenter;

>grant all on ucenter.* to ucenter@'localhost' identified by 'password';

>flush privileges

>exit

打开浏览器输入 www.glory.imbbs.in/ucenter/install

安装完之后,在看安装discuz。

我把步骤做成了PDF文档。大家可以下载,研究研究,希望可以帮助大家。[attach]28722[/attach]
文章评论

共有 10 条评论

  1. lurebreast 于 2012-12-21 23:19:01发表:

    谢谢.很详细.很好.

  2. lickn 于 2011-12-09 11:21:56发表:

    非常感谢分享

  3. abc7870336 于 2011-11-07 11:23:44发表:

    源码编译LAMP
    学习下

  4. cky000 于 2011-05-13 17:22:07发表:

    下载帮顶
    这个要好好研究下

  5. 求知路漫漫 于 2010-06-08 11:24:17发表:

    强人。。。佩服!

  6. thinkall 于 2010-05-21 11:07:20发表:

    非常有用,谢谢~~

  7. lanfeng125 于 2010-05-10 13:21:22发表:

    了解一下(e:e2s

  8. linux.leo 于 2009-12-21 15:05:31发表:

    扩展一下, 如果公司希望把DNS服务器放在公司内部,而不是放在IDC机房,那就自己配一个DNS服务器
    我在论坛里写过DNS服务器配置,把它黏贴过来了。

    DNS工作原理
    DNS分为client和server,client扮演发问的角色,也就是问server一个domain name,而server必须要回答
    此domain name的真正IP地址,而本地的DNS灰先查询自己的资料库,如果自己的资料库没有,则会往改DNS的上级
    DNS查询,以此得到答案之后,将答案存起来,并回答客户

    使用RHEL5配置:
    1,首先,我先设定主机名为:www.linuxdify.com

    [root@www ~]# hostname www.linuxdify.com
    [root@www ~]# vi /etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=no
    HOSTNAME=www.linuxdify.com(修改此处)


    2,安装bind9,bind-chroot,caching-nameserver
    #rpm -ivh bind-9.3.6-4.P1.el5.i386.rpm bind-chroot-9.3.6-4.P1.el5.i386.rpm caching-nameserver-9.3.6-4.P1.el5.i386.rpm

    3,安装完成以后,进入bind目录,进行域名的添加

    #cd /var/named/chroot/etc
    #ls -l 查看一下目录
    -rw-r--r-- 1 root root 405 Oct 16 03:28 localtime
    -rw-r----- 1 root named 1230 Jul 30 04:10 named.caching-nameserver.conf
    -rw-r----- 1 root named 1052 Dec 15 16:13 named.rfc1912.zones
    -rw-r----- 1 root named 113 Dec 15 16:09 rndc.key

    #cp -p named.caching-nameserver.conf named.conf 这里为什么要用到-p呢,就是不改变文件的拥有组。

    #vi named.conf
    options {
    listen-on port 53 { any; }; 修改点1
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";

    // Those options should be used carefully because they disable port
    // randomization
    // query-source port 53;
    // query-source-v6 port 53;

    allow-query { any; }; 修改点2
    allow-query-cache { any; };修改点3
    };
    logging {
    channel default_debug {
    file "data/named.run";
    severity dynamic;
    };
    };
    include "/etc/named.rfc1912.zones";(在此行之前的几行,被我删除了。)

    保存退出


    #vi named.rfc1912.zones
    zone "linuxdify.com" IN {
    type master;
    file "linuxdify.com.zone";
    allow-update { none; };
    };

    zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.local";
    allow-update { none; };
    };

    保存退出


    #cd ../var/named
    #ls -l
    total 36
    drwxrwx--- 2 named named 4096 Dec 15 16:19 data
    -rw-r----- 1 root named 198 Jul 30 04:10 localdomain.zone
    -rw-r----- 1 root named 195 Jul 30 04:10 localhost.zone
    -rw-r----- 1 root named 427 Jul 30 04:10 named.broadcast
    -rw-r----- 1 root named 1892 Jul 30 04:10 named.ca
    -rw-r----- 1 root named 424 Jul 30 04:10 named.ip6.local
    -rw-r----- 1 root named 426 Jul 30 04:10 named.local
    -rw-r----- 1 root named 427 Jul 30 04:10 named.zero
    drwxrwx--- 2 named named 4096 Jul 27 2004 slaves

    #cp -p localdomain.zon linuxdify.com.zone
    #cp -p named.local 192.168.1.local

    #vi linuxdify.com.zone
    $TTL 86400
    @ IN SOA localhost root (
    42 ; serial (d. adams)
    3H ; refresh
    15M ; retry
    1W ; expiry
    1D ) ; minimum
    IN NS linuxdify.com.
    www IN A 192.168.1.1

    #vi 192.168.1.local
    $TTL 86400
    @ IN SOA localhost. root.localhost. (
    1997022700 ; Serial
    28800 ; Refresh
    14400 ; Retry
    3600000 ; Expire
    86400 ) ; Minimum
    IN NS linuxdify.com.
    1 IN PTR www.linuxdify.com.

    配置完成。

    启动服务 service named start

    [root@lujun etc]# nslookup www.linuxdify.com
    Server: 192.168.1.1
    Address: 192.168.1.1#53

    Name: www.linuxdify.com
    Address: 192.168.1.1

    [root@lujun etc]# nslookup 192.168.1.1
    Server: 192.168.1.1
    Address: 192.168.1.1#53

    1.1.168.192.in-addr.arpa name = www.linuxdify.com.


    在这里最有可能出错的地方,就是在复制文件的时候,没有使用cp -p。记住复制的文件一定是named组。

    把域名改成www.glory.imbbs.in就行了

  9. vlyom 于 2009-12-21 00:04:11发表:

    受教

  10. LeMras 于 2009-12-20 20:34:09发表:

    顶强人