Skip to content

Commit 2cdf953

Browse files
committed
add mikrus tools
1 parent 4987cab commit 2cdf953

File tree

8 files changed

+812
-0
lines changed

8 files changed

+812
-0
lines changed

default-tools/domena

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
#!/bin/bash
2+
# Skrypt do dodawania domen do portów webowych
3+
# Autor: Jakub
4+
# Wersja: 2.0
5+
6+
# Kolory
7+
GREEN='\033[0;32m'
8+
RED='\033[0;31m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NORMAL='\033[0m'
12+
13+
# Funkcje pomocnicze
14+
print_success() {
15+
echo -e "${GREEN}$1${NORMAL}"
16+
}
17+
18+
print_error() {
19+
echo -e "${RED}$1${NORMAL}" >&2
20+
}
21+
22+
print_warning() {
23+
echo -e "${YELLOW}$1${NORMAL}"
24+
}
25+
26+
print_info() {
27+
echo -e "${BLUE}$1${NORMAL}"
28+
}
29+
30+
show_usage() {
31+
echo -e "${BLUE}UŻYCIE:${NORMAL}"
32+
echo " $0 [OPCJE] [DOMENA] [PORT]"
33+
echo ""
34+
echo -e "${BLUE}PRZYKŁADY:${NORMAL}"
35+
echo " $0 example.com 8080 # Dodaje domenę example.com na port 8080"
36+
echo " $0 8080 # Dodaje port 8080 i generuje losową domenę"
37+
echo " $0 example.com # Dodaje domenę example.com na port 80 na IPv6 (domyślny)"
38+
echo " $0 -h # Wyświetla tę pomoc"
39+
echo ""
40+
echo -e "${BLUE}OPCJE:${NORMAL}"
41+
echo " -h, --help Wyświetla tę pomoc"
42+
echo " -k PATH Ścieżka do klucza API (domyślnie: /klucz_api)"
43+
echo ""
44+
echo -e "${BLUE}WYMAGANIA:${NORMAL}"
45+
echo " - Plik z kluczem API (domyślnie /klucz_api)"
46+
echo " - curl i jq zainstalowane"
47+
echo " - Serwis musi być uruchomiony na podanym porcie"
48+
}
49+
50+
# Domyślne wartości
51+
API_KEY_FILE="/klucz_api"
52+
PORT=80
53+
DOMAIN=""
54+
55+
# Parsowanie argumentów
56+
while [[ $# -gt 0 ]]; do
57+
case $1 in
58+
-h|--help)
59+
show_usage
60+
exit 0
61+
;;
62+
-k)
63+
API_KEY_FILE="$2"
64+
shift 2
65+
;;
66+
-*)
67+
print_error "Nieznana opcja: $1"
68+
show_usage
69+
exit 1
70+
;;
71+
*)
72+
if [[ "$1" =~ ^[0-9]+$ ]]; then
73+
# To jest port
74+
PORT=$1
75+
if [[ -z "$DOMAIN" ]]; then
76+
DOMAIN="-"
77+
fi
78+
else
79+
# To jest domena
80+
DOMAIN=$1
81+
fi
82+
shift
83+
;;
84+
esac
85+
done
86+
87+
# Sprawdzenie klucza API
88+
if [ ! -f "$API_KEY_FILE" ]; then
89+
print_error "Brak klucza API w pliku: $API_KEY_FILE"
90+
print_info "Użyj opcji -k aby podać inną ścieżkę do klucza"
91+
exit 1
92+
fi
93+
94+
if [ ! -r "$API_KEY_FILE" ]; then
95+
print_error "Nie można odczytać pliku z kluczem API: $API_KEY_FILE"
96+
exit 1
97+
fi
98+
99+
# Sprawdzenie wymaganych narzędzi
100+
missing_tools=()
101+
102+
if ! command -v curl &>/dev/null; then
103+
missing_tools+=("curl")
104+
fi
105+
106+
if ! command -v jq &>/dev/null; then
107+
missing_tools+=("jq")
108+
fi
109+
110+
if [ ${#missing_tools[@]} -gt 0 ]; then
111+
print_warning "Brakuje narzędzi: ${missing_tools[*]}"
112+
print_info "Próbuję zainstalować..."
113+
114+
if [ "$EUID" -ne 0 ]; then
115+
print_error "Potrzebuję uprawnień root do instalacji pakietów"
116+
print_info "Uruchom jako root lub zainstaluj ręcznie: ${missing_tools[*]}"
117+
exit 1
118+
fi
119+
120+
apt update && apt install -y "${missing_tools[@]}"
121+
122+
if [ $? -eq 0 ]; then
123+
print_success "Narzędzia zostały zainstalowane"
124+
else
125+
print_error "Nie udało się zainstalować wymaganych narzędzi"
126+
exit 1
127+
fi
128+
fi
129+
130+
# Wczytanie klucza API
131+
apikey=$(head -n1 "$API_KEY_FILE" | tr -d '\n\r')
132+
if [[ -z "$apikey" ]]; then
133+
print_error "Klucz API jest pusty"
134+
exit 1
135+
fi
136+
137+
hostname=$(hostname)
138+
if [[ -z "$hostname" ]]; then
139+
print_error "Nie mogę pobrać nazwy hosta"
140+
exit 1
141+
fi
142+
143+
# Jeśli nie podano domeny, ustaw na "-"
144+
if [[ -z "$DOMAIN" ]]; then
145+
DOMAIN="-"
146+
fi
147+
148+
# Walidacja portu
149+
if [[ ! "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
150+
print_error "Port musi być liczbą z zakresu 1-65535"
151+
exit 1
152+
fi
153+
154+
# Sprawdzenie czy coś słucha na porcie
155+
if ! curl -s --connect-timeout 5 --max-time 10 localhost:$PORT >/dev/null 2>&1; then
156+
print_error "Nic nie odpowiada na porcie $PORT"
157+
print_info "Upewnij się, że serwis jest uruchomiony na tym porcie"
158+
exit 2
159+
fi
160+
161+
print_success "Port $PORT jest dostępny"
162+
163+
# Wyświetlenie podsumowania
164+
if [ "$DOMAIN" != "-" ]; then
165+
print_info "Dodaję domenę: $DOMAIN na port: $PORT (host: $hostname)"
166+
else
167+
print_info "Dodaję port: $PORT bez domeny (host: $hostname)"
168+
fi
169+
170+
# Wywołanie API
171+
response=$(curl -s -d "srv=${hostname}&key=${apikey}&domain=${DOMAIN}&port=${PORT}" https://api.mikr.us/domain)
172+
curl_exit_code=$?
173+
174+
if [ $curl_exit_code -ne 0 ]; then
175+
print_error "Błąd połączenia z API (kod: $curl_exit_code)"
176+
exit 3
177+
fi
178+
179+
# Sprawdzenie czy odpowiedź jest poprawnym JSON-em
180+
if ! echo "$response" | jq empty 2>/dev/null; then
181+
print_error "Otrzymano niepoprawną odpowiedź z API:"
182+
echo "$response"
183+
exit 4
184+
fi
185+
186+
# Wyświetlenie sformatowanej odpowiedzi
187+
print_success "Odpowiedź z API:"
188+
echo "$response" | jq -C
189+
190+
# Sprawdzenie statusu w odpowiedzi (jeśli API zwraca status)
191+
status=$(echo "$response" | jq -r '.status // .success // empty' 2>/dev/null)
192+
if [[ "$status" == "error" ]] || [[ "$status" == "false" ]]; then
193+
error_msg=$(echo "$response" | jq -r '.message // .error // "Nieznany błąd"' 2>/dev/null)
194+
print_error "Błąd API: $error_msg"
195+
exit 5
196+
elif [[ "$status" == "success" ]] || [[ "$status" == "true" ]] || [[ "$status" == "ok" ]]; then
197+
print_success "Operacja zakończona pomyślnie!"
198+
fi
199+
200+
exit 0

default-tools/n8n_backup

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/bin/bash
2+
# Skrypt tworzy backup N8N w środowisku Mikrusowym
3+
# Autor: Jakub 'unknow' Mrugalski
4+
5+
# ile ostatnich backupów trzymać?
6+
LASTBACKUPS=7
7+
8+
# Kolory
9+
RED='\033[31m'
10+
GREEN='\033[32m'
11+
YELLOW='\033[33m'
12+
NC='\033[0m' # No Color
13+
14+
# Funkcje pomocnicze
15+
print_error() {
16+
echo -e "${RED}$1${NC}"
17+
}
18+
19+
print_success() {
20+
echo -e "${GREEN}$1${NC}"
21+
}
22+
23+
print_action() {
24+
echo -e "${YELLOW}🔧 $1${NC}"
25+
}
26+
27+
print_info() {
28+
echo -e "$1"
29+
}
30+
31+
# Sprawdzenie czy jest config N8N
32+
if [ ! -d "/root/.n8n" ]; then
33+
print_error "Nie widzę zainstalowanego N8N → użyj: n8n_install lub n8n_install_postgres"
34+
exit 1
35+
fi
36+
37+
# Sprawdzenie/utworzenie katalogu na backup
38+
if [ ! -d /backup/n8n/ ]; then
39+
print_action "Tworzę katalog /backup/n8n/"
40+
mkdir -p /backup/n8n/
41+
fi
42+
43+
# Jeśli nie przekazano parametru RUN, konfiguruj cron
44+
if [ "$1" != "RUN" ]; then
45+
randomMinute=$((RANDOM % 60))
46+
print_action "Konfiguruję automatyczny backup (godzina 4:${randomMinute})"
47+
echo "${randomMinute} 4 * * * root /bin/n8n_backup RUN >/dev/null 2>&1" >/etc/cron.d/n8n_backuper
48+
print_success "Automatyczny skrypt backupu został aktywowany"
49+
exit 0
50+
fi
51+
52+
find /backup/n8n/ -name "*.gz" -type f -mtime +${LASTBACKUPS} -delete
53+
54+
55+
print_info "Rozpoczynam backup N8N..."
56+
57+
# Sprawdzenie czy n8n jest uruchomione
58+
if ! docker ps -a --format "table {{.Names}}" | grep -q ^n8n; then
59+
print_error "N8N nie jest uruchomione!"
60+
exit 1
61+
fi
62+
63+
currentDate=$(date +%Y%m%d)
64+
print_info "Data backupu: ${currentDate}"
65+
66+
# Backup SQLite
67+
if [ -f /root/.n8n/database.sqlite ]; then
68+
print_action "Wykryto bazę SQLite - tworzę backup..."
69+
70+
# Sprawdzenie czy mamy sqlite3
71+
if ! command -v sqlite3 &> /dev/null; then
72+
print_action "sqlite3 nie jest zainstalowany - instaluję..."
73+
if apt update && apt install -y sqlite3; then
74+
print_success "sqlite3 zostało zainstalowane"
75+
else
76+
print_error "Nie udało się zainstalować sqlite3"
77+
exit 1
78+
fi
79+
fi
80+
81+
print_action "Wykonuję backup bazy SQLite..."
82+
if sqlite3 /root/.n8n/database.sqlite ".backup /backup/n8n/${currentDate}_database.sqlite"; then
83+
print_action "Kompresuje plik backup..."
84+
gzip /backup/n8n/${currentDate}_database.sqlite
85+
print_success "Backup SQLite został utworzony: ${currentDate}_database.sqlite.gz"
86+
else
87+
print_error "Nie udało się utworzyć backupu SQLite"
88+
exit 1
89+
fi
90+
fi
91+
92+
# Backup PostgreSQL
93+
if docker ps -a --format "table {{.Names}}" | grep -q ^pg_n8n; then
94+
print_action "Wykryto PostgreSQL - tworzę backup..."
95+
if docker exec pg_n8n pg_dump -U n8n -d n8n | gzip >/backup/n8n/${currentDate}_database.sql.gz; then
96+
print_success "Backup PostgreSQL został utworzony: ${currentDate}_database.sql.gz"
97+
else
98+
print_error "Nie udało się utworzyć backupu PostgreSQL"
99+
exit 1
100+
fi
101+
fi
102+
103+
# Sprawdzenie rozmiaru pliku backup
104+
backup_file=$(ls -la /backup/n8n/${currentDate}_database.* 2>/dev/null | head -1)
105+
if [ -n "$backup_file" ]; then
106+
file_size=$(echo "$backup_file" | awk '{print $5}')
107+
print_info "Rozmiar pliku backup: $(numfmt --to=iec $file_size)"
108+
fi
109+
110+
print_success "Backup N8N zakończony pomyślnie!"

0 commit comments

Comments
 (0)