快速部署PHP Web环境(docker nginx php mysql redis)
注:此项目已升级成 通用 docker 项目自动化部署脚本工具
先看最终效果,如下:
使用方式
debian/ubuntu/deepin:
sudo wget -O /tmp/src.tar.gz https://gitee.com/gogls/php-web-environment/raw/master/src.tar.gz&&tar -C /tmp -zxvf /tmp/src.tar.gz&&cd /tmp/src/&&sudo bash /tmp/src/start.sh
它是什么?
它是 docker 容器虚拟化技术。总共只有几KB大小的描述文件,文件里定义了要安装什么、配置什么,一执行就全自动处理好了。
它有什么用?
- 解决新来同事搭环境搭半天的问题
- 解决重装系统后要搭环境浪费时间的问题
- 环境一致,快速部署
进入详情讲解(此脚本针对debian系操作系统,如deepin、ubuntu)
如图,四个文件:
- 准备文件 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
- 准备文件 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.
- 准备文件 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 环境
进入当前目录,执行
./start.sh
,就会看到文章开头的图片效果。此教程,需要先安装docker 和
docker-compose,可自行安装,也可在这里安装,输入对应命令即可。输入:
build php env
,可能会提示输入密码,这是当前 linux 系统管理员的密码。
就这么简单,搞定了。看到如上几个 started 表示 PHP Web 环境构建成功并启动了,mysql启动了,php启动了,redis启动了,nginx启动了。连接的时候,用宿主机IP也行、用容器名也行。输入:
docker ps
查看这四个容器是否启动了,名称都是 common_1.0_xx
新增一个网站
设置 host 域名,或去域名商解析一个域名。请自行完成。我这里配置了一个 sdt.com
配置 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 会自动去这个目录里读取所有配置文件。
- 打开网站看看
附上下载地址:https://gitee.com/gogls/php-web-environment.git
快速部署PHP Web环境(docker nginx php mysql redis)相关推荐
- 如何在云服务器使用docker快速部署jupyter web服务器(Nginx+docker+jupyter+tensorflow)
如何在云服务器部署jupyter web服务器 jack lee 邮箱:291148484@163.com 如有错误可以法邮件给我纠正,希望本文对你有所帮助. 导读:如果你用过百度人工只能的在线提交代 ...
- Odoo快速部署 附Odoo的Docker启动脚本
Odoo快速部署 附Odoo的Docker启动脚本 前置条件 请先安装好docker和dokcer-compose docker-compose.yml version: '2' services:w ...
- 腾讯云服务器镜像部署 Java Web 环境
操作场景 腾讯云市场中提供了例如包含多种操作系统.热门软件等不同类型的镜像.您可选择这些镜像,在腾讯云云服务器(CVM)上快速部署具有较高稳定性和安全性的软件环境以及个人网站. 本文档介绍在 Linu ...
- 云服务器体验:制作个人简历、部署Java web环境时的思路以及遇到的问题
制作个人简历 准备简历的项目文件 下载一份响应式的HTML简历模板,并利用Visual Studio Code编辑器修改HTML项目文件的源代码,根据提示做出相应修改,修改完后进行保存. 建立连接上传 ...
- Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...
Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...
- monit mysql_monit配置监控启动nginx php mysql redis mongodb 服务器
-----nginx php mysql redis mongodb 配置 完美OK------– # nginx check process nginx withpidfile /usr/local ...
- docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Images...
环境 测试部署主机IP:192.168.1.1 Jenkins主机IP:192.168.1.2 Harbor主机IP:192.168.1.3 Gitlab主机IP:192.168.0.10 系统信息: ...
- Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)
概述 使用docker搭建一个php.redis.mysql.nginx的常用实例,基础好的同学可直接跳过前面的基础讲解,直接开始实战. 基础知识 镜像操作 1.查看docker版本 docker-c ...
- 将打包好的VUE文件部署到Web容器(Nginx)中,解决接口调用跨域问题
目录 背景 下载并解压Nginx 部署dist到Nginx中 启动Nginx 背景 VUE项目开发(如何搭建VUE开发环境请参见:如何搭建VUE开发环境_chanbzou1981的博客-CSDN博客) ...
最新文章
- 【ELK】ELK集群搭建(ElasticSearch Logstash Kinaba)
- deepin--解决网易云音乐个性推荐无法加载
- java操作poi如何更改excel中的数据
- USB描述符【整理】
- 视频监控系统中的平台服务器,【视频监控主机 网络视频集中管理平台服务器】 - 太平洋安防网...
- useMemo与useCallback
- 二分答案——小车问题(洛谷 P1258)
- Hadoop1——创建虚拟机
- H3C IGP与EGP
- 一位大牛架构师的经验总结
- python collections模块(队列)
- 思维导图的了解和使用
- Win 10 UEFI + Ubuntu 18.04 UEFI 双系统 (by quqi99)
- 我对网页设计的一点见解!
- office2010安装过程出错(解决方法整合)
- 计算机软件时间,时间校对软件
- 【fhqtreap】航空管制
- 字符串 转义 反转义
- vmospro启动黑屏_在Mac上从睡眠唤醒中修复黑屏 | MOS86
- java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
热门文章
- C#实现微信自动回复机器人和微信支付
- rGPCCON=(rGPCCON|0x00000005)的计算结果
- 工程材料学习3——第二章 金属材料组织和性能的控制(2.1 纯金属的结晶 2.2 合金的结晶)
- ubuntu下的3D桌面.compiz
- SQLyog:Error Code : 1583 Incorrect parameters in the call to native function ‘concat‘
- pygame鼠标进行拖拽移动图片、缩放、以及按钮响应 案例
- APP跟网址最常见的攻击和防守
- Rxjava源码初理解(一)
- 【论文阅读】Improving Table Structure Recognition with Visual-Alignment Sequential Coordinate Modeling
- 深入浅出内存管理-memblock