当前位置: 首页 > news >正文

(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中即可

相关文章:

  • 【C++精华铺】11.STL vector模拟实现
  • helm安装解决无授权问题
  • 宝塔:如何开启面板ssl并更新过期ssl
  • 【ROS2】中级:Launch-管理大型项目
  • Flutter RSA公钥转PEM
  • IntelliJ IDEA社区版在Windows电脑中的下载、安装方法
  • 【IT领域新生必看】编程中的错误处理大师:解密 `throw` 和 `throws` 的神秘差异
  • 【安全设备】数据库审计
  • vue 路由
  • JavaSE学习笔记第二弹——对象和多态(下)
  • 等保测评视角下的哈尔滨智慧城市安全框架构建
  • 2019年美赛题目Problem A: Game of Ecology
  • 硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文
  • C++ 判断语句的深入解析
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十八章 Linux编写第一个自己的命令
  • 2017前端实习生面试总结
  • cookie和session
  • css布局,左右固定中间自适应实现
  • ESLint简单操作
  • Hibernate最全面试题
  • IDEA常用插件整理
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java小白进阶笔记(3)-初级面向对象
  • Koa2 之文件上传下载
  • log4j2输出到kafka
  • Netty源码解析1-Buffer
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • SpringBoot 实战 (三) | 配置文件详解
  • 爱情 北京女病人
  • 大数据与云计算学习:数据分析(二)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 简单数学运算程序(不定期更新)
  • 微信支付JSAPI,实测!终极方案
  • 我从编程教室毕业
  • k8s使用glusterfs实现动态持久化存储
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #Java第九次作业--输入输出流和文件操作
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $GOPATH/go.mod exists but should not goland
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (JS基础)String 类型
  • (二)JAVA使用POI操作excel
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (四)Linux Shell编程——输入输出重定向
  • (四)React组件、useState、组件样式
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • *上位机的定义
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .equals()到底是什么意思?