Skip to content

Commit bb6bb5a

Browse files
committed
Bun and OpenJDK
1 parent 67a4062 commit bb6bb5a

File tree

6 files changed

+325
-0
lines changed

6 files changed

+325
-0
lines changed

ai/runtime.txt

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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í.

docs/cs/apps/bun.md

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Aplikace napsaná v Bun
2+
3+
Tento návod vás provede jednotlivými kroky, jak nahrát kód vaší aplikace napsané v Bun do kontejneru na Roští.cz, jak zajistit, aby Nginx správně přesměrovával požadavky, a jak aplikaci spustit.
4+
5+
## 1. Přihlášení do kontejneru s aplikací
6+
7+
Nejdříve se přihlaste do kontejneru s vaší aplikací přes SSH. Port pro připojení naleznete v naší administraci.
8+
9+
```bash
10+
ssh -p PORT [email protected]
11+
```
12+
13+
## 2. Nahrání kódu aplikace do kontejneru
14+
15+
Kód aplikace by měl být nahrán do adresáře `/srv/app`. Doporučujeme použít `rsync` pro efektivní kopírování souborů.
16+
17+
```bash
18+
rsync -avz --delete ./my-bun-app/ [email protected]:/srv/app/
19+
```
20+
21+
Tímto příkazem nahrajete obsah adresáře `my-bun-app` z vašeho lokálního počítače do adresáře `/srv/app` v kontejneru.
22+
23+
## 3. Zajištění, aby kód aplikace spustil HTTP server na portu 8080
24+
25+
Aby Nginx správně přesměrovával požadavky na vaši aplikaci, musí váš kód spustit HTTP server na portu 8080. Níže je jednoduchý příklad Bun aplikace, která tento požadavek splňuje.
26+
27+
Vytvořte nebo upravte soubor `/srv/app/app.js` a vložte do něj následující kód:
28+
29+
```javascript
30+
import { serve } from "bun";
31+
32+
serve({
33+
port: 8080,
34+
fetch(req) {
35+
return new Response("Hello World");
36+
},
37+
});
38+
```
39+
40+
Tento kód zajistí, že aplikace bude naslouchat na portu 8080, což je nezbytné, aby Nginx mohl správně přesměrovat požadavky.
41+
42+
## 4. Konfigurace Nginx pro přesměrování požadavků
43+
44+
Nginx je nakonfigurován tak, aby přesměrovával HTTP požadavky na port 8000 na vaši aplikaci běžící na portu 8080. Výchozí konfigurace Nginx je již nastavena správně, takže není třeba ji měnit, pokud používáte standardní porty.
45+
46+
Pokud jste provedli nějaké změny v konfiguraci Nginx v `/srv/conf/nginx.d/app.conf`, můžete načíst změny pomocí příkazu:
47+
48+
```bash
49+
nginx -s reload
50+
```
51+
52+
## 5. Konfigurace Supervisordu pro správu aplikace
53+
54+
Aplikace je spravována pomocí Supervisordu, což je nástroj pro správu procesů. Musíte vytvořit nebo upravit konfiguraci Supervisordu, aby správně spouštěla vaši Bun aplikaci.
55+
56+
Vytvořte nebo upravte soubor `/srv/conf/supervisor.d/bun.conf` s následujícím obsahem:
57+
58+
```ini
59+
[program:app]
60+
command=/srv/bin/primary_tech/bun run /srv/app/app.js
61+
directory=/srv/app
62+
autostart=true
63+
autorestart=true
64+
stdout_logfile=/srv/log/bun.log
65+
stdout_logfile_maxbytes=2MB
66+
stdout_logfile_backups=5
67+
redirect_stderr=true
68+
```
69+
70+
Tento konfigurační soubor zajistí, že se vaše aplikace automaticky spustí a bude se restartovat v případě výpadku.
71+
72+
## 6. Spuštění a správa aplikace
73+
74+
Po nahrání kódu a konfiguraci Supervisordu je třeba načíst novou konfiguraci a aplikovat ji:
75+
76+
```bash
77+
supervisorctl reread
78+
supervisorctl update
79+
```
80+
81+
Pokud provedete změny v kódu aplikace, musíte aplikaci restartovat, aby se změny projevily:
82+
83+
```bash
84+
supervisorctl restart app
85+
```
86+
87+
## 7. Ověření běhu aplikace
88+
89+
Nyní by měla být vaše Bun aplikace spuštěná a dostupná přes Nginx. Můžete ji otestovat návštěvou URL adresy vaší aplikace ve webovém prohlížeči.
90+
91+
Pokud vše funguje správně, měli byste vidět odpověď "Hello World" z ukázkového kódu nebo výstup vašeho kódu.
92+
93+
Tímto je konfigurace a spuštění aplikace napsané v Bun dokončena.

docs/cs/apps/openjdk.md

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Aplikace napsaná v Javě/OpenJDK
2+
3+
Tento návod vás provede jednotlivými kroky, jak nahrát kód vaší aplikace napsané v Javě do kontejneru s aplikací, jak zajistit, aby Nginx správně přesměrovával požadavky, a jak aplikaci spustit.
4+
5+
## 1. Přihlášení do kontejneru s aplikací
6+
7+
Nejdříve se přihlaste do kontejneru s vaší aplikací přes SSH. Port pro připojení naleznete v naší administraci.
8+
9+
```bash
10+
ssh -p PORT [email protected]
11+
```
12+
13+
## 2. Nahrání kódu aplikace do kontejneru
14+
15+
Kód aplikace by měl být nahrán do adresáře `/srv/app`. Doporučujeme použít `rsync` pro efektivní kopírování souborů.
16+
17+
```bash
18+
rsync -avz --delete ./my-java-app/ [email protected]:/srv/app/
19+
```
20+
21+
Tímto příkazem nahrajete obsah adresáře `my-java-app` z vašeho lokálního počítače do adresáře `/srv/app` v kontejneru.
22+
23+
## 3. Zajištění, aby kód aplikace spustil HTTP server na portu 8080
24+
25+
Aby Nginx správně přesměrovával požadavky na vaši aplikaci, musí váš kód spustit HTTP server na portu 8080. Níže je jednoduchý příklad Java aplikace, která tento požadavek splňuje.
26+
27+
Vytvořte nebo upravte soubor `/srv/app/App.java` a vložte do něj následující kód:
28+
29+
```java
30+
import com.sun.net.httpserver.HttpServer;
31+
import com.sun.net.httpserver.HttpHandler;
32+
import com.sun.net.httpserver.HttpExchange;
33+
import java.io.IOException;
34+
import java.io.OutputStream;
35+
import java.net.InetSocketAddress;
36+
37+
public class App {
38+
public static void main(String[] args) throws IOException {
39+
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
40+
server.createContext("/", new MyHandler());
41+
server.setExecutor(null); // creates a default executor
42+
server.start();
43+
}
44+
45+
static class MyHandler implements HttpHandler {
46+
public void handle(HttpExchange t) throws IOException {
47+
String response = "Hello World";
48+
t.sendResponseHeaders(200, response.length());
49+
OutputStream os = t.getResponseBody();
50+
os.write(response.getBytes());
51+
os.close();
52+
}
53+
}
54+
}
55+
```
56+
57+
Tento kód zajistí, že aplikace bude naslouchat na portu 8080, což je nezbytné, aby Nginx mohl správně přesměrovat požadavky.
58+
59+
## 4. Kompilace kódu aplikace
60+
61+
Před spuštěním aplikace je třeba ji zkompilovat. Připojte se k aplikaci přes SSH a spusťte následující příkaz:
62+
63+
```bash
64+
javac /srv/app/App.java -d /srv/app/
65+
```
66+
67+
Tímto příkazem zkompilujete Java soubor `App.java` a výsledný `.class` soubor bude uložen do stejného adresáře.
68+
69+
## 5. Konfigurace Nginx pro přesměrování požadavků
70+
71+
Nginx je nakonfigurován tak, aby přesměrovával HTTP požadavky na port 8000 na vaši aplikaci běžící na portu 8080. Výchozí konfigurace Nginx je již nastavena správně, takže není třeba ji měnit, pokud používáte standardní porty.
72+
73+
Pokud jste provedli nějaké změny v konfiguraci Nginx v `/srv/conf/nginx.d/app.conf`, můžete načíst změny pomocí příkazu:
74+
75+
```bash
76+
nginx -s reload
77+
```
78+
79+
## 6. Konfigurace Supervisordu pro správu aplikace
80+
81+
Aplikace je spravována pomocí Supervisordu, což je nástroj pro správu procesů. Musíte vytvořit nebo upravit konfiguraci Supervisordu, aby správně spouštěla vaši Java aplikaci.
82+
83+
Vytvořte nebo upravte soubor `/srv/conf/supervisor.d/openjdk.conf` s následujícím obsahem:
84+
85+
```ini
86+
[program:app]
87+
command=/srv/bin/primary_tech/java App
88+
directory=/srv/app
89+
autostart=true
90+
autorestart=true
91+
stdout_logfile=/srv/log/openjdk.log
92+
stdout_logfile_maxbytes=2MB
93+
stdout_logfile_backups=5
94+
redirect_stderr=true
95+
```
96+
97+
Tento konfigurační soubor zajistí, že se vaše aplikace automaticky spustí a bude se restartovat v případě výpadku.
98+
99+
## 7. Spuštění a správa aplikace
100+
101+
Po nahrání kódu a konfiguraci Supervisordu je třeba načíst novou konfiguraci a aplikovat ji:
102+
103+
```bash
104+
supervisorctl reread
105+
supervisorctl update
106+
```
107+
108+
Pokud provedete změny v kódu aplikace, musíte aplikaci restartovat, aby se změny projevily:
109+
110+
```bash
111+
supervisorctl restart app
112+
```
113+
114+
## 8. Ověření běhu aplikace
115+
116+
Nyní by měla být vaše Java aplikace spuštěná a dostupná přes Nginx. Můžete ji otestovat návštěvou URL adresy vaší aplikace ve webovém prohlížeči.
117+
118+
Pokud vše funguje správně, měli byste vidět odpověď "Hello World" z ukázkového kódu nebo výstup vašeho kódu.
119+
120+
Tímto je konfigurace a spuštění aplikace napsané v Javě na Roští.cz dokončena.

docs/cs/runtime.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ To nás přivádí k aktualizaci, která se liší podle jednotlivých technolog
1616
* [Deno](apps/deno.md)
1717
* [Ruby](apps/ruby.md)
1818
* [Golang](apps/golang.md)
19+
* [Bun](cs/apps/bun.md)
20+
* [OpenJDK](cs/apps/openjdk.md)

docs/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Snažili jsme se přímočaře popsat, jak Roští funguje a jak tam nasadit va
2525
* [Node.js](cs/apps/nodejs.md)
2626
* [Deno](cs/apps/deno.md)
2727
* [Golang](cs/apps/golang.md)
28+
* [Bun](cs/apps/bun.md)
29+
* [OpenJDK](cs/apps/openjdk.md)
2830
<!-- * [Ruby](apps/ruby.md) -->
2931

3032
## Frameworky a další nástroje

mkdocs.yml

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ nav:
1414
- Node.js: cs/apps/nodejs.md
1515
- Deno: cs/apps/deno.md
1616
- Golang: cs/apps/golang.md
17+
- Bun: cs/apps/bun.md
18+
- Java/OpenJDK: cs/apps/openjdk.md
1719
- "Frameworky a nástroje":
1820
- "Laravel": cs/frameworks/laravel.md
1921
- "WordPress": cs/frameworks/wordpress.md

0 commit comments

Comments
 (0)