源码编译安装,搭建LNMP环境(Linux+Nginx+MySQL+PHP)

前几天一朋友让帮忙搭建LNMP环境,常用服务Nginx, MySQL, PHP, 个人不习惯用一键LNMP工具。一键安装会给自己装一些根本用不到的服务。还是自己需要什么服务,编译什么更好。

个人习惯的目录结构:

/home/xiaowujun/softs/ #存放常用服务或工具安装包 .tar

/data/apps/ #服务的安装目录, 如: /data/apps/mysql, /data/apps/nginx, /data/apps/php 
/data/webs/ #不同项目目录,如: /data/webs/www.xiaowujun.com, /data/webs/blog.xiaowujun.com

这样,常用服务很容易找到,而且目录结构更清晰。


Google,baidu 也没有找到一份完整的搭建LNMP环境教程,因为好久没有源码编译安装,现在只能自己一点一点重新摸索。

下面整理一份搭建步骤和简单的注意事项。
(下面文档根据印象整理,有什么不对的地方或者疑问望指出来,一起探讨修正)

机器性能,配置(最基本的)

  • 阿里云主机
  • 内存: 1G内存
  • CPU: 1核
  • 带宽: 1Mbps

服务及版本

  • Nginx-1.8.1
  • MySQL-5.6.26
  • PHP-5.6.31

(开发者具体使用什么版本的服务,到官网下载相应的版本即可)


安装 Nginx

安装 Nginx 所依赖的基本服务:

yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
  • gcc 编译器,只能编译c代码(不确定是否准确具体请Google)
  • gcc-c++ 编译器,为gcc提供c++语言特性支持(不确定是否准确具体请Google)
  • make 编译源代码包,是用来执行Makefile的
  • zlib 压缩库,支持读写 gzip 压缩
  • pcre 正则
  • openssl HTTPS 服务

进入Nginx官网,下载Nginx包,nginx-1.8.1版本:

cd /home/xiaowujun/softs/
wget https://nginx.org/download/nginx-1.8.1.tar.gz

解压,配置:

tar -zxf nginx-1.8.1.tar.gz

cd nginx-1.8.1

./configure --prefix=/data/apps/nginx-1.8.1 --with-http_ssl_module --with-pcre --without-http_scgi_module --without-http_fastcgi_module --with-http_gzip_static_module

编译,安装:

make && make install

启动 Nginx:

/data/apps/nginx-1.8.1/sbin/nginx

参考:


安装 MySQL

安装 MySQL 所依赖的服务:

yum install ncurses-devel
yum install cmake
  • ncurses 一个程序库,它提供了API,可以允许程序员编写独立于终端的基于文本的用户界面。
  • cmake 跨平台项目管理工具,是抽象层次更高的项目管理工具,cmake命令执行的CMakeLists.txt文件

进入 MySQL官网,下载资源包,mysql-5.6.26:

cd /home/xiaowujun/softs/

wget https://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.26.tar.gz

解压,编译,安装:

tar -zxf mysql-5.6.26.tar.gz

cd mysql-5.6.26

cmake -DCMAKE_INSTALL_PREFIX=/data/apps/mysql-5.6.26 -DMYSQL_DATADIR=/data/apps/mysql-5.6.26/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./

make && make install

�设置和初始化:

# 创建 mysql 用户 及 mysql 组
groupadd mysql
useradd -g mysql mysql

cd /data/apps/mysql-5.6.26
chown -R mysql:mysql .
# 初始化 MySQL 自身数据库
# 复制命令的时候一定要确保 --user --basedir --datadir 都是两个 “-”
./scripts/mysql_install_db --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data

# 将mysql的配置文件拷贝到/etc
cp support-files/my-medium.cnf /etc/my.cnf

启动 MySQL (使用 mysql 用户启动):

/data/apps/mysql-5.6.26/bin/mysqld_safe --user=mysql &

# 查看 mysql,看是否成功 3306端口
netstat -tnl|grep 3306

加入到系统服务:

cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 启动
service mysqld start

# 停止
service mysqld stop

# 重启
service mysqld restart

设置 root 密码(方法很多,可以Google下)和 登录:

# 设置密码,命令后,确认两次密码即可。
/data/apps/mysql-5.6.26/bin/mysqladmin -u root password '你的密码'

# 登录
/data/apps/mysql-5.6.26/bin/mysql -uroot -p

注意:

  • MySQL 的5.6.26以后的版本在编译安装时 至少需要 大于1G的内存才能正常编译。否则会报错,编译程序会强制被杀死:
[ 50%] Building CXX object sql/CMakeFiles/sql.dir/item_func.cc.o
[ 51%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o
c++: 编译器内部错误:已杀死(程序 cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] 错误 4
make[1]: *** [sql/CMakeFiles/sql.dir/all] 错误 2
make: *** [all] 错误 2
  • 初始化 MySQL 自身数据库时,有的人会用 ./bin/mysqld --initialize-insecure
./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data 

报错:

[root@iZ2zedai2pevz7grtqvl0lZ mysql-5.6.26]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data 
2017-08-30 16:42:54 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-08-30 16:42:54 0 [Note] ./bin/mysqld (mysqld 5.6.26) starting as process 25919 ...
2017-08-30 16:42:54 25919 [Note] Plugin 'FEDERATED' is disabled.
./bin/mysqld: Table 'mysql.plugin' doesn't exist
2017-08-30 16:42:54 25919 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2017-08-30 16:42:54 25919 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-08-30 16:42:54 25919 [Note] InnoDB: The InnoDB memory heap is disabled
2017-08-30 16:42:54 25919 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-08-30 16:42:54 25919 [Note] InnoDB: Memory barrier is not used
2017-08-30 16:42:54 25919 [Note] InnoDB: Compressed tables use zlib 1.2.3
...
...

可以尝试:

./scripts/mysql_install_db --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data

参考:
单独安装php的mysql和mysqli扩展
Linux为已编译好PHP添加 Mysql(PHP编译好后添加Mysql扩展)


安装 PHP

安装PHP依赖库,PHP依赖库挺多的,根据自己需要安装对应的即可,简单安装几个常用的。

yum install -y libjpeg libjpeg-devel libpng libpng-devel curl curl-devel

访问 PHP官网,下载源码包,php-5.6.31 :

cd /home/xiaowujun/softs/

wget https://secure.php.net/distributions/php-5.6.31.tar.gz

解压, 配置,编译,安装:

tar -zxf php-5.6.31.tar.gz

cd php-5.6.31

./configure --prefix=/data/apps/php-5.6.31 --with-config-file-path=/data/apps/php-5.6.31/etc --with-php-config=/data/apps/php-5.6.31/bin/php-config --with-mysqli=/data/apps/mysql-5.6.26/bin/mysql_config --enable-mbstring --with-mhash --with-mysql=/data/apps/mysql-5.6.26 --enable-fpm --with-openssl --with-zlib

make && make install

配置 PHP:

# 配置文件
cp php.ini-development /data/apps/php-5.6.31/etc/php.ini

# php-fpm 服务
cp /data/apps/php-5.6.31/etc/php-fpm.conf.default /data/apps/php-5.6.31/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击 :

vi /data/apps/php-5.6.31/etc/php.ini

定位到 cgi.fix_pathinfo= 并将其修改为如下所示:

cgi.fix_pathinfo=0

启动PHP:

/data/apps/php-5.6.31/sbin/php-fpm

参考:


设置开机启动 (重要 *)

Nginx
MySQL
PHP

测试程序

创建,编辑 phpinfo.php 测试文件:

vi /data/webs/www.xiaowujun.com/phpinfo.php

输入:

<?php
    phpinfo();
?>

或者:

echo "<?php phpinfo(); ?>" >> /data/webs/www.xiaowujun.com/phpinfo.php

配置nginx.conf文件,解析域名:

vi /data/apps/nginx-1.8.1/conf/nginx.conf

修改默认的 location 块,使其支持 .php 文件:

listen 80;
server_name www.xiaowujun.com;
location / {
    root   /data/webs/www.xiaowujun.com;
    index  index.php index.html index.htm;
}

下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}

重新加载 Nginx:

/data/apps/nginx-1.8.1/sbin/nginx -s reload

测试:
浏览器访问: http://www.xiaowujun.com/phpinfo.php


参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容