- *ใบอนุญาต MIT ถูกนำไปใช้กับ แพลตฟอร์ม เพื่อเปิดใช้งานการกระจายเครือข่าย ส่วนที่เหลือของโครงการยังคงอยู่ภายใต้ AGPL V3
ทางเลือกของ Google Tag Manager ที่เรียบง่าย แต่ทรงพลังซึ่งเปิดกว้างและเป็นมิตรกับความเป็นส่วนตัว ทางเลือกของ Google Analytics ในตัวของเราไม่ได้ใช้คุกกี้ใด ๆ และเป็นไปตามมาตรฐาน GDPR, CCPA และ PECR อย่างสมบูรณ์ เราทำให้มันง่ายและรวดเร็วในการลองสาธิตหรือเพียงแค่โฮสต์ด้วยตัวเองในการผลิต เราจะเสนอเวอร์ชันโฮสต์คลาวด์ในอนาคตอันใกล้
Data Manager ให้แบ็คเอนด์ที่สามารถส่งได้ทุกที่และเรามีท่อเพื่อเพิ่มทั้งตัวเชื่อมต่อและคุณสมบัติ เพียงไม่กี่คลิกออกแบบสคีมากำหนดค่าแบ็คเอนด์และสร้างจุดสิ้นสุดเพื่อส่งข้อมูลไป Tag Manager ใช้เทคโนโลยีพื้นฐานเดียวกันนี้เพื่อให้การวิเคราะห์
ภารกิจของเราคือการสร้างเครื่องมือการจัดการแท็กที่ใช้งานง่ายซึ่งสามารถขยายได้อย่างสมบูรณ์ผ่านแพลตฟอร์มที่กำหนดเอง (สร้างโดยชุมชนของเรา!) เราเป็นทีมเล็ก ๆ ที่หลงใหลในการสร้างซอฟต์แวร์โอเพนซอร์ซที่ยอดเยี่ยมและหวังว่าจะลดส่วนแบ่งการตลาดของ บริษัท ขนาดใหญ่ เราไม่ได้เป็นแฟนตัวยงของการเฝ้าระวังขององค์กรหรือรัฐบาลที่เพิ่มขึ้นและเราเชื่อว่าผู้ใช้เว็บไซต์ของคุณสมควรได้รับดีกว่า - อย่างไรก็ตามสิ่งนี้จำเป็นต้องมีความสมดุลกับข้อกำหนดทางธุรกิจเพื่อสร้างรายได้จากทรัพย์สินและข้อมูลส่วนบุคคล
นี่คือตัวอย่างเดียวของวิธีเริ่มต้นใช้งานหากคุณติดตั้ง Docker Compose อยู่แล้ว
~ > curl -L https://github.com/scale8/scale8/raw/master/docker-compose.yml | docker-compose -f - up เมื่อคำสั่งด้านบนเริ่มให้บริการให้ชี้เบราว์เซอร์ของคุณที่ http://127.0.0.1:8080 คุณจะได้รับแจ้งให้ป้อนรายละเอียดพื้นฐานบางอย่างเพื่อกำหนดค่าโครงการ
หรือหากคุณได้ตรวจสอบโครงการแล้วและติดตั้งการพึ่งพาผ่าน ~> yarn install:all และต้องการเรียกใช้ในเครื่อง: -
~ > yarn run:allเราได้ออกแบบแพลตฟอร์มทั้งหมดเพื่อรองรับนักเทียบท่าและ จำกัด ในกรณีที่กระบวนการสร้างที่ซับซ้อนและการติดตั้งปริมาณพิเศษ เรากำลังเขียนสคริปต์อย่างหนักเพื่อให้การตั้งค่าพร้อมการผลิตแบบคลิกเดียวที่สมบูรณ์สำหรับทั้ง AWS, Google Cloud และการตั้งค่า Kubernetes ที่กำหนดเอง
| ส่วนประกอบ | คำอธิบาย |
|---|---|
| API | มีตรรกะทางธุรกิจทั้งหมดและให้จุดสิ้นสุดของ GraphQL / RESTFUL ที่ให้กำลัง UI |
| ทั่วไป | ห้องสมุดทั่วไปขนาดเล็กที่ใช้ร่วมกันระหว่างส่วนประกอบโครงการ |
| ขอบ | ออกแบบมาเพื่อปรับขนาดในแนวนอนเซิร์ฟเวอร์ Edge มีหน้าที่ส่งมอบแพลตฟอร์มที่ขอบและติดตามข้อมูลใน |
| แพลตฟอร์ม | แพลตฟอร์มที่กำหนดเองที่สร้างโดยชุมชนและสเกล 8 ที่ขยายการทำงานของแท็กผู้จัดการ |
| เราเตอร์ | เราเตอร์ง่าย ๆ ที่สร้างขึ้นโดยใช้ Nginx และออกแบบมาสำหรับการปั่นรุ่นโฮสต์ตัวเองอย่างรวดเร็ว |
| UI | จัดเตรียมการสร้างแบบคงที่ของ UI โดยใช้ next.js & react |
~> yarn install:all~> yarn build:all เนื่องจากไม่ใช่ทุกคนที่มีข้อกำหนดในการใช้ตัวจัดการแท็กเต็มรูปแบบเรายังได้ให้ตัวเลือกในการสร้างเวอร์ชันที่เบามากซึ่งต้องใช้ JavaScript เพียงไม่กี่บรรทัด
นอกจากนี้เรายังได้ให้การสนับสนุนอย่างเต็มที่สำหรับการติดตามแอปพลิเคชันหน้าเดียว (SPAs) และ Hash-Routing สิ่งเหล่านี้สามารถเปิดใช้งานได้เมื่อคุณติดตั้งแอปพลิเคชันของคุณ
เราได้ทำอย่างดีที่สุดเพื่อลดความซับซ้อนของกระบวนการจัดระเบียบและการจัดการแท็กในคุณสมบัติเว็บอย่างน้อยหนึ่งรายการ Tag Manager นั้นขึ้นอยู่กับเอ็นจิ้น ที่ขับเคลื่อนด้วยเหตุการณ์ ตามกฎ ซึ่งมีการเรียกใช้กฎเมื่อมีการตอบสนองเหตุการณ์และเงื่อนไขและข้อยกเว้นทั้งหมดส่งผลให้มีการกระทำอย่างน้อยหนึ่งครั้ง
เหตุการณ์ที่เกิดขึ้นภายในเบราว์เซอร์สามารถจัดการได้อย่างง่ายดายโดยอินเทอร์เฟซง่าย ๆ ของเรา ลิงค์คลิกหน้าเข้ามาในโฟกัสหรือแบบฟอร์มที่ส่งเป็นตัวอย่างทั้งหมดของเหตุการณ์ที่คุณอาจต้องการฟัง
เงื่อนไขคือการทดสอบที่ทำในคอนเทนเนอร์ข้อมูลและมีจุดมุ่งหมายเพื่อยืนยันว่าคีย์บางอย่างที่อยู่ในวัตถุคอนเทนเนอร์ข้อมูลนั้นสอดคล้องกับค่าที่คาดหวัง ข้อยกเว้นมีวัตถุประสงค์เพื่อทำการทดสอบเดียวกัน แต่แทนที่จะยกเว้นกฎหากการทดสอบผ่าน
เมื่อพบเหตุการณ์และเงื่อนไขที่จำเป็นของกฎการกระทำจะถูกไล่ออก เรียนรู้เพิ่มเติมเกี่ยวกับการกระทำที่นี่
เดิมทีเราเริ่มต้นด้วย front-end TypeScript และ Scala ขับเคลื่อน Back-end เพื่อให้ความโปร่งใสของรหัสที่เราต้องการควบคู่ไปกับการตัดสินใจที่จะเปิดแหล่งที่มาของโครงการทำให้เราต้องย้ายไปยัง TypeScript เกือบหมดจดด้วยเซิร์ฟเวอร์ Edge ใน Java เราเชื่อว่าอนาคตของโครงการนี้ตั้งอยู่กับชุมชนโอเพนซอร์ซในขณะนี้และมีวิศวกร TypeScript และ Java มากกว่าวิศวกร Scala
ก่อนที่จะปล่อยเราได้ย้ายจาก CRA ไปยัง Next.js ด้วย นอกจากนี้เรายังได้แนะนำการผกผันของการควบคุม (IOC) ใน back-end typescript ของเรา เป้าหมายของเราคือโครงการนี้จะขยายได้มากที่สุด แบบจำลองแบบพลักแอนด์เพลย์เปิดโอกาสให้เราได้ให้บริการหลายบริการและป้องกันการล็อคอิน
container . bind < BaseStorage > ( TYPES . BackendStorage ) . to ( MongoDBStorage ) . inSingletonScope ( ) ;
container . bind < BaseDatabase > ( TYPES . BackendDatabase ) . to ( MongoDb ) . inSingletonScope ( ) ;
container . bind < BaseLogger > ( TYPES . BackendLogger ) . to ( ConsoleLogger ) . inSingletonScope ( ) ;
container . bind < BaseEmail > ( TYPES . BackendEmail ) . to ( Mailer ) . inSingletonScope ( ) ;
container . bind < BaseConfig > ( TYPES . BackendConfig ) . to ( EnvironmentConfig ) . inSingletonScope ( ) ;เราใช้วิธีการที่คล้ายกันกับรหัส Java ของเราด้วย
@ Replaces ( StorageInterface . class )
@ Singleton
@ Requires ( property = "backend-storage" , value = "google" )
public class GoogleStorage implements StorageInterface {
...
}ในปัจจุบันเราให้บริการ MongoDB และ BigQuery ของ Google สำหรับการวิเคราะห์เท่านั้น MongoDB เหมาะสำหรับโครงการขนาดเล็กเท่านั้นและเพื่อจุดประสงค์ในการสาธิต / การทดสอบ เรามีการสนับสนุน Clickhouse เต็มรูปแบบในรุ่นคลาวด์ที่ยังไม่ได้เปิดตัวและเราจะเพิ่มการสนับสนุนนี้ในเวอร์ชันโฮสต์ตัวเองในไม่ช้าพร้อมกับ Redshift และ Postgres
นอกจากนี้เรายังได้ลบท่อรวมรายชั่วโมงของเราออกจากรุ่นโฮสต์ตัวเอง สิ่งนี้เพิ่มระดับความซับซ้อนที่ไม่จำเป็นสำหรับกรณีการใช้งานส่วนใหญ่ มีแผนที่จะแนะนำสิ่งนี้อีกครั้งในภายหลังและหากทุกคนต้องการมันโปรดแจ้งให้เราทราบ
เอกสารทั้งหมดของเราได้รับการออกแบบมาสำหรับผลิตภัณฑ์คลาวด์เวอร์ชัน แต่เราจะเพิ่มเอกสารรายละเอียดเพิ่มเติมสำหรับเวอร์ชันโฮสต์ตัวเองเร็ว ๆ นี้ เราได้ซ่อนคุณสมบัติบางอย่างเช่นการประมวลผลการชำระเงินและการยกเลิก SSL สำหรับโดเมนที่กำหนดเองซึ่งไม่เกี่ยวข้องกับเวอร์ชันโฮสต์ตนเอง
UI ทั้งหมดใช้พลังงานจาก GraphQL โดยใช้ Apollo และเอกสาร API นั้นถูกสร้างขึ้นโดยอัตโนมัติและนำทางได้อย่างง่ายดาย
ทั้งหมดที่เราถามคือคุณแสดงหรือดูสิ่งนี้ใน GitHub หากคุณชอบโครงการ เราอยากให้ผู้คนแบ่งปันและบล็อกเกี่ยวกับเรื่องนี้ด้วย! ปัญหาทั้งหมดจะได้รับการตอบกลับอย่างรวดเร็วใน GitHub และเรารู้สึกตื่นเต้นที่ได้เห็นว่าสิ่งนี้จะไปต่อไป
| ผู้เขียน | คนอื่น ๆ | |
|---|---|---|
| คริสโตเฟอร์เบ็ค | ||
| Alessandro Barzanti |