Redis v kontejneru

Redis (zkratka z anglického „Remote Dictionary Server“) je open-source in-memory key-value úložiště (NoSQL databáze) s otevřeným zdrojovým kódem. Redis byl původně vytvořen jako rychlý a efektivní způsob ukládání a získávání dat v paměti (in-memory database) pro zlepšení výkonu webových aplikací. Často se používá pro ukládání cache.

In-Memory storage: Redis ukládá data přímo v paměti, což ho dělá extrémně rychlým. To z něj činí vhodný nástroj pro cache, rychlé ukládání a získávání dat a další aplikace, které vyžadují nízkou latenci.

Key-Value store: Redis ukládá data ve formátu klíč-hodnota, to znamená, že každý záznam má jedinečný klíč, pod kterým je uložen. Data jsou obvykle binární nebo textové, a Redis umožňuje rychlé vyhledávání a získávání dat na základě klíče.

Podpora datových struktur: Redis nepodporuje pouze jednoduché hodnoty, ale také různé datové struktury jako seznamy, množiny, hashovací mapy a další. To umožňuje složitější operace s daty a efektivní manipulaci s nimi.

Pub/Sub mechanismus: Redis umožňuje publikování a odběr zpráv, to je užitečné pro asynchronní komunikaci mezi částmi aplikace.

Perzistence dat: Redis umožňuje volitelnou perzistenci dat na disk, což zajišťuje, že data nejsou ztracena po restartu serveru.

Clustering: Redis podporuje klustering, to umožňuje škálovat databázi na více serverů a zlepšit výkon a dostupnost.

Redis je často používán pro ukládání chache, asynchronní fronty zpráv, čítačky stavů a mnoho dalších aplikací, které vyžadují rychlé ukládání a získávání dat. Jeho jednoduchý a efektivní design ho činí oblíbeným nástrojem pro vývojáře v celé řadě aplikací a scénářů.

Založíme soubor docker-compose.yml :

version: '3.8'

services:
  redis:
    image: "redis:latest"
    container_name: redis
    ports:
      - "6379:6379"

Spustíme příkazem: docker-compose up nebo na pozadí příkazem: docker-compose up -d

Node,js PM2

PM2 (Process Manager 2) je správce procesů pro Node.js, který vám pomůže spravovat a udržovat vaše aplikace v chodu. Pojďme se podívat na základy.

Instalace

npm install pm2 -g

Spuštění aplikace

pm2 start app.js

Správa aplikací

$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

app_name nahraďte:

  • all pro všechny aplikace
  • id konkrétního procesu

Seznam spravovaných aplikací

Krásně vidíte status aplikace, přidělený výkon procesoru a paměti

pm2 [list|ls|status]

Zobrazení logu

pm2 logs

Zobrazení staršího logu:

pm2 logs --lines 200

Zobrazení řídícího panelu zobrazující realtime data z aplikace

pm2 monit

Debian – LXDE + X2Go

Pokud máte VPS s Ubuntu a z nějakého důvodu potřebujete grafický desktop, vyhází mi výkonově nejlépe LXDE + X2Go.

Instalace LXDE

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install lxde

Instalace X2Go

sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:x2go/stable 
sudo apt-get install x2goserver x2goserver-xsession

Zkontrolujeme status X2Go:

systemctl status x2goserver

X2Go klient pro Windows

V mém případě se budu připojovat z Windows, klienta stáhnu z https://wiki.x2go.org/doku.php/download:start (X2Go Client -> mswin)

Problémy

Connection failed. mesg: ttyname failed: Inappropriate ioctl for device

1) editujeme soubor /root/.profile
2) zakomentujeme řádek: mesg n || true (komentář je #), takže: #mesg n || true
3) přidáme: tty -s && mesg n

Raspberry Pi 3 B+ : watchdog

Pro čtení dat z meteostanice a následné odeslání na server posílám Raspberry Pi 3 B+. Super levný pracant s dostačujícím výkonem. Bohužel, několikrát měsíčně „vytuhne“ a neposílá meteo data na server.

Co je to watchdog?

Watchdog, zkráceně WDT (z angličtiny – „hlídací pes“) je obvod/periferie, která resetuje systém při jeho zacyklení. K zacyklení systému může dojít v důsledku chyby v hardware nebo software systému.

Instalujeme watchdog

modprobe bcm2835_wdt 
echo "bcm2835_wdt" | sudo tee -a /etc/modules
sudo apt-get install watchdog 
sudo update-rc.d watchdog defaults

Upravíme konfigurační soubor:
vim /etc/watchdog.conf

Ve kterém odkomentujeme tyto řádky (odebereme # na začátku řádku):
#watchdog-device
#max-load-1

Dále do konfiguračního souboru přidáme řádek:
watchdog-timeout = 15

Konfigurační soubor uložíme, restartujeme raspberry.

Otestovat můžeme příkazem:

:(){ :|:& };:

Vidíte, že tento příkaz systém zahltí. Po chvíli vás odpojí od Putty a pak přestane odpovídat na ping – zafungoval watchdog a probíhá restart. Po restartu Raspberry opět naběhne

Jak jsem nasadil Let’s Encrypt 2

Možná si ještě vzpomínáte na můj první článek o tom, Jak jsem nasadil Let’s Encrypt. Jo, nebyl příliš jednoduchý ale zase jste věděli co se vám na serveru děje. Dneska ukáži jednodušší způsob: Cerbot.

Instalace

apt-get install python-certbot-apache

Automatická instalace certifikátů a nastavení Apache:

certbot --apache

Pokud jste konzervativní a nechcete aby vám Cerbot zasahoval do konfigurace Apache, přidejte k příkazu certonly:

certbot --apache certonly

Po spuštění se zobrazí průvodce, který požaduje váš e-mail a nalezne všechny virtualhosty na serveru a nabídne pro ně vygenerování certifikátů. Vyberete ty, které chcete použít.

Certifikáty jsou poté vygenerovány do: /etc/letsencrypt/live/www.jmeno-domeny.cz/fullchain.pem

Obnovení platnosti certifikátu

Let’s Encrypt vydává certifikáty s platností 90 dní. Obnova certifikátů se provádí příkazem:

certbot renew --dry-run

If that appears to be working correctly, you can arrange for automatic renewal by adding a cronor systemd job which runs the following:

certbot renew

Vygenerování nového certifikátu

certbot --apache -d example.com -d www.example.com

Edit 5.5.2019
Certifikáty je nutné generovat jiným příkazem. Lets’s encrypt přestal používat šifrování HTTP-01 a přešel naTLS-SNI-01. Certifikát vygenerujeme:

certbot --authenticator standalone --installer apache -d venca-x.cz -d www.venca-x.cz --pre-hook "systemctl stop apache2" --post-hook "systemctl start apache2"



Debian 9: jak nastavit IPv6

Pokud váš poskytovatel připojení internetu nabízí IPv6, zde je ukázka nastavení. Tato konfigurace se provede i po restartu serveru.

vim /etc/network/interfaces

    iface eth0 inet6 static
        address 2001:db8::c0ca:1eaf
        netmask 64
        gateway 2001:db8::1ead:ed:beef
        dns-nameservers 2001:4860:4860::8844 2001:4860:4860::8888

Aby se změna projevila, je nutné restartovat interface

/etc/init.d/networking restart

Pokud jsme přihlášeni přes Putty, bude spojení přerušeno a je nutné se znovu připojit.

Správnou konfiguraci zjistíme příkazem:

ip address show

Správné nastavení ověříme pingem:

ping6 ipv6.google.com

 

Debian 9 (stretch) – instalace php 7.1

V poslední verzi Debianu Stretch je defaultně php 7.0, pokud potřebujete novější 7.1, je možné jej bez kompilace zdrojových kódů nainstalovat přes balíčky:

apt-get install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install php7.1

Stejným způsobem nainstalujeme PHP7.2:

apt install php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-zip php7.2-fpm php7.2-mbstring 

Jak jsem nasadil Let’s Encrypt

Dnes si prakticky ukážeme jak zprovoznit Let’s Encrypt na vlastním serveru s Debianem a Apache. Let’s Encrypt je továrna na certifikáty zdarma.

Instalace Let’s Encrypt

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Zastavíme Apache

/etc/init.d/apache2 stop
#nebo

systemctl stop apache2.service

Přesvědčíme se že na portu 80 nic neposlouchá:

netstat -na | grep ':80.*LISTEN'

Vygenerování certifikátu

cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone
  1. zadáme email
  2. souhlasíme s podmínkami
  3. zadáme doménová jména pro která chceme certifikát (example.com, www.example.com, app.example.com)
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to vencax@gmail.com.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.meducina.cz/fullchain.pem. Your cert will
   expire on 2016-04-14. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Opět spustíme Apache

/etc/init.d/apache2 start

Certifikáty byly vytvořeny do složky:

ls -al /etc/letsencrypt/live/www.your_domain_name.com

Do Apache pak stačí pouze přidat (základní nejjdnodužší nastavení):

vim meducina.cz-ssl.conf:

<VirtualHost *:443>
    ServerAdmin webhosting@ukaztese.cz
    ServerName  meducina.cz
    ServerAlias *.meducina.cz
    DocumentRoot /var/www/meducina.cz/web/www/www

    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/www.meducina.cz/cert.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/www.meducina.cz/privkey.pem"
</VirtualHost>

Přidáme tuto konfiguraci:

cd /etc/apache2/sites-enabled
a2ensite meducina.cz-ssl

Restartovat Apache a je to 🙂

Ovšem doporučuji Apache nastavit pořádně. K tomu pomůže Generator Mozilla Security (musel jsem povolit a2enmod headers). Takto mi to funguje

#Listen 443
<VirtualHost *:443>
    ServerAdmin webhosting@ukaztese.cz
    ServerName  meducina.cz
    ServerAlias *.meducina.cz
    DocumentRoot /var/www/meducina.cz/web/www/www

    SSLEngine on
    SSLCertificateFile      "/etc/letsencrypt/live/www.meducina.cz/cert.pem"
    SSLCertificateKeyFile   "/etc/letsencrypt/live/www.meducina.cz/privkey.pem"
    SSLCACertificateFile    "/etc/letsencrypt/live/www.meducina.cz/fullchain.pem"

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>



# intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv3
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
    SSLCompression          off
#    SSLSessionTickets       off   #WTF - why don't work?

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Přesměrování na https

Veškerý traffic přesměrujeme na http

<VirtualHost *:80>

#...
    #redirect to https
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#...

</VirtualHost>

 

Obnova certifikátů

Doporučuji si udělat symlink aby příkaz letsencrypt-auto fungoval kdekoliv z příkazové řádky:

ln -s /opt/letsencrypt/letsencrypt-auto /usr/local/bin/letsencrypt-auto

Certifikáty jsou vystavené pouze s platností 90 dnů! Zároveň je doporučováno je každých 60 dnů obnovit. Aktualizace certifikátů zatím stále není k dispozici, ale certifikát obnovíme opětovným spuštěním příkazů uvedených výše.

 

Pravidelná aktualizace certifikátů

Abychom nemuseli myslet na pravidelnou aktualizaci certifikátů, přidáme záznam do cornu, který nám je bude automaticky aktualizovat:

crontab -e

Obnovu certifikátů budeme spouštět každý první den v sudém měsíci ve 4:00 ráno:

0 4 1 */2 * cd /opt/letsencrypt && ./letsencrypt-auto certonly --apache --renew-by-default --apache -d www.meducina.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1
0 4 1 */2 * cd /opt/letsencrypt && ./letsencrypt-auto certonly --apache --renew-by-default --apache -d www.vhazovani.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1
0 4 1 */2 * letsencrypt-auto certonly --apache --renew-by-default --apache -d www.protivinsko.cz >> /var/log/letsencrypt/protivinsko.cz-renew.log 2>&1

To je vše. Není nutné restartovat Apache

Ovšem lepší je dát do cronu pouze 1 script, který bude automaticky obnovovat certifikáty:

0 4 1 */2 * /root/letsencrypt-renew

vim /root/letsencrypt-renew

#!/bin/bash

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.meducina.cz >> /var/log/letsencrypt/meducina.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.vhazovani.cz >> /var/log/letsencrypt/vhazovani.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.protivinsko.cz >> /var/log/letsencrypt/protivinsko.cz-renew.log 2>&1

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --apache -d www.mamejidlo.cz >> /var/log/letsencrypt/mamejidlo.cz-renew.log 2>&1

Nastavit oprávnění pro spouštění:

chmod oug+x letsencrypt-renew

 

Debian 7 (wheezy) instalace PHP 5.6

Dnes jsme se při vývoji webu eshopvikend.cz zasekli na PHP 5.3. Knihovna pro přihlášení uživatelů přes sociální sítě vyžaduje alespoň PHP 5.4

Inu, mám trochu času tak se podívám na mé VPS na kterém běží Debian 7 Wheezy a PHP 5.4.36. Většina mých projektů je na Nette (verze 2.2) nebo aktualizovaný WordPress. S přechodem na PHP 5.6 nebude problém 🙂

Po motivačním videu od Petra Krčmáře se jde na to!

Dávejte pozor a před aktualizací pro jistotu zazálohujte vaši konfiguraci! Rovněž nezapomeňte že při upgrade na PHP 5.6 na Debianu budete potřebovat Apache 2.4 (který má trochu jiné konfigurační soubory)

Ze stable repozitáře Debianu (Wheezy) není možné nainstalovat vyšší verzi PHP než 5.4. Připadá v úvahu ruční kompilace, ruční instalace zkompilovaného balíčku nebo backports.

Backports má výhodu v tom, že nainstalované programy bude možné dále aktualizovat a pokud chceme instalovat z backports musíme při instalaci zadat určitý identifikátor.

Větve Debianu:

  • stable – bylíčky z větve testing se přibližně jednou za 2 roky vezmou a překlopí do větve stable
  • testing – balíček který se 14 dní neopravoval ve větvi unstable propadne do větve testing
  • unstabe – neznamená nestabilní (lépe řečeno pohyblivá) – často přichází nové verze balíčků

Pokud chceme novější PHP, použijeme větev testing.

Ze všeho nejdřív doporučuji nainstalovat apt-show-version:

apt-get install apt-show-versions

 

Nastavení výchozí větev pro instalaci balíčků

vim /etc/apt/apt.conf.d/00release

APT::Default-Release "stable";

Nyní přidáme testing repozitář:

vim /etc/apt/sources.list přidáme řádek:

deb http://ftp.zcu.cz/mirrors/debian/ testing main

Uděláme update balíčků:

apt-get update

Podíváme se na dostupné verze PHP:

apt-show-versions -a php5

Kde vidět aktuálně nainstalovaná verze 5.4.36-0+deb7u1 a dostupná verze 5.6.4+dfsg-1 z testing větve.

php5:all 5.4.36-0+deb7u1 install ok installed
php5:all 5.4.4-14+deb7u14 wheezy  ftp.zcu.cz
php5:all 5.4.36-0+deb7u1  wheezy  security.debian.org
No stable-updates version
php5:all 5.6.4+dfsg-1     testing ftp.zcu.cz
php5:all/wheezy 5.4.36-0+deb7u1 uptodate

Přidaný testing repozitář nená žádný vliv na instalací balíčků. Pro instalaci z testing větve je nutné uvést parametr. Přesvědčme se o tom. Zobrazme si verzi PHP která se nabízí k instalaci:

aptitude show php5

Vidíme že instalátor nabízí: Version: 5.4.36-0+deb7u1

Pokud chceme instalovat balíčky z testing větve použijeme parametr: -t testing

Nyní si zobrazme verzi PHP nainstalovaného z testing větve:

aptitude show php5 -t testing

Vidíme že instalátor nabízí: Version: 5.6.4+dfsg-1 který nainstalujeme:

apt-get install php5 -t testing