CentOS7编译安装LNMP

    LNMP是由Linux操作系统、Nginx中间件、MySQL数据库、PHP脚本语言四大开源免费产品组合而成的Web服务框架,早前已分享过Nginx、MySQL、PHP单独编译安装教程,今天给大家分享完整的LNMP编译安装方法。

    CentOS7编译安装Nginx

    CentOS7编译安装MySQL

    CentOS7编译安装PHP

    实验环境

    操作系统:CentOS 7.9

    Nginx:1.18

    MySQL:5.7.32

    PHP:7.4.13

    Zlib:1.2.11

    Pcre:8.44

    OpenSSL:1.1.1i

    安装篇

    第一步 安装依赖包 

    1. # 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. # cd /usr/local/src/        
    2. # wget --no-check-certificate http://zlib.net/zlib-1.2.11.tar.gz  
    3. # wget --no-check-certificate https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz  
    4. # wget --no-check-certificate http://nginx.org/download/nginx-1.18.0.tar.gz  
    5. # wget --no-check-certificate https://www.php.net/distributions/php-7.4.13.tar.gz  
    6. # wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1i.tar.gz  
    7. # wget --no-check-certificate https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.32.tar.gz  
    8. # tar xzf pcre-8.44.tar.gz  
    9. # tar xzf php-7.4.13.tar.gz  
    10. # tar xzf zlib-1.2.11.tar.gz  
    11. # tar xzf nginx-1.18.0.tar.gz  
    12. # tar xzf openssl-1.1.1i.tar.gz  
    13. # tar xzf mysql-boost-5.7.32.tar.gz  

    第三步 新建用户组、用户

    1. # groupadd nginx      
    2. # groupadd mysql    
    3. # useradd nginx -M -g nginx -s /sbin/nologin    
    4. # useradd mysql -M -g mysql -s /sbin/nologin    

    第四步 编译安装Nginx

    1. # cd /usr/local/src/nginx-1.18.0        
    2. # ./configure \
    3. --user=nginx \
    4. --group=nginx \
    5. --prefix=/usr/local/nginx \
    6. --with-pcre=/usr/local/src/pcre-8.44 \
    7. --with-openssl=/usr/local/src/openssl-1.1.1i \
    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. # make  
    19. # make install  

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

    1. # vim /etc/init.d/nginx  
    2.   
    3. #! /bin/sh  
    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. ulimit -n 8192  
    12.   
    13. case "$1" in  
    14. start)  
    15.     echo -n "Starting $NAME... "  
    16.     if [ -f $PIDFILE ]; then  
    17.         mPID=$(cat $PIDFILE)  
    18.         isStart=$(ps ax | awk '{ print $1 }' | grep -e "^${mPID}$")  
    19.         if [ "$isStart" != '' ]; then  
    20.             echo "$NAME (pid $(pidof $NAME)) already running."  
    21.             exit 1  
    22.         fi  
    23.     fi  
    24.   
    25.     $NGINX_BIN -c $CONFIGFILE  
    26.   
    27.     if [ "$?" != 0 ]; then  
    28.         echo " failed"  
    29.         exit 1  
    30.     else  
    31.         echo " done"  
    32.     fi  
    33.     ;;  
    34.   
    35. stop)  
    36.     echo -n "Stoping $NAME... "  
    37.     if [ -f $PIDFILE ]; then  
    38.         mPID=$(cat $PIDFILE)  
    39.         isStart=$(ps ax | awk '{ print $1 }' | grep -e "^${mPID}$")  
    40.         if [ "$isStart" = '' ]; then  
    41.             echo "$NAME is not running."  
    42.             exit 1  
    43.         fi  
    44.     else  
    45.         echo "$NAME is not running."  
    46.         exit 1  
    47.     fi  
    48.     $NGINX_BIN -s stop  
    49.   
    50.     if [ "$?" != 0 ]; then  
    51.         echo " failed. Use force-quit"  
    52.         exit 1  
    53.     else  
    54.         echo " done"  
    55.     fi  
    56.     ;;  
    57.   
    58. status)  
    59.     if [ -f $PIDFILE ]; then  
    60.         mPID=$(cat $PIDFILE)  
    61.         isStart=$(ps ax | awk '{ print $1 }' | grep -e "^${mPID}$")  
    62.         if [ "$isStart" != '' ]; then  
    63.             echo "$NAME (pid $(pidof $NAME)) already running."  
    64.             exit 1  
    65.         else  
    66.             echo "$NAME is stopped"  
    67.             exit 0  
    68.         fi  
    69.     else  
    70.         echo "$NAME is stopped"  
    71.         exit 0  
    72.     fi  
    73.     ;;  
    74. restart)  
    75.     $0 stop  
    76.     sleep 1  
    77.     $0 start  
    78.     ;;  
    79.   
    80. reload)  
    81.     echo -n "Reload service $NAME... "  
    82.     if [ -f $PIDFILE ]; then  
    83.         mPID=$(cat $PIDFILE)  
    84.         isStart=$(ps ax | awk '{ print $1 }' | grep -e "^${mPID}$")  
    85.         if [ "$isStart" != '' ]; then  
    86.             $NGINX_BIN -s reload  
    87.             echo " done"  
    88.         else  
    89.             echo "$NAME is not running, can't reload."  
    90.             exit 1  
    91.         fi  
    92.     else  
    93.         echo "$NAME is not running, can't reload."  
    94.         exit 1  
    95.     fi  
    96.     ;;  
    97.   
    98. configtest)  
    99.     echo -n "Test $NAME configure files... "  
    100.     $NGINX_BIN -t  
    101.     ;;  
    102.   
    103. *)  
    104.     echo "Usage: $0 {start|stop|restart|reload|status|configtest}"  
    105.     exit 1  
    106.     ;;  
    107. esac  

    1. # chmod +x /etc/init.d/nginx      
    2. # chkconfig --add nginx      
    3. # chkconfig nginx on   

    第六步 编译安装MySQL

    1. # cd /usr/local/src/mysql-5.7.32
    2. # 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.32/boost/boost_1_59_0
    16. # make
    17. # make install

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

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

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

    1. # chown mysql:mysql /etc/my.cnf
    2. # chown -R mysql:mysql /usr/local/mysql

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

    1. # echo "export PATH="/usr/local/mysql/bin:$PATH">> /etc/profile
    2. # source /etc/profile

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

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

    第十一步 初始化MySQL数据库

    1. # mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data   

    第十二步 编译安装PHP

    1. # cd /usr/local/src/php-7.4.13    
    2. # ./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. # make
    40. # make install

    第十三步 创建PHP配置文件

    1. # cp /usr/local/src/php-7.4.13/php.ini-production /usr/local/php/etc/php.ini    
    2. # cp /usr/local/src/php-7.4.13/sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf    
    3. # cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf    

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

    1. # cp /usr/local/src/php-7.4.13/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm    
    2. # chmod +x /etc/init.d/php-fpm    
    3. # chkconfig --add php-fpm    
    4. # chkconfig php-fpm on    

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

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

    第十六步 配置Nginx

    1. # mv /usr/local/nginx/conf/nginx.conf  /usr/local/nginx/conf/nginx.conf.bak  
    2. # 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. # mkdir /usr/local/nginx/vhost    
    2. # 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. # service nginx start
    2. # service mysqld start
    3. # service php-fpm start
    匿名

    发表评论

    匿名网友 填写信息