Переглянути джерело

开发 Dockerfile 和 docker-compose.yml。

Signed-off-by: jef <dungeonsnd@126.com>
jef 1 рік тому
батько
коміт
00bdce0055

+ 26 - 0
im-docker-compose/README.md

@@ -0,0 +1,26 @@
+# docker 构建和部署指南
+
+## 配置
+
+请配置以下文件的挂载目录、端口号、环境变量、账户信息等。
+
+- box-im/im-docker-compose/im-coturn/docker-compose.yml
+- box-im/im-docker-compose/im-service/docker-compose.yml
+- box-im/im-docker-compose/im-coturn/im-platform.env
+- box-im/im-docker-compose/im-coturn/im-server.env
+
+## 构建
+
+可以在部署的目标服务器上在下面两个目录下构建出 im-server 和 im-platform 的 docker images.
+
+- box-im/im-server/Dockerfile
+- box-im/im-platform/Dockerfile
+
+## 部署
+
+在部署的目标服务器上通过 docker-compose 启动所有容器,
+
+```bash
+docker-compose -f im-docker-compose/im-coturn/docker-compose.yml up -d
+docker-compose -f im-docker-compose/im-service/docker-compose.yml up -d
+```

+ 27 - 0
im-docker-compose/im-coturn/docker-compose.yml

@@ -0,0 +1,27 @@
+
+version: "3"
+
+services:
+    im-coturn:
+        container_name: im-coturn
+        image: coturn/coturn:4.6.2-alpine
+        command: turnserver -v -a -c /etc/coturn/conf/coturn.conf
+        restart: always
+        ports:
+            - PORT_COTURN_LISTEN_OS:3478
+            - PORT_COTURN_LISTEN_OS:3478/udp
+            - PORT_COTURN_LISTEN_TLS_OS:5349
+            - PORT_COTURN_LISTEN_TLS_OS:5349/udp
+            - PORT_COTURN_RELAY_BEGIN_OS-PORT_COTURN_RELAY_END_OS:PORT_COTURN_RELAY_BEGIN_OS-PORT_COTURN_RELAY_END_OS/udp
+        # network_mode: "host"
+        environment:
+            - DETECT_EXTERNAL_IP=yes
+            - DETECT_RELAY_IP=yes
+        volumes:
+            -  deploydir/docker_volumes_data/coturn/conf:/etc/coturn/conf
+            -  deploydir/docker_volumes_data/coturn/certs:/etc/coturn/ssl
+            -  deploydir/docker_volumes_data/coturn/log:/var/log/coturn/
+networks:
+  default:
+    external:
+      name: turn-network

+ 99 - 0
im-docker-compose/im-service/docker-compose.yml

@@ -0,0 +1,99 @@
+
+version: "3"
+
+services:
+    im-mysql:
+        container_name: im-mysql
+        image: mysql:5.7
+        command: --default-authentication-plugin=mysql_native_password
+        restart: always
+        environment:
+            - TZ=Asia/Shanghai
+            - MYSQL_ROOT_PASSWORD=MYSQL_ROOT_USER_PASSWORD
+            - MYSQL_ROOT_HOST=%
+            - MYSQL_IM_USERNAME=MYSQL_USERNAME
+            - MYSQL_IM_PASSWORD=MYSQL_PASSWORD
+        volumes:
+            - deploydir/docker_volumes_data/mysql/data:/var/lib/mysql
+            - deploydir/docker_volumes_data/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d
+
+    im-redis:
+        container_name: im-redis
+        image: redis:6-alpine
+        command: redis-server --requirepass REDIS_PASSWORD --appendonly yes --appendfsync everysec --auto-aof-rewrite-percentage 100 --auto-aof-rewrite-min-size 100mb
+        restart: always
+        # ports:
+        #     - "127.0.0.1:6379:6379"
+        volumes:
+            - deploydir/docker_volumes_data/redis/data:/data
+
+    im-minio:
+        container_name: im-minio
+        image: bitnami/minio:2024
+        restart: always
+        # ports:
+        #     - 9001:9001
+        #     - 9002:9002
+        privileged: true
+        environment:
+            - MINIO_SKIP_CLIENT=yes
+            - MINIO_API_PORT_NUMBER=9001
+            - MINIO_CONSOLE_PORT_NUMBER=9002
+            # - MINIO_OPTS="--console-address :9002 --address :9001"
+            # - MINIO_DOMAIN=im_minio:9001
+            - MINIO_DATA_DIR=/data/minio
+            - MINIO_ROOT_USER=MINIO_USERNAME
+            - MINIO_ROOT_PASSWORD=MINIO_PASSWORD
+        volumes:
+            - deploydir/docker_volumes_data/minio/data:/data/minio
+
+    im-nginx:
+        container_name: im-nginx
+        image: openresty/openresty:1.21.4.1-0-alpine
+        restart: always
+        ports:
+            - PORT_NGINX_HTTP_OS:80
+            - PORT_NGINX_HTTPS_OS:443
+            - PORT_NGINX_WSS_OS:81
+        depends_on:
+            im-platform:
+                condition: service_started
+            im-server:
+                condition: service_started
+        volumes:
+            - deploydir/docker_volumes_data/nginx/data/conf:/etc/nginx  ## configs
+            - deploydir/docker_volumes_data/nginx/data/certs:/etc/certs  ## cert files
+            - deploydir/docker_volumes_data/nginx/data/web:/usr/share/nginx  ## web
+
+    im-platform:
+        container_name: im-platform
+        image: im-platform:latest
+        restart: always
+        depends_on:
+            im-mysql:
+                condition: service_started
+            im-redis:
+                condition: service_started
+            im-minio:
+                condition: service_started
+        env_file:
+            - im-platform.env
+
+    im-server:
+        container_name: im-server
+        image: im-server:latest
+        restart: always
+        depends_on:
+            im-mysql:
+                condition: service_started
+            im-redis:
+                condition: service_started
+            im-minio:
+                condition: service_started
+        env_file:
+            - im-server.env
+networks:
+  default:
+    external:
+      name: im-network
+

+ 28 - 0
im-docker-compose/im-service/im-platform.env

@@ -0,0 +1,28 @@
+spring_datasource_username=MYSQL_USERNAME
+spring_datasource_password=MYSQL_PASSWORD
+spring_redis_password=REDIS_PASSWORD
+
+spring_datasource_url=jdbc:mysql://im-mysql:3306/box-im?useSSL=false&useUnicode=true&characterEncoding=utf-8
+spring_datasource_password=MYSQL_PASSWORD
+spring_redis_host=im-redis
+spring_redis_port=6379
+spring_redis_password=REDIS_PASSWORD
+
+minio_accessKey=MINIO_USERNAME
+minio_secretKey=MINIO_PASSWORD
+minio_public=https://IM_DOMAIN:PORT_NGINX_HTTPS_EXTERNAL/file
+minio_endpoint=http://im-minio:9001
+
+ICE_SERVER_1_URL=TURN_DOMAIN:PORT_COTURN_LISTEN_EXTERNAL
+ICE_SERVER_1_USERNAME=TURN_USERNAME
+ICE_SERVER_1_CREDENTIAL=TURN_PASSWORD
+
+ICE_SERVER_2_URL=TURN_DOMAIN:PORT_COTURN_LISTEN_EXTERNAL
+ICE_SERVER_2_USERNAME=TURN_USERNAME
+ICE_SERVER_2_CREDENTIAL=TURN_PASSWORD
+
+jwt_accessToken_secret=JWT_ACCESSTOKEN_SECRET
+jwt_accessToken_expireIn=JWT_ACCESSTOKEN_EXPIREDIN
+jwt_refreshToken_secret=JWT_REFRESHTOKEN_SECRET
+jwt_refreshToken_expireIn=JWT_REFRESHTOKEN_EXPIREDIN
+

+ 4 - 0
im-docker-compose/im-service/im-server.env

@@ -0,0 +1,4 @@
+spring_redis_host=im-redis
+spring_redis_port=6379
+spring_redis_password=REDIS_PASSWORD
+jwt_accessToken_secret=JWT_ACCESSTOKEN_SECRET

+ 13 - 0
im-platform/Dockerfile

@@ -0,0 +1,13 @@
+FROM openjdk:8-jdk-alpine
+
+ENV APP_FILE im-platform.jar
+ENV APP_HOME /data/boxim
+
+WORKDIR $APP_HOME
+
+COPY ./dist/$APP_FILE $APP_HOME/
+
+EXPOSE 8888
+EXPOSE 9001
+
+CMD java -jar $APP_HOME/$APP_FILE --spring.profiles.active=prod

+ 13 - 0
im-server/Dockerfile

@@ -0,0 +1,13 @@
+FROM openjdk:8-jdk-alpine
+
+ENV APP_FILE im-server.jar
+ENV APP_HOME /data/boxim
+
+WORKDIR $APP_HOME
+
+COPY ./dist/$APP_FILE $APP_HOME/
+
+EXPOSE 8877
+EXPOSE 8878
+
+CMD java -jar $APP_HOME/$APP_FILE --spring.profiles.active=prod