Skip to content

Documentatie

23 Onderwerpen 29 Berichten

Subcategorieën


  • 2 Onderwerpen
    2 Berichten
    nikitaskliarovN
    Overzicht

    Dit script automatiseert het synchroniseren van de productiedatabase naar je lokale Docker-omgeving. Het vervangt het handmatige proces van exporteren via phpMyAdmin, downloaden, en importeren via de terminal.

    Wat doet het script? Controleert of Docker, SSH en MySQL beschikbaar zijn Maakt verbinding met de productieserver via SSH Draait mysqldump op de productieserver (alleen lezen, geen wijzigingen aan productie) Downloadt het gecomprimeerde bestand naar je lokale machine Vraagt om bevestiging voordat lokale tabellen worden verwijderd Importeert de export in je lokale Docker database Verifieert het resultaat en ruimt tijdelijke bestanden op Tabellen zonder data

    De volgende tabellen worden alleen als structuur geëxporteerd (zonder data), omdat ze grote logtabellen zijn die lokaal niet nodig zijn:

    hero_contactmanager_log hero_emailsender_emaillog hero_freighthero_calculator_data_audit_log Configuratie Inloggegevens instellen

    Open update-local-database.sh en vul de volgende variabelen in:

    # Productieserver (SSH + Database) REMOTE_SSH_HOST="thefreighthero.com" REMOTE_SSH_USER="freighther" REMOTE_DB_USER="<vul in>" # Database gebruikersnaam op productie REMOTE_DB_PASS="<vul in>" # Database wachtwoord op productie # Lokale Docker database LOCAL_HOST="127.0.0.1" LOCAL_PORT="3307" LOCAL_USER="freighther_nl" LOCAL_PASS="freighther_nl" LOCAL_DB="freighther_nl"

    ⚠️ Let op: Dit script bevat wachtwoorden in platte tekst. Deel dit bestand nooit via Git of andere publieke kanalen. Voeg het toe aan .gitignore.

    SSH-sleutel instellen (aanbevolen)

    Om te voorkomen dat je elke keer je SSH-wachtwoord moet invoeren:

    ssh-copy-id freighther@thefreighthero.com Optioneel: pv installeren

    Voor een voortgangsbalk tijdens het importeren:

    # macOS brew install pv # Ubuntu/Debian sudo apt install pv Gebruik Script uitvoeren cd ~/Desktop/tfh/helpers bash update-local-database.sh Verwachte output ==> Preparing environment ✔ Docker is running ✔ SSH client available ✔ MySQL client available ==> Exporting database from production via SSH Connecting to freighther@thefreighthero.com... [remote] Dumping tables with data... [remote] Dumping structure-only tables... [remote] Compressing... [remote] Done: 45M ✔ Remote export complete ==> Downloading export from production ...progress... ✔ Download complete ✔ Decompressed: freighther_nl_20260212_143022.sql (180MB) ==> Truncating local database Found 47 tables to drop Target: mysql -h 127.0.0.1 -P 3307 -u freighther_nl freighther_nl DROP TABLE `hero_contactmanager_contacts` DROP TABLE `hero_contactmanager_log` DROP TABLE `hero_emailsender_emaillog` ... ⚠️ This will DROP all 47 tables in LOCAL database 'freighther_nl' ⚠️ Connection: 127.0.0.1:3307 Continue? (yes/no): yes ✔ Dropped 47 tables ==> Importing into local database ✔ Import complete ==> Verifying import ✔ 47 tables imported hero_contactmanager_log: 0 rows (structure only ✔) hero_emailsender_emaillog: 0 rows (structure only ✔) hero_freighthero_calculator_data_audit_log: 0 rows (structure only ✔) ==> Cleaning up ✔ Removed remote dump Local file kept: freighther_nl_20260212_143022.sql ============================================= 🐳 Database sync complete! ============================================= Bevestigingsvraag

    Voordat het script tabellen verwijdert, toont het:

    De exacte database-verbinding (127.0.0.1:3307) Alle tabellen die verwijderd worden Een bevestigingsvraag waar je yes moet typen

    Typ iets anders dan yes om te annuleren. Het script ruimt dan het remote bestand op en stopt.

    Veiligheid Productiedatabase wordt NIET gewijzigd Stap Waar Actie Export Productieserver mysqldump — alleen lezen Download Productie → Lokaal Bestandsoverdracht Drop tabellen Alleen lokale Docker DROP TABLE op 127.0.0.1:3307 Import Alleen lokale Docker mysql < bestand op 127.0.0.1:3307 Opruimen Productieserver Verwijdert alleen /tmp/*.sql.gz Wachtwoorden beschermen

    Het script bevat database-wachtwoorden. Zorg ervoor dat:

    Het bestand niet in versiebeheer (Git) staat Voeg toe aan .gitignore:update-local-database.sh Stel de juiste bestandsrechten in:chmod 700 update-local-database.sh Dit zorgt ervoor dat alleen jij het bestand kunt lezen en uitvoeren. Problemen oplossen "Access denied" bij remote export Controleer REMOTE_DB_USER en REMOTE_DB_PASS Zorg dat het wachtwoord geen speciale tekens bevat die verkeerd worden geïnterpreteerd Test handmatig: ssh freighther@thefreighthero.com "mysqldump -u GEBRUIKER -pWACHTWOORD freighther_nl --no-data | head -5" "Docker is not running" Start Docker Desktop of de Docker daemon Import mislukt Controleer of je lokale Docker MySQL-container draait Test verbinding: mysql -h 127.0.0.1 -P 3307 -u freighther_nl -p freighther_nl -e "SELECT 1;" Geen voortgangsbalk bij import Installeer pv (zie configuratie hierboven) Structuur-only tabellen aanpassen

    Om tabellen toe te voegen of te verwijderen die zonder data worden geëxporteerd, pas het array aan in het script:

    STRUCTURE_ONLY_TABLES=( "hero_contactmanager_log" "hero_emailsender_emaillog" "hero_freighthero_calculator_data_audit_log" # Voeg hier extra tabellen toe ) Script #!/bin/bash # ============================================================ # 🐳 FreightHero Local DB Sync # Exports from production, downloads, and imports locally # ============================================================ # -- Remote (Production) Configuration ---------------------- REMOTE_SSH_HOST="thefreighthero.com" REMOTE_SSH_USER="freighther" REMOTE_DB_NAME="freighther_nl" REMOTE_DB_USER="freighther" REMOTE_DB_PASS="DIRECT ADMIN PASS OF USER" REMOTE_DUMP_PATH="/home/freighther/dump/freighther_nl_export.sql" # -- Local (Docker) Configuration ---------------------------- LOCAL_HOST="127.0.0.1" LOCAL_PORT="3307" LOCAL_DB="LOCAL_DB_NAME" LOCAL_USER="LOCAL_DB_USER" LOCAL_PASS="LOCAL_DB_PASS" # -- Export password for mysql client ------------------------ export MYSQL_PWD="$LOCAL_PASS" # -- Tables to export structure only (no data) --------------- STRUCTURE_ONLY_TABLES=( "hero_contactmanager_log" "hero_emailsender_emaillog" "hero_freighthero_calculator_data_audit_log" ) # -- Local SQL file with timestamp --------------------------- LOCAL_SQL_FILE="freighther_nl_$(date +%Y%m%d_%H%M%S).sql" # -- Helper -------------------------------------------------- log_step() { echo ""; echo "==> $1"; } log_info() { echo " $1"; } log_done() { echo " ✔ $1"; } log_error() { echo " ✘ $1"; exit 1; } # ============================================================ # Step 1: Check prerequisites # ============================================================ log_step "Preparing environment" if ! docker info &>/dev/null; then log_error "Docker is not running. Start Docker first." fi log_done "Docker is running" if ! command -v ssh &>/dev/null; then log_error "SSH client not found." fi log_done "SSH client available" if ! command -v mysql &>/dev/null; then log_error "mysql client not found." fi log_done "MySQL client available" # ============================================================ # Step 2: Run mysqldump on production server via SSH # ============================================================ log_step "Exporting database from production via SSH" log_info "Connecting to ${REMOTE_SSH_USER}@${REMOTE_SSH_HOST}..." # Build --ignore-table flags for structure-only tables IGNORE_FLAGS="" for TABLE in "${STRUCTURE_ONLY_TABLES[@]}"; do IGNORE_FLAGS+=" --ignore-table=${REMOTE_DB_NAME}.${TABLE}" done # Space-separated list for structure-only dump STRUCTURE_TABLES="${STRUCTURE_ONLY_TABLES[*]}" # Write remote script to a temp file to avoid quoting hell REMOTE_SCRIPT_FILE=$(mktemp) cat > "$REMOTE_SCRIPT_FILE" <<EOF #!/bin/bash set -e echo "[remote] Dumping tables with data..." mysqldump -u ${REMOTE_DB_USER} -p${REMOTE_DB_PASS} \ ${REMOTE_DB_NAME} \ ${IGNORE_FLAGS} \ --single-transaction \ --routines \ --triggers \ > ${REMOTE_DUMP_PATH} echo "[remote] Dumping structure-only tables..." mysqldump -u ${REMOTE_DB_USER} -p${REMOTE_DB_PASS} \ ${REMOTE_DB_NAME} \ ${STRUCTURE_TABLES} \ --no-data \ --single-transaction \ >> ${REMOTE_DUMP_PATH} echo "[remote] Compressing..." gzip -f ${REMOTE_DUMP_PATH} FILE_SIZE=\$(ls -lh ${REMOTE_DUMP_PATH}.gz | awk '{print \$5}') echo "[remote] Done: \${FILE_SIZE}" EOF ssh "${REMOTE_SSH_USER}@${REMOTE_SSH_HOST}" bash < "$REMOTE_SCRIPT_FILE" 2>&1 | while IFS= read -r line; do log_info "$line" done if [[ ${PIPESTATUS[0]} -ne 0 ]]; then rm -f "$REMOTE_SCRIPT_FILE" log_error "Remote export failed. Check SSH connection and DB credentials." fi rm -f "$REMOTE_SCRIPT_FILE" log_done "Remote export complete" # ============================================================ # Step 3: Download with progress # ============================================================ log_step "Downloading export from production" if command -v rsync &>/dev/null; then rsync -avz --progress \ "${REMOTE_SSH_USER}@${REMOTE_SSH_HOST}:${REMOTE_DUMP_PATH}.gz" \ "${LOCAL_SQL_FILE}.gz" \ 2>&1 | while IFS= read -r line; do echo " ${line}" done else scp \ "${REMOTE_SSH_USER}@${REMOTE_SSH_HOST}:${REMOTE_DUMP_PATH}.gz" \ "${LOCAL_SQL_FILE}.gz" fi if [[ ! -f "${LOCAL_SQL_FILE}.gz" ]]; then log_error "Download failed." fi log_done "Download complete" log_info "Decompressing..." gunzip -f "${LOCAL_SQL_FILE}.gz" if [[ ! -f "${LOCAL_SQL_FILE}" ]]; then log_error "Decompression failed." fi FILE_SIZE_MB=$(du -m "${LOCAL_SQL_FILE}" | awk '{print $1}') log_done "Decompressed: ${LOCAL_SQL_FILE} (${FILE_SIZE_MB}MB)" # ============================================================ # Step 4: Drop all tables in local database # ============================================================ log_step "Truncating local database" # Re-export password for local commands export MYSQL_PWD="$LOCAL_PASS" TABLES=$(mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" \ -N -e "SHOW TABLES;" 2>/dev/null) if [[ -z "$TABLES" ]]; then log_info "Local database is empty, skipping." else TABLE_COUNT=$(echo "$TABLES" | wc -l | tr -d ' ') log_info "Found ${TABLE_COUNT} tables to drop" # Disable FK checks, drop all, re-enable DROP_SQL="SET FOREIGN_KEY_CHECKS = 0;" while IFS= read -r TABLE; do DROP_SQL+=" DROP TABLE IF EXISTS \`${TABLE}\`;" done <<< "$TABLES" DROP_SQL+=" SET FOREIGN_KEY_CHECKS = 1;" mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" \ -e "${DROP_SQL}" 2>/dev/null if [[ $? -ne 0 ]]; then log_error "Failed to drop tables." fi log_done "Dropped ${TABLE_COUNT} tables" fi # ============================================================ # Step 5: Import into local database # ============================================================ log_step "Importing into local database" if command -v pv &>/dev/null; then pv "${LOCAL_SQL_FILE}" | mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" 2>/dev/null else log_info "(tip: install 'pv' for a progress bar)" mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" < "$LOCAL_SQL_FILE" fi if [[ $? -ne 0 ]]; then log_error "Import failed." fi log_done "Import complete" # ============================================================ # Step 6: Verify # ============================================================ log_step "Verifying import" TOTAL_TABLES=$(mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" \ -N -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='${LOCAL_DB}';" 2>/dev/null) log_done "${TOTAL_TABLES} tables imported" for TABLE in "${STRUCTURE_ONLY_TABLES[@]}"; do ROW_COUNT=$(mysql -h "$LOCAL_HOST" -P "$LOCAL_PORT" -u "$LOCAL_USER" "$LOCAL_DB" \ -N -e "SELECT COUNT(*) FROM \`${TABLE}\`;" 2>/dev/null) log_info "${TABLE}: ${ROW_COUNT:-0} rows (structure only ✔)" done # ============================================================ # Step 7: Cleanup # ============================================================ log_step "Cleaning up" ssh "${REMOTE_SSH_USER}@${REMOTE_SSH_HOST}" "rm -f ${REMOTE_DUMP_PATH}.gz" 2>/dev/null log_done "Removed remote dump" log_info "Local file kept: ${LOCAL_SQL_FILE}" unset MYSQL_PWD echo "" echo "=============================================" echo " 🐳 Database sync complete!" echo "=============================================" echo ""
  • 1 Onderwerpen
    1 Berichten
    ?

    Deze teksten kwamen van de portal. Dit ging niet meer vanwege de meerdere talen. Daarom kan je dit nu vinden onder instellingen.

    c11c07be-e994-44d2-89b6-2f5eaf7e8f34-image.png image.png

    0e6fd227-3fd0-4a81-8906-a70dd222c06f-image.png image.png

  • 2 Onderwerpen
    2 Berichten
    ?

    Via cronjob uit Contactmanager taken genereren voor telesales. Bijv

    oud-klant niet actief voor x periode bedrijf met tag x zonder contact voor x periode
  • 2 Onderwerpen
    2 Berichten
    nikitaskliarovN
    Invoice System - Zendingspagina Overzicht

    Stack: PHP 7.3, Pagekit, Vue 1, Webpack 1

    Functionaliteiten Factuur aanmaken Voortschrijdende factuur aanmaken Knop voor PDF regenereren Creditfactuur aanmaken via wissen knop Architectuur InvoiceApiController.php

    Doel: API-endpoints voor invoice operaties
    Routes: /invoice, /advanceinvoice
    Verantwoordelijkheid: Request handling, render/rerender functies

    Twee if-else opties voor render:

    Optie 1: Direct render Optie 2: Render met cache InvoiceFactory.php

    Doel: Business logic en invoice-object creatie

    InvoiceMakerModule.php

    Doel: Module initialisatie

    Invoice Generatie Invoice.php

    Locatie: packages/bixie/freighthero/invoice_templates/

    Stappen:

    Invoice::create() DOMPDF generate html Render Output Templates & Vertalingen

    Locatie: packages/bixie/freighthero/invoice_templates/

    Drie templates (taal-gebaseerd):

    'en' → TFH-Invoice 'de' → thefreighthero_de 'nl' → thefreighthero

    Vertaalde tekst: invoice_templates/languages/ (3 talen)

    Vertaling gebeurt op de plek in template met vertaalde calculatie lijnen (zie ShipmentApiController)

    Shipment & Invoice Koppeling ShipmentApiController.php

    Doel: Return van vertaalde calculatie lijnen

    Property: $shipment->language

    Gebruikt om template te definiëren van komende factuur PDF Opslag

    Locatie:
    root/../invoices/INVOICENUMMER - COMPANY NAME - facturen
    storage/pdf/quotes/zendingsnummer/Quote-S{{ZENDINGSNUMMER}}-{{QUOTE ID VAN hero_freighthero_quote db tabel}}-{{BEDRIJFSNAAM}}-.pdf - offertes

    Proces:

    Invoices aanmaken/regenereren PDF genereren via DOMPDF Opslaan in gestructureerde directory Quote System QuoteApiController.php

    Doel: API-endpoints voor quote operaties
    Routes: /quote
    Verantwoordelijkheid: Request handling

    Quote.php

    Locatie: packages/bixie/freighthero/quote_templates/

    Functie: Bevat alle render logica

    Workflow: Identiek aan invoice workflow

    Templates & Vertalingen - Quote

    Locatie: Frontend invoicemaker -> settings -> offertes

    Tekstinstellingen:

    Drie textvelden (per taal) Achtergrondafbeelding uploader

    Opslaan: Deze instellingen worden opgeslagen in settings, niet in invoice_templates/languages/ (behalve sommige text in quote, zie quote.php bestand

    Versie: 1.0
    Status: Documentatie van huidige implementatie

  • 4 Onderwerpen
    4 Berichten
    F

    Bij export is de destination country geen NL. Bij export ziet het CMS destination Country niet als vertrekland. Dit is dus NIET het geval. Uitschakelen Dest Country is in dit geval de oplossing. Zie onderstaande.
    0_1658906742748_04177c1c-8d65-43ab-82d0-72a9413485a3-image.png

  • 5 Onderwerpen
    6 Berichten
    nikitaskliarovN

    Bevat nog steeds een issue met shipment betaald status. De reden zijn onbekend.

  • 7 Onderwerpen
    12 Berichten
    nikitaskliarovN
    Internal Server Documentation The Freight Hero 1. Algemene Informatie

    De Internal-Server is een fysieke HP-server op de kantoorlocatie. Deze dient als de cruciale schakel (proxy) tussen de kantoor-PBX (VoIP-telefooncentrale) en het cloudplatform Realtime.

    Hoofdfunctie: Het monitoren van de PBX via webhooks/events, het verwerken van deze data en het doorsturen van notificaties naar de cloud-API (live.thefreighthero.nl). Dit zorgt ervoor dat inkomende en uitgaande gesprekken zichtbaar worden in de browsers van medewerkers.

    2. Toegang en Beheer Fysieke Toegang: Indien SSH niet beschikbaar is, kan beheer plaatsvinden via een directe monitor- en toetsenbordverbinding. Wachtwoordherstel: Kan worden uitgevoerd door de GRUB-bootloader te onderbreken tijdens het opstarten en de single user mode (of init=/bin/bash) te gebruiken. SSH-verbinding: Toegang via het lokale netwerk: ssh root@192.168.1.25. 3. Services en Configuratie

    Het systeem maakt gebruik van systemd om de applicatie te beheren.

    Service-naam: internal.service Configuratiebestand: /etc/systemd/system/internal.service Hierin staat de cruciale INTERNAL_API_KEY. Zonder de juiste key zal de cloudserver alle verzoeken weigeren met een 403 Forbidden error. Applicatie-locatie: /home/internal/internal-server/bin/www (Node.js). 4. Veelvoorkomende Commando's Logs inzien: journalctl -u internal -f (essentieel voor het debuggen van gesprekken). Service herstarten: systemctl restart internal. Configuratie herladen: systemctl daemon-reload (nodig na wijzigingen in het servicebestand).

    Cruciaal: De INTERNAL_API_KEY moet exact overeenkomen met de sleutel die door de cloudserver wordt verwacht. Deze is te verifiëren in de omgeving van de draaiende Node-processen op de VPS server (root@thefreighthero.com) via cat /proc/[PID]/environ waar PID is van realtime service (gebruik ps aux hiervoor)