网站建设打造学院北京建筑公司招聘信息
前言
- 本系列最初的想法就是搭建一个多项目的环境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.
 - 本文使用的PHP镜像为php:7.3.6-apache, 这里可以使用上一篇文章中生成好的镜像.
 - LAMP或包含react或vue的前端项目, 本文就各写了一个, 可以按照实际需求, 自行添加多个容器, 但要保证一个容器启动一个项目.
 
项目规划
- 服务器环境为centos, 所有的项目均放置在/web目录.
 - 使用nginx反向代理各项目, 并提供域名解析. 目录为/web/nginx
 - react或vue的前端项目, 目录为/web/laoliu_pro
 - php(LAMP)项目, 目录为/web/php_laoliu
 - mysql, 目录为/web/mysql
 - redis, 目录为/web/redis
 - 部署两个域名, 分别是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中即可
