目录

  • 目录
  • 概述
  • 准备工作
  • 开始编译安装
    • 1. 安装 Nginx

      • 1. 解压
      • 2. 环境准备
      • 3. 编译过程
      • 4. Nginx 服务
    • 2. 安装 MySQL
      • 1. 解压
      • 2. 环境准备
      • 3. 安装 CMake 编译器:
      • 4. 编译过程
      • 5. 初始化数据库
      • 6. MySQL 服务
    • 3. 安装 PHP
      • 1. 安装依赖包
      • 2. 编译安装
      • 3. 配置 PHP
    • 4. 整合 LNMP
      • 1 编辑 Nginx 配置文件
      • 2 编辑fastcgi_params文件
      • 3 编辑测试页
      • 4 访问站点测试效果
  • 后记

概述

在之前的工作中,搭建过一次 zabbix 监控平台,应用的就是 LNMP 环境,但都是用的 rpm 包直接安装的。
由于是在阿里云封闭网络环境中搭建的,要想二次利用 LNMP 架构就得重新配置,所以做了本次操作,全部组件都是源码编译,配置成型,方便以后迁移利用。
也编制了文档,方便查阅、二次编辑。

准备工作

本次安装用到的资源包(点击可自动下载):
MySQL-5.6.40
Nginx-1.14.0
PHP-7.1.18
Apache-2.4.33:虽然不是 LAMP 架构,但还是准备了 Apache 的源码包下载地址,方便你我他。

将源码包统一放置在 /root/app 下:
# ls -lh /root/app/
-rw-r–r–. 1 root root 8.7M May 31 14:17 httpd-2.4.33.tar.gz
-rw-r–r–. 1 root root 31M May 31 14:17 mysql-5.6.40.tar.gz
-rw-r–r–. 1 root root 993K May 31 14:17 nginx-1.14.0.tar.gz
-rw-r–r–. 1 root root 19M May 31 14:17 php-7.1.18.tar.gz

开始编译安装

1. 安装 Nginx

1. 解压

# tar -xf nginx-1.14.0.tar.gz
# cd nginx-1.14.0/

2. 环境准备

# yum -y install gcc
# useradd -s /sbin/nologin -M nginx
# id nginx
# mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}

3. 编译过程

在 Nginx 解压的目录下执行

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre \
--with-file-aio \
--with-http_secure_link_module \
--with-threads
  • 此时可能遇到的报错:

    错误 1:./configure: error: the HTTP rewrite module requires the PCRE library.
    错误 2: ./configure: error: SSL modules require the OpenSSL library.
    解决办法(缺少依赖库,安装就好了)
    # yum -y install pcre-devel
    # yum -y install openssl-devel

  • configure 成功后,执行:
    # make
    # make install
    注:可在编译结束后,通过 echo $? 来查看任务输出码,一般为 0 则是成功。

4. Nginx 服务

启动服务
# /usr/local/nginx/sbin/nginx
# ss -antp |grep nginx
LISTEN 0 128 *:80 *:* users:((“nginx”,pid=8814,fd=6), (“nginx”,pid=8813,fd=6))


设置开机自启动:
# tail -1 /etc/rc.d/rc.local
/usr/local/nginx/sbin/nginx
创建软连接:
# ln -s /usr/local//nginx/sbin/nginx /usr/bin/nginx

2. 安装 MySQL

1. 解压

# tar -xf mysql-5.6.40.tar.gz
# cd mysql-5.6.40/

2. 环境准备

  • 卸载系统原装数据库 mariadb
    # rpm -qa | grep mariadb
    mariadb-libs-5.5.56-2.el7.x86_64
    # rpm -e --nodeps mariadb-libs

  • 创建数据目录
    # mkdir -p /mydata/data

  • 还有很重要的两步
    # groupadd -g 27 mysql
    # useradd -u 27 -g 27 -s /sbin/nologin -M mysql
    # chown -R mysql.mysql /mydata/data/


注:MySQL5.5 之前的版本使用的是 gcc 编译器,自5.5版本以后,就开始使用 CMake 编译工具了,因此,在安装源文件中找不到 configure 文件是正常的。

3. 安装 CMake 编译器:

# rpm -qa |grep cmake
# yum list |grep cmake
cmake.x86_64            2.8.12.2-2.el7            base
cmake-fedora.noarch     2.9.3-1.el7               epel
cmake-gui.x86_64        2.8.12.2-2.el7            base
cmake3.x86_64           3.11.0-1.el7              epel
cmake3-data.noarch      3.11.0-1.el7              epel
cmake3-doc.noarch       3.11.0-1.el7              epel
cmake3-gui.x86_64       3.11.0-1.el7              epel
extra-cmake-modules.noarch     5.36.0-1.el7       epel  # yum -y install cmake

4. 编译过程

进入解压的 MySQL 目录执行

  • 环境检查
    # cmake -L

    可能有如下报错:
    … …
    Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
    CMake Error at cmake/readline.cmake:85 (MESSAGE):
    Curses library not found. Please install appropriate package,
    remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
    Call Stack (most recent call first):
    cmake/readline.cmake:128 (FIND_CURSES)
    cmake/readline.cmake:218 (MYSQL_USE_BUNDLED_EDITLINE)
    CMakeLists.txt:448 (MYSQL_CHECK_EDITLINE)


    解决办法:
    # yum -y install ncurses-devel
    另外要注意
    错误的编译信息会存放到解压目录下 CMakeCache.txt 文件中,所以每次解决完问题,重新编译需要将此文件删掉.

  • Cmake
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_DATADIR=/mydata/data \
-DMYSQL_TCP_PORT=3306 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
  • make && make install
    # make
    # make install

5. 初始化数据库

先修改 mysql 目录的属主属组
# chown -R mysql.mysql /usr/local/mysql

单纯执行初始化命令会报错,可能报错如下:
2018-05-31 16:53:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
2018-05-31 16:53:40 0 [Note] –secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2018-05-31 16:53:40 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.6.40) starting as process 87262 …
2018-05-31 16:53:40 87262 [Note] Plugin ‘FEDERATED’ is disabled.
/usr/local/mysql/bin/mysqld: Table ‘mysql.plugin’ doesn’t exist
2018-05-31 16:53:40 87262 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.


网上找了好多相似案例,终于用下面的方法解决了

先执行如下操作
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data
再执行初始化命令
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data
ls -h /mydata/data/
-rw-rw----. 1 mysql mysql   56 May 31 17:03 auto.cnf
-rw-rw----. 1 mysql mysql  76M Jun  1 09:21 ibdata1
-rw-rw----. 1 mysql mysql  48M Jun  1 09:21 ib_logfile0
-rw-rw----. 1 mysql mysql  48M May 31 16:56 ib_logfile1
-rw-rw----. 1 mysql mysql  33K Jun  1 09:20 lnmp.linux.com.err
-rw-rw----. 1 mysql mysql    6 May 31 17:14 lnmp.linux.com.pid
drwx------. 2 mysql mysql 4.0K May 31 16:56 mysql
drwx------. 2 mysql mysql 4.0K May 31 16:56 performance_schema
drwx------. 2 mysql mysql   94 Jun  1 09:21 test

6. MySQL 服务

  • 启动服务

    # cd /usr/local/mysql/support-files/
    # cp my-default.cnf /etc/my.cnf
    # vim /etc/my.cnf # 此步骤暂不说明,请根据需求自行解决
    # /usr/local/mysql/bin/mysqld_safe --user=mysql & # 这里敲两下回车
    # netstat -antp |grep mysqld
    tcp6 0 0 :::3306 :::* LISTEN 87606/mysqld

  • 设置开机自启动:

    # cp mysql.server /etc/init.d/mysqldd
    # chmod +x /etc/init.d/mysqldd
    # /etc/init.d/mysqldd restart
    Shutting down MySQL..180529 14:29:26 mysqld_safe mysqld from pid file
    /mydata/data/LNMP.linux.com.pid ended SUCCESS!
    [1]+ Done ./bin/mysqld_safe –user=mysql (wd: /usr/local/mysql)
    (wd now: /usr/local/mysql/support-files)
    # chkconfig --add mysqldd
    # chkconfig mysqldd on
    # #chkconfig mysqldd --list
    … …
    mysqldd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

  • 设置全局变量:

    可以在 profile 文件中添加,也可以单独在 profile.d 目录中创建 .sh 文件,我一般用后者:
    # ls -ld /etc/profile*
    -rw-r–r–. 1 root root 1813 May 28 14:04 /etc/profile
    drwxr-xr-x. 2 root root 4096 May 28 17:09 /etc/profile.d
    # vim mysql.sh
    # cat /etc/profile.d/mysql.sh
    export PATH=$PATH:/usr/local/mysql/bin
    # source /etc/profile.d/mysql.sh
    # echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

3. 安装 PHP

1. 安装依赖包

# yum -y install libxml2-devel bzip2-devel libmcrypt libmcrypt-devel mcrypt mhash mhash-devel
# yum -y install curl-devel libjpeg-devel libpng libpng-devel freetype freetype-develPS:为什么我知道安装这些包,因为这是一遍一遍环境检测教育出来的... ...

2. 编译安装

./configure \
--prefix=/usr/local/php7 \
--exec-prefix=/usr/local/php7 \
--bindir=/usr/local/php7/bin \
--sbindir=/usr/local/php7/sbin \
--includedir=/usr/local/php7/include \
--libdir=/usr/local/php7/lib/php \
--mandir=/usr/local/php7/php/man \
--with-config-file-path=/usr/local/php7/etc \
--with-mysql-sock=/tmp/mysql.sock \
--with-mcrypt=/usr/include \
--with-mhash \
--with-openssl \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--enable-mysqlnd \
--with-gd \
--with-iconv \
--with-zlib \
--enable-zip \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--without-gdbm \
--disable-fileinfo  

为了方便以后的移植(也不知道用不用得上),我把一般能用到的参数都添加上了,此处特别强调一下 mysql 相关的参数,因为我为此重新编译了 MySQL 和 PHP。

最开始编译时就是从网上 copy 的,包括 - -with-mysql 参数,但是不知道从什么版本(后来查过官网才知道)开始,这个参数就被摒弃了。

重新编译时,加了下面两个参数:
–with-pdo-mysql=/usr/local/mysql
–enable-mysqlnd
加这两个参数的意义,会在文章的后面简单提到
详解请查看官方文档

  • make && make install
    # make
    # make install

3. 配置 PHP

  • 拷贝各种配置文件:
#cd /root/app/php-7.1.18
#cp php.ini-production /etc/php.ini
#cd /usr/local/php7/etc
#cp php-fpm.conf.default php-fpm.conf
#cd /root/app/php-7.1.18/sapi/fpm
#cp init.d.php-fpm /etc/init.d/php-fpm
#chmod a+x /etc/init.d/php-fpm设置开机自启动
#chkconfig --add php-fpm
#chkconfig --list php-fpm
...
php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off
编辑配置文件,这很重要
至于各个参数的意义,请自行查找相应文档
# vim /usr/local/php7/etc/php-fpm.conf
# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
# vim /usr/local/php7/etc/php-fpm.d/www.conf[root@LNMP.linux.com /usr/local/php7/etc] LNMP
# grep -Ev '^$|^;' /usr/local/php7/etc/php-fpm.conf
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
include=/usr/local/php7/etc/php-fpm.d/*.conf[root@LNMP.linux.com /usr/local/php7/etc] LNMP
# grep -Ev '^$|^;' php-fpm.d/www.conf
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 15            # 这些参数自行计算修改,参考官方文档或大神博客
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15注:以上值的大小必须遵循如下排列
pm.max_spare_servers > pm.start_servers > pm.min_spare_servers
  • 启动服务

[root@LNMP.linux.com /usr/local/php7/etc] LNMP
# /etc/init.d/php-fpm start
Starting php-fpm done


[root@LNMP.linux.com /usr/local/php7/etc] LNMP
# ss -antp |grep php-fpm
LISTEN 0 128 127.0.0.1:9000 : users:((“php-fpm”,pid=81980,fd=0),(“php-fpm”,pid=81979,fd=0),(“php-fpm”,pid=81978,fd=0),(“php-fpm”,pid=81977,fd=0),(“php-fpm”,pid=81976,fd=0),(“php-fpm”,pid=81975,fd=0),(“php-fpm”,pid=81974,fd=0),(“php-fpm”,pid=81973,fd=0),(“php-fpm”,pid=81972,fd=0),(“php-fpm”,pid=81971,fd=0),(“php-fpm”,pid=81970,fd=7))


注:
此时用 systemctl 查看 php-fpm 服务启动状态,看到是未启动的话,就停止 php-fpm 服务.
然后 systemctl start php-fpm,之前的步骤已经设置过开机自启动,此处不用再做。

4. 整合 LNMP

终于编译完这些 balabala… 终于可以干点儿正事儿啦!!!

1 编辑 Nginx 配置文件

整合 Nginx 和 PHP,改动内容如下:

...location / {root   html;index  index.php a.php index.html index.htm;}...location ~ \.php$  {root           /web/docs;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}

2 编辑fastcgi_params文件

  • 编辑/usr/local//nginx/conf/fastcgi_params文件,并将内容修改为如下内容,配置fastcgi参数:

#grep -Ev '^$|^#' /usr/local/nginx/conf/fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME    $document_root\$fastcgi_script_name;    # 改动的是这里
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT     $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;

3 编辑测试页

在 /web/docs(我自定义了PHP初始页位置,可以不改,默认放在Nginx的html目录下)目录下编写 index.php 和 a.php ,内容如下:

#cat index.php<?phpphpinfo();?>

编写连接数据库的测试页:

    #cat a.php<?php$link=mysqli_connect("localhost","root","");if ($link)echo "Succeed!";elseecho "Fail!";mysqli_close();?>

4 访问站点测试效果

访问 $IP 可以看到 PHP 初始页面 ~ nice


访问 $IP/a.php 很可能会有http error 500的报错 ~ XXX


我在测试数据库连接这里卡了一天的时间,看了各个日志,参考了网友同类型报错,但始终解决不了。
只好重新编译,查找和MySQL相关的参数,如上文提到的,加了那两个参数,再次编译果然能用了。

成功之前,还有一个另类的报错:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /usr/local/nginx/html/a.php:7 Stack trace: #0 {main} thrown in /usr/local/nginx/html/a.php on line 2

这里和PHP版本有关,查看了官方文档,发现自5.5.0版本开始废弃了好多api,并在自 PHP 7.0.0 开始被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。
具体的可以参考官方文档。链接:http://php.net/manual/zh/ref.mysql.php


突然想起郭德纲的那句话:“大难不死,必有下回”,在我这应验了,深深的理解了什么叫绝望 T_T

    成功之后竟然还有一个报警!!!Warning: mysqli_connect(): Headers and client library minor version mismatch. Headers:50640 Library:50556 in /usr/local/nginx/html/a.php on line 2

对于这个,我实在没耐心继续搞了,毕竟是利用了好多工作时间,欠的工作要补救一下了。也希望有大牛在评论下指点一二


后记

用了大概一周的时间,断断续续的编译、搭建,学习了很多,但也发现不懂的更多。官方文档和强大的网友总能给你惊喜,要是没收到,那就歇一会儿再做就好了 ^_^

转载于:https://www.cnblogs.com/nimo97/p/9704764.html

centos7 系统下搭建 lnmp 环境相关推荐

  1. Windows系统下搭建MPI环境

    Windows系统下搭建MPI环境 MPI的全称是Message Passing Interface即标准消息传递界面,可以用于并行计算.MPI的具体实现一般采用MPICH.下面介绍如何在Window ...

  2. linux 打印当前系统环境_Linux系统下搭建python环境

    首先linux系统下一般是自带python2环境的,但是目前大多数项目工程python2是不适用的,今天我们就来讲解下如何在linux系统下搭建python3! 以上是自带的python2,接下来搭建 ...

  3. centos7下搭建lnmp环境包含yum源直接安装和源码编译安装,以及php5.3和php7.6版本

    LNMP环境的搭建 一.yum源直接搭建 1.安装epel源 2.安装mariadb 初始化mariadb 3.安装php模块 配置php-fpm 3.安装nginx 配置nginx 4.测试环境是否 ...

  4. Ubuntu15.04下搭建LNMP环境 - 无需整理

    为什么80%的码农都做不了架构师?>>>    親測 PHP查詢數據庫正常  LNMP是Linux+Nginx+MySQL+PHP的简称,是一套完整的PHP网站服务器架构环境. 所用 ...

  5. centos7源码搭建lnmp环境

    centos7源码编译安装lnmp环境 1.系统自带的yum源有很多包没有,所以先下载一个网络源. nginx版本 1.14.0 mysql版本 5.7.20 php版本 5.6.40 wget ht ...

  6. Windows 系统下搭建 WAMP 环境

    Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...

  7. Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境

    一.简介 一直以来,微软只对自家平台提供.NET支持,这样等于让这个"理论上"可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET).直到微 ...

  8. CentOS7.4中搭建lnmp环境

    1 lnmp搭建 1.1 基本环境 主机名 系统版本 IP地址 软件版本 web01 CentOS7.4 172.16.1.107 nginx-1.12.2.tar.gz php-7.1.18.tar ...

  9. linux系统下搭建php环境之-Discuz论坛

    1.安装搭建论坛必要的软件 apache  php  mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源, ...

最新文章

  1. 也议MySQL中隐式转换
  2. php Function split() is deprecated 的解决办法(转)
  3. mysql distinct、group_concat
  4. Atitit。DD dragdrop拖拽功能c#.net java swing的对比与实现总结
  5. 如何将 ipynb 发布到 blog 中(html, markdown格式)
  6. ddr2和ddr3的区别
  7. 软件测试之黑盒测试-等价类划分法
  8. Network Request Failed
  9. rust怎么建柱子_小报:捷达VS5安全带卡扣向里?敲B柱?怎么掰回来? 第191220期...
  10. 2016-08-31
  11. 1486mysql,mysql_error.md
  12. 使用WMI和性能计数器监控远程服务器权限设置
  13. 【系统】VMware虚拟机安装黑苹果系统macOS 12.5详细步骤
  14. matlab pt站下载,SDPT3-4.0 求解最优化问题里的半定规 (SDP)经典并且十分有效的MATLAB程序包 244万源代码下载- www.pudn.com...
  15. url 转码 java_HttpClient请求URL字符集转码问题解决方法
  16. 软件中的快速原型技术
  17. linux安装网易云
  18. 查看计算机的硬盘的命令,硬盘修复,教您怎么用系统命令检查硬盘
  19. 为什么说交换机可以隔离冲突域?
  20. Linux网络编程基础:listen函数

热门文章

  1. c语言char转wchar t,c语言char和wchar_t 转换
  2. mysql字段优化_MySQL优化(1):字段的设计
  3. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...
  4. java十个整数相反顺序_编写程序,对输入的一个整数,按相反顺序输出该数。例如,输入为 3578, 输出为 8753。...
  5. stringbuilder 拼接语句缺失右括号_Leetcode No.22 括号生成
  6. 华为鸿蒙运行视频,某游戏在华为鸿蒙运行,被识别成使用安卓模拟器
  7. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用
  8. mysql常用转换函数_MySQL中常用转换函数介绍
  9. 鸿蒙与微信小程序,鸿蒙远程交互应用 vs 微信小程序远程交互应用
  10. python简单装饰器_简单介绍Python装饰器(一)