(2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)

 前言

  1. 本系列最初的想法就是搭建一个多项目的环境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.
  2. 本文使用的PHP镜像为php:7.3.6-apache, 这里可以使用上一篇文章中生成好的镜像.
  3. LAMP或包含react或vue的前端项目, 本文就各写了一个, 可以按照实际需求, 自行添加多个容器, 但要保证一个容器启动一个项目.

项目规划

  1. 服务器环境为centos, 所有的项目均放置在/web目录.
  2. 使用nginx反向代理各项目, 并提供域名解析. 目录为/web/nginx
  3. react或vue的前端项目, 目录为/web/laoliu_pro
  4. php(LAMP)项目, 目录为/web/php_laoliu
  5. mysql, 目录为/web/mysql
  6. redis, 目录为/web/redis
  7. 部署两个域名, 分别是http://www.laoliu.pro对应laoliu_pro容器, http://php.laoliu.pro对应php_laoliu容器.

目录结构

web
|-- docker-compose.yaml					docker-composer的配置文件
|-- laoliu_pro							前端项目
|   |-- conf  							前端项目配置
|   |   `-- default.conf
|   `-- html  							前端项目文件
|       `-- index.html
|-- mysql
|   |-- conf  							mysql配置
|   |-- data  							mysql数据
|   |   |-- 223900885ed6.pid
|   |   |-- auto.cnf
|   |   |-- ca-key.pem
|   |   |-- ca.pem
|   |   |-- client-cert.pem
|   |   |-- client-key.pem
|   |   |-- ib_buffer_pool
|   |   |-- ibdata1
|   |   |-- ib_logfile0
|   |   |-- ib_logfile1
|   |   |-- ibtmp1
|   |   |-- mysql
|   |   |-- performance_schema
|   |   |-- private_key.pem
|   |   |-- public_key.pem
|   |   |-- server-cert.pem
|   |   |-- server-key.pem
|   |   `-- sys
|   `-- log  							mysql日志
|-- nginx
|   |-- certs 							nginx证书
|   |-- conf 							nginx配置
|   |   |-- laoliu_pro.conf
|   |   `-- php_laoliu.conf
|   `-- html 							nginx默认目录
|       `-- index.php
|-- php_laoliu							PHP项目
|   |-- conf							PHP项目配置
|   |   |-- php.ini						PHP.INI
|   |   `-- 000-default.conf			APACHE配置
|   |-- Dockerfile
|   |-- html                            PHP项目文件
|   |   `-- index.php
|   `-- log                             PHP项目日志
|       |-- access.log
|       |-- error.log
|       `-- other_vhosts_access.log
`-- redis|-- conf  							mysql配置|   `-- redis.conf`-- data  							mysql数据|-- backup.db`-- dump.rdb

docker-compose.yaml配置文件说明

如果有已经构建好的镜像, 可以使用image字段直接指定镜像.

version: '3'services:      nginx:restart: always# 镜像image: nginx:latest# 端口映射 <宿主机端口>:<容器端口>ports:- 80:80- 443:443# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# nginx证书目录- ./nginx/certs:/etc/nginx/certs:ro# nginx配置目录- ./nginx/conf:/etc/nginx/conf.d:ro# nginx默认站点- ./nginx/html:/html:ro# 容器名称container_name: nginx# 前端项目laoliu_pro:restart: always# 镜像image: nginx:latest# 挂载卷 <宿主机路径>:<容器路径>volumes:- /etc/localtime:/etc/localtime:ro# 前端项目目录- ./laoliu_pro/html:/app:rw# nginx配置目录- ./laoliu_pro/conf:/etc/nginx/conf.d:ro# 工作目录working_dir: /app# 容器名称container_name: laoliu_pro# PHP项目php_laoliu:restart: always# 镜像image: php:7.3.6-apache# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# 日志目录- ./php_laoliu/log:/var/log/apache2:rw # 项目文件目录- ./php_laoliu/html:/var/www/html:rw # apache配置- ./php_laoliu/conf/000-default.conf:/etc/apache2/sites-available/000-default.conf:ro# php.ini- ./php_laoliu/conf/php.ini:/usr/local/etc/php/php.ini# 容器名称container_name: php_laoliu# 服务名mysql:restart: always# mysql镜像, 可选5.7或8image: mysql:5.7environment:# root密码MYSQL_ROOT_PASSWORD: 1234@5678# 允许远程连接MYSQL_ROOT_HOST: '%'# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# 映射日志目录- ./mysql/log:/var/log/mysql# 映射配置目录- ./mysql/conf:/etc/mysql/mysql.conf.d:rw# 映射数据目录- ./mysql/data:/var/lib/mysql:rw# 容器名称container_name: mysql# 端口映射 <宿主机端口>:<容器端口>ports:- 3306:3306# 服务名redis:restart: always# redis镜像image: redis:5-alpine# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# 映射配置目录- ./redis/conf:/etc/redis:ro# 映射数据目录- ./redis/data:/data:rw# 容器名称container_name: redis# 端口映射 <宿主机端口>:<容器端口>ports:- 6379:6379hostname: redis# 在容器启动后执行的命令command: redis-server /etc/redis/redis.conf

Dockerfile说明(可选, 没有额外的要求可以直接使用php:7.3.6-apache镜像)

# 这里使用的是php:7.3.6-apache镜像
FROM php:7.3.6-apacheADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/# apache开启伪静态
RUN a2enmod rewrite# 安装扩展
RUN install-php-extensions gd \&& install-php-extensions iconv \&& install-php-extensions opcache \&& install-php-extensions zip \&& install-php-extensions pdo_mysql \&& install-php-extensions bcmath pcntl \&& install-php-extensions sockets \&& install-php-extensions sysvmsg \&& install-php-extensions mysqli \&& install-php-extensions redis \&& install-php-extensions gettext \&& install-php-extensions intl \&& install-php-extensions mcrypt \&& install-php-extensions mysql \&& install-php-extensions shmop \&& install-php-extensions soap \&& install-php-extensions xmlrpc

构建镜像

# 构建镜像
docker build -t laoliu_pro/php736_apache:v5 /web/image

启动容器

# 启动容器
docker-compose up -d

nginx反向代理

php.laoliu.pro

server {listen 80;server_name php.laoliu.pro;location / {proxy_pass http://php_laoliu;proxy_set_header Host $host;proxy_http_version 1.1;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";}
}

www.laoliu.pro

server {listen 80;server_name www.laoliu.pro;location / {proxy_pass http://laoliu_pro;proxy_set_header Host $host;proxy_http_version 1.1;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";}
}

PHP项目配置

apache配置文件

文件路径: /web/laoliu_pro/conf/000-default.conf

<VirtualHost *:80>ServerName laoliu.proServerAlias laoliu.proDocumentRoot /var/www/html/public<Directory /var/www/html/public>DirectoryIndex index.php index.html index.htmOptions Indexes FollowSymLinksAllowOverride AllOrder allow,denyallow from allRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

php.ini

文件路径: /web/laoliu_pro/conf/php.ini

如果需要修改运行内存, 上传设置, 超时时间等, 则需要补充/web/laoliu_pro/conf/php.ini文件. 若只是使用默认设置, 则可以在docker-compose.yaml中去掉php.ini的映射.

前端项目配置

文件路径: /web/laoliu_pro/conf/default.conf

server {listen 80 default;server_name laoliu.pro0;root /app;try_files $uri $uri/index.html /index.html;index index.html;location /assets/ {etag on;}
}

项目部署

PHP项目直接部署到/web/php_laoliu/html中即可. 记得修改数据库配置文件

前端项目直接部署到/web/laoliu_pro/html中即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44211.shtml

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

相关文章

LLM 研究方向(一): LLM Prompts--p-tuning、LoRA

目录 1. prompt-tuning background 2. Prompt Tuning 模型介绍 2.1 2021 prefix-tuning 2.2 2021 P-tuning v1 2.3 2021 Parameter-efficient prompt tuning (PET) 2.4 2022 P-tuning v2 2.5 2019 Adapter ​2.6 2021 LoRA (Low-Rank Adaptation) 2.7 2024 DoRA (…

详解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(区间DP经典题)

题目 思路 考虑区间DP。 设dp[i][j]为从i到j这段区间被修正为回文串的最小花费 c[cc][1]为添加字符cc的花费 c[cc][2]为删去字符cc的花费 s为题目给出的字符串。 用[i 1,j]区间转移&#xff1a;这种转移相当于在[i1,j]区间的左边加入一个字符&#xff0c;让[i,j]变为回文的方…

SQL 游标

关系数据库中的操作会对整个行集起作用。 例如&#xff0c;由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行。 这种由语句返回的完整行集称为结果集。 应用程序&#xff0c;特别是交互式联机应用程序&#xff0c;并不总能将整个结果集作为一个单元来有效地…

安装Go语言常用工具

好的&#xff0c;这里是常用的Go工具&#xff0c;包括下载地址、在线安装指令和离线安装步骤。 1. gopls (Go language server) 功能: 提供代码补全、跳转定义、文档提示等IDE功能。 下载地址: golang.org/x/tools/gopls 在线安装命令 : sh 复制代码 go install golang.org/…

云仓适合什么商家?

1、电商平台和网店&#xff1a; 对于拥有大量在线订单但没有自建仓储和物流能力的小型和中型电商企业&#xff0c;云仓可以在成本和效率上提供显著优势&#xff0c;帮助快速处理订单并缩短配送时间。 —————————————————————————————————— …

根据关键词query获取google_img(api方式)

文章目录 说明代码第一部分&#xff1a;链接保存为Json第二部分&#xff1a;链接转换为img 说明 根据关键词query获取google_img USERNAME “xxx” PASSWORD “xxx” 官网申请。 代码 首先获取图片链接&#xff0c;保存为json之后下载。 第一部分&#xff1a;链接保存为…

.net 8 使用 quic 协议通讯

debian环境安装 quic支持 # 1. 添加unstable仓库&#xff08;如果您使用的是Debian的不稳定分支&#xff09; sudo apt install apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/microsoft.gpg https://packages.microsoft.com/keys/microsoft.asc …

【独家揭秘】视频号矩阵系统火爆上线,一键式多平台管理,你的内容营销神器!

在信息爆炸的时代&#xff0c;内容创作者们面临着前所未有的挑战与机遇。如何让自己的内容在众多平台中脱颖而出&#xff0c;快速传播并吸引大量观众&#xff0c;成为了每个创作者关注的焦点。近日&#xff0c;一款名为“迅狐视频号矩阵系统”的神器震撼来袭&#xff0c;它以其…

UV胶,它是否有毒?如同那些隐藏在黑暗中的危险之物?

UV胶&#xff0c;它是否有毒&#xff1f;如同那些隐藏在黑暗中的危险之物&#xff1f; 关于uv胶的毒性问题&#xff0c;或许我们可以这样深入探讨。UV胶&#xff0c;如同一位戴着神秘面纱的访客&#xff0c;在我们的生活中悄然出现&#xff0c;却带着诸多疑问。那么&#xff0…

二维码生成需知:名片二维码尺寸多少合适?电子名片二维码制作方法?

随着数字化时代的到来&#xff0c;二维码在各个领域的应用越来越广泛&#xff0c;名片作为商业交流的重要工具之一&#xff0c;也开始逐渐融入二维码的元素。通过在名片上添加二维码&#xff0c;我们可以轻松实现信息的快速传递和分享。然而&#xff0c;名片二维码的尺寸选择成…

Monorepo仓库管理策略之 Lerna

这里写目录标题 前言&#xff1a;一、简介二、新建项目使用安装生成结构 三、复用现有项目执行命令查看包 四、配置package相互引用导入现有的包 五、发布包确定项目版本发布项目添加项目到到git发布包到NPM包发布出错解决方案 五、实例代码 前言&#xff1a; 将大型代码仓库分…

Python 与扣子 API的链接

当 Python 与各种 API 进行链接时&#xff0c;更是能碰撞出无数精彩的火花&#xff0c;为我们的开发工作带来极大的便利和创新。今天&#xff0c;咱们就来聊聊 Python 与扣子 API 的链接那些事儿。 扣子 API 作为一种新兴的技术接口&#xff0c;为我们提供了丰富的数据和功能。…

文心一言的流式接口数据进行处理 增加属性

需求&#xff1a;需要对文心一言的流式接口数据进行处理 增加属性 return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http…

python调用串口收发数据

1、确认串口信息 2、安装pyserial库 打开终端或命令行&#xff0c;敲入这行命令&#xff1a;pip install pyserial 3、python编程 import serial def main(): #创建串口对象 ser serial.Serial(COM4, 9600, timeout1) if not ser.isOpen(): print("串…

飞睿智能6公里WiFi图传接收模块,低延迟、抗干扰、高速稳定传输数据,无人机、农田远距离WiFi模块

在科技日新月异的今天&#xff0c;无线通信技术正以前所未有的速度发展&#xff0c;不仅改变了我们的生活方式&#xff0c;还为企业带来了前所未有的商业机遇。今天&#xff0c;我要向大家介绍一款飞睿智能的产品——6公里WiFi图传接收模块&#xff0c;它以其高性能、稳定的传输…

【常见的设计模式】单例模式

参考&#xff1a;【设计模式专题之单例模式】1.小明的购物车 【设计模式专题之单例模式】 1.小明的购物车 时间限制&#xff1a;1.000S 空间限制&#xff1a;256MB   题目描述 小明去了一家大型商场&#xff0c;拿到了一个购物车&#xff0c;并开始购物。请你设计一个购物车管…

【React】基础数据回填--useForm与setFieldsValue详解

相关属性 1.form 2.setFieldsValue 代码 import{Form }from"antd";const Publish =

体积大的快递怎么寄便宜?如何寄件寄包裹更省钱?

大学毕业了&#xff0c;面对即将到来的工作生活&#xff0c;小李不得不把宿舍里的大包小包打包寄回家。可是&#xff0c;当他真正开始打包行李时&#xff0c;才发现这可不是一件简单的事&#xff1a;衣服、被子、书籍、杂物……这些东西加起来体积不小&#xff0c;想要省钱寄快…

虚拟化技术 DeskV(或Desktop Virtualization)

DeskV&#xff08;或Desktop Virtualization&#xff09;&#xff0c;即桌面虚拟化技术&#xff0c;是一种将计算机的桌面系统&#xff08;包括操作系统、应用程序和用户数据&#xff09;进行虚拟化&#xff0c;以实现桌面使用的安全性和灵活性的技术。以下是关于DeskV&#xf…

基于stm32单片机的智能手环的设计

摘 要 随着科技的飞速发展和人们生活水平的提高&#xff0c;健康与科技日益融合&#xff0c;智能可穿戴设备已成为现代人生活中不可或缺的一部分。智能手环&#xff0c;作为一种便携、实用且功能丰富的可穿戴设备&#xff0c;受到越来越多用户的喜爱。它不仅能够实时监测用户的…