docker-compose编排fastadmin项目
项目启动同时兼容dcoker环境为MACm1和liunx环境无缝切换
文件目录说明
- bin 存放代码 以及 构建dockerfile
- config 启动配置文件
- data 自动生成的可持久化数据,dev 到 生产 可不必保留,生产环境下一定不要删除会丢失数据库数据
- logs 自动生成的日志数据,dev 到 生产 可不必保留
- .env 配置一些必要的参数,如对外端口、映射路径、容器名称等等
dev 模式
- 保留文件夹 bin config
- 保留文件 .env docker-compose-dev.yml
- 更新代码位置 bin/epp_php
# 构建启动项目
docker-compose -f docker-compose-dev.yml up --build
# 测试正常可以推送镜像, 名字和标签随意定义,与docker-compose-dev.yaml中保持一致即可
docker push tangyinsong/epp_php:latest
docker push tangyinsong/nginx:latest
线上 模式
- 保留文件夹 config
- 保留文件 .env docker-compose.yml
# 启动项目,会自动拉取所需的镜像并加载配置文件启动
docker-compose -f docker-compose.yml up -d
- bin
* epp_php为fastadmin项目
* nginx
+ Dockerfile
* php
+ Dockerfile
配置文件目录
- config
* mysql
+mysql.cnf
* nginx
+conf.d #网站配置目录
+nginx.conf
* php
+php.ini
+php-fpm.conf
+www.conf
* redis
+redis.conf
* logs
nginx
php
redis
.env
docker-compose.yml
.env文件配置文内容
#public
NETWORK=php_network
TZ=Asia/Shanghai
#php
PHP_CONTAINER_NAME=php
PHP_PORT=9090
PHP_FPM_CONF=./config/php/php-fpm.conf
PHP_INI=./config/php/php.ini
PHP_LOG=./logs/php
#nginx
NGINX_CONTAINER_NAME=nginx
NGINX_VERSION=1.25.2
NGINX_HTTP_PORT=9080
NGINX_HTTPS_PORT=9443
NGINX_CONFD=./config/nginx/conf.d
NGINX_CONF=./config/nginx/nginx.conf
NGINX_LOG=./logs/nginx
#mysql
#MYSQL_CONTAINER_NAME=mysql
#MYSQL_VERSION=5.6
#MYSQL_PORT=9036
#MYSQL_USER=docker
#MYSQL_PASSWORD=123456
#MYSQL_DATABASE=docker
#MYSQL_ROOT_PASSWORD=123456
#MYSQL_CONF=./config/mysql
#MYSQL_DATA=./data/mysql
#redis
REDIS_CONTAINER_NAME=redis
REDIS_VERSION=7.0.0-alpine
REDIS_PORT=9379
REDIS_CONF=./config/redis/redis.conf
REDIS_DATA=./data/redis
REDIS_LOG=./logs/redis
编写docker-compose:
version: "3"
services:
php:
image: tangyinsong/epp_php:latest
container_name: ${PHP_CONTAINER_NAME}
restart: 'always'
ports:
- "${PHP_PORT}:9000"
volumes:
- ${PHP_FPM_CONF}:/usr/local/etc/php-fpm.d/www.conf:rw
- ${PHP_INI}:/usr/local/etc/php/php.ini:ro
- ${PHP_LOG}:/var/log/php
nginx:
image: tangyinsong/nginx:latest
container_name: ${NGINX_CONTAINER_NAME}
ports:
- "${NGINX_HTTP_PORT}:80"
- "${NGINX_HTTPS_PORT}:443"
environment:
TZ: "$TZ"
restart: 'always'
volumes:
- ${NGINX_CONFD}:/etc/nginx/conf.d/:rw
- ${NGINX_CONF}:/etc/nginx/nginx.conf:ro
- ${NGINX_LOG}:/var/log/nginx/:rw
# mysql:
# image: mysql:${MYSQL_VERSION}
# container_name: ${MYSQL_CONTAINER_NAME}
# command: --default-authentication-plugin=mysql_native_password
# ports:
# - "${MYSQL_PORT}:3306"
# volumes:
# - ${MYSQL_CONF}:/etc/mysql/conf.d:rw
# - ${MYSQL_DATA}:/var/lib/mysql/:rw #include mysql log
# restart: 'always'
# environment:
# MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
# TZ: "$TZ"
redis:
image: redis:${REDIS_VERSION}
container_name: ${REDIS_CONTAINER_NAME}
ports:
- "${REDIS_PORT}:6379"
volumes:
- ${REDIS_CONF}:/etc/redis.conf:ro
- ${REDIS_DATA}:/data:rw
- ${REDIS_LOG}:/var/log/redis/:rw
restart: 'always'
entrypoint: ["redis-server", "/etc/redis.conf"]
environment:
TZ: "$TZ"
编写dockerfile
FROM --platform=linux/amd64 php:7.3.33-fpm-bullseye
ENV DEBIAN_FRONTEND=noninteractive
# 设置时区,亚洲上海时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone
RUN sed -i "s/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list
WORKDIR /var/wwwcd
# PHPIZE_DEPS包含gcc g++等编译辅助类库,完成后删除; pecl安装扩展。
RUN apt-get update \
&& apt-get install -y git wget curl gcc g++ zip libxml2-dev \
libpng-dev libcurl4-gnutls-dev libbz2-dev libssl-dev libmcrypt-dev \
libfreetype-dev libjpeg-dev zlib1g-dev libzip-dev libc-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN pecl channel-update pecl.php.net \
&& pecl update-channels \
&& pecl install redis zip mcrypt \
&& docker-php-ext-enable redis zip mcrypt
RUN docker-php-ext-configure gd \
--with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
&& docker-php-ext-install -j10 gd pdo_mysql mysqli fileinfo \
opcache bcmath json curl \
&& docker-php-ext-install -j10 \
mbstring sockets bz2 fileinfo xml \
simplexml ctype intl
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
COPY epp_php/composer.json .
RUN composer install \
&& rm -rf epp_php/composer.json
COPY epp_php epp_php
RUN chown -R www-data:www-data /var/www/epp_php
# && chmod -R 777 /var/www/epp
WORKDIR /var/www/epp_php/public