Linux_LEMP

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 目录目录LEMPNginxmysqlPHPphp-fpm ScriptLEMPNginx是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

目录

LEMP

Nginx是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

Nginx

step1. Install Nginx

yum install -y pcre-devel zlib-devel gcc openssl-devel
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-XXX -C /usr/local/
./configure -prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_gzip_static_module
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
nginx -v #check nginx version

step2. Use nginx running script to change nginx service status.

##################################  Script nginx:
#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /opt/nginx/conf/nginx.conf
# pidfile: /opt/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $”Reloading $prog: ”
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
    esac
#############################SCRIPT END
cp nginx /etc/init.d
chmod +x /etc/init.d/nginx

step3. Edit nginx configure file
vim /usr/local/nginx/conf/nginx.conf

main     #Global config label
server   #virtual machine label
#For example:
########################## server section
server {
    listen       80;
    server_name  www.baidu.com;     #domainName
    charset utf-8;        
    access_log  logs/baidu.access.log  main;
     location / {    
        root   html;                    #root: website directory; html:website root directory url:/usr/local/nginx/html
        index  index.html index.htm index.php;     #welcome peger
    }
    error_page  404              /404.html;        #error peger
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
server {   --> add access flow monitor function
    listen        80;
    server_name www.nnice.com;
    location ~/status {      #'~': the meaning is domain(IP) or nginx service root directory          
        stub_status    on;
        access_log    off;
    }
}
###########################
#events --> module setting
#For example:
########################### events section
events {
    worker_connections  1024;
    use epoll;    #use epoll kernel
}

mysql

step1. Install MySQL

tar zxvf cmake-XXX.tar.gz -C /usr/local
cd cmake
./configure && make && make install
tar zxvf mysql-XXX.tar.gz -C /usr/local
mv /usr/local/mysql-XXX /usr/local/mysql
cd mysql
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -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_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=yes  -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=on

step2. initialization mysql

cp mysql/support-files/my-medium.cnf /etc/my.cnf
cp mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
/usr/local/mysql/scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --> DB file store to /usr/local/mysql/data
useradd -M -s /sbin/nologin/ mysql
ln -s /usr/local/mysql/bin/*  /usr/local/bin
service mysqld restart
mysql_secure_installation  #optimization and set the password for mysql service
echo "//usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig

PHP

step1. Install PHP plugin

Install libmcrypt,mhash,mcrypt
tar jxvf php-XXX.tar.bz2
mv php-XXX.tar.bz2 php
cd php
./configure --prefix=/usr/local/php --with-gd --with-mcrypt --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php/etc --enable-mbstring --enable-fpm && make && make install

step2. Initialization PHP

cp php/php.ini.development /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

vim php-fpm.conf

pid=run/php-fpm.pid #close php-fpm service by find the pid number
user=nginx
group=nginx
pm.max_spare_servers=35
/usr/local/php/sbin/php-fpm  #start php-fpm service
cp php-fpm /etc/init.d             #php-fpm script is php-fpm service status script

php-fpm Script

#! /bin/sh
#chkconfig:35 25 12
#description:php-fpm
set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="php-fpm daemon"
NAME=php-fpm
DAEMON=/usr/local/php/sbin/$NAME
PIDFILE=/usr/local/php/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.


d_start() {
  /usr/local/php/sbin/php-fpm > /dev/null 2>&1 
}

d_stop() {
  /bin/kill -SIGINT `cat /usr/local/php/logs/php-fpm.pid` > /dev/null 2>&1 
}

d_restart() {
  /bin/kill -SIGUSE2 `cat /usr/local/php/logs/php-fpm.pid`  > /dev/null 2>&1
}

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        d_start
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
        d_stop
        echo "."
        ;;
  restart)
        echo -n "Restarting $DESC: $NAME"
        d_stop
        sleep 1
        d_start
        echo "."
        ;;
  *)
          echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
          exit 3
        ;;
esac

exit 0
##################################SCRIPT END
chown +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --list php-fpm
chkconfig php-fpm on

step4. Add php plugin to nginx service
vim /usr/local/nginx/conf/nginx.conf

Enable extra "location ~\.php$" section ,use php proxy
    location ~\.php$ {
         proxy_pass http://NginxServerIP:80
     }

Edit original “localtion \” section to “location ~.php$” , do not use proxy

service {
     location ~\.php$ {
     root    html
     include        fastcgi.conf
     }
     Index    index.php
 }
        service nginx restart
        service php-fpm restart
        service nginx restart
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 应用服务中间件
|
29天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
75 8
|
29天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
217 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
77 3
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
71 2
|
12天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
40 14
Linux 10 个“who”命令示例
|
1天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
34 20
|
1天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
20 7
|
21天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
31 9
|
19天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解