chore: Improve docker-compose.yml and docker-setup.sh for better environment management

- Clarified comments in docker-compose.yml regarding build configuration and updated pull_policy to 'missing' for clearer intent.
- Enhanced docker-setup.sh to ensure .env file creation and updates are more robust, with improved error handling and verification steps for Docker image configuration.
This commit is contained in:
agessaman
2026-01-17 11:49:57 -08:00
parent 0c1131e363
commit 9ca59fbcee
3 changed files with 99 additions and 15 deletions
+3 -4
View File
@@ -1,15 +1,14 @@
services:
meshcore-bot:
# Build configuration - will build locally if image doesn't exist
# Build configuration - builds locally if image not available
build:
context: .
dockerfile: Dockerfile
# Pre-built image from GitHub Container Registry (used if available)
# Pre-built image from GitHub Container Registry
# Image tag is automatically set based on current git branch via .env file
# Set DOCKER_IMAGE_REGISTRY in .env to override (default: ghcr.io/agessaman/meshcore-bot)
# If the image doesn't exist in registry, Docker Compose will build locally
image: ${DOCKER_IMAGE_REGISTRY:-ghcr.io/agessaman/meshcore-bot}:${DOCKER_IMAGE_TAG:-latest}
pull_policy: if_not_present
pull_policy: missing
container_name: meshcore-bot
restart: unless-stopped
+64 -11
View File
@@ -274,23 +274,76 @@ else
fi
# Create or update .env file for docker-compose
# Ensure this always runs, even if there were non-critical errors earlier
ENV_FILE=".env"
if [ ! -f "$ENV_FILE" ] || ! grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
echo "" >> "$ENV_FILE"
echo "# Docker image configuration (auto-generated by docker-setup.sh)" >> "$ENV_FILE"
echo "DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY" >> "$ENV_FILE"
echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG" >> "$ENV_FILE"
echo " ✓ Created/updated .env file with image tag: $DOCKER_IMAGE_TAG"
# Temporarily disable exit on error for .env creation
set +e
# Check if .env file exists and has the tag variable
if [ ! -f "$ENV_FILE" ]; then
# Create new .env file
cat > "$ENV_FILE" << EOF
# Docker image configuration (auto-generated by docker-setup.sh)
DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY
DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG
EOF
if [ $? -eq 0 ]; then
echo " ✓ Created .env file with image tag: $DOCKER_IMAGE_TAG"
else
echo " ⚠️ Warning: Failed to create .env file"
fi
elif ! grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
# .env exists but doesn't have the tag - append it
{
echo ""
echo "# Docker image configuration (auto-generated by docker-setup.sh)"
echo "DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY"
echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG"
} >> "$ENV_FILE"
if [ $? -eq 0 ]; then
echo " ✓ Added Docker image configuration to .env file with tag: $DOCKER_IMAGE_TAG"
else
echo " ⚠️ Warning: Failed to append to .env file"
fi
else
# Update existing .env file
if [[ "$PLATFORM" == "Darwin" ]]; then
sed -i '' "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE"
sed -i '' "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE"
sed -i '' "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE" 2>/dev/null
sed -i '' "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE" 2>/dev/null
else
sed -i "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE"
sed -i "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE"
sed -i "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE" 2>/dev/null
sed -i "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE" 2>/dev/null
fi
if [ $? -eq 0 ]; then
echo " ✓ Updated .env file with image tag: $DOCKER_IMAGE_TAG"
else
echo " ⚠️ Warning: Failed to update .env file"
fi
fi
# Re-enable exit on error
set -e
# Verify .env file was created/updated
if [ -f "$ENV_FILE" ] && grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
ACTUAL_TAG=$(grep "^DOCKER_IMAGE_TAG=" "$ENV_FILE" | cut -d'=' -f2 | tr -d ' ')
echo " ✓ Verified .env file contains DOCKER_IMAGE_TAG=$ACTUAL_TAG"
else
echo " ⚠️ Warning: .env file may not have been created correctly"
echo " Creating .env file manually..."
cat > "$ENV_FILE" << EOF
# Docker image configuration (auto-generated by docker-setup.sh)
DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY
DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG
EOF
if [ -f "$ENV_FILE" ]; then
echo " ✓ Manually created .env file with tag: $DOCKER_IMAGE_TAG"
else
echo " ✗ Error: Could not create .env file. Please create it manually:"
echo " echo 'DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY' > .env"
echo " echo 'DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG' >> .env"
fi
echo " ✓ Updated .env file with image tag: $DOCKER_IMAGE_TAG"
fi
# Set permissions (container runs as UID 1000)
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# Quick script to find and update the serial device in config.ini
CONFIG_FILE="data/config/config.ini"
# Find the actual device the symlink points to
SYMLINK="/dev/serial/by-id/usb-RAKwireless_WisCore_RAK4631_Board_B2C39A2D9735430C-if00"
if [ -L "$SYMLINK" ]; then
ACTUAL_DEVICE=$(readlink -f "$SYMLINK" 2>/dev/null)
if [ -n "$ACTUAL_DEVICE" ] && [ -e "$ACTUAL_DEVICE" ]; then
echo "Found device: $SYMLINK -> $ACTUAL_DEVICE"
# Update config.ini
if [[ "$(uname -s)" == "Darwin" ]]; then
sed -i '' "s|^serial_port[[:space:]]*=.*|serial_port = $ACTUAL_DEVICE|" "$CONFIG_FILE"
else
sed -i "s|^serial_port[[:space:]]*=.*|serial_port = $ACTUAL_DEVICE|" "$CONFIG_FILE"
fi
echo "✓ Updated config.ini to use: $ACTUAL_DEVICE"
echo ""
echo "Restart the container:"
echo " docker compose restart"
else
echo "Error: Could not resolve symlink"
fi
else
echo "Symlink not found: $SYMLINK"
echo "Available serial devices:"
ls -la /dev/ttyACM* /dev/ttyUSB* 2>/dev/null || echo " None found"
fi