@dovid מציע שירות כזה, תוכל לבדוק עוד פרטים בחתימה של כל הודעה שלו
צבי-ש
-
דרוש יעוץ (אפשר בתשלום) לתכנון פרויקט בJS -
תכנון טבלאות לפרוייקט@dovid כתב בתכנון טבלאות לפרוייקט:
הוא כותב שגם אחרי גיבוב זה קל לניחוש בגלל שהקלט קטן ומוגדר מאוד, זה בעיה רצינית
אפשר לשמור מגובב מספר-שדירג_מספר-מדורג, ועם עמודה ליד מה הדירוג,
זה יעבור האשינג והלוגיקה תהיה דומה, וזה יכפיל בהרבה את מספר האופציות שצריך לנחש (זה עדיין יהיה מוגבל, אבל טוב יותר משמעותית), אם חשוב לדעת כמה דירוגים יש לבן אדם מסויים (כמו שנכתב בהודעה של פותח השרשור), זה יסרבל את התהליך, כי יצטרכו לשמור את הנתון הזה בנפרד, ולעדכן אותו על כל שינוי עם שאילתה ייעודית, בגלל שלא יוכלו לעשות פשוט count על מספר עמודות מול הdb, כי לא נשמר שם מסודר המספר שאותו דירגו, (ואז יצטרכו ללכת כמו הלישנא בתרא שלו, בכל דירוג לעדכן את הפרטים) -
תכנון טבלאות לפרוייקט@eido כתב בתכנון טבלאות לפרוייקט:
הדירוג צריך להיות אנונימי, אחרת לא ידרגו.
מה שמשאיר אותנו עם מספר טלפון (שעליו יהיה הדירוג) והדירוג עצמו, מכיון שא"א להשאיר רק דירוג, כי אז הוא לא ישתקלל נכון עם דירוגים הבאים, צריך להשאיר את מספר המדרגים והדירוג הכולל כדי שיהיה אפשר להוסיף עליו את הדירוג החדש ולשקלל מחדש.
אתה רוצה לאפשר לכל אדם להקיש כמה דירוגים שהוא רוצה על כל אחד?
אם ראובן ירצה להתנכל לשמעון, הוא פשוט יתקשר 10 פעמים וידרג אותו 1, וזהו?אולי כדאי לשמור מי דירג ומתי, ולאפשר לו לדרג שוב רק בעוד חודש נגיד, או לאפשר לו לערוך את הדירוג ל2 אם הוא פתאום כן קיבל שירות וכדומה
בשביל להשאיר את זה אנונימי אתה יכול או לשמור מספר ולא להציג אותו לאף אחד (אנונימי כלפי המאזינים, שלהם אין דרך לדעת מי דירג ומתי),
או לשמור האשינג של מספר שדירג, ולבדוק האם יש לו דירוג קיים לפי ההאשינג, להשמיע לו את הדירוג הקיים ולאפשר לערוך, או אם לא קיים, להשאיר דירוג חדש
ככה אתה גם לא יודע מי זה, אבל אתה יודע שx כבר היה או לא היה(האשינג היא פונקציה שלוקחת מחרוזת כלשהיא, ומוציאה מחרוזת אחרת, עם מספר כללים
1 אי אפשר לחזור אחורה למחרוזת המקורית,
2 כל קלט שתכניס, ייצא פלט אחר.או במקרה שלנו, אם תכניס לפונקציה 0521234567 אתה תקבל למשל אבגדהו,
תשמור בdb ״אבגדהו״ דירג 5 את מספר פלאפון xyz,
אבל אתה לעולם לא תוכל לחזור אחורה מ אבגדהו אל 0521234567,
כשתרצה לבדוק האם הוא כבר דירג, ומה הדירוג שלו, תוכל להכניס שוב את 0521234567 אל הפונקציה, לקבל שוב את אבגדהו ועליו לבדוק בdb את הנתונים ) -
הפעלת תהליך נוד מחדש לקובץ ספציפי - הגיוני?@ששא כתב בהפעלת תהליך נוד מחדש לקובץ ספציפי - הגיוני?:
הספרייה עובדת שהוא שומר מידע על כל שיחה לפי מזהה השיחה שנשלח מימות, ולכן אם מפעילים מחדש אז כל המידע הזה נמחק ולכן השיחה מתחילה מחדש
נכון, כי זה נשמר לקואלית, לא מורכב לשייך את כל הנתונים שיישמרו בredis או מסד חיצוני מהיר אחר, ולא יורגש כמעט ההבדל במהירות במהלך השיחה, וזה כן יישמור נתונים אחרי ריסטארט
את מה שהוא הביא לך אני לא מכיר, אבל אם את עיקר הבעיה אתה יכול לפתור עם שמירה של הנתונים חיצונית, אז מה נשאר עוד?
-
הגדרת תנאים שונים שלא יזוהו כבוטים בקלאודפלר@ששא כתב בהגדרת תנאים שונים שלא יזוהו כבוטים בקלאודפלר:
(את ה UA אפשר לזייף)
לא הבנתי
user agnet הוא פרמטר שכל אחד מחליט מה למלאות שם, אי אפשר לסמוך על זה כאבטחה
-
וואו! מדהים! speedy ai -מפסיקים לחכות על הקו לנציגי שירותhttps://www.speedyai.co.il/terms-of-service#terms-section
4.2 המידע יישמר במאגרי החברה לפרק זמן שייקבע לפי שיקול דעתה, לצרכים תפעוליים, אבטחת מידע, שיפור השירות, או בהתאם לדרישות הדין. אין כל התחייבות למחיקת מידע באופן אוטומטי או להפיכתו לאנונימי.
-
ימות המשיח השמעת הודעת קמפיין בכניסה לשלוחת API - מי מכיר?לא מוצא כרגע את התיעוד של שמיעת הודעת קמפיין כשלוחה רגילה
אבל השמעה עם api זה לכאורה זה ${templateId}.wav
אם לא עובד אנסה לבדוק לעומק -
ימות המשיח השמעת הודעת קמפיין בכניסה לשלוחת API - מי מכיר?אתה יכול בapi עצמו להשמיע את ההקלטה של הקמפיין,
אתה יכול לעשות שלוחת ביניים שתשמיע את ההקטה, ואז תעביר אל השלוחת api -
פיתוח אפליקציית אנטרנט + מסד נתונים בדוקרתאר לעצמך שעוד שבועיים אתה צריך לתת גישה למתכנת לקוד/ לשרת, והוא ירצה להריץ לוקאלית את המערכת, למה שיריץ הכל, וישים env לכל הפרויקטים, והגדרות ניתוב דומיינים להכל, כשהוא צריך רק פרויקט אחד קטן של תזמון משימות?
אם יש לך חלק בפרויקט שאחראי על שלוחת api בקו, וברוך השם יש שם עומס עם מאות מאזינים בו זמנית, אתה תרצה להיות יכול לשכפל רק את החלק הזה, עם מאזן עומסים, ולא את כל הפרויקט כולו ולהסתבך עם זה
אם אחד מהם נופל מקריסה, למה שכולם ייפלו?
אם אתה רוצה לבדוק כמה זיכרון / עיבוד וכדומה צורך כל קונטיינר, זה פשוט יותר,
אם אתה רוצה לעדכן קוד בחלק אחד, למה לעשות בניה מחדש ולהפיל אותם לכמה שניות כשאפשר רק אותו -
מיקום קבצי nodejs בשרת@eido כתב במיקום קבצי nodejs בשרת:
@צבי-ש תודה
אני מדבר על ענין עקרוני, איך נכון לעשות. האם יש בעיה לשים אותם שם, או שאין בעיה.עכשיו בדקתי והם בהחלט נגישים, כל הקוד נגיש למי שיודע את הכתובת והשם שלהם. אבל בשביל זה יש vhost או htaccess, לא?
למה לך לשים קבצים רגישים בתיקיה חשופה לבחוץ, ואז להגן?
כשאתה יכול להפריד כל פרויקט מסודר לתיקיה משלו -
מיקום קבצי nodejs בשרת- תיקיית public_html הוא בדרך כלל המקום בו אחסון אתרים (לא שרת) מאחסן קבצים סטטיים שיהיה ניתן לגשת אליהם חיצונית דרך הדפדפן, למשל קבצי html, css ובתוך זה גם קבצי js שרצים בצד לקוח.
- nodejs היא שפת תוכנה שרצה בצד שרת (לא באחסון קבצים), והקבצים שלה בדרך כלל נכתבים בjs (או ts ומקומפלים אל js) ולא נגישים חיצונית כלל.
- אם בכל זאת השירות nodejs רוצה להחזיר קבצי js הוא כמובן יכול (במקום response של json למשל הוא יחזיר קובץ), ואת הקבצים הוא מגדיר בקוד מאיפה לקחת, זה לא קשור לתיקיית public_html.
זה חשוב להבין כבסיס,
מכאן לשאלה
אם אתה יכול להריץ קוד nodejs = אתה לא על אחסון קבצים אלא על שרת אמיתי ולכן אין כל משמעות לתיקיית public_html, אלא למה שמוגדר בקודאם אתה כן רואה שקבצים שנמצאים בשרת בתיקיית public_html נגישים חיצונית, תבדוק עם nginx / אפאצי / מי שמנהל את הרשת בשרת, למה התיקייה הזאת ממופה, והאם דרכה אפשר להגיע לתיקיות אחרות (צעד אבטחתי)
-
מהי הדרך הקלה ביותר, לתזמן מראש הפעלת קוד ע"י לינק ??התלבטתי לפני שכתבתי פה את הלינק ההוא, זה לתת דג, במקום ב2 דקות לתת חכה,
הוא נתן לך פיתרון, ועל זה אני שמח.רק מרחיב קצת על החכה שנתנו פה פיתרון איתה, ומוסיף את השנקל שלי לעניין
cron הוא כלי מדהים, שמאפשר לך לתזמן את כל המשימות במערכת, לא מחייב אותך להשאיר לינק פתוח שכל מי ש״עולה״ עליו יכול להריץ לך דברים במערכת... מדוייק יותר, אמין יותר, ולא תלוי בגורמים חיצוניים, ולא רק php אלא עוד סוגי הרצות
כתבת שאתה צריך להריץ קוד b לפני קוד a, למשל בcron בשרת זה ממש קל, אם אתה רוצה שa ירוץ רק עם b יצליח, אתה כותב את התזמון, (למשל פעם בחצי שעה) ואז את הפקודות עם && בינהם, (למשל python3 b.py && python3 a.py) ואם לא איכפת לך האם b הצליח, אלא העיקר שa ירוץ אחריו, אתה מפריד עם ; (למשל python3 b.py ; python3 a.py) ואתה לא צריך לתזמן פעמיים
עוד כתבת שיש בשרת שלך רשימת cronים כבר ממתכנת שהגדיר לפני כמה שנים, יותר קל ונוח לארגן את כלל התזמונים באותו מקום, ולא כל תזמון לזכור איפה ומי אחראי עליו.
-
שירות סליקה מומלץ וקל ליישוםהטמעה איפה?
באתר שלך? בבוט שבנית? במכשיר שאתה מפתח לסליקה עם nfc?
בשליחת דפי תשלום ללקוחות?
אתה צריך שיהיה שם הוראות קבע? שמירת טוקנים? מה הצרכים שלך? -
מהי הדרך הקלה ביותר, לתזמן מראש הפעלת קוד ע"י לינק ?? -
פיתוח אפליקציית אנטרנט + מסד נתונים בדוקר@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
@צבי-ש אז אם יש כמה קונטיינרים, צריך לפתוח הרבה פורטים? או שיש דרך לטפל בזה?
כל שירות שמקבל קריאות, רץ על פורט אחר
ומה זה ה8090:8080 שכתבת?
בקונטיינר עצמו יש 65k פורטים אפשריים וכנ״ל בשרת החיצוני
ויש מיפוי בינהם שאומר תעביר את כל הקריאות בשרת שמגיעות אל 8090 אל הקונטיינר בפורט 8080ports: - "8090:8080" -
פיתוח אפליקציית אנטרנט + מסד נתונים בדוקר@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
בבניה שלו, יש תכונות שמשתמשים בהם רק לצורך פיתוח ולא בטיחותי או נכון להשאיר אותם למוצר עצמו, יש דברים כאלו?
לא מכיר משהו ברמת הדוקר עצמו, אולי ברמת פיתוח האפליקציה עצמה למשל cors או token וכדומה שתרצה להגדיר מן הסתם בקובץ env (או בחלק env שבדוקר קומפוז) למשל
environment: DEBUG: "true"@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
איך מעבירים את מבנה הטבלאות, אם בעצם מורידים את המריה ישירות מהמאגר? ואם רוצים שיגיעו טבלאות עם שורות כבר?
אתה מוריד רק את התוכנה של הdb, בפנים אתה צריך להגדיר הכל מ0 כמו בכל db שקיים.
לגבי המבנה טבלאות, בדרך כלל כשאתה בונה אפלקיציה מסודרת יש שם חלק שנועד ליצור טבלאות בdb תואמות סכמה שאתה משתמש בה, דאטה קלאס או משהו כזה.
לרוב אם המערכת צריכה נתונים ראשוניים בשביל להעלות המפתח ייבנה סקריפט שיודע לבנות את הסכמות של הטבלאות הדרושות, ויודע להכניס לתוכם את הנתונים הבסיסיים החשובים
-
פיתוח אפליקציית אנטרנט + מסד נתונים בדוקר@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
בכוונה לא הוספת את index.js? לכאורה גם הוא אמור להיות בפנים, לא?
בשלב מאוחר יותר ב dockerfile העתקתי אותו
COPY . .זה בעצם מעתיק את הכל,
דוקר חכם ויודע לבנות מלמעלה למטה (לפי סדר השורות) רק את החלקים שהשתנו,
ולכן קודם כל, אעתיק את הקבצים של התלויות, שמשתנים פחות, ואתקין אותם.
אחרי זה אעתיק את שאר הקוד שמשתנה יותר, והבניה תהיה חסכונית יותר@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
לאיפה? לכתובת הIP של השרת ואז יהיה אפשר להגיע לקבצים האלו דרך פורט 8080 ו8090?
אחרי שאתה מפעיל אותם, הם רצים על השרת בפורט הזה, אם אין חומת אש הם נגישים כרגע ב ip:8080 או ip:8090, אם יש חומת אש אז תפנה לפורטים האלו דומיין כדי שיוכלו להגיע מבחוץ קריאות
@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
למה צריך גם מריה וגם phpmyadmin? הphpmyadmin לא כולל גם מסד נתונים?
לא, הוא רק תצוגה
@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
כל פעם שאני מוסיף קובץ ל"אפליקציה" צריך להוסיף אותו גם בcopy בdockerfile או שדרך הvolume זה מתווסף לבד?
בעיקרון הווליום נועד יותר לחלקים בתמונה שדורשים נתונים בחוץ, למשל מיקום שמירה של קבצי הdb או הורדות או קבצים שאתה רוצה לשתף בין כמה קונטיינרים וכדומה
אפשר טכנית לא להעתיק את כל הפרויקט אלא לשים דוקר לworkfolder הראשי, אבל זה פחות מומלץ, בכל מקרה את קובץ ההרצה עצמו (index.js) ואת קבצי התלויות תצטרך להעתיק בשביל שהבניה עצמה לא תקרוס.אם אתה מוסיף קוד לאפלקיציה, נכון יותר לבדוק אותו במחשב שלך לוקאלית, ואם עובד אצלך לבנות מחדש את התמונה בשרת, להוריד את הקיימת ולהעלות חדשה
@eido כתב בפיתוח אפליקציית אנטרנט + מסד נתונים בדוקר:
יש הבדל בין פרודקשן לפיתוח?
באיזה הקשר?
-
פיתוח אפליקציית אנטרנט + מסד נתונים בדוקרשבוע טוב!
זה נושא ענק, ואפשר להרחיב עליו להרבה כיוונים, אנסה להסביר בתמצות מה שלכאורה יעזור לצרכים שלך.
דוקר היא מעיין תמונה של מכונה וירטואלית שיודעת להריץ ״מצב מסויים״ (לא בדיוק, זה יותר תהליך שרץ בסביבה מבודדת אבל זה עוזר להבנה)
ישנם תמונות מוכנות שאנשים העלו כבר לרשת בדרך כלל אל https://hub.docker.com וישנם תמונות שאתה יוצר לבד
למשל את phpmyadmin תוכל להתקין ישירות מכאן.
בשביל ליצור תמונה משל עצמך, אתה יוצר קובץ בשם Dockefile ושם מגדיר לו מספר דברים.
- על בסיס של איזה מכונה לרוץ (node, python, php, ubunto וכדומה)
- איזה קבצים להכניס בפנים
- איזה תלויות להתקין
- עוד כמה הגדרות שאתה יכול להגדיר שם למשל איזה פורטים להוציא החוצה, איזה סקריפט להריץ בסיום וכדומה
ואז אתה מפעיל את התמונה
למשל במבנה תיקיות כזה
. └── mynodejscode ├── package.json ├── package-lock.json └── index.jsנניח שה index.js שלך הוא שרת אקספרסס שמאזין על פורט 8080
אנחנו נרצה להוסיף מכונה ש
- בנויה על בסיס nodejs
- תעתיק את הקובץ package.json ואת package-lock.json
- תריץ בפנים npm i
- אחרי זה תריץ את index.js כי זה תכלס הקוד שלנו
הקובץ Dockerfile שלנו יראה בערך ככה
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "index.js"]עכשיו נעבור לדרך שבה נהוג לנהל מספר Dockerים שרצים ביחד ושייכים לאותו פרויקט (כמו אצלינו שאתה צריך שה nodejs ירוץ עם db + phpmyadmin
יש תוכנה בשם docker compose שיודעת לקחת yml מסודר ולהריץ איתו מספר פרויקטים ביחד.
(יש לה מספר מעלות נוספות חוץ מהסדר, למשל היא יוצרת להם רשת פנימית מחוברת, ואפשר להשתמש בדומיינים שלהם עצמם אבל זה כבר לפעם אחרת..)אם נחזור רגע לתמונה של phpmyadmin שיש ברשת כאן
נראה שיש שם אופציה נוחה להריץ את phpmyadmin דרך docker compose
services: db: image: mariadb:10.11 restart: always environment: MYSQL_ROOT_PASSWORD: notSecureChangeMe phpmyadmin: image: phpmyadmin restart: always ports: - 8080:80 environment: - PMA_ARBITRARY=1מאוד פשוט, מאוד קריא, להריץ את הdb + phpmyadmin דרך קובץ אחד נח
נוסיף קובץ בשם docker-compose.yml
וכרגע מבנה התיקיות שלנו יראה בערך ככה:
. ├── docker-compose.yml └── mynodejscode ├── Dockerfile ├── package.json ├── package-lock.json └── index.jsעכשיו בא נוסיף לדוקר קומפוז את הפרויקט שלנו
אנחנו נרצה שהוא יידע לגשת לdockerfile, לבנות את התמונה שם, ולהריץ אותו על פורט 8090
nodeapp: build: context: ./mynodejscode container_name: my-node-app ports: - "8090:8080"ועכשיו כשנרים אותו עם הפקודה docker compose up -d
3 השירותים שלנו יתרוממו ביחד (db, phpmyadmin, node code) ויהיו נגישים בשרת בכתובות שמיפנו להם (8080 /8090)
עכשיו נשאר להפנות דומיין לשם כדי שיהיו נגישים חיצונית לעולםעל יתר מעללי דוקר קומפוז ודוקר בכללי, ועל האופציות הנוספות שאפשר להוסיף בenv להגדיר איזה פורט ירוצו, והגדרות נוספות תוכל לקרוא ברחבי הרשת או בלינקים לעייל
עריכה: כשנופל קונטיינר (קונטיינר = תמונה שהרמת) של דוקר, הוא מתרומם בדיוק 1:1 כמו שבנית אותו בפעם הראשונה, הקבצים שאתה יוצר בפנים, השינויים שאתה משנה ברמת הdb אם הוא בדוקר, הכל נמחק כשהקונטיינר נופל, ולכן יש חשיבות גדולה להיכרות עם volume של דוקר, הוא מאפשר לך למפות תיקיה מהשרת, לתוך תיקיה בקונטיינר שרץ וככה אם הקונטיינר נופל, הנתונים נשמרים בשרת בתיקייה שמיפת.
למשל בפרויקט שלך אם תגדיר
volumes: - ./data:/app/dataזה ימפה את תיקיית data הנוכחית בשרת לכתובת app/data, ומכייון שהסביבת עבודה שלך רצה כבר על /app (כמו שמוגדר בdockerfile) כל מה שתשמור בקוד בתוך data יישמר גם בחוץ
מה שייצור סביבת עבודה כזאת בערך
. ├── docker-compose.yml ├── data/ -- כאן הווליום נשמר └── mynodejscode/ ├── Dockerfile ├── package.json ├── package-lock.json └── index.js -
ניהול שרת/אתר מומלץאני מנהל את השרת שלי עם דוקרים, אז יש לי דוקר אחד של nginx ועוד אחד של let's encrypt שאחראים על הכל, כשאני רוצה להקצות דומיין לקונטיינר אני בסך הכל מגדיר env מתאים וזהו
למשל ההגדרה שלהם עצמםnginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./certs:/etc/nginx/certs - ./vhost.d:/etc/nginx/vhost.d - ./html:/usr/share/nginx/html restart: always environment: DEFAULT_HOST: prod.ovh letsencrypt: image: nginxproxy/acme-companion container_name: nginx-letsencrypt environment: NGINX_PROXY_CONTAINER: nginx-proxy ACME_CA_URI: https://acme-v02.api.letsencrypt.org/directory volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./certs:/etc/nginx/certs - ./vhost.d:/etc/nginx/vhost.d - ./html:/usr/share/nginx/html restart: alwaysואז אחרי זה בפרויקט אני מגדיר ככה
main_prod_web: image: registry.prod.ovh/main_prod_web:latest container_name: main_prod_web environment: VIRTUAL_HOST: prod.ovh LETSENCRYPT_HOST: prod.ovh LETSENCRYPT_EMAIL: prod@gmail.con VIRTUAL_PORT: 8080 ENABLE_PROXY_PROTOCOL: "true" env_file: - main_prod_web.env expose: - "80" restart: always -
מעבר על תיקיות ותתי תיקיות על כל קבציהן בלי רקורסיהאולי כדאי להפריד תהליכים...
תהליך ראשי, רץ על ימות עצמם ואוסף דאטה
תהליכים משניים מעבדים את הדאטה שצריך להוריד, לשמור, ולעדכן את המרכזי שהם סיימו ויכולים לקבל עבודה נוספת.
את התיכים המשניים אתה יכול לשכפל ולהריץ גם 10 כאלה, ותקבל כח עיבוד של 10 סקריפטים, עם כעין שרת מרכזי שינהל את זה, ולא 1 צולע