ubuntu14 下 lnmp 环境的构建记录

注意:执行下列所有操作均需获得 root 权限,方法一,除了 cd 命令,其他命令均使用 sudo cmd 方式执行,或者 sudo passwd root 为 root 用户设置密码,然后 su 输入密码获得权限。

软件版本:
ubuntu-14-server
nginx-1.14.1
mariadb-10.2.19
php-7.2.12

首先要安装基本的软件包如编译器之类的:

apt-get update && apt-get install -y make gcc g++

还要安装 cmake (最新版,系统自带的太旧),后面编译 mysql 和一些小工具要用

wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz
tar -xvzf cmake-3.12.4.tar.gz
cd cmake-3.12.4
./configure
make && make install
cd ../

然后定义所有服务器软件的安装目录

mkdir /usr/local/server

我们先安装 nginx (1.14.1)

正式安装前先需要下载一些编译 nginx 配置 依赖的库的源码,并且解压好但并不需要进入目录。

wget https://nginx.org/download/nginx-1.14.1.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
wget https://www.zlib.net/zlib-1.2.11.tar.gz

tar -xvzf openssl-1.1.1.tar.gz
tar -xvzf pcre-8.42.tar.gz
tar -xvzf zlib-1.2.11.tar.gz

首先我们创建 nginx 运行用户 www

useradd -M -s /sbin/nologin www

然后创建 nginx 安装目录

mkdir /usr/local/server/nginx

此处开始 编译安装 nginx

tar -xvzf nginx-1.14.1.tar.gz
cd nginx-1.14.1
./configure \
--prefix=/usr/local/server/nginx \
--user=www \
--group=www \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_mp4_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-pcre=../pcre-8.42 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1

上述 ./configure 这些配置包含了支持 https协议、http2协议、mp4和flv伪流处理等等一些功能。

然后编译安装

make && make install

不出意外的话,20分钟内就可以编译完成了,为啥这么慢,因为他顺便编译了openssl、pcre、zlib的源码。

然后 运行 下面的命令 执行 nginx 的二进制文件,nginx就启动了。

/usr/local/server/nginx/sbin/nginx

然后退出当前 nginx 源码目录

cd ../

此时,访问你安装环境的主机或者虚拟机的IP地址就可以看到nginx 的欢迎页了!
在这里插入图片描述
创建 nginx 控制脚本

vim nginx

并将下面代码内容 保存至 创建的 nginx 控制脚本

#! /bin/sh
 
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO
 
PATH=/opt/bin:/opt/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/server/nginx/sbin/nginx
PID=/usr/local/server/nginx/logs
NAME=nginx
DESC=nginx
 
test -x $DAEMON || exit 0
 
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi
 
set -e
 
case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile $PID/nginx.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile $PID/nginx.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                $PID/nginx.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                $PID/nginx.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile $PID/nginx.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
 
exit 0

将创建的 nginx 控制脚本加入系统服务,并且给予可执行权限。

mv nginx /etc/init.d
chmod +x /etc/init.d/nginx

设置 nginx 开机自启动

update-rc.d nginx defaults

将 nginx 加入系统环境变量

[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=/usr/local/server/nginx/sbin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep /usr/local/server/nginx /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=/usr/local/server/nginx/sbin:\1@" /etc/profile 
. /etc/profile

这样平滑重启啥的就能用了。

编译安装 MySQL,我用的是 Mariadb

首先,下载源码,并且解压进入到源码目录

wget https://mirrors.shu.edu.cn/mariadb//mariadb-10.2.19/source/mariadb-10.2.19.tar.gz
tar -xvzf mariadb-10.2.19.tar.gz
cd mariadb-10.2.19

安装一些 mysql 需要的库

apt-get install -y libncurses5-dev libssl-dev

创建 mysql 的运行用户

useradd -M -s /sbin/nologin mysql

创建 mysql 安装目录

mkdir /usr/local/server/mysql

MySQL编译配置

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql \
-DMYSQL_DATADIR=/usr/local/server/mysql/data \
-DWITH_INNODB_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_CSV_STORAGE_ENGINE=1 \
-DENABLE_DTRACE=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci

然后 编译安装

make && make install

配置开机启动(控制)脚本

cp /usr/local/server/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i "s@^basedir=.*@basedir=/usr/local/server/mysql@" /etc/init.d/mysqld
sed -i "s@^datadir=.*@datadir=/usr/local/server/mysql/data@" /etc/init.d/mysqld

给予(控制)脚本可执行权限

chmod +x /etc/init.d/mysqld

初始安装数据库

/usr/local/server/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/server/mysql --datadir=/usr/local/server/mysql/data

拷贝 预设 配置文件到 mysql 安装根目录(我没有设置,因此默认位置在mysql根目录)

cp /usr/local/server/mysql/support-files/my-medium.cnf /usr/local/server/mysql/my.cnf

修改 mysql 配置文件

cat > /usr/local/server/mysql/my.cnf << EOF
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4

[mysqld]
port = 3306
socket = /tmp/mysql.sock

basedir = /usr/local/server/mysql
datadir = /usr/local/server/mysql/data

user = mysql
bind-address = 0.0.0.0
server-id = 1

init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4

skip-name-resolve
#skip-networking
back_log = 300

max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 500M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M

read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 4M

thread_cache_size = 8

query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M

ft_min_word_len = 4

log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 7

log_error = /usr/local/server/mysql/data/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /usr/local/server/mysql/data/mysql-slow.log

performance_schema = 0

#lower_case_table_names = 1

skip-external-locking

default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120

bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1

interactive_timeout = 28800
wait_timeout = 28800

[mysqldump]
quick
max_allowed_packet = 500M

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
EOF

启动 mysql

service mysqld start

设置 mysql 开机启动

update-rc.d mysqld defaults

设置root密码 并且 删掉一些没有密码的用户

/usr/local/server/mysql/bin/mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by \"123456\" with grant option;"
/usr/local/server/mysql/bin/mysql -e "grant all privileges on *.* to root@'localhost' identified by \"123456\" with grant option;"
/usr/local/server/mysql/bin/mysql -uroot -p123456 -e "delete from mysql.user where Password='';"
/usr/local/server/mysql/bin/mysql -uroot -p123456 -e "delete from mysql.db where User='';"
/usr/local/server/mysql/bin/mysql -uroot -p123456 -e "delete from mysql.proxies_priv where Host!='localhost';"
/usr/local/server/mysql/bin/mysql -uroot -p123456 -e "reset master;"

将 mysql 加入系统环境变量

[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=/usr/local/server/mysql/bin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep /usr/local/server/mysql /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=/usr/local/server/mysql/bin:\1@" /etc/profile
. /etc/profile

退出 mysql 源码目录

cd ../

安装 PHP

首先是 安装 相关 的依赖库

apt-get install -y autoconf2.64 automake1.11 libtool re2c bison libxml2-dev pkg-config libbz2-dev libcurl4-openssl-dev libwebp-dev libjpeg-dev libpng++-dev libxpm-dev libfreetype6-dev libc-client2007e-dev libicu-dev libreadline-dev libxslt1-dev

然后下载 php 和相关的软件源码

wget http://jp2.php.net/distributions/php-7.2.12.tar.gz
wget https://github.com/P-H-C/phc-winner-argon2/archive/20171227.tar.gz
wget https://libzip.org/download/libzip-1.5.1.tar.gz

解压 安装 argon2 加解密库(可选,不安装 需要删掉 PHP 的 configure 配置项)

# 先安装 argon2 加解密库
tar -xvzf 20171227.tar.gz
cd phc-winner-argon2-20171227
make && make install
cd ../

解压 安装 libzip

tar -xvzf libzip-1.5.1.tar.gz
cd libzip-1.5.1
mkdir build
cd build
cmake ..
make && make install
cd ../../

解压 并 进入 php 源码目录

tar -xvzf php-7.2.12.tar.gz
cd php-7.2.12

然后就是执行 configure

./configure \
--prefix=/usr/local/server/php \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-openssl \
--with-zlib-dir \
--enable-bcmath \
--with-bz2 \
--enable-zip \
--with-libzip \
--enable-calendar \
--with-curl \
--enable-exif \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-webp-dir \
--with-jpeg-dir \
--with-png-dir \
--with-xpm-dir \
--with-freetype-dir \
--with-gettext \
--with-mhash \
--with-imap \
--with-kerberos \
--with-imap-ssl \
--enable-intl \
--with-icu-dir=/usr \
--enable-mbstring \
--enable-sockets \
--with-password-argon2 \
--enable-wddx \
--with-libxml-dir \
--with-xmlrpc \
--with-xsl \
--with-iconv-dir \
--with-pear \
--enable-shmop \
--enable-soap \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-readline \
--enable-opcache

然后 编译安装

make && make install

拷贝预设 php.ini-production 文件到指定的路径 并且 重命名为 php.ini

cp php.ini-production /usr/local/server/php/lib/php.ini

拷贝预设 php-fpm.conf.default 文件到指定的路径 并且 重命名为 php-fpm.conf

cp /usr/local/server/php/etc/php-fpm.conf.default /usr/local/server/php/etc/php-fpm.conf

拷贝预设 www.conf.default 文件到指定的路径 并且 重命名为 www.conf

cp /usr/local/server/php/etc/php-fpm.d/www.conf.default /usr/local/server/php/etc/php-fpm.d/www.conf

复制 php-fpm 控制脚本到指定的位置上,加入系统服务。

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

给 php-fpm 控制脚本赋予可执行权限

chmod +x /etc/init.d/php-fpm

将 php 加入系统环境变量

[ -z "$(grep ^'export PATH=' /etc/profile)" ] && echo "export PATH=/usr/local/server/php/bin:\$PATH" >> /etc/profile
[ -n "$(grep ^'export PATH=' /etc/profile)" -a -z "$(grep /usr/local/server/php /etc/profile)" ] && sed -i "s@^export PATH=\(.*\)@export PATH=/usr/local/server/php/bin:\1@" /etc/profile
. /etc/profile

设置 php-fpm 开机自启动

update-rc.d php-fpm defaults

修改 php 配置文件 增强安全性

vim /usr/local/server/php/lib/php.ini

找到 cgi.fix_pathinfo= 将其值设置为0

cgi.fix_pathinfo=0

再启动 php-fpm 服务之前,要确保 php-fpm 以 www 用户 和 www 组 运行
(这是 php7.2的,php5的不在这)

vim /usr/local/server/php/etc/php-fpm.d/www.conf

找到 user 和 group 这两个选项,默认值 是 www

user = www
group = www

然后启动 php-fpm 服务

service php-fpm start

看到返回 Starting php-fpm done 就证明 php-fpm 服务启动成功了!
退出源码目录

cd ../

修改 nginx 配置文件,使其支持 php 应用

vim /usr/local/server/nginx/conf/nginx.conf

将 location 块修改成下面的样子,以添加对 php 文件的支持

location / {
    
    
    root   html;
    index  index.php index.html index.htm;
}

将 location ~ .php$ 块,左边的 井号注释取消,并修改成下面的样子。

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

然后检查 配置文件 语法正确性

/usr/local/server/nginx/sbin/nginx -t

返回下面的结果就没问题了

nginx: the configuration file /usr/local/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/server/nginx/conf/nginx.conf test is successful

然后重启 nginx 应用修改后的配置文件

/usr/local/server/nginx/sbin/nginx -s reload 
# 或者
service nginx restart

创建测试文件到站点根目录

echo "<?php phpinfo();?>" > /usr/local/server/nginx/html/index.php

此时,访问你装环境的主机名(ip地址)就能看到 phpinfo 页面啦。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45956258/article/details/103351604
今日推荐