Linux编译安装LNMP

LNMP是由Linux操作系统、Nginx中间件、MySQL数据库、PHP脚本语言四大开源免费产品组合而成的Web服务框架,早前网站已分享过Nginx、MySQL、PHP单独编译安装教程,或许有些朋友仍不清楚怎么使用,今天给大家分享完整的LNMP使用配置方法。

Linux编译安装Nginx

Linux编译安装MySQL

Linux编译安装PHP

实验环境

操作系统:CentOS 7.7

主机地址:192.168.168.21

Nginx:1.16.1

MySQL:5.7.28

PHP:7.4.1

Zlib:1.2.11

Pcre:8.43

OpenSSL:1.0.2u

安装篇

第一步 安装依赖包

  1. [root@wanghualang ~]# yum -y install epel-release   
  2. [root@wanghualang ~]# yum -y install gcc gcc-c++ autoconf automake wget vim make cmake openssl-devel bison-devel ncurses-devel libsqlite3x-devel oniguruma-devel curl-devel libxml2-devel libjpeg-devel libpng-devel freetype-devel libicu-devel libsodium-devel  

第二步 下载、解压源码包

  1. [root@wanghualang ~]# cd /usr/local/src/        
  2. [root@wanghualang src]# wget --no-check-certificate http://zlib.net/zlib-1.2.11.tar.gz  
  3. [root@wanghualang src]# wget --no-check-certificate https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz  
  4. [root@wanghualang src]# wget --no-check-certificate http://nginx.org/download/nginx-1.16.1.tar.gz  
  5. [root@wanghualang src]# wget --no-check-certificate https://www.php.net/distributions/php-7.4.1.tar.gz  
  6. [root@wanghualang src]# wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2t.tar.gz  
  7. [root@wanghualang src]# wget --no-check-certificate https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz  
  8. [root@wanghualang src]# tar xzf pcre-8.43.tar.gz  
  9. [root@wanghualang src]# tar xzf php-7.4.1.tar.gz  
  10. [root@wanghualang src]# tar xzf zlib-1.2.11.tar.gz  
  11. [root@wanghualang src]# tar xzf nginx-1.16.1.tar.gz  
  12. [root@wanghualang src]# tar xzf openssl-1.0.2u.tar.gz  
  13. [root@wanghualang src]# tar xzf mysql-boost-5.7.28.tar.gz  

第三步 新建用户组、用户

  1. [root@wanghualang ~]# groupadd nginx      
  2. [root@wanghualang ~]# groupadd mysql    
  3. [root@wanghualang ~]# useradd nginx -M -g nginx -s /sbin/nologin    
  4. [root@wanghualang ~]# useradd mysql -M -g mysql -s /sbin/nologin    

第四步 编译安装Nginx(按需添加更多功能模块)

  1. [root@wanghualang ~]# cd /usr/local/src/nginx-1.16.1        
  2. [root@wanghualang nginx-1.16.1]# ./configure \
  3. --user=nginx \
  4. --group=nginx \
  5. --prefix=/usr/local/nginx \
  6. --with-pcre=/usr/local/src/pcre-8.43 \
  7. --with-openssl=/usr/local/src/openssl-1.0.2u \
  8. --with-zlib=/usr/local/src/zlib-1.2.11 \
  9. --with-http_gzip_static_module \
  10. --with-http_dav_module \
  11. --with-http_stub_status_module \
  12. --with-http_addition_module \
  13. --with-http_sub_module \
  14. --with-http_flv_module \
  15. --with-http_mp4_module \
  16. --with-http_ssl_module  \
  17. --with-http_v2_module
  18. [root@wanghualang nginx-1.16.1]# make  
  19. [root@wanghualang nginx-1.16.1]# make install  

第五步 配置Nginx启动服务脚本、开机启动

  1. [root@wanghualang ~]# vim /etc/init.d/nginx  
  2.   
  3. #!/bin/bash    
  4. #chkconfig: 2345 55 25    
  5.     
  6. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin    
  7. NAME=nginx    
  8. NGINX_BIN=/usr/local/nginx/sbin/$NAME    
  9. CONFIGFILE=/usr/local/nginx/conf/$NAME.conf    
  10. PIDFILE=/usr/local/nginx/logs/$NAME.pid  
  11.   
  12. if [ -s /bin/ss ]; then    
  13.     StatBin=/bin/ss    
  14. else    
  15.     StatBin=/bin/netstat    
  16. fi    
  17.     
  18.     
  19. case "$1" in    
  20.     start)    
  21.         echo -n "Starting $NAME... "    
  22.     
  23.         if $StatBin -tnpl | grep -q nginx;then    
  24.             echo "$NAME (pid `pidof $NAME`) already running."    
  25.             exit 1    
  26.         fi    
  27.     
  28.         $NGINX_BIN -c $CONFIGFILE    
  29.     
  30.         if [ "$?" != 0 ] ; then    
  31.             echo " failed"    
  32.             exit 1    
  33.         else    
  34.             echo " done"    
  35.         fi    
  36.         ;;    
  37.     
  38.     stop)    
  39.         echo -n "Stoping $NAME... "    
  40.     
  41.         if ! $StatBin -tnpl | grep -q nginx; then    
  42.             echo "$NAME is not running."    
  43.             exit 1    
  44.         fi    
  45.     
  46.         $NGINX_BIN -s stop    
  47.     
  48.         if [ "$?" != 0 ] ; then    
  49.             echo " failed. Use force-quit"    
  50.             exit 1    
  51.         else    
  52.             echo " done"    
  53.         fi    
  54.         ;;    
  55.     
  56.     status)    
  57.         if $StatBin -tnpl | grep -q nginx; then    
  58.             PID=`pidof nginx`    
  59.             echo "$NAME (pid $PID) is running..."    
  60.         else    
  61.             echo "$NAME is stopped."    
  62.             exit 0    
  63.         fi    
  64.         ;;    
  65.     
  66.     force-quit|kill)    
  67.         echo -n "Terminating $NAME... "    
  68.     
  69.         if ! $StatBin -tnpl | grep -q nginx; then    
  70.             echo "$NAME is is stopped."    
  71.             exit 1    
  72.         fi    
  73.     
  74.         kill `pidof $NAME`    
  75.     
  76.         if [ "$?" != 0 ] ; then    
  77.             echo " failed"    
  78.             exit 1    
  79.         else    
  80.             echo " done"    
  81.         fi    
  82.         ;;    
  83.     
  84.     restart)    
  85.         $0 stop    
  86.         sleep 1    
  87.         $0 start    
  88.         ;;    
  89.     
  90.     reload)    
  91.         echo -n "Reload service $NAME... "    
  92.     
  93.         if $StatBin -tnpl | grep -q nginx; then    
  94.             $NGINX_BIN -s reload    
  95.             echo " done"    
  96.         else    
  97.             echo "$NAME is not running, can't reload."    
  98.             exit 1    
  99.         fi    
  100.         ;;    
  101.     
  102.     configtest)    
  103.         echo -n "Test $NAME configure files... "    
  104.     
  105.         $NGINX_BIN -t    
  106.         ;;    
  107.     
  108.     *)    
  109.         echo "Usage: $0 {start|stop|restart|reload|status|configtest|force-quit|kill}"    
  110.         exit 1    
  111.         ;;    
  112.     
  113. esac    

  1. [root@wanghualang ~]# chmod +x /etc/init.d/nginx      
  2. [root@wanghualang ~]# chkconfig --add nginx      
  3. [root@wanghualang ~]# chkconfig nginx on   

第六步 编译安装MySQL(按需添加更多功能模块)

  1. [root@wanghualang ~]# cd /usr/local/src/mysql-5.7.28
  2. [root@wanghualang mysql-5.7.28]# cmake  \
  3. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
  4. -DSYSCONFDIR=/etc  \
  5. -DMYSQL_TCP_PORT=3306  \
  6. -DEXTRA_CHARSETS=all  \
  7. -DDEFAULT_CHARSET=utf8mb4  \
  8. -DDEFAULT_COLLATION=utf8mb4_general_ci  \
  9. -DWITH_MYISAM_STORAGE_ENGINE=1  \
  10. -DWITH_INNOBASE_STORAGE_ENGINE=1  \
  11. -DWITH_PARTITION_STORAGE_ENGINE=1  \
  12. -DWITH_FEDERATED_STORAGE_ENGINE=1  \
  13. -DWITH_EMBEDDED_SERVER=1  \
  14. -DENABLED_LOCAL_INFILE=1  \
  15. -DWITH_BOOST=/usr/local/src/mysql-5.7.28/boost/boost_1_59_0
  16. [root@wanghualang mysql-5.7.28]# make
  17. [root@wanghualang mysql-5.7.28]# make install

第七步 优化数据库配置(4G内存优化方案,仅供参考)

  1. [root@wanghualang ~]# mv /etc/my.cnf /etc/my.cnf.bak   
  2. [root@wanghualang ~]# vim /etc/my.cnf      
  3.       
  4. [client]     
  5. port=3306      
  6. socket=/tmp/mysql.sock      
  7.     
  8. [mysql]      
  9. no-auto-rehash      
  10.       
  11. [mysqld]      
  12. port=3306      
  13. bind_address=127.0.0.1      
  14. binlog_cache_size=128K      
  15. thread_stack=256K      
  16. join_buffer_size=2048K      
  17. query_cache_type=1      
  18. max_heap_table_size=512M      
  19. pid-file=/tmp/mysql.pid      
  20. socket=/tmp/mysql.sock      
  21. datadir=/usr/local/mysql/data      
  22. skip-external-locking      
  23. performance_schema_max_table_instances=400      
  24. table_definition_cache=400      
  25. key_buffer_size=384M      
  26. max_allowed_packet=100G      
  27. table_open_cache=384      
  28. sort_buffer_size=1024K      
  29. net_buffer_length=8K      
  30. read_buffer_size=1024K      
  31. read_rnd_buffer_size=768K      
  32. myisam_sort_buffer_size=16M      
  33. thread_cache_size=128      
  34. query_cache_size=192M      
  35. tmp_table_size=512M      
  36. sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES      
  37. explicit_defaults_for_timestamp=true      
  38. #skip-networking      
  39. max_connections=300      
  40. max_connect_errors=100      
  41. open_files_limit=65535      
  42. #log-bin=mysql-bin      
  43. #binlog_format=mixed      
  44. server-id=1      
  45. expire_logs_days=10      
  46. slow_query_log=1      
  47. slow-query-log-file=/usr/local/mysql/data/mysql-slow.log      
  48. long_query_time=3      
  49. #log_queries_not_using_indexes=on      
  50. early-plugin-load=""      
  51. default_storage_engine=InnoDB      
  52. innodb_data_home_dir=/usr/local/mysql/data      
  53. innodb_data_file_path=ibdata1:10M:autoextend      
  54. innodb_log_group_home_dir=/usr/local/mysql/data      
  55. innodb_buffer_pool_size=512M      
  56. innodb_log_file_size=128M      
  57. innodb_log_buffer_size=32M      
  58. innodb_flush_log_at_trx_commit=1      
  59. innodb_lock_wait_timeout=120      
  60. innodb_max_dirty_pages_pct=90      
  61. innodb_read_io_threads=2      
  62. innodb_write_io_threads=2      
  63.       
  64. [mysqldump]      
  65. quick      
  66. max_allowed_packet=16M      
  67.       
  68. [myisamchk]      
  69. key_buffer_size=64M      
  70. sort_buffer_size=1M      
  71. read_buffer=2M      
  72. write_buffer=2M      
  73.       
  74. [mysqlhotcopy]      
  75. interactive-timeout    

第八步 修改MySQL数据库目录、配置文件权限

  1. [root@wanghualang ~]# chown mysql:mysql /etc/my.cnf    
  2. [root@wanghualang ~]# chown -R mysql:mysql /usr/local/mysql    

第九步 配置MySQL数据库环境变量

  1. [root@wanghualang ~]# echo "export PATH="/usr/local/mysql/bin:$PATH">> /etc/profile      
  2. [root@wanghualang ~]# source /etc/profile    

第十步 配置MySQL启动服务脚本、开机启动

  1. [root@wanghualang ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    
  2. [root@wanghualang ~]# chmod +x /etc/init.d/mysqld      
  3. [root@wanghualang ~]# chkconfig --add mysqld      
  4. [root@wanghualang ~]# chkconfig mysqld on    

第十一步 初始化MySQL数据库

  1. [root@wanghualang ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data   

第十二步 编译安装PHP(按需添加更多功能模块)

  1. [root@wanghualang ~]# cd /usr/local/src/php-7.4.1    
  2. [root@wanghualang php-7.4.1]# ./configure \
  3. --prefix=/usr/local/php \
  4. --with-config-file-path=/usr/local/php/etc  \
  5. --enable-mysqlnd  \
  6. --enable-xml  \
  7. --enable-bcmath  \
  8. --enable-shmop  \
  9. --enable-sysvsem  \
  10. --enable-inline-optimization  \
  11. --enable-mbregex  \
  12. --enable-mbstring  \
  13. --enable-intl  \
  14. --enable-ftp  \
  15. --enable-pcntl  \
  16. --enable-sockets  \
  17. --enable-soap  \
  18. --enable-opcache  \
  19. --enable-fpm  \
  20. --enable-gd  \
  21. --with-fpm-user=nginx  \
  22. --with-fpm-group=nginx  \
  23. --with-mysqli=mysqlnd  \
  24. --with-pdo-mysql=mysqlnd  \
  25. --with-iconv-dir  \
  26. --with-freetype  \
  27. --with-jpeg  \
  28. --with-zlib  \
  29. --with-libxml  \
  30. --with-curl  \
  31. --with-openssl  \
  32. --with-mhash  \
  33. --with-xmlrpc  \
  34. --with-gettext  \
  35. --with-sodium  \
  36. --disable-fileinfo  \
  37. --disable-rpath  \
  38. --disable-debug
  39. [root@wanghualang ~]# make
  40. [root@wanghualang ~]# make install

第十三步 创建PHP配置文件

  1. [root@wanghualang ~]# cp /usr/local/src/php-7.4.1/php.ini-production /usr/local/php/etc/php.ini    
  2. [root@wanghualang ~]# cp /usr/local/src/php-7.4.1/sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf    
  3. [root@wanghualang ~]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf    

第十四步 配置PHP启动服务脚本、开机启动

  1. [root@wanghualang ~]# cp /usr/local/src/php-7.4.1/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm    
  2. [root@wanghualang ~]# chmod +x /etc/init.d/php-fpm    
  3. [root@wanghualang ~]# chkconfig --add php-fpm    
  4. [root@wanghualang ~]# chkconfig php-fpm on    

第十五步 创建PHP测试网站根目录、测试页面

  1. [root@wanghualang ~]# mkdir /usr/local/nginx/html/test  
  2. [root@wanghualang ~]# chown -R nginx:nginx /usr/local/nginx/html/test  
  3. [root@wanghualang ~]# echo "<?php phpinfo(); ?>> /usr/local/nginx/html/test/index.php  

第十六步 配置Nginx

  1. [root@wanghualang ~]# mv /usr/local/nginx/conf/nginx.conf  /usr/local/nginx/conf/nginx.conf.bak  
  2. [root@wanghualang ~]# vim /usr/local/nginx/conf/nginx.conf    
  3.     
  4. #运行用户    
  5. user nginx nginx;    
  6.     
  7. #工作进程    
  8. worker_processes auto;    
  9.     
  10. #最大文件打开数    
  11. worker_rlimit_nofile 51200;    
  12.     
  13. #进程PID    
  14. pid /usr/local/nginx/logs/nginx.pid;    
  15.     
  16. #错误日志    
  17. error_log /usr/local/nginx/logs/error.log crit;    
  18.     
  19. #工作模式及连接数上限    
  20. events {    
  21.   use epoll;    
  22.   worker_connections 51200;    
  23.   multi_accept on;    
  24. }    
  25.     
  26. http {    
  27.     
  28.   #加载虚拟主机配置文件    
  29.   include /usr/local/nginx/vhost/*.conf;    
  30.     
  31.   #文件扩展名与类型映射表    
  32.   include mime.types;    
  33.     
  34.   #默认文件类型    
  35.   default_type application/octet-stream;    
  36.     
  37.   #请求缓存    
  38.   server_names_hash_bucket_size 512;    
  39.   client_header_buffer_size 32k;    
  40.   large_client_header_buffers 4 32k;    
  41.   client_max_body_size 50m;    
  42.     
  43.   #高效传输模式    
  44.   sendfile on;    
  45.   tcp_nopush on;    
  46.   tcp_nodelay on;    
  47.     
  48.   #连接超时时间    
  49.   keepalive_timeout 60;    
  50.     
  51.   #FastCGI优化    
  52.   fastcgi_connect_timeout 300;    
  53.   fastcgi_send_timeout 300;    
  54.   fastcgi_read_timeout 300;    
  55.   fastcgi_buffer_size 64k;    
  56.   fastcgi_buffers 4 64k;    
  57.   fastcgi_busy_buffers_size 128k;    
  58.   fastcgi_temp_file_write_size 256k;    
  59.   fastcgi_intercept_errors on;    
  60.     
  61.   #开启GZIP压缩功能    
  62.   gzip on;    
  63.   gzip_min_length 1k;    
  64.   gzip_buffers 4 16k;    
  65.   gzip_http_version 1.1;    
  66.   gzip_comp_level 2;    
  67.   gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;    
  68.   gzip_vary on;    
  69.   gzip_proxied expired no-cache no-store private auth;    
  70.   gzip_disable "MSIE [1-6]\.";    
  71.     
  72.   #限制访问频率    
  73.   #limit_conn_zone $binary_remote_addr zone=perip:10m;    
  74.   #limit_conn_zone $server_name zone=perserver:10m;    
  75.     
  76.   #隐藏响应header和错误通知中的版本号    
  77.   server_tokens off;    
  78.   access_log off;    
  79. }    

第十七步 配置PHP测试网站虚拟主机

  1. [root@wanghualang ~]# mkdir /usr/local/nginx/vhost    
  2. [root@wanghualang ~]# vim /usr/local/nginx/vhost/test.conf    
  3.     
  4. server {    
  5.     
  6.   #监听端口    
  7.   listen 80;    
  8.     
  9.   #网站根目录    
  10.   root /usr/local/nginx/html/test/;    
  11.     
  12.   #虚拟主机名称    
  13.   server_name 192.168.168.21;    
  14.     
  15.   #网站主页排序    
  16.   index index.php index.html index.htm default.php default.htm default.html;    
  17.     
  18.   #网站访问、错误日志    
  19.   access_log /usr/local/nginx/logs/test.access.log;    
  20.   error_log /usr/local/nginx/logs/test.error.log;    
  21.     
  22.   #流量限制(网站最大并发数500|单IP访问最大并发数50|每个请求流量上限1024KB)    
  23.   #limit_conn perserver 500;    
  24.   #limit_conn perip 50;    
  25.   #limit_rate 1024k;    
  26.       
  27.   #配置错误页面    
  28.   #error_page 404 /404.html;    
  29.   #error_page 500 502 503 504 /50x.html;    
  30.     
  31.   #禁止访问文件和目录    
  32.   location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {    
  33.     return 404;    
  34.   }    
  35.     
  36.   #配置资源防盗链    
  37.   location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {    
  38.     expires 30d;    
  39.     access_log /dev/null;    
  40.     valid_referers none blocked 192.168.168.21;    
  41.     if ($invalid_referer) {    
  42.       return 404;    
  43.     }    
  44.   }    
  45.     
  46.   #配置图片资源缓存时间    
  47.   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {    
  48.     expires 30d;    
  49.     error_log off;    
  50.     access_log /dev/null;    
  51.   }    
  52.       
  53.   #设置样式资源缓存时间    
  54.   location ~ .*\.(js|css)?$ {    
  55.     expires 12h;    
  56.     error_log off;    
  57.     access_log /dev/null;    
  58.   }    
  59.     
  60.   #解析PHP    
  61.   location ~* \.php$ {    
  62.     fastcgi_index index.php;    
  63.     fastcgi_pass 127.0.0.1:9000;    
  64.     include fastcgi_params;    
  65.     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    
  66.     fastcgi_param SCRIPT_NAME $fastcgi_script_name;    
  67.   }    
  68. }    

第十八步 启动Nginx、MySQL、PHP

  1. [root@wanghualang ~]# service nginx start  
  2. [root@wanghualang ~]# service mysqld start  
  3. [root@wanghualang ~]# service php-fpm start  

第十九步 测试PHP网站

Linux编译安装LNMP

匿名

发表评论

匿名网友 填写信息