ubuntu centos lanmp环境的搭建

一、安装一些必要的软件。

ubuntu
安装以后,有一些包是没有安装上的。我们需要安装上,否则下面的编译将会出现问题。

复制内容到剪贴板代码 :apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential libpcre3-dev libncurses5-dev libcurl4-openssl-dev openssh-server openssh-client

 

二、设置安装目录,下载必要的软件。

安装完毕以后,我们建立几个目录,用来进行下一步的安装。

复制内容到剪贴板代码 :mkdir /usr/src/lamp ( 用来存放安装软件 )
/usr/local (
安装目录, nginx php,mysql 等都安装在这个目录下 )
mkdir /var/www (
发布目录 )
下载编译需要的各种软件,全部放到 /var/software
mysql-5.5.23.tar.gz
php-5.3.10.tar.gz
nginx-1.2.0.tar.gz

spawn-fcgi-1.6.3.tar.gz ( 用来加载 fastcgi)

// 以下为 php 的依赖库

freetype-2.3.5.tar.gz

jpegsrc.v6b.tar.gz

libiconv-1.11.1.tar.gz

libmcrypt-2.5.8.tar.gz

libpng-1.2.29.tar.gz (注意,大家不要使用 1.2.28 这个版本,似乎有很多问题)
libxml2-2.6.30.tar.gz

mcrypt-2.6.7.tar.gz

mhash-0.9.9.tar.gz

pcre-8.30.tar.gz

为了方便 , 我已经已将上面所有的软件包下载后打包


、编译安装 PHP 所需的支持库。

复制内容到剪贴板代码 :cd /usr/src/lamp/beforephp
tar zxvf libiconv-1.11.1.tar.gz
cd libiconv-1.11.1/
./configure --prefix=/usr/local
make && make install
cd ..

tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5
./configure
make && make install
cd ..

tar zxvf libpng-1.2.29.tar.gz
cd libpng-1.2.29
./configure
###mv scripts/makefile.linux ./makefile
make
make install
cd ..


tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-static --enable-shared
make && make install
make install-lib
cd ..

(libxml2 会影响 php 的编译 )
tar zxvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30

 

打开当前目录下的 nanohttp.c ,第 1588 行由
fd = open(filename, O_CREAT | O_WRONLY);
更换为
fd = open(filename, O_CREAT | O_WRONLY,0777);

http://temix.blog.163.com/blog/static/364133200810237854799/

gcc-4.3 对语法检查严格的结果,找到出错的那一句 , OK
./configure
make && make install
cd ..



tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8


./configure
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
cd ../..


tar zxvf mhash-0.9.9.tar.gz


cd mhash-0.9.9


./configure
make && make install
cd ..

cp /usr/local/lib/libmcrypt.* /usr/lib
##ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ()
创建链接时出错,说已经存在,不过好像不影响编译

tar zxvf mcrypt-2.6.7.tar.gz
cd mcrypt-2.6.7
./configure
make && make install (
这里出现了很多警告,好像不影响 )
cd ..

 

四、编译安装 MySQL

由于一些Linux 操作系统并不自带MySQL 数据库,或者有些电脑(如国产龙芯,基于MIPS 指令系统)并不支持MySQL 官方提供的RPM 包的安装,因此需要使用源码进行重编译,然后安装使用

下载地址:http://www.mysql.com/downloads/mysql/ 进入MySQL Community Server 下载页面,在Select Platform 选项中选择Source Code

 

选择最后一项.tar.gz 的文件,如下图

 

点击Download 进入镜像链接页面,随便选择一个镜像进行下载到本地磁盘

 

  1. 创建mysql 安装目录

此处的安装目录可以任选,如果是默认安装则在/usr/local/mysql

# mkdir -p /usr/local/mysql/

2 、创建数据存放目录

# mkdir -p /service/mysql/

3 、创建用户和用户组与赋予数据存放目录权限

  # groupadd mysql

  # useradd -g mysql mysql

# chown mysql.mysql -R /usr/local/mysql/data

4 、安装cmake

mysql5.5 以后是通过cmake 工具来编译的, CMake 是个跨平台的自动化建构系统,它用组态档( 生成Makefile 文件的特殊脚本) 控制建构过程,mysql 的源码进行build Process( 构建), 然后生成Makefile 文件.

Cmake 下载地址:http://www.cmake.org/cmake/resources/software.html

  选择Unix/Linux Source.tar.gz 文件进行下载最新版本, 然后将其解压缩到本地, 并配置、安装,以下是相关命令

cd ..

   tar zxvf cmake-2.8.8.tar.gz

  cd cmake-2.8.8

 

  ./configure

  make && make install ( 这要几分钟的时间,反正比前面的编译时间长点)

cd ..

5 、编译 mysql

tar zxvf mysql-5.5.23.tar.gz

cd mysql-5.5.23

进入MySQL 解压目录下,使用cmake 来对mysql 的安装目录、数据存放、配置文件、系统语言等相关信息进行编辑,以下是相关指令:

以下是编辑命令的集合,可以直接拷贝、粘贴并执行,注意的是安装目录与数据目录的位置

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_unicode_ci -DWITH_DEBUG=0

执行以上命令,将构建MySQL 源码中的Makefile 文件。

选项说明:

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

mysql 安装的主目录,5.5.17 版本默认为/usr/local/mysql(可省略)

-DMYSQL_DATADIR=/home/system_username/mysql/mysqldata

mysql 数据保存的路径,自定义

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

系统Socket 文件(.sock) 设置,基于该文件路径进行Socket 连接,必要为绝对路径

-DSYSCONFDIR=/etc

mysql 配置文件my.cnf 地址,默认/etc(可省略)

-DMYSQL_TCP_PORT=3306

数据库服务器TCP/IP 连接的监听端口,默认为3306 (可省略)

-DENABLED_LOCAL_INFILE=1

默认为关闭,这里开启

-DEXTRA_CHARSETS=all

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8-general_ci

数据库编码设置

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DWITH_FEDERATED_STORAGE_ENGINE=1

-DWITH_PARTITION_STORAGE_ENGINE=1

存储引擎设置

 

8 、安装MySQL

make && make install

这将是一个比较漫长的编译过程。。。。。

9 、配置MySQL 的启动项

cp support-files/my-medium.cnf /etc/my.cnf // 更改配置文件位置

cp support-files/mysql.server /etc/init.d/mysqld // 设置mysql 服务器操作路径

(以上两个文件是source 下面的)

chmod 755 /etc/init.d/mysqld // 更改权限

bash scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ // 安装数据库,并设置用户名和数据存放位置

  1. MySQL 启动与使用

1 、在命令行中输入:

/etc/init.d/mysqld start

启动Mysql 服务

2 、登录MySQL

ln /usr/local/mysql/bin/mysql /usr/sbin/mysql (以后直接输入mysql 即可以启动登录)

命令行:mysql

使用mySQL 数据库的root 用户登录,默认无密码, 也可以mysql -u root –p

  1. 简单操作

mysql>use mysql ; // 使用mysql 数据库

// 更改root 用户的登录密码

mysql>update user set password=PASSWORD("123456") where user='root';

// 刷新更新

mysql>FLUSH PRIVILEGES;

  1. 总结

最好将上面的安装指令等写成一个 Shell 脚本,以避免错误,并使安装更简单。。完毕!


运行以下命令即可启动 MySQL 服务器:
/etc/init.d/mysqld start
(启动 MySQL
bin/mysqladmin -u root password "password_for_root"
(设置 mysql root 密码)
/etc/init.d/mysqld stop
(关闭 MySQL

nano /etc/rc.local

ctrl+O
在最后加入: /etc/init.d/mysqld start (这样开机的时候, mysql 就可以自动启动了。)

 

五、编译安装 PHP-5.3.10 FastCGI 模式)

 

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

没有这个链接会报错
cd ..
tar zxvf php-5.3.10.tar.gz
cd php-5.3.10

复制内容到剪贴板代码 :
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --disable-ipv6 --enable-soap --with-openssl --with-gettext --disable-rpath
(
编译时间较长,请耐心等待 )
##sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
//
好像这个版本的没有这个
make
make install
cp php.ini-development /usr/local/php/etc/php.ini

php fpm

./configure --prefix=/usr/local/php5310 --with-config-file-path=/usr/local/php5310/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini

centos apache

./configure --prefix=/usr/local/php - - with-apxs2=/usr/local/apache/bin/apxs -- with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets

六、编译安装 PHP5 扩展模块

复制内容到剪贴板代码 :

cd ext/gd/
/usr/local/php/bin/phpize
./configure --with-jpeg-dir --with-png-dir --with-zlib-dir --with-ttf --with-freetype-dir --with-php-config=/usr/local/php/bin/php-config
make
make install

cd ../../
、对 php 进行一些设置,并且为安装 nginx 做一些准备工作。
1
、修改 php.ini 文件
手工修改:查找 /usr/local/php/etc/php.ini 中的 extension_dir = "./"
修改为 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
并在此行后增加以下几行,然后保存。

复制内容到剪贴板代码 :
extension = "gd.so"

自动修改:若嫌手工修改麻烦,可执行以下 shell 命令,自动完成对 php.ini 文件的修改:

 

 

复制内容到剪贴板代码 :
#sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "gd.so"\n#' /usr/local/php/etc/php.ini  

2 、创建 www 用户和组,以及其使用的目录。

复制内容到剪贴板代码 :/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www

mkdir /var/www
chmod +w /var/www/
chown -R www:www /var/www/

儿、安装 Nginx 1.2.0

## 这一步安装可能有问题
1
、安装 Nginx 所需的 pcre 库。

复制内容到剪贴板代码 :

tar zxvf pcre-8.30.tar.gz
cd pcre-8.30/


./configure
make && make install
cd ../..

2 、安装 Nginx

复制内容到剪贴板代码 :
tar zxvf nginx-1.2.0.tar.gz
cd nginx-1.2.0/
./configure --user=nginx --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/xuefen/tar/lnmp/pcre-8.30

 

# --with-pcre=/ pcre 要用源码的目录,我看它代码是找 ./cofigure
make
make install
cd ../  


3
、创建 Nginx 日志目录。

复制内容到剪贴板代码 :
chmod +w /usr/local/nginx/logs
chown -R nginx:www /usr/local/nginx/logs/

4 、创建 Nginx 配置文件。
更改 /usr/local/nginx/conf/ 目录中的 nginx.conf 文件。


nano /usr/local/nginx/conf/nginx.conf

 

以下是参考配置

user nginx www;

worker_processes 5;

error_log /usr/local/nginx/logs/nginx_error.log crit;

#pid logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;
worker_connections 51200;
}

http
{
include mime.types;
default_type application/octet-stream;

charset utf-8;

server_names_hash_bucket_size 128;

#sendfile on;
#tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml;

server
{
listen 80;
server_name servername.com;
index index.html index.htm index.php;
root /usr/local/webserver/webdata;

if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

location ~ .*.php?$
{
root /var/www;

 

fastcgi_pass 127.0.0.1:9999;

 

fastcgi_index index.php;

 

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

 

include fastcgi_params;
}

log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /usr/local/webserver/logs/access.log access;
}

server
{
listen 80;
server_name status.servername.com;

location / {
stub_status on;
access_log off;
}
}
}

保存,退出 nano

十一、安装 zend

复制内容到剪贴板代码 :
tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install

在询问 php.ini 的路径的时候,填入 .

复制内容到剪贴板代码 :/usr/local/webserver/php/etc

web 服务器选择不是 apache

十二、 reboot 你的机器。

1.5.8 nginx 防盗链

 

一般的防盗链如下:

 

location ~* .(gif|jpg|png|swf|flv)$ {

 

valid_referers none blocked server_names *.bnxb.com www.bnxb.com;

 

if ($invalid_referer) {

 

rewrite ^/ http://www.bnxb.com/403.html;

 

#return 404;

 

}

 

}

 

 

1.5.9 nginx 虚拟目录

 

Nginx 的目录如果是在网站根下建立的话, 就可以直接当成目录访问, 实现虚拟目录的效果, 如果另外

 

指一个目录建立网站的虚拟目录的话, 需要用到以下方法来实现。

 

nginx 虚拟目录配置有两种方法 alias root 。虚拟目录的概念与其它的 Web 应用一样。

 

最基本的区别:alias 指定的目录是准确的,root 是指定目录的上级目录, 并且该上级目录要含有

 

location 指定名称的同名目录。另外, 根据前文所述, 使用 alias 标签的目录块中不能使用 rewrite

 

break

 

示例 1:

 

location /abc/ {

 

alias /home/html/abc/;

 

}

 

在这段配置下,http://test/abc/a.html 就指定的是/home/html/abc/a.html

 

示例 2:

 

这段配置亦可改成

 

location /abc/ {

 

root /home/html/;

 

}

 

/* abc 的上级目录*/

 

 

示例 3:

 

alias 的配置改成:

 

location /abc/ {

 

alias /home/html/def/;

 

}

 

那么 nginx 将会从/home/html/def/ 取数据, 这段配置还不能直接使用 root 配置, 如果非要配置,

 

有在/home/html/ 下建立一个 def->abc 的软 link( 快捷方式) 了。

 

说明:

 

1 、使用 alias 时目录名后面一定要加 /

 

2 nginx resin 当虚拟目录名与真实目录同名时, 虚拟目录比真实目录优先级要高。

 

 

 

4 . 配置开机自动启动 Nginx + PHP

vi /etc/rc.local

加入以下内容:

ulimit -SHn 51200

/usr/local/php/sbin/php-fpm start

/usr/local/nginx/sbin/nginx

 

 

 

  1.  
    1.  
      1. 设置mysql 开机自动启动服务
        cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
        chkconfig --add mysqld
        chkconfig --level 345 mysqld on

 

 

5.5.4 打开防火墙80 端口

写入规则,保存并重启服务

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

查看防火墙信息
/etc/init.d/iptables status

如果显示以下类似信息,即表示已经打开了80 端口

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

 

 

 5.5.5 编写nginx 启动服务

cd /etc/init.d

vim nginx

输入以下代码并保存

保存后,设置权限,并添加到启动服务列表中

chmod 755 /etc/init.d/nginx

chkconfig --add nginx

chkconfig --level 345 nginx on

service nginx start

 

 

 

5.6.5 安装 php-fpm

cp /opt/php/etc/php-fpm.conf.default /opt/php/etc/php-fpm.conf
vim /opt/php/etc/php-fpm.conf

修改以下地方
[global]
pid = run/php-fpm.pid-p
error_log = log/php-fpm.log
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5s
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

[www]
user = www
group = www

5.6.6 修改nginx ,支持php

vim /opt/nginx/conf/nginx.conf

找到并修改以下代码

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9999;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /data/www$fastcgi_script_name;
            include        fastcgi_params;
        }

 

5.6.7php-fpm 作为服务运行

cd  /usr/local/src/php-5.3.8
cp ./sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
chmod 700 /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --level 345 php-fpm on
服务方式启动php-fpm
service php-fpm restart

 

猜你喜欢

转载自xuefen2006.iteye.com/blog/1525767