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

news2025/1/15 6:43:00

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

它是什么?

它是 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 #从这个文件名里构建php
   ports:
     - "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.23
   ports:
     - "80:80"
   container_name: common_1.0_nginx
   restart: always
   volumes:
     - "/opt/wwwroot/www:/www"
     - "/opt/wwwroot/nginx/conf.d:/etc/nginx/conf.d"
     - "/opt/wwwroot/nginx/logs:/etc/nginx/logs"


 redis:
   image: redis:7.0
   ports:
     - "6179:6379"
   container_name: common_1.0_redis
   restart: always


 mysql:
   image: mysql:8.0
   ports:
     - "3106:3306"
   container_name: common_1.0_mysql
   restart: always
   volumes:
     - "/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" ]
	then
		if [ "$install_type" == "install docker" ]
		then
			sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
		elif [ "$install_type" == "remove docker" ]
		then
			sudo apt-get purge docker-ce
			sudo rm -rf /var/lib/docker
		elif [ "$install_type" == "install compose" ]
		then
			sudo curl -L "https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
			sudo chmod +x /usr/local/bin/docker-compose
			sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
			docker-compose version
		elif [ "$install_type" == "remove compose" ]
		then
			sudo /usr/local/bin/docker-compose
		elif [ "$install_type" == "build php env" ]
		then
			sudo docker-compose up -d

		elif [ "$install_type" == "docker ps" ]
		then
			sudo docker ps

		elif [ "$install_type" == "docker images" ]
		then
			sudo docker images
		else
			echo "请输入正确的值"
		fi
	else
		echo "请输入一个值"
	fi		
}

# 死循环,这样可以多次处理
while [ true ]
do
	read -p "请输入一个值:" install_type
	if [ "$install_type" ] && [ "$install_type" == "exit" ]
	then
		break
	fi
	go $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.0
    location / {
        #访问路径的文件不存在则重写URL转交给ThinkPHP处理
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            break;
        }
    }
    
     # 配置url,处理及转发PHP请求
    location ~ \.php(/|$) {
    # 可以直接写容器名,也可以直接写宿主机的IP
	fastcgi_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.coloradmin.cn/o/110092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

矽昌-- Station 模式支持

Station 模式支持 1. 修改配置 ​ 在/etc/config/wireless中增加一段即可,实例如下: config wifi-ifaceoption key 12345678option ifname sfi0option network wwanoption encryption psk2ccmpoption device radio0option mode staoption bssid A8:5A:…

玩以太坊链上项目的必备技能(修改器 [modifier]-Solidity之旅十五)

修改器(modifier) 在讲修改器(modifier)之前,我们使用前面几篇文章所学到的知识来实现一个简单的 token 类合约。 // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0;contract InheritanceModifierExampl…

Python获取与处理文件路径/目录路径

这里写目录标题文件目录结构说明一、路径获取1.1 获取当前文件的绝对路径1.2.1 获取当前文件的所在目录1.2.2 获取当前文件的所在目录的上一级目录1.3 获取当前文件名1.4 获取当前文件对于基准路径的相对路径二、路径判断2.1 判断路径是否存在2.2 判断路径是否为绝对路径2.3 判…

【Python】matplotlib.axes.Axes.pie()实例讲解

目录:matplotlib.axes.Axes.pie函数实力讲解一、前言二、matplotlib.axes.Axes.pie()函数三、代码示例四、get_cmap函数一、前言 本文章向大家介绍Python matplotlib.axes.Axes.pie()实例讲解,主要分析其语法、参数、返回值和注意事项,并结合…

WorkPlus助力中交四航局打造数字化管理新模式,释放企业生产力

企业简介 中交四航局正式创立于1951年,集团主要从事海内外港口、公路、桥梁、铁路、市政工程、水利工程等大型基础设施建设,以及相关的投资、勘察设计、科研、工业造船和房地产业务。始终致力于“让世界更畅通,让城市更宜居,让生…

logger记录在控制台显示,但是在日志输出文件中不显示问题排查

场景: 代码中存在使用logger.info输出数据到指定的文件中,然后用logstash去收集需要的数据插入到es中。 现象: logger.info输出的记录打断点在控制台上显示,但是在配置的日志输出文件中却找不到日志输出的内容。 log4j配置 如下…

ELK搜索学习笔记--Day1

ELK搜索学习笔记–Day1 1. 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch(简称es)、Logstash、Kibana 三个开源软件的组成的一个整体。这三个软件合成ELK。是用于数据抽取(Logstash)、搜索分析&#xff08…

Freemodbus启动流程分析

近项目有用到modbus协议,于是在网上找了些资料成功将freemodbus移植到m3,由于移植过程较简单,网上教程也很多,这里我们就不再赘述.我用到的freemodbus版本是V1.5,下面附上新的源码下载地址:http://www.freemodbus.org/index.php?idx5 下面开始分析下freemodbus得启动流程,老规…

Android设计模式详解之解释器模式

前言 解释器模式是一种使用较少的行为型模式; 提供了一种解释语言的语法或表达式的方式,通过该接口解释一个特定的上下文。 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表…

MySQL面试常问问题(高可用/性能 + 运维) —— 赶快收藏

1.数据库读写分离了解吗? 读写分离的基本原理是将数据库读写操作分散到不同的节点上,下面是基本架构图: 读写分离 读写分离的基本实现是: 数据库服务器搭建主从集群,一主一从、一主多从都可以。 数据库主机负责读写操作&#x…

洛谷——P1573 栈的操作

文章目录栈的操作题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示AC代码栈的操作 题目描述 现在有四个栈,其中前三个为空,第四个栈从栈顶到栈底分别为 1,2,3,⋯,n1,2,3,\cdots ,n1,2,3,⋯,n。每一个栈只支持一种操作:弹出并压入…

当云原生成为一种显学,对象存储和数据湖如何顺势而为

前言: 已经成为数字化时代显学的云原生并非单项技术,而是一种重塑了软件开发和和业务运行应用的设计思想,是一套技术体系和方法论。云原生“Cloud Native”的Cloud 是指云平台,Native则表示应用程序从设计之初即使用云环境、天生…

MyBatis学习 | SQL映射文件

文章目录一、简介二、insert、update和delete标签2.1 关于增删改2.2 获取自增主键的值三、参数处理3.1 获取不同形式的参数3.1.1 获取单个参数3.1.2 获取多个参数3.2 #{Key}3.2.1 #{}🆚${}3.2.2 #{}中设置参数规则四、select标签4.1 select标签的主要属性4.2 关于返…

即时通讯音视频开发视频编解码理论

从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据信息数据冗余。数据冗余有许多种,如空间冗余、时间冗余、视觉冗余、统计冗余等。将图像作为一个信源,视频压缩编码的实质是减少图像中的冗余。 视频为何…

2步就能实现给视频去色并裁剪画面

看到很多小伙伴还不知道大量的视频怎么实现批量的进行去色处理,并且裁剪视频画面大小的方法,小编今天就来教大家一个可以快速操作的简单方法,感兴趣的朋友们快进来瞧瞧吧! 首先我们来看看用这个方法操作剪辑出来的效果&#xff0c…

预焙阳极行业现状:供给格局边际将改善 “双碳”下优质产品迎新机遇

预焙阳极属于碳素制品,是电解铝生产过程中不可缺少的大宗原材料。从用途来看,预焙阳极仅用作电解铝过程中电解槽的阳极材料,既作为导体,又参与电化学反应而产生消耗,预焙阳极的品质会对原铝的质量产生重要影响。 一、预…

免费PDF阅读器有哪些? 14款强烈推荐的PDF阅读器!

即使经过这么多年,PDF 仍然是最受欢迎的阅读格式之一。从阅读电子书或填写在线表格到创建用户手册,PF 格式仍然是最受欢迎的阅读方式。虽然现在的网络浏览器已经配备了基本的 PDF 阅读功能,但您仍然需要单独下载 PDF 阅读器才能实现填写表格、…

「另类」图达通,还缺一个二次进化

作者 | 张祥威 编辑 | 于婷中国的激光雷达公司早期都很幸运,禾赛、速腾聚创和图达通三家,分别遇到了自己的伯乐——蔚小理。 比较特别的是图达通,它与蔚来的合作之紧密,程度远超另外两家,堪称命中贵人。 根据图达通联合…

p5.js 光速入门

本文简介 点赞 关注 收藏 学会了 本文的目标是和各位工友一起有序的快速上手 p5.js ,会讲解 p5.js 的基础用法。 本文会涉及到的内容包括: 项目搭建p5.js 基础2D图形文字图形样式设置图片事件(交互相关的)基础动画 其中还会…

Ubuntu四轮小车仿真教程gazebo

主要实现内容为在ROS环境下基于Gazebo仿真软件创建一个四轮小车,并实现小车的控制,如下图所示,接下来教程将会进行详细解释。 1.创建工作空间 创建ROS工作空间,命名为SmartCar,并在该工作空间中创建src文件夹。 mkdi…