快速部署PHP Web环境(nginx php mysql redis)

news/2024/11/24 23:10:53/

先看最终效果,如下:
在这里插入图片描述

它是什么?

它是 docker 容器虚拟化技术。总共只有几KB大小的描述文件,文件里定义了要安装什么、配置什么,一执行就全自动处理好了。

它有什么用?

  1. 解决新来同事搭环境搭半天的问题
  2. 解决重装系统后要搭环境浪费时间的问题
  3. 环境一致,快速部署

进入详情讲解(此脚本针对debian系操作系统,如deepin、ubuntu)

如图,四个文件:
在这里插入图片描述

  1. 准备文件 Dockerfile-php7.4,内容如下。这是基于 docker 官方的 7.4版本的PHP ,并且定义了要安装 MySQL 扩展、GD 扩展、Redis 扩展,如果有需要,你可以自行增减。
FROM php:7.4-fpm# 系统更新
RUN apt-get update \
# 安装sql扩展
&& docker-php-ext-install pdo_mysql \ 
# 安装图形处理扩展
&& apt install libjpeg62-turbo-dev libfreetype6-dev -y \
&& docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \ 
# 安装redis扩展
&& pecl install -o -f redis \
# 删除临时文件
&& rm -rf /tmp/pear \
# 启用redis扩展
&& docker-php-ext-enable redis
  1. 准备文件 docker-compose.yml,内容如下。这是一个工程描述文件,里面描述了要安装什么、配置什么。
version: '3'
services:php:build:context: ./dockerfile: Dockerfile-php7.4 #从这个文件名里构建phpports:- "9100:9000"container_name: common_1.0_php #容器名volumes:- "/opt/wwwroot/www:/www" #把宿主机的 /opt/wwwroot/www 目录挂载到容器内的 /www 目录restart: always #自动启动nginx:image: nginx:1.23 #基于官方的镜像nginx:1.23ports:- "80:80"container_name: common_1.0_nginxrestart: alwaysvolumes:- "/opt/wwwroot/www:/www"- "/opt/wwwroot/nginx/conf.d:/etc/nginx/conf.d"- "/opt/wwwroot/nginx/logs:/etc/nginx/logs"redis:image: redis:7.0ports:- "6179:6379"container_name: common_1.0_redisrestart: alwaysmysql:image: mysql:8.0ports:- "3106:3306"container_name: common_1.0_mysqlrestart: alwaysvolumes:- "/opt/wwwroot/mysql:/var/lib/mysql"environment:MYSQL_ROOT_PASSWORD: 123qwe.
  1. 准备文件 start.sh ,这是一个自动化处理脚本,内容如下:
#!/bin/bash
echo "请问,您想要做什么?这里是php通用开发环境。输入 exit 退出。"
echo "  安装docker:install docker"
echo "  卸载docker:remove docker"
echo "  安装docker-compose:install compose"
echo "  卸载docker-compose:remove compose"
echo "  生成PHP环境:build php env"
echo "  查看容器列表:docker ps"
echo "  查看镜像列表:docker images"echo ""function go(){if [ "$install_type" ]thenif [ "$install_type" == "install docker" ]thensudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunelif [ "$install_type" == "remove docker" ]thensudo apt-get purge docker-cesudo rm -rf /var/lib/dockerelif [ "$install_type" == "install compose" ]thensudo curl -L "https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose versionelif [ "$install_type" == "remove compose" ]thensudo /usr/local/bin/docker-composeelif [ "$install_type" == "build php env" ]thensudo docker-compose up -delif [ "$install_type" == "docker ps" ]thensudo docker pselif [ "$install_type" == "docker images" ]thensudo docker imageselseecho "请输入正确的值"fielseecho "请输入一个值"fi		
}# 死循环,这样可以多次处理
while [ true ]
doread -p "请输入一个值:" install_typeif [ "$install_type" ] && [ "$install_type" == "exit" ]thenbreakfigo $install_type
done

搭建 PHP Web 环境

  1. 进入当前目录,执行 ./start.sh,就会看到文章开头的图片效果。此教程,需要先安装docker 和
    docker-compose,可自行安装,也可在这里安装,输入对应命令即可。

  2. 输入:build php env ,可能会提示输入密码,这是当前 linux 系统管理员的密码。
    在这里插入图片描述
    就这么简单,搞定了。看到如上几个 started 表示 PHP Web 环境构建成功并启动了,mysql启动了,php启动了,redis启动了,nginx启动了。连接的时候,用宿主机IP也行、用容器名也行。

  3. 输入:docker ps 查看这四个容器是否启动了,名称都是 common_1.0_xx
    在这里插入图片描述

新增一个网站

  1. 设置 host 域名,或去域名商解析一个域名。请自行完成。我这里配置了一个 sdt.com

  2. 配置 nginx ,在 /opt/wwwroot/nginx/conf.d 目录里,新建一个 sdt.com.conf 文件,内容如下:

# 服务端配置节点
server {# 监听端口。此端口不能被占用了listen       80;# 此站点的域名。直接在宿主机配置一个host域名,或者在阿里云等云服务商那里解析过来。server_name  sdt.com;# 此站点的入口目录,也就是php容器的目录。宿主机挂载到容器内的目录。root  /www/shangdiantuanfenxiao/public;# 入口目录里可识别的入口文件index index.html index.htm index.php;# 配置url。Thinkphp的伪静态设置。这个是fastadmin,用的是thinkphp5.0location / {#访问路径的文件不存在则重写URL转交给ThinkPHP处理if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;break;}}# 配置url,处理及转发PHP请求location ~ \.php(/|$) {# 可以直接写容器名,也可以直接写宿主机的IPfastcgi_pass   common_1.0_php:9000;fastcgi_index  index.php;fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;fastcgi_param  PATH_INFO  $fastcgi_path_info;fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;include        fastcgi_params;}# 目录会自动生成。access_log  /etc/nginx/logs/sdt.com.log;# 错误日志error_log  /etc/nginx/logs/sdt.com.error.log;
}

注意,新增一个网站,就在 /opt/wwwroot/nginx/conf.d 里增加一个配置文件即可,nginx 会自动去这个目录里读取所有配置文件。

  1. 打开网站看看
    在这里插入图片描述

附上下载地址:https://gitee.com/gogls/php-web-environment.git


http://www.ppmy.cn/news/6144.html

相关文章

概要设计说明书(GB8567——88)基于协同的在线表格forture-sheet

概要设计说明书 1引言 1.1编写目的 为了帮助用户更好的了解和使用本在线表格,提高用户与软件的亲和度。 用户手册描述配置和使用改在线表格,以及该软件使用过程中应该注意的一下问题。 1.2背景 说明: 本用户手册所描述的软件系统的名称…

Mycat2(一)简介、分库分表概念

文章目录mycat是什么;为什么要用;mycat的作用原理分库分表的意义数据库优化的层次:数据切分的方式,带来的问题和解决方案分库分表带来的问题mycat的特性与详细配置含义mycat2与mycat1.6区别mycat2映射模型多数据源解决方案mycat核…

数字三角形问题

数字三角形问题一、题目描述二、题目分析1、问题分析2、思路分析(1)状态转移方程状态表示状态转移(2)循环的设计三、代码实现一、题目描述 二、题目分析 1、问题分析 这道题给我们的第一眼感觉就是情况太多了,太复杂…

机器学习 | 逻辑回归

一.基本原理 面对一个分类问题,建立代价函数,通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。逻辑回归是一种分类方法,主要用于二分类问题,应用于研究某些事件发生的概率 二.优缺点 …

2021遥感应用组二等奖:基于长时序Landsat遥感影像的赣南脐橙时空变化分析

作品介绍 一、应用背景 自上世纪70年代开始种植脐橙以来,赣州大力实施“兴果富农”等战略,经过38年发展产业规模迅速壮大,目前赣州全市果业总面积263万亩,脐橙158万亩,产量超112万吨,成为种植面积世界第一、产量世界第三、全国最大的脐橙主产区,脐橙种植得到了大规模发…

2022下半年软考成绩公布后,这几件事你需要知道

2022下半年软考成绩公布,有人欢喜有人忧。考试就是一个竞技场,有赢就有输。整理心情之余,有些考后的注意事项还需要考生了解哦~ 01、软考合格标准 自2022年开始,软考的及格线实行固定标准:总分的60%,即为…

刷爆力扣之电话号码的字母组合

刷爆力扣之电话号码的字母组合 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题&…

【QGIS入门实战精品教程】3.4:QGIS创建GeoPackage地理数据库及数据入库案例详解

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。在QGIS中可以很方便的实现GeoPackage的创建与连接等操作。 一、QGIS创建GeoPackage 1. 创建数据库 QGIS创建GeoPackage的方法与ArcGIS中创建File GDB的类似,选择一个目标文件夹,…