环境说明
EMQX集群三台虚拟机:2台做EMQX集群192.168.0.130-131,1台安装NGINX负载192.168.0.12;
WEB集群(2个HTTP容器和1个NGINX容器)和MARIADB安装台一台虚拟机上192.168.0.128
version: "3.3"
services:
#####################container##############3
volumes:
app-dmsdb-data:
networks:
smartcard-net:
ipam:
driver: default
config:
- subnet: 10.10.11.0/24
gateway: 10.10.11.1
bridge模式下(HOST模式不需要),yml格式文件如上所示
一、集群
1.1 EMQX集群(Host模式)
1.1.1 节点1:EMQX1配置
version: '3'
services:
emqx2:
image: emqx/emqx:4.2.3
environment:
- EMQX_NAME=emqx02
- EMQX_HOST=192.168.47.131
- EMQX_CLUSTER__DISCOVERY=static
- EMQX_CLUSTER__STATIC__SEEDS=emqx01@192.168.47.130, emqx02@192.168.47.131
- EMQX_DASHBOARD__DEFAULT_USER__LOGIN=liubei
- EMQX_DASHBOARD__DEFAULT_USER__PASSWORD=liubei@2021
network_mode: "host"
restart: always
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
interval: 5s
timeout: 25s
retries: 5
1.1.2 节点2:EMQX2配置
version: '3'
services:
emqx1:
image: emqx/emqx:4.2.3
environment:
- EMQX_NAME=emqx01
- EMQX_HOST=192.168.47.130
- EMQX_CLUSTER__DISCOVERY=static
- EMQX_CLUSTER__STATIC__SEEDS=emqx01@192.168.47.130, emqx02@192.168.47.131
- EMQX_DASHBOARD__DEFAULT_USER__LOGIN=liubei
- EMQX_DASHBOARD__DEFAULT_USER__PASSWORD=liubei@2021
network_mode: "host"
restart: always
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
interval: 5s
timeout: 25s
retries: 5
1.1.3 节点3:nginx负载
version: "3.3"
services:
mqtt_lsb:
container_name: mqtt_lsb
image: nginx:latest
restart: always
volumes:
- ./dms/nginx_emqx.conf:/etc/nginx/nginx.conf
network_mode: "host"
nginx.conf配置文件
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
stream {
upstream mqtt_lsb {
server 192.168.0.130:1883 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.131:1883 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 1883;
proxy_buffer_size 8k;
tcp_nodelay on;
proxy_pass mqtt_lsb;
}
}
1.1.4 验证
1.2 WEB集群(Bridge模式)
1.2.1 容器1:web集群
dms_cluster1:
image: dms_cluster1
build:
context: ./dms
dockerfile: Dockerfile_http
container_name: dms_cluster1
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- "5881:80"
links:
- dms_db
- mqtt-station
volumes:
- ./dms/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/http1_logs:/var/www/logs/
1.2.2 容器2:web集群
dms_cluster2:
image: dms_cluster2
build:
context: ./dms
dockerfile: Dockerfile_http
container_name: dms_cluster2
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- "5882:80"
links:
- dms_db
- mqtt-station
volumes:
- ./dms/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/http2_logs:/var/www/logs/
1.2.2 容器3:web负载nginx
dms_lsb:
container_name: dms_lsb
image: nginx:latest
ports:
- "5888:80"
privileged: true
volumes:
- ./dms/nginx_dms.conf:/etc/nginx/nginx.conf
networks:
- smartcard-net
links:
- dms_cluster1
- dms_cluster2
nginx.conf
events {
worker_connections 1024;
}
http{
upstream dms_lsb {
server dms_cluster1:80;
server dms_cluster2:80;
}
server {
listen 80;
server_name dms_lsb;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://dms_lsb;
}
}
}
1.2.3 验证
web界面操作5次,查看两个容器日志,一次执行了3次,一个执行了2次
1.3 整体环境
1.3.1 yml
由于MEQX集群以HOST方式部署,YML中不在link容器:mqtt-station
version: "3.3"
services:
dms_db:
*************************
dms_lsb:
*************************
dms_cluster1:
*************************
dms_cluster2:
*************************
dms_cron:
*************************
dms_mqtt:
*************************
dms_swoole:
*************************
volumes:
app-dmsdb-data:
networks:
smartcard-net:
ipam:
driver: default
config:
- subnet: 10.10.11.0/24
gateway: 10.10.11.1
1.3.2 测试
1S发送一条消息,发100条消息,查看日志
关闭EMQX集群中其中一个节点,测试是否还正常运行
依旧还是收到了100条消息
关闭一个节点后,再启动这个节点,测试中间关闭启动对数据影响
还是能完成收到100条数据
二、非集群
2.1 yml
version: "3.3"
services:
mqtt-station:
*************************
dms_db:
*************************
dms:
*************************
dms_cron:
*************************
dms_mqtt:
*************************
dms_swoole:
*************************
volumes:
app-dmsdb-data:
networks:
smartcard-net:
ipam:
driver: default
config:
- subnet: 10.10.11.0/24
gateway: 10.10.11.1
三、容器配置
3.1 文件初始化sh_file.sh
#!/bin/sh
#如果没有tmp_dir目录则创建
cron_dir="./logs/cron_logs"
if [ ! -d $cron_dir ]; then
mkdir -p -m 777 $cron_dir
fi
http_dir="./logs/http_logs"
if [ ! -d $http_dir ]; then
mkdir -p -m 777 $http_dir
fi
mqtt_dir="./logs/mqtt_logs"
if [ ! -d $mqtt_dir ]; then
mkdir -p -m 777 $mqtt_dir
fi
swoole_dir="./logs/swoole_logs"
if [ ! -d $swoole_dir ]; then
mkdir -p -m 777 $swoole_dir
fi
chmod -R 777 *
chmod 644 my.cnf
修改文件属性:chmod 700 sh_file.sh
3.2 数据库容器初始化
3.2.1 导出数据库表格
[root@localhost dms]# docker-compose exec dms_db bash
root@c88eda6f9a74:/# mysqldump -uroot -p***** -d pyrk_zt > db.sql
将容器中的表结构拷贝到主机当前目录
[root@localhost lamp]# docker cp dms_db:/db.sql .
3.2.2 导入并初始化数据
将当前目录下文件拷贝到容器根目录中
[root@localhost lamp]# docker cp db.sql dms_db:/
进入容器
[root@localhost lamp]# docker-compose exec dms_db bash
root@c88eda6f9a74:/# mysql -uroot -p******
创建并进入数据库
MariaDB [(none)]> create database pyrk_zt;
MariaDB [(none)]> use pyrk_zt;
导入数据库文件
MariaDB [pyrk_zt]> source /db.sql;
初始用户信息
MariaDB [pyrk_zt]> INSERT INTO userlogin_info VALUES (1,'admin','c4ca4238a0b923820dcc509a6f75849b');
更新环境配置信息
MariaDB [pyrk_zt]> INSERT INTO pyrk_config VALUES (1,'docker_mode',0, '');
附件1:容器yml
附件1.1 EMQX:mqtt-station
mqtt-station:
image: emqx/emqx:5.0.3
container_name: mqtt-station
networks:
- smartcard-net
depends_on:
- smartcard-db
ports:
- "1883:1883"
# - "8083:8083"
# - "8883:8883"
# - "8084:8084"
- "18083:18083"
environment:
- TZ=Asia/Shanghai
- EMQX_ALLOW_ANONYMOUS=true
# - EMQX_AUTH__PGSQL__USERNAME=postgres
# - EMQX_AUTH__PGSQL__PASSWORD=1q3e5t7u!
# - EMQX_AUTH__PGSQL__DATABASE=smartcard
# - "EMQX_AUTH__PGSQL__SERVER=smartcard-db:5432"
# - EMQX_AUTH__PGSQL__POOL=8
# - EMQX_AUTH__PGSQL__ENCODING=utf8
# - "EMQX_AUTH__PGSQL__PASSWORD_HASH=sha256"
# - "EMQX_AUTH__PGSQL__AUTH_QUERY=select mqtt_password from station where mqtt_user = '%u' limit 1"
# - EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management,emqx_dashboard,emqx_auth_pgsql"
restart: always
logging:
#日志驱动
driver: "json-file"
options:
#日志大小
max-size: "1g"
#日志数量
max-file: "3"
附件1.2 Mariadb:dms_db
dms_db:
image: mariadb
container_name: dms_db
networks:
- smartcard-net
ports:
- "3306:3306"
volumes:
- app-dmsdb-data:/var/lib/mysql
- ./dms/my.cnf:/etc/mysql/my.cnf
# - ./dms/initdb.d:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: "1q3e5t7u!"
附件1.3 WEB:dms
dms:
image: dms
build:
context: ./dms
dockerfile: Dockerfile_http
container_name: dms
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- "5888:80"
links:
- dms_db
- mqtt-station
volumes:
- ./dms/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/http_logs:/var/www/logs/
附件1.4 定时任务:dms_cron
dms_cron:
image: dms_cron
build:
context: ./dms
dockerfile: Dockerfile_cron
container_name: dms_cron
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
links:
- dms_db
- mqtt-station
- dms
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/cron_logs:/var/www/logs/
附件1.5 MQTT进程池:dms_mqtt
dms_mqtt:
image: dms_mqtt
build:
context: ./dms
dockerfile: Dockerfile_mqtt
container_name: dms_mqtt
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
links:
- dms_db
- mqtt-station
- dms
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/mqtt_logs:/var/www/logs/
附件1.6 UDP进程池:dms_swoole
dms_swoole:
image: dms_swoole
build:
context: ./dms
dockerfile: Dockerfile_swoole
container_name: dms_swoole
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- 5988:5988/udp
links:
- dms_db
- mqtt-station
- dms
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/swoole_logs:/var/www/logs/
附件2:Dockerfile
附件2.1 Dockerfile_cron
# FROM phpswoole/swoole:4.5.9-php7.4
FROM php:7.4
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
WORKDIR /var/www/html
COPY ./app /var/www/html
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN rm -Rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y \
cron \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
libmcrypt-dev \
libonig-dev \
zlib1g-dev \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
graphviz \
curl \
supervisor \
rsyslog
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# install ext
RUN docker-php-ext-install mysqli opcache pdo pcntl
# COPY ./app/crontab /etc/cron.d/crontab
RUN echo "*/1 * * * * /usr/local/bin/php /var/www/html/api/timing/oper_pack_error.php" >> /etc/cron.d/crontab
RUN echo "*/10 * * * * /usr/local/bin/php /var/www/html/api/timing/oper_server_status_abnormal.php" >> /etc/cron.d/crontab
RUN echo "0 8 * * * /usr/local/bin/php /var/www/html/api/timing/oper_server_status_normal.php" >> /etc/cron.d/crontab
RUN echo "0 5 * * * /usr/local/bin/php /var/www/html/api/timing/oper_del_sys_email.php" >> /etc/cron.d/crontab
RUN echo "*/30 * * * * /usr/local/bin/php /var/www/html/api/timing/oper_sync_info.php" >> /etc/cron.d/crontab
# RUN echo "*/1 * * * * echo 'aaa' >> /tmp/test.txt " >> /etc/cron.d/crontab
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/crontab
# Apply cron job
RUN crontab /etc/cron.d/crontab
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
CMD cron -f && tail -f /var/log/cron.log
附近2.2 Dockerfile_http
FROM php:7.1-apache
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
# RUN apk upgrade --update && apk add --no-cache autoconf m4 gcc libc-dev make
# WORKDIR /tmp/
# RUN wget https://github.com/swoole/swoole-src/archive/v2.0.6.tar.gz
# RUN tar zxvf v2.0.6.tar.gz
# WORKDIR /tmp/swoole-src-2.0.6/
# RUN phpize
# RUN ./configure --with-php-config=/usr/local/bin/php-config
# RUN make && make install
WORKDIR /var/www/html
COPY ./app /var/www/html
COPY ./swoole-src-2.0.6 /usr/src/php/ext/swoole
# install ext
RUN docker-php-ext-install mysqli opcache pdo pcntl swoole
附近2.3 Dockerfile_mqtt
# FROM phpswoole/swoole:4.5.9-php7.4
FROM php:7.4
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
WORKDIR /var/www/html
COPY ./app /var/www/html
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN rm -Rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y \
cron \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
libmcrypt-dev \
libonig-dev \
zlib1g-dev \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
graphviz \
curl \
supervisor
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# install ext
RUN docker-php-ext-install mysqli opcache pdo pcntl
CMD ["php", "/var/www/html/api/mqtt/mqtt_startup_service.php"]
附近2.4 Dockerfile_swoole
# FROM phpswoole/swoole:4.5.9-php7.4
FROM php:7.1
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
WORKDIR /var/www/html
COPY ./app /var/www/html
# RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list
# RUN cat /etc/apt/sources.list
# RUN rm -Rf /var/lib/apt/lists/*
# RUN apt-get update && apt-get install -y \
# cron \
# build-essential \
# libpng-dev \
# libjpeg62-turbo-dev \
# libfreetype6-dev \
# locales \
# libzip-dev \
# libmcrypt-dev \
# libonig-dev \
# zlib1g-dev \
# zip \
# jpegoptim optipng pngquant gifsicle \
# vim \
# unzip \
# git \
# graphviz \
# curl \
# supervisor
# Clear cache
# RUN apt-get clean && rm -rf /var/lib/apt/lists/*
COPY ./swoole-src-2.0.6 /usr/src/php/ext/swoole
# install ext
RUN docker-php-ext-install mysqli opcache pdo pcntl swoole
CMD ["php", "/var/www/html/api/swoole/swoole_startup_udp_server.php"]
附件3:配置文件
附近3.1 my.cnf
# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/
#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock
# Import all .cnf files from configuration directory
[mariadbd]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
max_heap_table_size = 128M
tmp_table_size = 128M
max_allowed_packet=16M
max_connections=2048
thread_cache_size=256
sort_buffer_size=8M
bulk_insert_buffer_size = 16M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
skip-host-cache
skip-name-resolve
!includedir /etc/mysql/mariadb.conf.d/
!includedir /etc/mysql/conf.d/
附近3.2 000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
DirectoryIndex index.html login.html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
附近3.3 php.ini
389 memory_limit = 512M
568 error_log = /var/www/logs/php_errors.log
703 post_max_size = 32M
799 upload_max_filesize = 32M
877 date.timezone = Asia/Shanghai
附近3.4 swoole.ini
extension=swoole.so
附件4:完整版yml
version: "3.3"
services:
######################################################北洋荣科dms模块
dms_db:
image: mariadb
container_name: dms_db
networks:
- smartcard-net
ports:
- "3306:3306"
volumes:
- app-dmsdb-data:/var/lib/mysql
- ./dms/my.cnf:/etc/mysql/my.cnf
# - ./dms/initdb.d:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: "1q3e5t7u!"
restart: always
################################################################################
dms_lsb:
container_name: dms_lsb
image: nginx:latest
ports:
- "5888:80"
privileged: true
volumes:
- ./dms/nginx_dms.conf:/etc/nginx/nginx.conf
networks:
- smartcard-net
links:
- dms_cluster1
- dms_cluster2
dms_cluster1:
image: dms_cluster1
build:
context: ./dms
dockerfile: Dockerfile_http
container_name: dms_cluster1
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- "5881:80"
links:
- dms_db
volumes:
- ./dms/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/http1_logs:/var/www/logs/
dms_cluster2:
image: dms_cluster2
build:
context: ./dms
dockerfile: Dockerfile_http
container_name: dms_cluster2
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- "5882:80"
links:
- dms_db
restart: always
volumes:
- ./dms/000-default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/http2_logs:/var/www/logs/
################################################################################
dms_cron:
image: dms_cron
build:
context: ./dms
dockerfile: Dockerfile_cron
container_name: dms_cron
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
links:
- dms_db
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/cron_logs:/var/www/logs/
dms_mqtt:
image: dms_mqtt
build:
context: ./dms
dockerfile: Dockerfile_mqtt
container_name: dms_mqtt
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
links:
- dms_db
restart: always
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/mqtt_logs:/var/www/logs/
dms_swoole:
image: dms_swoole
build:
context: ./dms
dockerfile: Dockerfile_swoole
container_name: dms_swoole
networks:
- smartcard-net
environment:
- ALLOW_OVERRIDE=true
ports:
- 5988:5988/udp
links:
- dms_db
restart: always
volumes:
- ./dms/php.ini:/usr/local/etc/php/php.ini
- ./dms/swoole.ini:/etc/php.d/swoole.ini
- ./dms/app:/var/www/html/
- ./dms/logs/swoole_logs:/var/www/logs/
#####################################################################
volumes:
app-dmsdb-data:
networks:
smartcard-net:
ipam:
driver: default
config:
- subnet: 10.10.11.0/24
gateway: 10.10.11.1