# AG服务安装 ## 1、基础环境(以debian为例) ### 1.1、基本能力安装 ``` bash # 安装curl,下面也有安装 sudo apt install curl # 可选 sudo apt install lrzsz # 安装 https curl等工具、库 sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2 ``` ### 1.2、docker 1. 安装docker ``` shell # 1、添加 Docker 的官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # 或是以下这个 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 2、设置 Docker 的 APT 仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" # 或是使用这个 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 3、更新索引 sudo apt-get update # 4、安装 Docker sudo apt-get install docker-ce ``` 2. 配置及启动docker ```shell # 添加当前用户到docker组中 sudo usermod -aG docker xxx # 启动docker systemctl start docker # 开机启动 systemctl enable docker # 验证 docker --version ``` 3. 镜像仓库 - 默认的仓库[Docker Hub](https://hub.docker.com/),如果有需要配置自己或加速的镜像仓库地址可通过以下操作配置,目前国外的无需配置 `sudo nano /etc/docker/daemon.json` - 内容: ```json { #本地私有镜像仓库 "insecure-registries":["harbor.jiagutech.com"], #公有仓库 "registry-mirrors": ["https://a8gtbrrd.mirror.aliyuncs.com"] } ``` 4. 创建桥接网络,后续docker-compose进行容器编排部署时需要使用此网络,**同一个网络中的容器可以通过容器名称进行访问**,而不需写死ip `docker network create --driver=bridge jiagu` ### 1.3、docker-compose 1. 安装软件,通过以下命令下载docker-compose ` sudo curl -L "https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ` 或 `wget https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-$(uname -s)-$(uname -m)` **如果以上命令下载失败,需要手动去下载,然后放到/usr/local/bin目录下** 2. 验证是否成功 `docker-compose --version` 3. docker-compose的配置 1. **中间件** [[#6.1、middleware的docker-compose.yml|查看]] 2. **AG服务** [[#6.2、AG相关服务的docker-compose.yml|查看]] ## 2、中间件 ### 2.1、mysql 1. init脚本,需要挂载到/docker-entrypoint-initdb.d的目录下,这样mysql容器启动时会执行脚本,**可能有语句执行不成功,需要自己手动去执行** ```sql CREATE USER 'jiagu'@'%' IDENTIFIED BY 'jiagu@1058'; CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; GRANT ALL PRIVILEGES ON *.* TO 'jiagu'@'%'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; CREATE DATABASE main_drone_jiagu ; CREATE DATABASE framework_db ; ``` 2. 设置my.conf,允许主从同步 ```bash [mysqld] # 开启binlog log-bin=mysql-bin # 选择ROW(行)模式 binlog-format=ROW # 配置MySQL replaction需要定义,不要和canal的slaveId重复 server_id=1 ``` 3. 数据库数据导入 4. ### 2.2、redis 1. 批量删除key `redis-cli -n 15 -a Jiagu0158 keys 'fight*'|xargs redis-cli -n 15 -a Jiagu0158 del` 2. ### 2.3、tdengine 1. 创建用户 `create user jiagu pass 'jiagu2058' ; show users;` 2. 创建数据库 `create database track_db;` `create database track_hot_db_xxxx_xx_xx; #xxxx_xx_xx为当天日期` 1. 创建超级表 `CREATE STABLE `track` (`ts` TIMESTAMP, `lat` DOUBLE, `lng` DOUBLE, `alt` INT, `height` INT, `hvel` INT, `vvel` INT, `satellite` INT, `loctype` INT, `yaw` INT, `pitch` INT, `roll` INT, `onair` BOOL, `ftime` INT, `area` FLOAT, `flow` INT, `dose` INT, `warning` INT, `pump` INT) TAGS (`droneid` VARCHAR(50))` ### 2.4、rabbitmq ### 2.5、meilisearch ### 2.6、canal ## 3、Framework ## 4、Center ### 4.1、udp服务 1. 增加对应环境的yml文件 ``` yaml # 1.需要悠mysql的地址及用户名密码 # 2.修改tdengine的地址及用户名密码 # 3.redis的地址及密码 # 4.rabbitmq的地址及密码 # 5.framework服务的地址及密码 ``` 2. pom中添加对应的profile节点 3. logback-spring.xml添加对应的springProfile节点 ## 5、AG服务 ## 6、附录 ### 6.1、middleware的docker-compose.yml ```yml version: '3' services: mysql: image: mysql/mysql-server:8.0.22 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: Jiagu*2058 MYSQL_DATABASE: main_drone_jiagu ports: - "3306:3306" command: --default-authentication-plugin=mysql_native_password --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci volumes: - /home/azureuser/data/mysql/data:/var/lib/mysql - /home/azureuser/data/mysql/conf/my.cnf:/etc/mysql/my.cnf - /home/azureuser/data/mysql/logs:/var/log/mysql - /home/azureuser/data/mysql/mysql-files:/var/lib/mysql-files - ./init.sql:/docker-entrypoint-initdb.d/init.sql redis: image: redis:6.2.14 container_name: redis ports: - 6379:6379 environment: TZ: Asia/Shanghai volumes: - /home/azureuser/data/redis/data:/data:rw command: "redis-server --requirepass Jiagu0158 --appendonly yes" privileged: true restart: always rabbitmq: restart: always image: rabbitmq:management container_name: rabbitmq hostname: rabbit ports: - 5672:5672 - 15672:15672 environment: TZ: Asia/Shanghai RABBITMQ_DEFAULT_USER: jiagu RABBITMQ_DEFAULT_PASS: jiagu2058 volumes: - /home/azureuser/data/rabbitmq/data:/var/lib/rabbitmq tdengine: restart: always image: tdengine/tdengine:3.2.2.0 container_name: tdengine hostname: tdengine ports: - 6030-6041:6030-6041 - 6030-6041:6030-6041/udp environment: TZ: Asia/Shanghai volumes: - /home/azureuser/data/tdengine/data:/var/lib/taos - /home/azureuser/data/tdengine/log:/var/log/taos - /home/azureuser/data/tdengine/client:/tmp/ meilisearch: restart: always image: getmeili/meilisearch:v1.5.1 container_name: meilisearch ports: - 7700:7700 environment: TZ: Asia/Shanghai MEILI_MASTER_KEY: volumes: - /home/azureuser/data/meilisearch/data:/meili_data canal-server: image: canal/canal-server container_name: canal-server privileged: true restart: always depends_on: - mysql ports: - 11111:11111 volumes: - /home/azureuser/data/canal/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties - /home/azureuser/data/canal/log/:/home/admin/canal-server/log/canal/ networks: default: external: true name: jiagu ``` ### 6.2、AG相关服务的docker-compose.yml ```yml version: '3' services: drone: build: context: ./ag/drone dockerfile: Dockerfile container_name: drone hostname: drone restart: always ports: - "8083:8083" volumes: - /home/azureuser/service/logs/drone:/app/log tftz: build: context: ./ag/tftz dockerfile: Dockerfile container_name: tftz hostname: tftz restart: always ports: - "8085:8085" volumes: - /home/azureuser/service/logs/tftz:/app/log oper: build: context: ./ag/oper dockerfile: Dockerfile container_name: oper hostname: oper restart: always ports: - "8084:8084" volumes: - /home/azureuser/service/logs/oper:/app/log user: build: context: ./ag/user dockerfile: Dockerfile container_name: user hostname: user restart: always ports: - "8082:8082" volumes: - /home/azureuser/service/logs/user:/app/log route: build: context: ./ag/route dockerfile: Dockerfile container_name: route hostname: route restart: always ports: - "8088:8088" volumes: - /home/azureuser/service/logs/route:/app/log canal: build: context: ./ag/canal dockerfile: Dockerfile container_name: canal hostname: canal restart: always ports: - "8012:8012" volumes: - /home/azureuser/service/logs/canal:/app/log udp: build: context: ./center/udp dockerfile: Dockerfile container_name: centerudp restart: always ports: - "5003:5003" - "9527:9527/udp" volumes: - /home/azureuser/service/logs/udp:/app/log framework: build: context: ./framework/framework dockerfile: Dockerfile container_name: framework hostname: framework restart: always ports: - "9002:9002" volumes: - /home/azureuser/service/logs/framework:/app/log ```