(פוסטים בתיוג וורדפרס.)

מוורדפרס ל-11ty

💬 1 1 באוגוסט 2020 NunjucksComments11tyוורדפרס

אז אחרי שמחליטים על מעבר ל-11ty, צריך לדאוג לשמר את תוכן הפוסטים והתגובות.

בשלב הראשון של המעבר יש צורך ליצא את כל התוכן מוורדפרס ל-Markdown. לטובת זה השתמשתי בפלאגאין לוורדפרס שפותח דווקא עבור Gatsby ונקרא: WP Gatsby Markdown Exporter. בקישור ניתן לקרוא כיצד להפעיל אותו. אני השתמשתי באופציית ה WP-CLI. משום מה הייתה לו בעיה ליצא את התמונות, ולכן הפעלתי את האופציות שמנטרלות את החלק הזה. הפקודה הסופית הייתה:

wp gatsby-markdown-export --skip_copy_uploads --skip_original_images --directory=/var/www/html/md-export

זה מייצר אוסף של קבצי Markdown, שנראה בערך ככה:

היררכיית קבצים לאחר היצוא מוורפרס

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

בשלב הבא בחרתי ב starter project מתוך דף התבניות של Eleventy. המבחר די דל, ואין עדיין אף תבנית מותאמת עברית. לבסוף, בחרתי בתבנית 11r. זוהי תבנית dark mode, ומבוססת Tailwind CSS, ורוב היפוכי הכוון הגיעו out of the box, ברגע שהוספתי dir=rtl לתגית הראשית של הדף. את התוצאה אחרי הגיור תוכלו למזלג מהריפו שלי. את הפוסטים בהיררכיה המקורית מעלים לתיקיית src/posts, ואחרי מעקב אחרי ההוראות בREADME, אפשר לראות את התוצאה.

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

האפשרות שאני בחרתי בה היא שימוש ב Staticman. הרעיון כאן הוא שכל תגובה היא בעצם קובץ שנשמר גם כן בgit, ומנגנון אישור התגובה נעשה באופן דומה לאישור Pull Request. המנוע של Staticman דואג לייצר את ה PR-ים, כך שמבחינת המשתמשים באתר שליחת התגובה מתבצעת באמצעות טופס על הדף, בדומה לוורדפרס.

בנוסף לזה, יש צורך לייבא ולשמר את התגובות מהבלוג הישן. כאן השתמשתי בכלי שבמקור נכתב לטובת העברת תגובות לאתרים סטטים מבוססי Jekyll. נדרשו שינויים קלים, אבל בסופו של דבר גם כאן זה מסתכם בהרצה לפי ה README, והוספה של כל קבצי התגובות תחת התיקיה src/globals/comments כך שכל התגובות לפוסט מסויים מרוכזות תחת תיקיה לפי ה slag של הפוסט. מי שמעוניין יכול לקרוא עוד על מודל הנתונים של Eleventy.

התוספת האחרונה היא מעט קוד שידע לשלוף את התגובות המתאימות לכל פוסט ולהציג אותן לפי ההיררכיה המקורית. הקוד הזה מחולק בין קוד JS, שאותו ניתן למצוא ב /filters/comments-tree.js ונראה כך:

module.exports = (obj) => {
const allComments = obj ? Object.values(obj) : [];
const commentsById = {};
allComments.forEach(c => {
c.id = c.id || c._id;
commentsById[c.id] = c;
});
const rootComments = [];
allComments.forEach(c => {
if (c.parentId && c.parentId !== "0") {
const parent = commentsById[c.parentId];
if (parent) {
parent.replies = parent.replies || [];
parent.replies.push(c);
} else {
console.error(`can't find parentID: ${c.parentId} for ID: ${c.id}`);
}
} else {
rootComments.push(c);
}

});
return rootComments;
};

והחלק המשלים שנמצא בתבנית התגובות src/includes/comments.njk. על ריקורסיה ב nunjucks למדתי מהissue הזה. עכשיו ניתן לראות גם את התגובות בהתאם לדו-שיח שנוהל בזמנו:

תגובות משורשרות

בפוסט הבא ארחיב על הכנת הטופס לתגובות והאינטגרציה עם הבוט של Staticman.

עוברים דירה

18 ביולי 2020 DockerHostingוורדפרסלינוקסקוד פתוח ותוכנה חופשית

Docker אחרי שלוש שנים שבהן האתר הזה רץ מעל שרות האחסון של Scaleway, קיבלתי מהם הודעה שהחומרה שעליה אני רץ (dual core ARM CPU, 2GB RAM, 50GB SSD) תפסיק לעבוד בעוד מספר חודשים. הם הציעו לי לעבור באותו מחיר לשרת VPS מבוסס אינטל, אלא שעוד לפני שהספקתי להגיב, קיבלתי את המכתב שזו כותרתו: We’re evolving our Instances prices, או בתרגום חופשי: נמאס לנו להיות הכי זולים בשוק, אז נעלה את המחיר ב 66%.

החלטתי שזה הזמן לחפש שרות אכסון חדש, והגעתי דרך חבר לעבודה ל OVHcloud. השרת הבסיסי נראה על הנייר חלש יותר (מעבד אחד בלבד ודיסק קטן יותר), אבל בבדיקות ביצועים בשטח הוא משמעותית יותר מהיר. זה מורגש גם בעבודת ההתקנה (פרטים בהמשך) וגם בזמן ריצה, כפי שנמדד ע״י StatusCake. המחיר זהה למחיר (הישן) של Scaleway: שלושה אירו לחודש, בלי התחייבות.

השרת שלי מריץ בנוסף גם שני שרתי node קטנים, כך שהעברת כל הטוב הזה היא לא פשוטה, ולכן החלטתי הפעם ללכת על Docker. למי שלא מכיר את Docker, מומלץ לקרוא את סדרת המאמרים באתר של רן בר-זיק. שם הוא גם מדגים התקנת WordPress. אני בחרתי לעקוב אחרי המדריך של Michael J. Stealey ב GitHub, שממנו גם עשיתי פורק לריפו משלי. המדריך הזה קצת יותר מתאים לסביבה הנוכחית שלי שכוללת MariaDB במקום MySQL, וגם סקריפטים מוכנים לתמיכה ב https, דרך השרות של Let’s Encrypt.

רוב התהליך עוקב אחרי ה README, אבל מכוון שלא התחלתי מאתר חדש כפי שהמדריך מתאר, ביצעתי מספר שינויים, כמו שיחזור של ה DB ומבנה הקבצים מהשרת הנוכחי. זו הייתה טבילת האש הראשונה ל restic שהזכרתי באחד הפוסטים הקודמים והוא הוכיח את עצמו מצויין. שחזור של MySQL שרץ בתוך קונייטנר הוא קצת מורכב, וגם כאן יש לבר-זיק מדריך טוב.

אז נשארו לי כמה קצוות לסגור, כמו חידוש אוטומטי של הסרטיפיקטים ב Let’s Encrypt, והפעלה של גיבויים, אבל בסך הכל נראה שדוקר עושה עבודה טובה, והמעבר הבא יצריך ״רק״:

sudo docker-compose up -d

php 7.4

1 במרץ 2020 nanophpviוורדפרסקוד פתוח ותוכנה חופשיתלינוקס

חלפה למעלה משנה מאז שהתמיכה ב-7.0 php הופסקה, וזה הזמן לשדרג את הבלוג לגרסה 7.4. כרגיל, צריך לקרוא את כל ה breaking changes, אבל אם הבלוג והתוספים מתוחזקים לגרסה העדכנית ביותר, אפשר לסמוך בדרך כלל שהכל יעובד. גיבוי של הקוד והדאטה רצוי גם כן.

את הגיבויים אני מבצע לאחרונה בעזרת restic, כאשר הקבצים מועלים לאכסון (הזול יחסית) של Backblaze B2.

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

#!/bin/bash
d=$(date +%Y-%m-%d)
mysqldump -u *** -p *** > ~/backup/sql/yehudab-${d}.sql
gzip ~/backup/sql/*.sql
tar -czf ~/backup/site/yehudab.com-${d}.tar.gz yehudab.com
restic backup ~/backup

לצורך השדרוג, עקבתי אחרי המדריך ב CloudBooklet. מכוון שאני מריץ php דרך ngnix, ביצעתי את הסעיפים הרלוונטים לגרסת fpm.

אה, וכמובן, להשתמש ב vi, כי nano זה לחלשים.

אחרי השדרוג, אני מנסה לשמור את הפוסט הזה ובום error 500. בדיקה מהירה בלוג של nginx על השרת מגלה ששכחתי להתקין את php7.4-memcache שהמדריך הנ"ל לא מחשיב כ common extension. הרצת:

sudo apt install php7.4-memcache

וריסטרט לשרת פתרו את הבעיה.
שדרוג

2020

31 בדצמבר 2019 וורדפרס

2020 שנה חדשה היא הזדמנות טובה להחלפת תבנית. אז ברוכים הבאים ל-2020, או כמו ש WordPress קוראים לה: TwentyTwenty.

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

אז שתהיה לכולם שנה טובה ועשור טוב. מקווה (הפעם באמת) ליצור תוכן מעניין יותר במהלך השנה.

Image license: CC BY-NC 4.0 pngall.com

וורדפרס 5.0

8 בדצמבר 2018 וורדפרסקוד פתוח ותוכנה חופשית

גרסה חדשה של וורדפרס יצאה השבוע, והבלוג קיבל את השדרוג המתחייב. על הדרך, עברתי לתבנית 2019 החדשה (הקודמת הייתה 2016).

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

HTTP/2

💬 1 7 ביולי 2017 וורדפרסלינוקסקוד פתוח ותוכנה חופשית

עוד שדרוג קטן לבלוג.
הפעם העברתי את השרת מ apache ל nginx, ועל הדרך הפעלתי HTTP/2.
זה אמור לשפר את הביצועים, למרות שאני לא ממש מרגיש בזה בנתיים.

Hex dump of nginx logs

למעוניינים, המדריך הזה מסביר על התקנת nginx, והגדרות HTTP/2. כאן תמצאו הסבר על ההגדרות הדרושות ב nginx לטובת הפעלת WordPress במקום mod_rewrite של apache.

התוצאה הסופית של כל ההגדרות האלה, כפי שנשמרה בקובץ ‎/etc/nginx/sites-available/default היא זו:

server {

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
include snippets/gzip.conf;

ssl_certificate /etc/nginx/ssl/live/yehudab.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/yehudab.com/privkey.pem;
ssl_dhparam /etc/nginx/ssl/live/yehudab.com/dhparam.pem;

root /var/www/yehudab.com;

index index.html index.htm index.php index.nginx-debian.html;

server_name yehudab.com;

location / {
try_files $uri $uri/ =404;
}

location /blog/ {
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
deny all;
}
include snippets/expires.conf;
}

server {
listen 80;
listen [::]:80;
server_name yehudab.com;
return 301 https://$server_name$request_uri;
}

לאחר סיום ההגדרות, ניתן לוודא את תמיכת האתר ל HTTP/2 באמצעות דף הבדיקה של KeyCDN.

שוב שדרוג לבלוג

💬 2 24 ביוני 2017 וורדפרסלינוקסקוד פתוח ותוכנה חופשית

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

בלוג

דבר ראשון, בקטנה, שדרוג מתחייב לגרסה האחרונה (4.8).

חוץ מזה, תוסף חדש: Yoast SEO, כי פייסבוק דורש מטה תגיות, וזה הכי קל.

אבל הכי חשוב, החלפתי את שרות האירוח מאכסון משותף על NearlyFreeSpeach לשרת וירטואלי פרטי של Scaleway. בחרתי בשרת מבוסס ARMv8 כך שהמחיר יוצא כמעט אותו דבר (3$ בראשון, 3€ באחרון), כשכאן אני מקבל שרת פרטי, יכול להריץ עליו מה שאני רוצה, וגם הביצועים טובים הרבה יותר. כמובן, אני צריך לדאוג לבד לשדרוגי תוכנה, אבטחה, גיבויים וכד׳, אבל זה חלק מהעניין. המדריך ב LinuxBabe יכול לעזור כאן.

Scaleway לא כ״כ אוהבים ששולחים מייל מהשרת שלהם (כדי שלא ישמשו לספאם), אז נרשמתי לשירות mailgun שמאפשר לשלוח עד 10,000 מיילים בחודש בחינם. הוא עובד יחד עם התוסף המקביל ב WordPress. באתר wpbeginner יש הסבר מפורט איך להשתמש בשניהם.

דבר אחרון, העברתי את האתר לעבוד דרך https, כי בכל זאת 2017. המדריך הנ״ל מ LinuxBabe מסביר איך לעשות את זה בחינם דרך Let's Encrypt.

עדיין פה

5 באוגוסט 2016 וורדפרס

עדכון קליל של גרסת הבלוג ל 4.5 ותבנית ל 2016.

"ארכיון הבלוג" זה לחלשים

💬 7 21 בדצמבר 2010 וורדפרסשטויות שמוצאים באתריםשמישות

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

עדכון אוטומטי לשעון קיץ/חורף בוורדפרס

12 בספטמבר 2010 וורדפרסשעון קיץ

גם אני הלכתי לישון לפי שעון חורף מתוך הנחה שיש לי שעה נוספת וקמתי לפי שעון קיץ כי התחיל אור בחוץ והגוף עדיין רגיל. כדי להעביר את הזמן עברתי בין שעוני הבית (14+ למי שמתעניין) כדי לראות שלא שכחתי אף אחד, וכדי לראות שכל מי שאמור להתעדכן אוטומטית אכן עשה את זה. כחלק מסבב השעונים ניגשתי גם לעדכן את אזור הזמן של הבלוג הזה. בהתחלתי החלפתי את UTC+3 ב UTC+2, אבל אז שמתי לב שההודעה המצחיקה (Unfortunately, you have to manually update this for Daylight Savings Time. Lame, we know, but will be fixed in the future) שהופיעה בעבר מתחת לשדה אזור הזמן נעלמה. חיפוש חוזר במעלה הרשימה גילה שניתן לבחור את ירושלים או תל-אביב ולקבל (אחרי שמירה) את ההודעה הזאת במקומה:
המאה ה21 הגיעה לוורדפרס
חיפוש קצר העלה את הדיון הזה שלפיו גם גרסה 2.8 (שבה הייתי קודם) אמורה לתמוך בעדכון אוטומטי ולא ברור לי כ"כ למה הפיצ'ר הזה לא עבד אצלי קודם, אבל העיקר שמעכשיו יש לי פחות שעון לעדכן.
אה… ואף מילה על חרדים, יום כיפור ואם צריך או לא לאחר את המעבר לשעון חורף.

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

💬 7 3 בספטמבר 2010 וורדפרסכלליwordpress

מי שנתקל בבעיות מוזמן להגיב (מצד שני, אם הבעיה היא במנגנון התגובות, אז אכלתי אותה…)

הקץ לספאם?

💬 4 2 בדצמבר 2009 וורדפרס

בעקבות הדיון אצל אילן שביט ואחרי שגיליתי שבחודש האחרון Akismet חסם לי תגובה אמיתית אחת, החלטתי לאמץ את מסנן הספאם שהומלץ ע"י ארתיום. הרעיון הכללי הוא לתקוף את הספאמרים בנשק יום הדין: Javascript. אם נתקלתם בבעיה עם המסנן החדשה, נא כתבו לי מייל לפי הכתובת בדף האודות (שגם הוא מוגן שם באותו הנשק).

הבלוג שודרג לוורדפרס 2.7

💬 10 15 בדצמבר 2008 וורדפרס

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

ie8‏ (2) מיקרוסופט‏ (2) דפדפנים‏ (11) כללי‏ (6) אורנג'‏ (1) אתרים בארץ‏ (1) שמישות‏ (5) BlogDay2008‏ (1) habari‏ (1) הבארי‏ (1) CSS‏ (3) פיירפוקס‏ (10) אופרה‏ (2) ספארי‏ (3) נגנים‏ (4) Flip4Mac‏ (1) מק‏ (4) גראצ'ו מרקס‏ (1) ogg‏ (1) video‏ (1) שטויות שמוצאים באתרים‏ (5) וורדפרס‏ (13) אתרים תומכי פיירפוקס‏ (1) לאומי-קארד‏ (1) ie6‏ (1) acid2‏ (1) אינטרנט אקספלורר‏ (1) Google wave‏ (2) בלוגיה‏ (1) תפוז‏ (1) gps‏ (2) ביקורת מוצרים‏ (1) garmin‏ (2) speedtraps‏ (1) ווידג'טים‏ (10) רכבת ישראל‏ (2) מזג אויר‏ (2) קוד פתוח ותוכנה חופשית‏ (14) חלונות‏ (1) wordpress‏ (1) שעון קיץ‏ (1) חולצה‏ (1) סקראץ׳‏ (1) iPhone‏ (2) לינוקס‏ (5) אישי‏ (1) זמן‏ (2) מכוניות‏ (1) nano‏ (1) php‏ (1) vi‏ (1) SSG‏ (1) 11ty‏ (3) בלוג‏ (1) Docker‏ (1) Hosting‏ (1) Nunjucks‏ (1) Comments‏ (1) staticman‏ (1) Geotagging‏ (1) שביל ישראל‏ (4) postsAndPagesWithoutDrafts‏ (70)