服务器配置教案 Help

10-2 LNMP技术栈搭建动态网站

===

介绍

  • 静态网站:网页中只有html、js、css,浏览器加载后信息不会发生变化,所以是"静态"的。

  • 动态网站:随着互联网的发展,人们对网站有更多的需求,注册、登录、上传文件、实时的图表变化,是"动态"的,依赖数据库,网站内容为html加数据库查询出的内容。

LNMP: 指PHP开发技术栈。

  • L, Linux操作系统

  • N, Nginx网站服务

  • M, MySQL数据库

  • P, PHP编程语言

现状:
其它语言也有类似技术栈,Java+OracleDB+Tomcat+Apache,Python+PostgreSQL+Unicorn+Nginx。 只是有人对LNMP技术栈优化,可以一键安装,自带图形化界面管理程序和数据库图形化管理界面,自带项目初始化、数据库初始化等,相比单独安装体验更佳。
在2015年左右移动互联网兴起和小型企业开始计算机信息化后,有许多企业官网的需求,PHP专为Web开发而生,全家桶安装快、开发快而流行,被人调侃"PHP是最好的编程语言"。

而在后面几年,移动互联网盛行、AI开始流行、代表框架WordPress向js迁移,LNMP专为Web网站开发而生,这种捆绑模式起网站很快,但如果写个爬虫、写个大数据分析脚本、技术栈过于固定反而成为限制。 目前,PHP已不再流行,而Linux、MySQL、Nginx都仍然流行。但本课的LNMP部署依然具有代表性。

WordPress: 一个成熟的博客、内容管理、网站二次开发项目,含有众多插件,是PHP生态的代表性框架之一。 WordPress官方部署文档

单独安装每个软件

(跳过。步骤复杂,耗时长,仅介绍,这块写了一小部分。) 步骤见课本和网上教程。

  • 安装php、php-rpm(php的cgi通用网管实现软件,用来跟nginx等web服务器通讯)、php-mysql(php与mysql数据库见通信),涉及到先编译再安装。

  • mysql,涉及到初始化、为项目创建库

  • wordpress代码,涉及到修改配置文件使项目与mysql通讯

  • nginx,涉及到修改配置,将请求反代给php-rpm处理

优点:最原始最本质的安装方式,易于排查错误,灵活性最高。
缺点:步骤复杂,耗时长,容易出错,软件版本不匹配也会出问题例如新版wordpress要求php7.x以上。

安装php-rpm

PHP:一种解释性编程语言 cgi协议:(Common Gateway Interface)通用网关接口。因为解释性语言有好几种java python等,为了让不同编程语言与不同的web服务器(apache httpd、Nginx之类)之间交互的Web服务器识别,规定了通用通信协议cgi,fast-cgi是其继任者。 php-rpm:实现了php的cgi协议的软件。可以类比java生态的tomcat。

  1. (跳过) PHP官网下载 ,官网下载的是源代码,需要选择插件和编译,麻烦。yum安装推荐但机房在线下载慢。

  2. 老师提供的安装包复制到虚拟机中,包含php和php-rpm。

  3. 解压缩和安装

  4. 验证 systemctl status php-fpm.service 看到激活状态并且几个worker等待监听。 netstat -al | grep php

安装MySQL

安装Nginx

安装WordPress代码

浏览器测试

LNMP一键安装

(跳过。步骤复杂,耗时长,仍有可能失败,仅介绍。) lnmp.org官网 有人写脚本将LNMP生态绑定,自动判断操作系统需要安装的软件包和依赖,自动化安装过程,自动修改配置文件,加入常用工具如mysql图形化客户端,最后暴露出网站接口,安装完即可访问,大大简化部署难度。
但php和mysql仍然需要编译,很久,或是从网上找系统对应的二进制包。经过尝试,耗时达几十分钟且仍部分软件仍安装错误。

Docker安装

动态网站,前后端两种编程语言+数据库+web容器+web反代服务器,编译,端口相互对应,上面的方法第一次得折腾两天才能搞好。
这种时候Docker的优势就发挥出来了。

docker-compose: 容器编排工具,一个前后端分离的网站项目有前端nodejs/vue/react,后端java/python/php,数据库mysql/postgresql/oracle,web服务器apache/nginx。 如果要启动多个容器并让容器间相互关联,那么需要在docker-compose.yml配置文件中定义,再由docker-compose up命令启动。

wordpress docker hub主页
WordPress官方docker镜像介绍页面中发现了一个docker-compose.yml配置文件,这个配置文件中定义了两个docker容器, 并且第一个容器wordpress连接第二个容器mysql,我们就不需要一一安装配置软件,也不用操心端口配置,一切都安排好了。当然这个只是测试用,生产用的还要再套个nginx。

  1. 安装 docker-compose 工具
    桌面版docker自带这个命令行工具,非桌面版的需要独立安装。
    老师提供了docker-compose-for-linux-x64 (实际名字可能与文档略有差异)可执行二进制,宿主机中复制,虚拟机图形文件管理器中粘贴,放入到/bin或 /usr/bin 目录下,然后重命名为更加短的名字docker-compose

    10 2dockercompose
    操作完成后验证,能看到帮助信息为正确。

    docker-compose -h
  2. 创建一个wordpress的 docker-compose.yml 配置文件。
    yml是一种缩紧格式的配置文件后缀,配置文件名docker-compose.yml不能随意改动(如果改名还需要在命令中指定配置文件名),docker-compose命令会自动发现当前文件夹的配置文件。
    从Wordpress官方的DockerHub主页上发现一个配置文件如下,在本地创建这个配置文件。

    touch docker-compose.yml

    配置文件不是linux基础命令,是docker自己的语法,看懂即可。文字较多简易图形化工具打开然后复制内容过去。

    version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql volumes: wordpress: db:
    10 2docker compose
  3. docker-compose启动容器编排

    docker-compose up

    等待结束后docker ps可以查看运行中的两个容器。

  4. 客户端浏览器测试
    虚拟机火狐浏览器访问http://127.0.0.1:8080
    宿主机浏览器访问http://你的服务器IP:8080

    10 2

(课外)Docker Desktop桌面版

桌面版更直观,几乎所有命令都可以可视化配置。

10 2dockerdesktop wordpress

Last modified: 25 十一月 2024