לא מוצא כרגע את התיעוד של שמיעת הודעת קמפיין כשלוחה רגילה
אבל השמעה עם api זה לכאורה זה ${templateId}.wav
אם לא עובד אנסה לבדוק לעומק
צבי-ש
-
ימות המשיח השמעת הודעת קמפיין בכניסה לשלוחת API - מי מכיר? -
ימות המשיח השמעת הודעת קמפיין בכניסה לשלוחת 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 צולע -
יש חלופה טובה/עדכנית לרקורסיה?@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
נכון, אבל אם יש כמה סוגי קבצים ועל כל קובץ יש סוג אחר של פעולה זה מסובך כי צריך גם לזכור באיזה סוג קובץ הייתי ובאיזה קובץ ספציפי.
0
אז לפני שאתה מתחיל את הסקריפט, תספור זמנים ואם עובר 5 ומשהו דקות, תסיים עיבוד לקובץ הנוכחי, תשמור תמונת מצב נוכחית באיזה json ותרים משם מחדש.
אולי תעשה קריאה לעוד סקריפט שאותו תפעיל עם בקשת get שיתחיל מאותו מקום, וישאב את הjson או יקבל בפרמטרים את הנתיב שהוא אוחז בו או לא יודע מה, אולי ב bady את כל התמונת מצב איפה אתה אוחז ומה עשית, וככה כן תוכל להמשיך עד לגיבוי מלא, אבל זה דרך עקומה ללכת, יותר הגיוני להפעיל את זה פשוט משרת רגיל ואמיתי עם קוד חסכוני ויעיל כמה שיותר, ואם ייקח שעתיים, שייקח שעתיים, גיבוי עלול לקחת זמן -
יש חלופה טובה/עדכנית לרקורסיה?@eido כתב ביש חלופה טובה/עדכנית לרקורסיה?:
לדוגמא למעבר על כל הקבצים בתיקיה על כל תיקיות המשנה שלה
כמו שאמרו לך בפוסטים קודמים, אפשר לעצור רקורסיה כמובן
וזה פיתרון מעולה כשצריך אותו ויודעים איך ולמה להשתמש איתו.אני לא ייכנס כל כך למה אתה רוצה לעשות עם גוגל סקריפט, ואיך הגעת למצב שאתה יודע שיש לו לימיט של 6 דקות...
אני מנחש מההיכרות איתך שזה מדבר על גיבוי תיקיות של ימות המשיח לדרייב / משו כזה ואתה רץ ברקוריסה על ימות המשיח.
אם אני צודק בניחושים הנ״ל
1 לא מומלץ, הם יכולים לחסום אותך (ימות המשיח), אין להם rate limit גלוי, אבל הם פתאום מחליטים לחסום אותך כשהם חושבים שהגזמת. (לחסום ברמת מערכת, לא ip של גוגל)
2 אם למשל הקוד שלך מעביר קבצים חדשים שהשתנו, ואתה זוכר במשתנה בקוד שרצת כבר על שלוחות 1,2,3 ואתה באמצע 4.1.2 תוכל לשמור את זה לאיזה קובץ, ולהמשיך פעם הבאה מאותו מקום, אולי זה לא ייתן לך גיבוי כל הזמן, או להשלים אותו בכל ריצה, אבל ייתן לך משהו.
-
חוות דעת - מערכת שליחת מיילים
הוא כן ביקש ממני להירשם

נוסחים קצת מוזרים

לא מציג שגיאה או משהו, אבל עדיין לא עושה כלום כשלוחצים על המשך לבחירת חבילה
ככלל, כשבונים אתרים ומוצרים, אףפעם אל תבדוק רק את הדברים שצריכים לעבוד, אלא תחפש את ההכי קיצוני שלא צריך לעבוד, איפה ינסו לפרוץ לך, לעשות דברים לא מצופים. ותדאג שגם שם זה יעבוד (למשל הודעות שגיאה מתאימות, או הודעות חסימה מסודרות, ולא פשוט ״לא להמשך את התהליך אם יש שגיאה״)
-
שמירת מאגר מספרים וסיסמאות/טוקן בצורה מאובטחת@eido כתב בשמירת מאגר מספרים וסיסמאות/טוקן בצורה מאובטחת:
@אביי אני לא שואל סתם...
תעבור על חוקי הפורום, המשתמשים פה משתדלים שזה יהיה מקום מאוד מסודר ונקי, ונושא לכל דבר בלי לערבב סתם
במיוחד כשיש לו בחתימה את המייל, אז תוכל פשוט לשאול אותו במייל את השאלה שרצית
-
סקר מפתחים מאת קישורון מערכות טלפניות@YoungBoy כתב בסקר מפתחים מאת קישורון מערכות טלפניות:
משתמש בשלוחת API.
אפשרי לעבור מימות אליהם ברמה הפרקטית? או שזה סיפור וצריך להמציא כמה גלגלים מחדש ?
-
סקר מפתחים מאת קישורון מערכות טלפניותהאם יצא מזה תכלס משהו שיכול לעזור למפתחים שרוצים לפתח קו ולגשת אליו עם API/ להשתמש בשלוחת API?