מאמרים בנושא ‏אינטרנט‏.

שוחררה גרסה יציבה 1.0.0 של CppCMS המופצת תחת רישיון כפול

ב־יום שני, 27 בפברואר 2012, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, לינוקס, פיתוח, תכנה ומחשבים, CppCMS; תגובה אחת

היום, אחרי מספר שנות פיתוח, שוחררה גרסה יציבה של CppCMS 1.0.0, אחרי תקופה ארוכה של גרסאות בטא. הגרסה הזו מהווה אבן דרך משמעותית בהתפתחות של CppCMS, הן מבחינה טכנולוגיות והן מבחינה עסקית.

החל מגרסה 1.0.0, ספריית CppCMS תהיה זמינה תחת רישיון חופשי LGPLv3 ותחת רישיון מסחרי שיאפשר פיתוח יישומים קנייניים תוך שמירה על שלמות המוצר והגנה על הסודות המסחריים שלו.

למידע נוסף על הרישוי החלופי והמחירים אנא כנסו לאתר שלנו:
http://commercial.cppcms.com

גרסה זו, עברה שכתוב יסודי ושינויים ארכיטקטוניים עמוקים שהזניקו את הפופולריות שלה מיד עם שחרור גרסאות בטא ראשונות. מבין החידושים הטכנולוגיים:

  • הכנסה של API ו־ABI יציבים
  • תמיכה מובנית ב־Ajax ו־Comet
  • שיפורים מהותיים בלוקליזציה
  • תמיכה מובנית ב־Windows
  • שיפורים משמעותיים באבטחה: מסנני XSS וכלים למניעת CSRF ועוד.
  • שרת HTTP מובנה לפיתוח ומערכות משובצות

הענף הישן יציב CppCMS 0.0.x לא נתמך יותר. כל משתמשיי הענף הישן מתבקשים לעבור לגרסה החדשה. יש לציין, לא ידוע לי על משתמש אחד שנשאר עם הגרסה הישנה.

על nginx ועל symbolic links

ב־יום שלישי, 31 בינואר 2012, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, תכנה ומחשבים; ‏4 תגובות

בעקבות הכתבה של עופר כהן הגעתי לטבלת השוואה מעניינת בין Apache לבין nginx. מה שהפתיע אותי זה שכדי להעביר קובץ http://example.com/site/files/images/layout/header.png השרת nginx מבצע קריאת stat בודדת. הטבלה עשתה השוואה עם apache שעשה O(n)‎ קריאות עבור תיקיה בעומק n לעומת O(1)‎ עבור nginx...

ברגע שראיתי את זה נדלקה לי נורת אזהרה! מה עם symbolic links?

הסבר: נניח אני איצור קישור סימבולי בשם mypicture.png שיפנה ל־‎/etc/passwd או לקובץ רגיש אחר, אז ע"י גישה לקובץ תמים אני אוכל לקרוא כל קובץ שיש לשרת web הרשאות לקרוא.

לכל השרתי web יש אופציה לא לעקוב אחרי קישורים כאלה מטעמי אבטחה וזאת גם אופציה מומלצת לעבודה. מה חשוב, זה שבלתי אפשרי לעשות בדיקה כזו ב־O(1)‎ קריאות מערכת ההפעלה (לפי עומק התיקיה).

אז החלטתי לבדוק בעזרת strace, כמה קריאות stats בפועל מבצעים apache,‏ lighttpd ו־nginx כשהאופציה כזו מופעלת וגיליתי... ש־nginx בכלל לא תומך באופציה כזו! קרי הגדרת אבטחה בסיסית שכל שרת אינטרנט החל מ־apache ועד ל־thttpd תומכים בו (אגב גם השרת הפנימי של cppcms) בכלל לא מופיעה בו!

התשובה (רוסית) של מפתח nginx היא להשתמש ב־mount -o nosymfollow עבור מערכת הקבצים כדי לעקוף את הבעיה.

חבל...

Nginx? תודה לא... Lighttpd

ב־יום ראשון, 29 בינואר 2012, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, תכנה ומחשבים; ‏10 תגובות

לאחרונה יש יותר ויותר כתבות על Nginx ועד כמה השרת הזה מעולה. נתח השוק של Nginx לפי הסקירות האחרונות של Netcraft עומד על כ־10%. אז כנראה יש סיבה לכך!

עכשיו, דברים שלא מספרים:

  • רוב שרתי ה־Nginx המופיעים ב־Netcraft עובדים כ־Reverse Proxy או מטפלים בעיקר בקבצים הסטטיים. בהרבה מאוד המקרים Nginx הוא מתפקד כ־Load Balancing Frontend לפי שרתי Apache.
  • התמיכה של Nginx בתוכן דינאמי היא בין מועטה עד לוקה בחסר:
    • אין תמיכה ב־CGI כלל.
    • אין תמיכה בניהול של שרתי FastCGI, כך שהשירות התוכן הדינאמי שלך חייב לרוץ התהליך נפרד ואתה צריך לדאוג לו (למשל להעלות אם הוא נפל מסיבר כלשהי)
    • הגדרות FastCGI לא תואמות תקן - PATH_INFO לא מוגדר כברירת מחדל. צריך לעבוד קשה כדי שהוא יעבוד נכון. מה שגורם לא מעט בעיות לאלה שמגלים שהיישום שלהם שבור בצורה לא ברור ולא מבינים למה.
    • תמיכה ב־SCGI שבורה לחלוטין. הוא לא מטפל ב־Status כמו שצריך, שזה אומר שרוב ההפניות תהינה שבורות אלא אם היישום שלך ישלח את התשובה כ־HTTP נקי.

להמשיך?

כן, אם אתם צריכים Reverse Proxy או לטפל בתוכן סטטי זהו שרת מעולה. אחרת, תחשבו פעמיים.

אני ממליץ בחום על Lighttpd: מהיר כמו Nginx ובנוי על אותם העקרונות, מתועד היטב, מטפל תוכן סטטי ודינאמי בצורה יוצאת מן הכלל. קל לקינפוג ועוד.

לפני שאנשים יקפצו ויגידו:

Lighttpd זולג!

אז התשובה היא, לא הוא, לא זולג.

ציטוט:

there are no memory leaks just stupid ways to use lighttpd.‎

e.g. it is really stupid to stream large files via a fastcgi app, when x-lighttpd-send-file could do a much more efficient job‎

תקראו עוד:

הגיע הזמן לשרת וירטואלי פרטי

ב־יום חמישי, 26 בינואר 2012, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, תכנה ומחשבים, CppCMS; ‏9 תגובות

אחרי חמש שנים שהחזקתי את הבלוג שלי ואת כל האתרים שלי על המחשב הביתי, הגיע הזמן להעביר את התפקיד לשרת וירטואלי אי־שם בענן.

הסיבה העיקריות למעבר הן:

  • Uptime נמוך, בעיקר אודות חברת החשמל וגם מידי פעם תקלות חומרה.
  • חיבור לא אמין במיוחד מחו"ל שגרם לי להחזיק אתר המראה סטטי לפרויקט שלי.

אז הגיע הזמן לשדרג. כיוון שהאתרים שלי רצים על טהרת CppCMS זה לא היה דבר טריביאלי,

  • מצד אחד, אני צריך שרת וירטואלי עם שליטה מלאה על יכולת התקנת התכנה, כולל התקנה של קובצי הריצה משלי, לכן, שירותי אירוח משותפים לא באו בחשבון, כי רובם לא מותאמים לטכנולוגיות כאלה.
  • מצד שני, ממש אין לי צורך בשרת חזק, בעיקר בגלל שהטכנולוגית CppCMS היא חסכונית להפליא.

אחרי הרבה השוואות של מחירים (לא זולים) של שרתי VPS החלטתי ללכת על Amazon EC2, כיוון שאני משלם על מה שאני משתמש... וחוץ מרוחב הפס אני לא ממש הולך להשתמש בהרבה :-). לכן, החלטתי ש־Amazon EC2 יהיה אידאלי לטכנולוגיה שאני מציע.

ובכן, רכשתי שם המתחם, סידרתי שרת ב־EC2 ותוך זמן קצר עברתי ל־VPS משלי בענן.

כרגע יש לי שרת שמריץ lighttpd ומאחוריו שלוש יישומי FastCGI: עבור האתרים:

השרת מהיר וקל כנוצה עם ערכי uptime:load average שווים ל־0.

הבלוג שודרג לגרסה חדשה

ב־יום רביעי, 15 ביוני 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, תכנה ומחשבים, CppCMS, C++‎‏; ‏5 תגובות

שלום לכולם,

הבלוג שודרג לגרסה חדשה שעובדת עם הגרסה האחרונה של CppCMS.

למעשה מערכת הבלוג שוכתבה מחדש, כיוון הבלוג הזה הוא היישום הראשון שמימשתי בעזרת CppCMS הוא סחב אחרי הרבה קוד מיושן וגרוע. שכתבתי את המערכת מחדש כך שהוא הפך הרבה יותר מאובטח ונקי מבחינת הקוד.

אחרי שהוא ירוץ זמן מה ברשת, אני אשחרר גרסה רשמית שלו.

אנא שימו לב לבעיות.

רוצים לנסות בבית?

כרגע אם מישהו רוצה לנסות אותו יצטרך:

  • CMake 2.6 או יותר
  • CppCMS 0.99.7 או גרסה חדשה יותר
  • CppDB‏
  • ספריית Discount Markdown‏
  • ספריית ImageMagick++‎ או GraphicsMagick++‎‏.

את הקוד ניתן לקחת מ־svn בכתובת:
https://cppcms.svn.sourceforge.net/svnroot/cppcms/blog/trunk

אחרי שהתקנתם את כל התלויות ומשכתם גרסת svn של הבלוג:

mkdir build
cd build
cmake ..
make

לאחר מכן, צרו, בסיס נתונים של MySQL,‏ PostgreSQL או של Sqlite3 בעזרת התסריטים הנמצאים בתת תיקיה sql. ערכו את קובץ config.js כדי להגדיר את בסיס הנתונים בו אתם הולכים להשתמש ואז הריצו:

./blog -c ../config.js

הגישה הראשונה אתם תתבקשו להזין את ההגדרות הבסיסיות של הבלוג, שם משתמש וססמה אתה תעבדו.

בלוג בא בשתי שפות - אנגלית ועברית ומכיל שתי תבניות OrangeSky ו־Contendend לבחירתכם.

שימו לב: מדובר בגרסת בטא ראשונה, כך שאם היא תהרוס לכם את השרת או תאכל לכם את החתול... ראו הוזהרתם.

העמוד הבא

דפים

נושאים