标签存档: LNMP

悲催之LNMP环境编译安装

最近负责一台实验机的部署,需要搭建LNMP环境,由于并不太熟悉安装细节,决定尝试指定目录编译安装,方便以后的管理控制。

之后便开始了为期3天的痛苦折磨,各种诡异的错误,加上本身心情不好,无以言表烦闷挫败之感,今天跟其死磕到底,终于拨云见日,小出一口气。

Linux环境的搭建本身应该是很基础的知识,由于以前并未实际操作过,算是一个缺口,这次也正好是个机会恶补一下吧,如冯鑫所说,停止自欺欺人,从基础开始巩固自己,不失为一件好事。

先叙述一段前奏:整体配置之前,下载了各个软件的源码包,不小心毁了原来的Apache+php系统导致报警系统实效,临时熬夜搭建了最新的nginx+php-fpm的环境配用,中间踩雷无数,主要关于nginx的配置。由于还没有安装mysql,php编译时没有带上mysql的相关参数,只是临时使用,当第二天真正搭建时才开始了mysql+php编译的噩梦。。。

失败的地方就不说了,主要叙述安装过程及注意要点,以备后用。

php必须在mysql后面安装,nginx随意

1,先安装nginx可以用来测试php,nginx编译安装也最简单注意附带上prefix参数确定路径。其他教程也有nginx附带zlib和openssl组件的,如果附带可以按如下方式安装。

a.安装zlib,openssl等组件

Install zlib & openssl
1
2
3
4
5
6
7
8
9
10
unzip -x zlib125.zip
cd zlib-1.2.5
./configure --prefix=/usr
make
make install
tar zxvf openssl-0.9.8r.tar.gz
cd openssl-0.9.8r
make
make install

b.安装 nginx

Install Nginx & pcre
1
2
3
4
5
6
7
tar zxvf pcre-8.13.tar.gz
tar zxvf nginx-1.0.8.tar.gz
cd nginx-1.0.8
./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin --with-http_ssl_module --with-http_sub_module --with-http_flv_module --with-http_stub_status_module --with-zlib=../zlib-1.2.5 --with-openssl=../openssl-0.9.8r --with-pcre=../pcre-8.13
make
make install

2,安装mysql,长话短说

mysql5.5.17需要安装CMake

Install CMake
1
2
3
4
5
tar zxvf cmake-2.8.5.tar.gz
cd cmake-2.8.5
./configure
make
make install

在安装最后一步时可能会出错,解决办法是指定安装位置make install DESTDIR=/usr/local.

最后可用的参数设置:

Install Mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
groupadd mysql
useradd -d /opt/modules/mysql -g mysql -s /usr/sbin/nologin mysql
chown -R mysql:mysql /opt/modules/mysql
chmod -R 755 /opt/modules/mysql
cmake -DCMAKE_INSTALL_PREFIX=/opt/modules/mysql \
-DMYSQL_DATADIR=/opt/modules/mysql/data \
-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 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_USER=mysql
make
make install

复制配置文件my.cnf

Install Mysql
1
2
3
cp /opt/modules/mysql/support-files/my-medium.cnf /etc/my.cnf
chown mysql.mysql /etc/my.cnf
chmod 755 /etc/my.cnf

配置开机启动

Install Mysql
1
2
3
cp /opt/modules/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig mysqld on

在这之前,需要初始化mysql信息表。记得非默认路径安装的要带上mysql和data的路径。
mysql_path/scripts/mysql_install_db --user=mysql --basedir=/opt/modules/mysql --datadir=/path_to_mysql_data_dir

另外补充开放root外网访问命令,备忘:
GRANT ALL PRIVILEGES ON *.* TO 'monitor'@'%' IDENTIFIED BY 'admin'WITH GRANT OPTION;
FLUSH PRIVILEGES;

启动mysql并设置密码

Install Mysql
1
2
/etc/init.d/mysqld start
/usr/local/mysql/bin/mysqladmin -u root password '新密码'

3,php安装,最悲催的就是这个,configure各种报错,最后又神奇可用,无以言表。。。

最后可用的设置,注:新版本的php都自带fpm了,所以不用安装。

Install PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
./configure --prefix=/opt/modules/php \
--with-config-file-path=/opt/modules/php/etc \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-magic-quotes \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--enable-ftp \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear \
--with-gettext \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-pdo-mysql=/opt/modules/mysql \
--with-mysql=/opt/modules/mysql \
--with-mysqli=/opt/modules/mysql/bin/mysql_config
make
make install

make时曾出现 /usr/bin/ld: cannot find -lltdl 解决很简单,库在,只是没编译

Install PHP
1
2
3
4
cd /usr/share/libtool/libltdl
./configure --prefix=/usr
make
make install

复制php.ini到配置文件目录及php-fpm 开机启动

Install PHP
1
2
3
cp php.ini-production /opt/modules/php/etc/php.ini
cp /opt/modules/php/sbin/php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

这时候还不能使用/etc/init.d/php-fpm start启动,需修改一下php-fpm配置文件才可以,配置文件位置php安装目录 etc 目录下,默认有个参考文件.

Install PHP
1
2
3
4
5
cp php-fpm.conf.default /opt/modules/php/etc/php-fpm.conf
vim php-fpm.conf
,pm.start_servers = 20
,pm.min_spare_servers = 5
,pm.max_spare_servers = 35

去掉以上三项前面的逗号,这时再使用/etc/init.d/php-fpm start 即可启动。

最后配置nginx.conf最坑爹的就在这。。。

Install PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name localhost;
    root /var/www/html;
    location ~ .*\.(php|php5)?$
  {
   #fastcgi_pass unix:/tmp/php-cgi.sock;
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   include fastcgi.conf;
  }
}

默认情况下,最后一行fastcgi.conf是fastcgi_params,这是无论如何过不去的,看看内容,只差一行。。。

补充一句,有问题可以去LNMP.org找灵感,不过很多问题都是未提到的。。。

暂时到这儿。。。要死了。。。明天继续磕memcached和svn...