Added production quality docker compose file with environment vars set in the docker compose file, without using env vars, updated docs, separated out run-single and run-multiple
This commit is contained in:
parent
d5adc2c7db
commit
23b30416b5
13
.env
13
.env
|
@ -1,14 +1,15 @@
|
|||
# Base params
|
||||
XBNET_BASE_SUBNET=3.3.3
|
||||
XBNET_BASE_SUBNET=2.2.2
|
||||
XBEE_INDEX=1
|
||||
XBNET_PROTO=tap
|
||||
|
||||
# Default params
|
||||
XBNET_DEFAULT_GATEWAY=3.3.3.1
|
||||
XBNET_DEFAULT_IPVLAN_IP=3.3.3.20 # Required only when running ipvlan net (look in docker compose)
|
||||
XBNET_DEFAULT_MACVLAN_IP=3.3.3.30 # Required only when running macvlan net (look in docker compose)
|
||||
XBNET_DEFAULT_GATEWAY=2.2.2.1
|
||||
XBNET_DEFAULT_IPVLAN_IP=2.2.2.20 # Required only when running ipvlan net (look in docker compose)
|
||||
XBNET_DEFAULT_MACVLAN_IP=2.2.2.30 # Required only when running macvlan net (look in docker compose)
|
||||
|
||||
# Configuration for xbnet
|
||||
XBEE_PORT=/dev/ttyUSB0
|
||||
XBEE_BAUDRATE=230400
|
||||
XBNET_IP=3.3.3.201 # Set based on interface type
|
||||
XBNET_INTERFACE_NAME=xbnet_router_1 # Set based on interface type
|
||||
XBNET_IP=2.2.2.201 # Set based on interface type
|
||||
XBNET_INTERFACE_NAME=xbnet_router_1 # Set based on interface type
|
||||
|
|
|
@ -35,8 +35,8 @@ COPY ./scripts/set-env-vars.sh /set-env-vars.sh
|
|||
RUN chmod +x /set-env-vars.sh
|
||||
|
||||
# Copy the health check script
|
||||
COPY ./scripts/health_check.sh /health_check.sh
|
||||
RUN chmod +x /health_check.sh
|
||||
COPY ./scripts/health-check.sh /health-check.sh
|
||||
RUN chmod +x /health-check.sh
|
||||
|
||||
# Add healthcheck
|
||||
HEALTHCHECK CMD /health_check.sh || exit 1
|
||||
HEALTHCHECK CMD /health-check.sh || exit 1
|
||||
|
|
46
README.md
46
README.md
|
@ -65,19 +65,30 @@ git clone https://git.spirirobotics.com/Spiri/services-xbee_net
|
|||
cd services-xbee_net
|
||||
```
|
||||
|
||||
#### 2. Run a single xbnet node using the following cmd:
|
||||
#### 2. To run the project in `PRODUCTION` mode, use the following cmd:
|
||||
|
||||
- `docker-compose -f docker-compose.yml up --build`
|
||||
|
||||
- Configure the project for user specs, modify the `docker-compose.yml` file for the following parameters:
|
||||
|
||||
```bash
|
||||
environment:
|
||||
- XBEE_INDEX=1
|
||||
- XBEE_BAUDRATE=230400
|
||||
- XBEE_PORT=/dev/ttyUSB0
|
||||
- XBNET_BASE_SUBNET=2.2.2
|
||||
- XBNET_INTERFACE_TYPE=router # ["router" | "gateway"]
|
||||
- XBNET_PROTO=tap # ["tap" | "tun"]
|
||||
```
|
||||
|
||||
#### 3. To run a single xbnet node in `DEVELOPEMENT` mode, use the following cmd:
|
||||
|
||||
- Router mode: `sh ./run-single.sh --subnet=7.7.7 --serial-speed=230400 --port=/dev/ttyUSB0 --interface-type=router`
|
||||
- Gateway mode: `sh ./run-single.sh --subnet=7.7.7 --serial-speed=230400 --port=/dev/ttyUSB0 --interface-type=gateway`
|
||||
|
||||
##### NOTE: This setup assumes that you have an XBee device connected to port: /dev/ttyUSB0
|
||||
#### OR Manually build and Start the Docker Container
|
||||
NOTE: This will require the config `.env` to be manually modified, based on user needs.
|
||||
|
||||
|
||||
#### 3. OR Manually build and Start the Docker Container
|
||||
|
||||
##### NOTE: This will require the config `.env` to be manually modified, based on user needs.
|
||||
|
||||
---
|
||||
- Configure a single xbnet net service using:
|
||||
|
||||
```bash
|
||||
|
@ -91,6 +102,14 @@ cd services-xbee_net
|
|||
DEFAULT_GATEWAY=192.168.1.1
|
||||
```
|
||||
|
||||
#### 4. To run a multiple xbnet nodes in `DEVELOPEMENT` mode, use the following cmd:
|
||||
|
||||
- Router 1: `sh ./run-multiple.sh --index=1 --subnet=7.7.7 --serial-speed=230400 --port=/dev/ttyUSB0 --interface-type=router`
|
||||
- Router 2: `sh ./run-multiple.sh --index=2 --subnet=7.7.7 --serial-speed=230400 --port=/dev/ttyUSB0 --interface-type=router`
|
||||
- Gateway: `sh ./run-multiple.sh --subnet=7.7.7 --serial-speed=230400 --port=/dev/ttyUSB0 --interface-type=gateway`
|
||||
|
||||
NOTE: This will require the config `.env` to be manually modified, based on user needs.
|
||||
|
||||
- Configure multiple xbnet net services using:
|
||||
|
||||
```bash
|
||||
|
@ -109,22 +128,15 @@ cd services-xbee_net
|
|||
# Default Gateway (REQUIRED: part of minimum concifg to run a single xbnet node)
|
||||
DEFAULT_GATEWAY=192.168.1.1
|
||||
```
|
||||
---
|
||||
|
||||
To build the Docker image and start the container, run:
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.yml up --build
|
||||
```
|
||||
|
||||
This will build the Docker image and start the container with the XBee network and the required setup.
|
||||
|
||||
#### 4. Health Check and Container Management
|
||||
#### 5. Health Check and Container Management
|
||||
|
||||
The container includes a health check that pings the XBee network interface to ensure it is functioning properly. \
|
||||
The container is configured to restart automatically if the health check fails.
|
||||
|
||||
#### 5. Troubleshooting
|
||||
#### 6. Troubleshooting
|
||||
|
||||
Ensure the XBee devices are connected to the correct serial ports.\
|
||||
Verify the network interfaces using ip a inside the container.\
|
||||
|
|
|
@ -67,13 +67,8 @@ services:
|
|||
build: .
|
||||
container_name: xbnet_node
|
||||
privileged: true
|
||||
# env_file: .env
|
||||
environment:
|
||||
- XBEE_INDEX=1
|
||||
- XBEE_BAUDRATE=230400
|
||||
- XBEE_PORT=/dev/ttyUSB0
|
||||
- XBNET_BASE_SUBNET=7.7.7
|
||||
- XBNET_INTERFACE_TYPE=router
|
||||
env_file:
|
||||
- .env
|
||||
command: bash /entrypoint.sh
|
||||
# network_mode: "host"
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
xbnet-node:
|
||||
build: .
|
||||
container_name: xbnet_node
|
||||
privileged: true
|
||||
environment:
|
||||
- XBEE_INDEX=1
|
||||
- XBEE_BAUDRATE=230400
|
||||
- XBEE_PORT=/dev/ttyUSB0
|
||||
- XBNET_BASE_SUBNET=2.2.2
|
||||
- XBNET_INTERFACE_TYPE=router
|
||||
- XBNET_PROTO=tap
|
||||
command: bash /entrypoint.sh
|
|
@ -14,10 +14,11 @@ echo "Starting entrypoint.sh"
|
|||
|
||||
# Set associated env vars
|
||||
echo "Setting associated environment variables. Calling /set-env-vars.sh"
|
||||
sh /set-env-vars.sh
|
||||
source /set-env-vars.sh
|
||||
|
||||
# Main loop
|
||||
loop() {
|
||||
echo "Starting loop"
|
||||
while true; do
|
||||
# Check if the XBee device is connected
|
||||
check_device_port
|
||||
|
@ -26,7 +27,6 @@ loop() {
|
|||
cleanup
|
||||
continue
|
||||
fi
|
||||
sleep 0.5
|
||||
|
||||
# Check if the network interface is up
|
||||
check_network_state
|
||||
|
@ -34,11 +34,10 @@ loop() {
|
|||
echo "Network interface $XBNET_INTERFACE_NAME not found. Creating TAP interface..."
|
||||
create_tap_interface
|
||||
fi
|
||||
sleep 0.5
|
||||
|
||||
# Log messages sent and received over xbnet
|
||||
# log_xbnet_messages
|
||||
|
||||
|
||||
sleep 0.5
|
||||
done
|
||||
}
|
||||
|
@ -63,8 +62,9 @@ check_network_state() {
|
|||
|
||||
# Create a TAP network interface
|
||||
create_tap_interface() {
|
||||
# Start xbnet and run it in the background
|
||||
xbnet -d --serial-speed ${XBEE_BAUDRATE} ${XBEE_PORT} tap --iface-name ${XBNET_INTERFACE_NAME} &
|
||||
# Start xbnet and run it in the background
|
||||
# - eg. xbnet -d --serial-speed 230400 /dev/ttyUSB0 tap --iface-name=xbnet_router_1
|
||||
xbnet -d --serial-speed ${XBEE_BAUDRATE} ${XBEE_PORT} ${XBNET_PROTO} --iface-name ${XBNET_INTERFACE_NAME} &
|
||||
|
||||
# Wait until the interface is created
|
||||
while ! check_network_state; do
|
||||
|
@ -75,15 +75,19 @@ create_tap_interface() {
|
|||
ip addr add $XBNET_IP/24 dev $XBNET_INTERFACE_NAME
|
||||
ip link set $XBNET_INTERFACE_NAME up
|
||||
|
||||
echo "-------------------------------------------"
|
||||
echo "********** Tap interface created **********"
|
||||
echo "-------------------------------------------"
|
||||
echo "Name: ${XBNET_INTERFACE_NAME}"
|
||||
echo "Gateway: ${DEFAULT_GATEWAY}"
|
||||
echo "IP: ${XBNET_IP}"
|
||||
echo "Device port: ${XBEE_PORT}"
|
||||
echo "Device baudrate: ${XBEE_BAUDRATE}"
|
||||
echo "-------------------------------------------"
|
||||
echo "---------------------------------------------------------"
|
||||
echo "***************** Tap interface created *****************"
|
||||
echo "---------------------------------------------------------"
|
||||
echo "XBEE_INDEX : ${XBEE_INDEX}"
|
||||
echo "XBEE_BAUDRATE : ${XBEE_BAUDRATE}"
|
||||
echo "XBEE_PORT : ${XBEE_PORT}"
|
||||
echo "XBNET_BASE_SUBNET : ${XBNET_BASE_SUBNET}"
|
||||
echo "XBNET_IP : ${XBNET_IP}"
|
||||
echo "XBNET_INTERFACE_NAME : ${XBNET_INTERFACE_NAME}"
|
||||
echo "XBNET_DEFAULT_GATEWAY : ${XBNET_DEFAULT_GATEWAY}"
|
||||
echo "XBNET_DEFAULT_IPVLAN_IP : ${XBNET_DEFAULT_IPVLAN_IP}"
|
||||
echo "XBNET_DEFAULT_MACVLAN_IP : ${XBNET_DEFAULT_MACVLAN_IP}"
|
||||
echo "---------------------------------------------------------"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
@ -107,7 +111,7 @@ log_xbnet_messages() {
|
|||
RX_PACKETS_BEFORE=$(cat /sys/class/net/$XBNET_INTERFACE_NAME/statistics/rx_packets)
|
||||
TX_PACKETS_BEFORE=$(cat /sys/class/net/$XBNET_INTERFACE_NAME/statistics/tx_packets)
|
||||
|
||||
sleep 1
|
||||
sleep 0.5
|
||||
|
||||
RX_PACKETS_AFTER=$(cat /sys/class/net/$XBNET_INTERFACE_NAME/statistics/rx_packets)
|
||||
TX_PACKETS_AFTER=$(cat /sys/class/net/$XBNET_INTERFACE_NAME/statistics/tx_packets)
|
||||
|
|
|
@ -9,7 +9,8 @@ export XBEE_INDEX=${XBEE_INDEX}
|
|||
export XBEE_BAUDRATE=${XBEE_BAUDRATE}
|
||||
export XBEE_PORT=${XBEE_PORT}
|
||||
export XBNET_BASE_SUBNET=${XBNET_BASE_SUBNET}
|
||||
export XBNET_INTERFACE_TYPE=${XBNET_INTERFACE_TYPE} # Options: ["gateway", "router"]
|
||||
export XBNET_INTERFACE_TYPE=${XBNET_INTERFACE_TYPE} # Options: ["gateway", "router"]
|
||||
export XBNET_PROTO=tap # Options: ["tap", "tun"]
|
||||
|
||||
# Determine the source IP based on interface type
|
||||
if [ "$XBNET_INTERFACE_TYPE" = "gateway" ]; then
|
||||
|
@ -27,16 +28,21 @@ export XBNET_DEFAULT_MACVLAN_IP="${XBNET_BASE_SUBNET}.30"
|
|||
export XBNET_IP
|
||||
export XBNET_INTERFACE_NAME
|
||||
|
||||
# Print out values of environment variables
|
||||
echo "***********************************************************"
|
||||
echo "Environment variables set. "
|
||||
echo "XBEE_INDEX : ${XBEE_INDEX}"
|
||||
echo "XBEE_BAUDRATE : ${XBEE_BAUDRATE}"
|
||||
echo "XBEE_PORT : ${XBEE_PORT}"
|
||||
echo "XBNET_BASE_SUBNET : ${XBNET_BASE_SUBNET}"
|
||||
echo "XBNET_IP : ${XBNET_IP}"
|
||||
echo "XBNET_INTERFACE_NAME : ${XBNET_INTERFACE_NAME}"
|
||||
echo "XBNET_DEFAULT_IPVLAN_IP : ${XBNET_DEFAULT_IPVLAN_IP}"
|
||||
echo "XBNET_DEFAULT_MACVLAN_IP : ${XBNET_DEFAULT_MACVLAN_IP}"
|
||||
echo "***********************************************************"
|
||||
# Print out environment variables
|
||||
print_env_vars() {
|
||||
echo "***********************************************************"
|
||||
echo "Environment variables set. "
|
||||
echo "XBEE_INDEX : ${XBEE_INDEX}"
|
||||
echo "XBEE_BAUDRATE : ${XBEE_BAUDRATE}"
|
||||
echo "XBEE_PORT : ${XBEE_PORT}"
|
||||
echo "XBNET_BASE_SUBNET : ${XBNET_BASE_SUBNET}"
|
||||
echo "XBNET_IP : ${XBNET_IP}"
|
||||
echo "XBNET_INTERFACE_NAME : ${XBNET_INTERFACE_NAME}"
|
||||
echo "XBNET_DEFAULT_IPVLAN_IP : ${XBNET_DEFAULT_IPVLAN_IP}"
|
||||
echo "XBNET_DEFAULT_MACVLAN_IP : ${XBNET_DEFAULT_MACVLAN_IP}"
|
||||
echo "***********************************************************"
|
||||
}
|
||||
|
||||
# print_env_vars
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue