|
| 1 | +Naše Runtime je docker image, který obsahuje zkompilované různé verze následujících jazyků: python, golang, php, ruby, nodejs, deno, bun, openjdk. |
| 2 | +Jednotlivé aplikace používají různé verze Runtime a běží v docker kontejneru. |
| 3 | + |
| 4 | +V kontejneru běží také SSH daemon a Cron daemon. |
| 5 | + |
| 6 | +Jazyky jsou dostupné v adresáři /opt/techs ve formátu /opt/techs/jazyk-verze, například /opt/techs/python-3.12.0. |
| 7 | +Po aktivaci je primární technologie dostupná v /srv/bin/primary_tech, kde jsou všechny relevantní binární soubory. Tato cesta je i v PATH, ale v supervisordu se musí použít. |
| 8 | +Python používá venv v /srv/venv, který se vytváří automaticky pomocí python z /srv/bin/primary_tech/python a je automaticky aktivovaný. V supervisordu se musí použít /srv/venv/bin/python. |
| 9 | + |
| 10 | +V runtime jde vybrat primární jazyk, který se nastavuje z webového administrátorského rozhraní. Pak je možné aktualizovat na jinou verzi jazyka opět z webového rozhraní nebo pomocí příkazu rosti přes SSH. |
| 11 | +Primární technologie se ve výchozím stavu volí během vytváření aplikace v administraci. |
| 12 | + |
| 13 | +Po spuštení rosti se objeví menu, kde je první položka tech, po odkliknutí se vylistuje seznam podporovaných jazyků a po potvrzení se jazyk změní na vybranou verzi. |
| 14 | +Jazyk v systému nazýváme technologie. |
| 15 | +Kromě jazyka je možné vybrat services kde je možné aktivovat redis nebo memcached. Obojí jde aktivovat i z webové administrace. |
| 16 | + |
| 17 | +Další volbou je možnost změnit crontab. |
| 18 | +Crontab je umístěn v souboru /srv/conf/crontab a pokud se změní v tomto souboru, je potřeba zavolat příkaz: crontab /srv/conf/crontab |
| 19 | +Aby se nastavil i v systému. |
| 20 | + |
| 21 | +Procesy na pozadí jsou spravovány nástrojem supervisord. Ten má konfiguraci v /srv/conf/supervisor.d/. |
| 22 | +V každém kontejneru je Nginx, který se chová jako reverzní proxy k procesu s uživatelským kódem aplikace. |
| 23 | + |
| 24 | +Nginx má svoji konfiguraci v /srv/conf/nginx.d, která vypadá takto: |
| 25 | +server { |
| 26 | + listen 0.0.0.0:8000; |
| 27 | + listen [::]:8000; |
| 28 | + location / { |
| 29 | + proxy_pass http://127.0.0.1:8080/; |
| 30 | + proxy_redirect default; |
| 31 | + proxy_set_header X-Real-IP $remote_addr; |
| 32 | + proxy_set_header Host $host; |
| 33 | + } |
| 34 | + #location /static/ { |
| 35 | + # alias /srv/static/; |
| 36 | + #} |
| 37 | +} |
| 38 | + |
| 39 | +Po změně konfigurace supervisordu je potřeba zavolat: |
| 40 | + |
| 41 | +supervisorctl reread |
| 42 | +supervisorctl update |
| 43 | + |
| 44 | +Kde reread načte novou konfiguraci a update ji aplikuje. |
| 45 | + |
| 46 | +Změna konfigurace nginxu se dá načíst buď pomocí nginx -s reload nebo supervisorctl restart nginx |
| 47 | + |
| 48 | +Všechny jazyky mají po kontejneru s aplikací výchozí kód, který se nachází v /srv/app. |
| 49 | +Do /srv/app by měl uživatel nahrát i svůj kód. Adresář /srv/app ale není povinný, jen doporučený a |
| 50 | +je do něj nastavena výchozí konfigurace nginxu a supervisordu. |
| 51 | +V souboru /srv/conf/supervisor.d/JAZYK.conf je pak konfigurace k vybrané primární technologii. |
| 52 | +Tady je ukázka pro Python: |
| 53 | + |
| 54 | +[program:app] |
| 55 | +command=/srv/venv/bin/fastapi run calculator/main.py |
| 56 | +directory=/srv/app |
| 57 | +autostart=true |
| 58 | +autorestart=true |
| 59 | +stdout_logfile=/srv/log/python.log |
| 60 | +stdout_logfile_maxbytes=2MB |
| 61 | +stdout_logfile_backups=5 |
| 62 | +redirect_stderr=true |
| 63 | + |
| 64 | +Kde se spouští fastapi web server. |
| 65 | + |
| 66 | +Soubor s logem ve výchozím stavu vždy cestu /srv/log/JAZYK.log. |
| 67 | +Nginx je pak v /srv/log/nginx.log |
| 68 | +Logy rotuje sám supervisord. |
| 69 | + |
| 70 | +Tady je příklad pro OpenJDK: |
| 71 | + |
| 72 | +[program:app] |
| 73 | +command=/srv/bin/primary_tech/java /srv/app/app.java |
| 74 | +environment=PATH="/srv/bin/primary_tech:/usr/local/bin:/usr/bin:/bin:/srv/.npm-packages/bin" |
| 75 | +stopasgroup=true |
| 76 | +directory=/srv/app |
| 77 | +process_name=app |
| 78 | +autostart=true |
| 79 | +autorestart=true |
| 80 | +stdout_logfile=/srv/log/openjdk.log |
| 81 | +stdout_logfile_maxbytes=2MB |
| 82 | +stdout_logfile_backups=5 |
| 83 | +stdout_capture_maxbytes=2MB |
| 84 | +stdout_events_enabled=false |
| 85 | +redirect_stderr=true |
| 86 | + |
| 87 | +Je možné aktivovat i sekundární technologii pomocí příkazu activate_tech. Ten je pak dostupný |
| 88 | +stejně jako primární, ale prostředí se nezkonfiguruje pro jeho použití. Nenahraje se tedy |
| 89 | +ukázková aplikace a konfigurace. |
| 90 | +Sekundární jazyky umístěný v /srv/bin/active_JAZYK a tyto cesty jsou dostupné v PATH. |
| 91 | + |
| 92 | +Základem pro všechny jazyky je, aby kód aplikace spustil HTTP server na portu 8080. Na portu 8000 |
| 93 | +poslouchá Nginx, který požadavky přesměrovává právě na 8080. |
| 94 | + |
| 95 | +Nginx se dá nastavit pro rychlé servírování statického obsahu pomocí: |
| 96 | +location /static/ { |
| 97 | + alias /srv/static/; |
| 98 | +} |
| 99 | + |
| 100 | +Pro kopírování dat použij rsync. |
| 101 | +SSH přístup do aplikace je ve formátu: ssh -p PORT [email protected] |
| 102 | +Mění se vždy jen PORT, který je možné najít u aplikace v administraci. |
| 103 | +Heslo se nastavuje v administraci. Při vytváření aplikace je možné uploadovat i SSH klíče. |
| 104 | +Vždy uváděj příklad, jak se připojit do aplikace přes SSH. |
| 105 | + |
| 106 | +Golang kód je možné buildovat v CI/CD nebo přímo v kontejneru s aplikací. |
0 commit comments