从 LAMP、LEMP 到 LEMUR

从 20 世纪 90 年×××始,LAMP 架构成为了部署 Web 应用程序最有名和最值得信赖的方法。LAMP 是 Linux,Apache,MySQL和 PHP 的首字母缩写。直至今日,Apache 经过不断迭代,依旧作为一个成熟、稳定、强大的 Web 架构被广为使用。

然而随着用于开发和交付现代 Web 应用程序的架构不断地追求轻便和简化。NGINX 横空出世,由于其简单性,高性能和可扩展性而成为大多数热门网站的首选网络服务器。这导致了 LEMP 堆栈 的广泛使用,NGINX(Engine-X)取代了 Apache。

时至今日,Web 开发的语言、框架越发多样化,以至于 LAMP、LNMP 中的关键一项 PHP 逐渐无法满足市场的需求,GO、Python、Ruby、NodeJS、JAVA 等越来越多的语言被用于 Web 开发与生产实践。虽然你依旧可以单纯的使用 Nginx 作为反向代理的工具处理 Python、NodeJS、JAVA 等 Web 程序,但是对应的部署难度和维护复杂性随着时间的推进变得越来越高。运维人员希望能够有一个统一的平台,高效、简单地处理各种各样的 Web 程序。

那么这个时候,一个全新的 Web 架构来到了我们眼前,那就是 LEMUR,即 Linux,NGINX,MariaDB,Unit 和 Redis。

LEMUR 架构的安装

本次安装以 Debian 9.4 为例

基本库安装

apt update && apt upgrade -y
apt install curl vim nano wget git sudo unzip apt-transport-https screen lsb-release ca-certificates dialog software-properties-common gnupg2 apparmor dirmngr -y
Redis

Redis

关系型数据库是数据存储的基石。但是,许多轻量级应用程序使用的重量级复杂数据存储工具都不实用,或者速度不够快。2009年,Redis 实验室推出了开源、支持网络、基于内存、可选持久性的键值对存储数据库。今天,Redis 可能是最流行的键值对存储数据库,数百万个 Web 应用程序使用它。其轻巧简单的设计使其成为 LEMUR 架构的关键和非关系型数据库的首选。

很多人都说系统源打包的 redis 很老,谁能想到 stretch-backports 的版本直接是 4.0+ 新版呢。

apt install redis-server -t stretch-backports

MariaDB

在 Oracle 于 2010 年收购 Sun Microsystems 后,MySQL 的原始作者之一马上创建了 MariaDB。其开放式设计和协作开发确保世界上最流行的数据库保持开源并可供任何项目的工程师使用。此外,它与 MySQL 向后兼容。所有这些特征使 MariaDB 成为 LEMUR 架构中的关系数据库的首选。

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64] http://mariadb.nethub.com.hk/repo/10.2/debian stretch main'
sudo apt update && sudo apt install mariadb-server -y

Nginx & Unit

最初于 1997 年发布的 PHP 已成为 Web 应用程序最流行的语言之一。PHP 进入门槛非常低,并且易于新手网站开发人员,但现代应用程序变得越来越复杂 - 它们以多种语言开发,并且通常在同一时间以多种不同语言版本交付。

为了应对这些新挑战,Nginx Unit 横空出世,专为现代应用设计。Unit 同时支持多种语言和语言版本,包括多个 PHP 版本,并作为 LEMUR 架构中应用服务器的核心角色。

Nginx 和 Unit 的部署可以有非常多的玩法,先介绍如何通过预编译包来安装,后面会补充介绍更高级的玩法。

curl -C - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -cat >> /etc/apt/sources.list.d/nginx.list << EOF
deb https://packages.nginx.org/unit/debian/ $(lsb_release -sc) unit
deb https://nginx.org/packages/mainline/debian/ $(lsb_release -sc) nginx
EOF

这边写了安装 unit-php unit-python 和 unit-go,实际上 Unit 可以做到支持 Python、PHP、Go、Perl、Ruby、JavaScript/Node.js (coming soon)、Java (coming soon),我这边也将第一时间跟进。

apt update && apt install nginx unit-php unit-python2.7 unit-python3.5 unit-go1.7 unit-perl unit-ruby golang -y
apt install python-dev python3-dev libphp-embed php7.0-{bz2,bcmath,common,curl,dba,dev,gd,json,mcrypt,mbstring,mysql,intl,opcache,redis,sqlite3,xml,xmlrpc,zip} -t stretch-backports -y

Unit——LEMUR 架构的核心

2018 年 4 月 12 日,在首次公开发布大约六个月后,NGINX Unit 正式发布了 1.0 版本。

Nginx Unit 使用 REST API 进行动态配置;没有静态配置文件。所有配置更改直接在内存中发生。配置更改无需重新加载配置或重启服务即可生效。

毫无疑问,Unit 是整个 LEMUR 架构的核心组件,也是 Nginx 未来主推的 Web 动态应用部署新形式,它具有以下特征:

  • 使用 JSON API 进行动态配置管理
  • 同时支持多语言、多版本 Web 开发语言

即将支持的特性有:

  • 动态语言的进程管理功能
  • TLS 支持
  • TCP, HTTP, HTTPS, HTTP/2 路由和代理

案例介绍

下面我们用一个典型的 PHP 应用 wordpress 为例介绍 Unit 以及 LEMUR 的应用:

数据库配置

创建一个数据库以及对应用户:

mysql_secure_installation
mysql -u root -p
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> CREATE USER wp_user@localhost IDENTIFIED BY 'secure_password';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO user@localhost;
mysql> FLUSH PRIVILEGES;
mysql> exit

应用下载与配置

mkdir -p /var/www && cd /var/www && wget http://wordpress.org/latest.tar.gz && tar xzvf latest.tar.gz && rm latest.tar.gz && cd wordpress && cp wp-config-sample.php wp-config.php
  • 简单的安全加固,记录下返回的结果,之后要用到:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
  • 编辑配置:
nano wp-config.php

找到如下部分并修改成对应数据库信息:

/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');/** MySQL database username */
define('DB_USER', 'wp_user@localhost');/** MySQL database password */
define('DB_PASSWORD', 'secure_password');

找到如下内容并修改为之前安全加固产生的内容:

define('AUTH_KEY',         'value generated by salt');
define('SECURE_AUTH_KEY',  'value generated by salt');
define('LOGGED_IN_KEY',    'value generated by salt');
define('NONCE_KEY',        'value generated by salt');
define('AUTH_SALT',        'value generated by salt');
define('SECURE_AUTH_SALT', 'value generated by salt');
define('LOGGED_IN_SALT',   'value generated by salt');
define('NONCE_SALT',       'value generated by salt');

编辑完成后按 ctrl + x 保存退出,再按 y 然后按回车确认即可:

  • 修改文件及目录权限:
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod g+s {} \;
sudo chmod g+w /var/www/wordpress/wp-content
sudo chmod -R g+w /var/www/wordpress/wp-content/themes
sudo chmod -R g+w /var/www/wordpress/wp-content/plugins
  • Unit 配置

  • 修改 Unit 配置文件:
nano /var/www/wordpress/wordpress.config

指定 wordpress.config 是 这个 Unit 应用的配置文件,我们写入如下内容:

{"listeners": {"127.0.0.1:8090": {"application": "script_index_php"},"127.0.0.1:8091": {"application": "direct_php"}},"applications": {"script_index_php": {"type": "php","processes": {"max": 20,"spare": 5},"user": "www-data","group": "www-data","root": "/var/www/wordpress","script": "index.php"},"direct_php": {"type": "php","processes": {"max": 5,"spare": 0},"user": "www-data","group": "www-data","root": "/var/www/wordpress","index": "index.php"}}
}
  • 提交配置文件:

这边只是介绍了最基本的 API 用法,实际上基于 Unit API 可以完成很多工作,具体参考 Unit 官方文档请添加链接描述

curl -X PUT -d @/var/www/wordpress.config --unix-socket /run/control.unit.sock http://localhost/config
  • Unit 操作:
service unit [start|status|stop|restart|reload|force-reload|saveconfig|loadconfig]

对应的操作分别为:开始、状态、关闭、重启、重载所有配置、强制载入所有配置、保存应用配置、载入应用配置。

Nginx 整合 Unit:

以上面的 Wordpress 应用为例,给出一个 Nginx 配置:

upstream index_php_upstream {server 127.0.0.1:8090;
}
upstream direct_php_upstream {server 127.0.0.1:8091;
}
server {listen      80;server_name localhost;root        /var/www/wordpress/;location / {try_files $uri @index_php;}location @index_php {proxy_pass       http://index_php_upstream;proxy_set_header Host $host;}location /wp-admin {index index.php;}location ~* \.php$ {try_files        $uri =404;proxy_pass       http://direct_php_upstream;proxy_set_header Host $host;}
}

编辑完成以后开启 Nginx 即可访问:

nginx -t && nginx -s reload

个人看法

Nginx 作为一段时间内流行的 Web Server,被广为使用,这次推出新的 Web 架构设想,以及 Unit 这一自我革命性质的产品,瞄准的就是未来可能十年的 Web 部署方案,实际体验下来,还是有很多问题的,首先就是兼容性问题,尝试了多款 Web 程序,Unit 对于单入口程序的兼容还算不错,但是对于复杂的多入口程序目前存在或多或少的兼容性问题;性能方面,对于 PHP 的性能相比 PHP-FPM 并没有很大提高,反而由于没有 Cache 支持,实际使用时表现远不如传统部署方案。

在 Unit 推崇的自动化部署方面,Unit 推行的 Api 配置方式为 GUI 动态部署创造了基础,多版本、多语言兼容更是为其未来创造了无限可能。然而,Nginx + Unit 的组合与传统的 静态+反代 模式并没有本质的区别,在自动化应用部署领域,Unit 落后于 Docker Kubernetes 不是一点点。当然总的来说,我对 Unit 的前景还是充满信心的,也会不断关注其开发进程。

转载
感谢作者:DCC的小窝
原文链接:https://dcc.cat/lemur.html

转载于:https://blog.51cto.com/51reboot/2104488

Nginx Unit 与 LEMUR 新架构相关推荐

  1. Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了

    作者 | 夕颜 头图 | 下载于ICphoto 出品 | AI 科技大本营(ID:rgznai100) 2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(To ...

  2. Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!

    2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消 ...

  3. 胶囊网络架构_了解胶囊网络-AI的诱人新架构

    胶囊网络架构 by Nick Bourdakos 由Nick Bourdakos 了解胶囊网络-AI的诱人新架构 (Understanding Capsule Networks - AI's Allu ...

  4. Nginx网站服务与LNMP架构部署(详解)

    Nginx网站服务与LNMP架构部署 1.Nginx服务基础 2.编译安装Ngiax 3.Nginx的运行控制 4.配置文件nginx.conf 5.Nginx虚拟主机 6.LNMP架构部署 1.源码 ...

  5. 华为又开始放大招了?CV新架构:VanillaNet: the Power of Minimalism in Deep Learning 论文阅读笔记

    华为又开始放大招了?CV新架构:VanillaNet: the Power of Minimalism in Deep Learning 论文阅读笔记 一.Abstract 二.引言 三.单个 Van ...

  6. 细鹏系列裸金属服务器多核算力,鲲鹏凌云,开启多元计算新架构_外发版(40页)-原创力文档...

    鲲鹏凌云,开启多元计算新架构 华为云鲲鹏云服务整体介绍及实践 华为云鲲鹏凌云生态总监 白雁 这是最好的时代,这是最坏的时代 应用移动化和数据多样性,呼唤新的算力 移动智能终端逐渐取代传统PC 世界正在 ...

  7. 百度云「升级战」:王海峰站台,新架构全面AI化,AI和知识中台登场

    5月18日,"ABC SUMMIT 2020百度夏季云智峰会"在线上召开.刚刚经历了人事变动的百度云迎来重磅升级,大会以"百度智能云加速产业智能化"为主题,百度 ...

  8. 超越最新无监督域自适应方法,研究人员提轻量CNN新架构OSNet

    作者 | Kaiyang Zhou, Xiatian Zhu, Yongxin Yang, Andrea Cavallaro, and Tao Xiang 译者 | TroyChang 编辑 | Ja ...

  9. nginx+keepalived高可用web架构

    nginx+keepalived高可用web架构 1.下载所需的软件包 (1).keepalived软件包keepalived-1.1.20.tar.gz (2).nginx软件包nginx-1.1. ...

  10. 张亚勤:新范式、新架构和新模态突破传统算力,推动物理世界走向数字化

    本文转自联想创投 近日,在联想创投2020 CEO年会上,清华大学讲席教授.智能产业研究院院长.美国艺术与科学院院士.百度前总裁张亚勤先生带来了<未来科技趋势展望>. 张亚勤表示,数字化的 ...

最新文章

  1. Ios应用网络安全之https
  2. web实现远程桌面:Apache Guacamole
  3. mvn deploy 推送到私有仓库,注意当前日期
  4. mysql 连接数测试_mysql最大连接数试验
  5. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
  6. Mysql 基础语法
  7. 考软件测试初学者眼影,Summer 大讲堂第一期:如何制作出版级的高分辨率图表?...
  8. 学术论文-结果描述常用表达
  9. 施耐德PLC Unity Pro xl 软件使用三
  10. c语言第三章程序设计实训
  11. Payoneer(P卡)怎么免费申请Joom账号?
  12. web erp注意问题
  13. 常见的PS安装错误代码与解决方法
  14. R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
  15. 百度被黑了,百度被真相曝光
  16. “双减”后的高途分析
  17. 程序员能干到50岁?
  18. 发现一个兼具图像处理、存储和加速的wordpress插件
  19. “五胡乱华”是两汉和曹魏埋下的隐患,为何后世只骂司马家?
  20. vant 解决tab切换插件标题样式自定义

热门文章

  1. 知识图谱研讨实录08丨肖仰华教授带你读懂知识图谱的质量控制
  2. 每周荐书:Swift、Java、React(评论送书)
  3. Docker教程:docker的概念及安装
  4. 11kw星三角启动延时几秒_带有延时启动的星角接启动方法
  5. unity 源码_Unity-DataFlowGraph 读源码例子Tour笔记 14
  6. php mysql 容器_docker下搭建MySQL+php-fpm+nginx容器环境
  7. node子进程打不开php服务,mongoose,node.js_node启动服务器以后显示正常运行浏览器却打不开。,mongoose,node.js - phpStudy...
  8. 力扣-148 排序链表
  9. HarmonyOS 组件篇
  10. Android SQLite实现query顺序、倒叙查询