1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-18 20:39:36 +02:00

feat: update Docker Compose and environment configuration for dynamic port handling

This commit is contained in:
Sean Morley 2025-05-29 20:21:13 -04:00
parent 4e8024051c
commit ae16c12251
3 changed files with 82 additions and 80 deletions

1
.gitignore vendored
View file

@ -2,3 +2,4 @@
.venv/ .venv/
.vscode/settings.json .vscode/settings.json
.pnpm-store/ .pnpm-store/
.env

View file

@ -1,6 +1,6 @@
services: services:
web: web:
image: ghcr.io/seanmorley15/adventurelog-frontend:beta image: ghcr.io/seanmorley15/adventurelog-frontend:latest
container_name: adventurelog-frontend container_name: adventurelog-frontend
restart: unless-stopped restart: unless-stopped
env_file: .env env_file: .env
@ -18,7 +18,7 @@ services:
- postgres_data:/var/lib/postgresql/data/ - postgres_data:/var/lib/postgresql/data/
server: server:
image: ghcr.io/seanmorley15/adventurelog-backend:beta image: ghcr.io/seanmorley15/adventurelog-backend:latest
container_name: adventurelog-backend container_name: adventurelog-backend
restart: unless-stopped restart: unless-stopped
env_file: .env env_file: .env

View file

@ -55,7 +55,7 @@ log_header() {
print_banner() { print_banner() {
cat << 'EOF' cat << 'EOF'
╔══════════════════════════════════════════════════════════════════════╗ ╔══════════════════════════════════════════════════════════════════════════
║ ║ ║ ║
║ 🌍 A D V E N T U R E L O G I N S T A L L E R ║ ║ 🌍 A D V E N T U R E L O G I N S T A L L E R ║
║ ║ ║ ║
@ -334,64 +334,6 @@ prompt_configuration() {
echo "" echo ""
} }
update_docker_compose_ports() {
log_info "Updating Docker Compose configuration for custom ports..."
# Create backup of original docker-compose.yml
cp docker-compose.yml docker-compose.yml.backup
# Update the ports in docker-compose.yml
if command -v perl &>/dev/null; then
# Use perl for more reliable regex replacement
perl -pi -e "s/\"8015:3000\"/\"$FRONTEND_PORT:3000\"/" docker-compose.yml
perl -pi -e "s/\"8016:80\"/\"$BACKEND_PORT:80\"/" docker-compose.yml
log_success "Updated docker-compose.yml with custom ports (Frontend: $FRONTEND_PORT, Backend: $BACKEND_PORT)"
elif command -v sed &>/dev/null; then
# Fallback to sed
sed -i.bak "s/\"8015:3000\"/\"$FRONTEND_PORT:3000\"/" docker-compose.yml
sed -i.bak "s/\"8016:80\"/\"$BACKEND_PORT:80\"/" docker-compose.yml
log_success "Updated docker-compose.yml with custom ports (Frontend: $FRONTEND_PORT, Backend: $BACKEND_PORT)"
else
# Manual replacement as last resort
log_warning "No sed or perl available, using manual approach..."
# Create new docker-compose.yml with updated ports
local temp_file="docker-compose.yml.temp"
while IFS= read -r line || [[ -n "$line" ]]; do
case "$line" in
*"\"8015:3000\"*)
echo "$line" | sed "s/8015/$FRONTEND_PORT/"
;;
*"\"8016:80\"*)
echo "$line" | sed "s/8016/$BACKEND_PORT/"
;;
*)
echo "$line"
;;
esac
done < docker-compose.yml > "$temp_file"
if mv "$temp_file" docker-compose.yml; then
log_success "Updated docker-compose.yml with custom ports (Frontend: $FRONTEND_PORT, Backend: $BACKEND_PORT)"
else
log_error "Failed to update docker-compose.yml"
mv docker-compose.yml.backup docker-compose.yml
exit 1
fi
fi
# Verify the changes were applied
if grep -q "\"$FRONTEND_PORT:3000\"" docker-compose.yml && grep -q "\"$BACKEND_PORT:80\"" docker-compose.yml; then
log_success "Port configuration verified in docker-compose.yml"
else
log_error "Failed to verify port configuration in docker-compose.yml"
log_info "Restoring original docker-compose.yml"
mv docker-compose.yml.backup docker-compose.yml
exit 1
fi
}
configure_environment_fallback() { configure_environment_fallback() {
log_info "Using simple configuration approach..." log_info "Using simple configuration approach..."
@ -409,12 +351,23 @@ configure_environment_fallback() {
log_info "Using perl for configuration..." log_info "Using perl for configuration..."
# Fix: Update BOTH password variables for database consistency # Fix: Update BOTH password variables for database consistency
perl -pi -e "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$DB_PASSWORD/" .env perl -pi -e "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$DB_PASSWORD/" .env
perl -pi -e "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$DB_PASSWORD/" .env perl -pi -e "s/^DATABASE_PASSWORD=.*/DATABASE_PASSWORD=$DB_PASSWORD/" .env
perl -pi -e "s/^DJANGO_ADMIN_PASSWORD=.*/DJANGO_ADMIN_PASSWORD=$ADMIN_PASSWORD/" .env perl -pi -e "s/^DJANGO_ADMIN_PASSWORD=.*/DJANGO_ADMIN_PASSWORD=$ADMIN_PASSWORD/" .env
perl -pi -e "s|^ORIGIN=.*|ORIGIN=$FRONTEND_ORIGIN|" .env perl -pi -e "s|^ORIGIN=.*|ORIGIN=$FRONTEND_ORIGIN|" .env
perl -pi -e "s|^PUBLIC_URL=.*|PUBLIC_URL=$BACKEND_URL|" .env perl -pi -e "s|^PUBLIC_URL=.*|PUBLIC_URL=$BACKEND_URL|" .env
perl -pi -e "s|^CSRF_TRUSTED_ORIGINS=.*|CSRF_TRUSTED_ORIGINS=$FRONTEND_ORIGIN,$BACKEND_URL|" .env perl -pi -e "s|^CSRF_TRUSTED_ORIGINS=.*|CSRF_TRUSTED_ORIGINS=$FRONTEND_ORIGIN,$BACKEND_URL|" .env
perl -pi -e "s|^FRONTEND_URL=.*|FRONTEND_URL=$FRONTEND_ORIGIN|" .env perl -pi -e "s|^FRONTEND_URL=.*|FRONTEND_URL=$FRONTEND_ORIGIN|" .env
# Add port configuration
perl -pi -e "s/^FRONTEND_PORT=.*/FRONTEND_PORT=$FRONTEND_PORT/" .env
perl -pi -e "s/^BACKEND_PORT=.*/BACKEND_PORT=$BACKEND_PORT/" .env
# Add port variables if they don't exist
if ! grep -q "^FRONTEND_PORT=" .env; then
echo "FRONTEND_PORT=$FRONTEND_PORT" >> .env
fi
if ! grep -q "^BACKEND_PORT=" .env; then
echo "BACKEND_PORT=$BACKEND_PORT" >> .env
fi
if grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env; then if grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env; then
log_success "Configuration completed successfully" log_success "Configuration completed successfully"
@ -429,7 +382,7 @@ configure_environment_fallback() {
POSTGRES_DB=adventurelog POSTGRES_DB=adventurelog
POSTGRES_USER=adventurelog POSTGRES_USER=adventurelog
POSTGRES_PASSWORD=$DB_PASSWORD POSTGRES_PASSWORD=$DB_PASSWORD
POSTGRES_PASSWORD=$DB_PASSWORD DATABASE_PASSWORD=$DB_PASSWORD
# Django Configuration # Django Configuration
DJANGO_ADMIN_USERNAME=admin DJANGO_ADMIN_USERNAME=admin
@ -442,9 +395,12 @@ PUBLIC_URL=$BACKEND_URL
FRONTEND_URL=$FRONTEND_ORIGIN FRONTEND_URL=$FRONTEND_ORIGIN
CSRF_TRUSTED_ORIGINS=$FRONTEND_ORIGIN,$BACKEND_URL CSRF_TRUSTED_ORIGINS=$FRONTEND_ORIGIN,$BACKEND_URL
# Port Configuration
FRONTEND_PORT=$FRONTEND_PORT
BACKEND_PORT=$BACKEND_PORT
# Additional Settings # Additional Settings
DEBUG=False DEBUG=False
ALLOWED_HOSTS=*
EOF EOF
log_success "Created minimal .env configuration" log_success "Created minimal .env configuration"
@ -516,8 +472,8 @@ configure_environment() {
echo "POSTGRES_PASSWORD=$DB_PASSWORD" echo "POSTGRES_PASSWORD=$DB_PASSWORD"
((updated_lines++)) ((updated_lines++))
;; ;;
POSTGRES_PASSWORD=*) DATABASE_PASSWORD=*)
echo "POSTGRES_PASSWORD=$DB_PASSWORD" echo "DATABASE_PASSWORD=$DB_PASSWORD"
((updated_lines++)) ((updated_lines++))
;; ;;
DJANGO_ADMIN_PASSWORD=*) DJANGO_ADMIN_PASSWORD=*)
@ -540,12 +496,30 @@ configure_environment() {
echo "FRONTEND_URL=$FRONTEND_ORIGIN" echo "FRONTEND_URL=$FRONTEND_ORIGIN"
((updated_lines++)) ((updated_lines++))
;; ;;
FRONTEND_PORT=*)
echo "FRONTEND_PORT=$FRONTEND_PORT"
((updated_lines++))
;;
BACKEND_PORT=*)
echo "BACKEND_PORT=$BACKEND_PORT"
((updated_lines++))
;;
*) *)
echo "$line" echo "$line"
;; ;;
esac esac
done < .env > "$temp_file" done < .env > "$temp_file"
# Add port variables if they weren't found in the original file
if ! grep -q "^FRONTEND_PORT=" "$temp_file"; then
echo "FRONTEND_PORT=$FRONTEND_PORT" >> "$temp_file"
((updated_lines++))
fi
if ! grep -q "^BACKEND_PORT=" "$temp_file"; then
echo "BACKEND_PORT=$BACKEND_PORT" >> "$temp_file"
((updated_lines++))
fi
log_info "Processed $processed_lines lines, updated $updated_lines configuration values" log_info "Processed $processed_lines lines, updated $updated_lines configuration values"
# Check if temp file was created successfully # Check if temp file was created successfully
@ -556,7 +530,7 @@ configure_environment() {
# Replace the original .env with the configured one # Replace the original .env with the configured one
if mv "$temp_file" .env; then if mv "$temp_file" .env; then
log_success "Environment configured with secure passwords" log_success "Environment configured with secure passwords and port settings"
else else
log_error "Failed to replace .env file" log_error "Failed to replace .env file"
log_info "Restoring backup and exiting" log_info "Restoring backup and exiting"
@ -566,17 +540,46 @@ configure_environment() {
fi fi
# Verify critical configuration was applied # Verify critical configuration was applied
if grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env && grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env; then if grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env && (grep -q "DATABASE_PASSWORD=$DB_PASSWORD" .env || grep -q "POSTGRES_PASSWORD=$DB_PASSWORD" .env); then
log_success "Configuration verification passed - both database password variables set" log_success "Configuration verification passed - database password variables set"
else else
log_error "Configuration verification failed - database passwords not properly configured" log_error "Configuration verification failed - database passwords not properly configured"
log_info "Showing database-related lines in .env for debugging:" log_info "Showing database-related lines in .env for debugging:"
grep -E "(POSTGRES_PASSWORD|POSTGRES_PASSWORD)" .env | while read -r line; do grep -E "(POSTGRES_PASSWORD|DATABASE_PASSWORD)" .env | while read -r line; do
echo " $line" echo " $line"
done done
mv .env.backup .env mv .env.backup .env
exit 1 exit 1
fi fi
# Verify port configuration
if grep -q "FRONTEND_PORT=$FRONTEND_PORT" .env && grep -q "BACKEND_PORT=$BACKEND_PORT" .env; then
log_success "Port configuration verified - frontend: $FRONTEND_PORT, backend: $BACKEND_PORT"
else
log_warning "Port configuration may not be complete - check .env file manually"
fi
}
update_docker_compose_ports() {
log_info "Updating Docker Compose port configuration..."
# Create backup of docker-compose.yml
cp docker-compose.yml docker-compose.yml.backup
# Update ports in docker-compose.yml using sed
if command -v sed &>/dev/null; then
# For frontend service port mapping
sed -i.tmp "s/\"[0-9]*:3000\"/\"$FRONTEND_PORT:3000\"/g" docker-compose.yml
# For backend service port mapping
sed -i.tmp "s/\"[0-9]*:8000\"/\"$BACKEND_PORT:8000\"/g" docker-compose.yml
# Clean up temporary files created by sed -i
rm -f docker-compose.yml.tmp
log_success "Docker Compose ports updated - Frontend: $FRONTEND_PORT, Backend: $BACKEND_PORT"
else
log_warning "sed command not available - Docker Compose ports may need manual configuration"
fi
} }
start_services() { start_services() {
@ -704,13 +707,11 @@ EOF
log_info "💾 Save your admin password in a secure location!" log_info "💾 Save your admin password in a secure location!"
echo "" echo ""
# Show port information if custom ports were used # Show port information
if [[ "$FRONTEND_PORT" != "8015" ]] || [[ "$BACKEND_PORT" != "8016" ]]; then echo -e "${BOLD}🔧 Port Configuration:${NC}"
echo -e "${BOLD}🔧 Custom Port Configuration:${NC}"
echo -e " 🖥️ Frontend Port: ${YELLOW}$FRONTEND_PORT${NC}" echo -e " 🖥️ Frontend Port: ${YELLOW}$FRONTEND_PORT${NC}"
echo -e " ⚙️ Backend Port: ${YELLOW}$BACKEND_PORT${NC}" echo -e " ⚙️ Backend Port: ${YELLOW}$BACKEND_PORT${NC}"
echo "" echo ""
fi
# Optional donation link # Optional donation link
echo -e "${BOLD}❤️ Enjoying AdventureLog?${NC}" echo -e "${BOLD}❤️ Enjoying AdventureLog?${NC}"
@ -769,8 +770,8 @@ main() {
create_directory create_directory
download_files download_files
prompt_configuration prompt_configuration
update_docker_compose_ports
configure_environment configure_environment
update_docker_compose_ports
start_services start_services
wait_for_services wait_for_services
print_success_message print_success_message