Category: marvin

12.11.2023

Marvinator-а, брат на marvin, който съвсем скоро вдигнах имаше нужда от мониторинг. И тръгвам аз да инсталирам prometheus/alertsmanager/grafana и в един момент започнах да смятам колко рам ще ми е нужна. И понеже съм скръндза реших да изнеса целия мониторинг към Grafana.com и да им използвам безплатния tier, който като единствен минус към момента ми е, че metrics & log retention-а ми е само 14 дни, но yolo.

Инсталацията на агента, който е единственото нещо, което живее на моя хост е бърза и лесна, а откъм потребление към момента е около 140 MB RAM. Ако бях хостнал локално целия стак щеше със сигурност да бъде много повече.

A project of the day отива при tuning-primer – bash скрипт, който дава добър анализ на mysql/mariadb бази. Нужни са само root user/pass към базата и като резултат ви изплюва всичко, което му е харесало и което не е ок. Има доста данни покрай анализите и можете да си направите един добър fine tuning.

29.11.2022

Май е време за ъпгрейд на marvin. До сега се търкаля на Ubuntu 18.04 LTS, но end-of-life идва след по-малко от година, а и вече е доста стар. Една от болките ми е, че най-високата му PHP версия е 7.2, която достига своя end-of-life на първи Януари. Малко ми се свиди заради uptime-а, който до днешна дата е 769 дни, но сигурността и удобството са много по-важни.

Но всъщност какво значи EOL (end-of-life)? В software development EOL значи, че нещо спира да се разработва и поддържа напълно. Това може да е версия (както е с горните примери), а може и да е продукт или услуга.
EOL обаче в правилната си имплементация не настъпва от днес за утре. Обикновено автора анонсира, че да речем на 01.01.2023 г. спира да поддържа версия 7.2 на PHP, но и с това план как ще се случи това. Обикновено EOL е сравително далеч в бъдещето – 6 месеца, година или повече за да може всеки да вземе нужните мерки. Според анонса се споменава и кога спира активната разработка, а след това следват само security updates и в края си се спират и те.

Та по тази причина умувам какво да правя с marvin – дали да го преместя при мен локално на MicroServer-а си или да е отново в DigitalOcean или да се възползвам от безплатните услуги на AWS. Доста се чудя за последните, защото ако е при тях ще ми се наложи да си инструментирам всичко с terraform & ansible. Не, че на DO няма да ми се наложи, но няма да е тръпка, а колкото и извратено да звучи май ми липсва AWS. След толкова зор по сертифицирането ми явно съм развил стокхолмски синдром.

Последния вариант е да докеризирам всичко и да си вдигна един Kubernetes cluster, но пък тогава откъм оперативни неща ще ми е по-малко интересно.


Какво е вашето мнение, какво бихте направили вие:

  • Self hosted на машина в офиса
  • Cloud (DO, AWS)
  • Containerization (docker + k8s)

Решението на един стар проблем

На marvin живеят няколко WordPress-а, но и с него влача няколко мои стари проекти. Един от тях скоро ще стане на 9 години. И понеже живеят на Joomla 1.5, която практически е невъзможно (варианти има, но безплатните не работят, а за платени не смятам, че искам) да се ъпгрейдне към latest. За това nginx-а ми работи с php-fpm, който търкаля две версии на PHP – 5.х и 7.х. И понеже първата е крайно архаична взех решението старите сайтове да ги разкарам напълно. Така или иначе нямам никаква полза от тях.

И вчера вдигнах още един VPS и започнах да конфигурирам наново nginx/php-fpm/etc. Оказа се, че съм позабравил част от configuration flow-а и седнах да помисля какво и как да направя. Най-накрая стигнах до решението, че вместо да си блъскам главата ще инсталирам един стар LTS на Ubuntu в който се поддържа PHP 5.x и всичко тръгна от раз.

Тенденцията ще е да разкарам всичките си клиенти (в големи кавички, таксите им са малко над цените на домейна) и да мина най-накрая на latest and greatest без да се занимавам с излишни глупости.

 

И така на marvin ще се освободи още малко място така, че ако някой (с предимство са студенти/ученици/преподаватели) има нужда да хостне нещо може да се възползва напълно безплатно.

Free backup script

Баси тъпото заглавие.

Anyway – днес fork-нах един проект, който използвам от извесно време с разни адаптации за marvin и реших да го публикувам.
github проекта за сега носи работното име Full Web Server Backup, а основния проект можете да намерите тук.

Основните разлики между проектите са:

  • Основния проект има Amazon S3 sync, аз го махнах, защото използвам услугите на pCloud;
  • В моя има архивиране на /etc, почистени са малко неразбории.

За в бъдеще смятам да добавя:

  • Избор на compression level;
  • Изнасяне на mySQL user/pass в ~/.my.cnf
  • Избор на специфични директории в /etc, които да архивираме или exclude-нем;
  • cronjob;
  • Архивиране на /home директорията на определен потребител (ако имаме права за това).

Ако имате друга идея с радост ще я прегледам. marvin си пази бекъпите с този скрипт и за момента работи безпроблемно.

Когато ти изтекат сертификатите на блога…

Както може би забелязахте последните 2 дни блога ми не се отваряше и причините бяха две:

  • Let’s Encrypt renewal-а не беше минал тримесечния си ъпдейт на сертификатите;
  • Понеже използвам HSTS нямаше и опция да видите блога нищо, че е с невалиден сертификат.

И това естествено по празниците, когато нямах достъп до компютър :)

Ето и какви бяха причините за това, че на nedko.info не минаха сертификатите, но на останалите 7-8 сайта, които хоствам минаха без проблеми:

  1. При опит за certificate renew  получавах следната грешка:
Failed authorization procedure. www.nedko.info (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.nedko.info/.well-known/acme-challenge/PdzPmGSbFd1XOOqa0LshcRGxqUАGHАUj3qМNamp1-Yw: "<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial"

IMPORTANT NOTES:
 - The following errors were reported by the server:

Domain: www.nedko.info
 Type: unauthorized
 Detail: Invalid response from http://www.nedko.info/.well-known
 /acme-challenge/PdzPmGSbFd1XOOqa0LshcRGxqUАGHАUj3qМNamp1-Yw:
 "<!DOCTYPE html>
 <html lang="en-GB">
 <head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial"
 To fix these errors, please make sure that your domain name was
 entered correctly and the DNS A record(s) for that domain
 contain(s) the right IP address.

 

Проблема е, че при опит за достъп по http (близко до ума, но на мен ми отне време да се досетя, че Let’s Encrypt callback-а е по http, а не по https) при misconfiguration горния линк http://www.nedko.info/.well-known
/acme-challenge/PdzPmGSbFd1XOOqa0LshcRGxqUАGHАUj3qМNamp1-Yw пренасочваше към друг от моите домейни.

 

2. Започнах да преглеждам къде ми е проблема с това пренасочване и реших да изключа напълно port 80 поддръжката (http) макар и да имам redirect 301 в случай, че имам request по http.
Решението ми беше да спра изцяло поддръжката на http през vhosts. Става съвсем лесно с коментар или изтриване на удебеления ред:

#listen 80;
listen 443 ssl;

След тази промяна и рестартиране на nginx (service nginx restart) успях да стартирам процеса по преиздаването на сертификата успешно със следните редове:

letsencrypt certonly -a webroot --webroot-path=/var/www/nedko.info/ -d nedko.info -d www.nedko.info

където пътя до сайта е в директория /var/www/nedko.info/

 

Ако имате проблеми с намирането на директорията /.well-known/acme-challenge/ можете да я създадете наново като:

  • Проверите дали директорията съществува (под Линукс точката пред директория или файл се счита за скрит файл/директория) с
ls -lah /var/www/nedko.info/

Ако не съществува можете да я създадете със следната команда и дадете съответните правомощия:

mkdir /var/www/nedko.info/.well-known/acme-challenge/ && chmod 755 /var/www/nedko.info/.well-known/acme-challenge/

И изпълянвате по-горната команда за renew на сертификатите.
Ако не стане пишете в коментарите и ще го гледаме заедно.

16.03.2017

sysДнес е ден за regression testing в офиса. Напомня ми защо не обичам i-shits. Знаете ли, че няма никъде в измисленото меню на iPhone (тествах върху 5 и 6) модела на телефона? Тоест никъде няма да видите iPhone 6S да кажем, а само неговия идентификатор (например A1549). Грр!
Иначе сутринта ходих да карам. НАЙ-НАКРАЯ отлепих в 6 и малко, подготвих се и завъртях до Аладжата, през Виница, после Морската и обратно в квартирата. Счупих си рекорта за скорост – 71.5 км/ч. Понеже GoPro-то е още в мен направих и няколко снимки и видео, но тях ще ги сложа в отделен пост.
ОЩЕ не съм свършил с пътеписа за изкачването ми на връх Шипка. Все не остава време тия дни…
Друго интересно е, че благодарение на Виктор се сдобих с един много приятен workstation – Lenovo ThinkStation E31 със следните характеристики:

  • Процесор Intel Xeon E3-1225V2 (8M Cache, 3.20GHz)
  • Памет 16GB ( 4x4GB) PC3-12800 160 0MHz UDIMM DDR3
  • Твърд диск – 2х 500GB SATA – 7200 rpm, 6 Gb/s, 3.5″ в RAID 0

Скоро ще напиша едно обстойно ревю + тестове, че ми е адски интересно да видя каква е практическата разлика между RAID 0 и RAID 1 и производителността на този четириглав змей с 8 мб кеш.

И последно – днес подкарах HTTP/2 и HSTS на marvin. Ще опиша в статия как го направих (hint – супер лесно е).

 

Помните като ви казах, че ще е за последно, нали? Еми не е. Това рядко администраторско портно нямаше как да не го споделя с вас:

100% SSL поддържка на marvin

Днес най-накрая успях да подкарам 100% SSL support на всичките ми хостнати проекти с Let’s Encrypt.

Без проблеми естествено не можеше, но бяха решени с касапския метод:

[code]aptitude remove letsencrypt[/code]

[code]aptitude purge[/code]

[code]aptitude install letsencrypt[/code]

Заедно с това сложих и letsencrypt renew, защото сертификатите са валидни само три месеца. Сега ще чакам да видим след три месеца дали всичко ще стане автоматично :)