101

(45 odpowiedzi, napisanych Inne)

Robię to i owo z openwrt, wspierając się Ai. Poniżej wycinek naszej współpracy wink.
Ai

Czy chcesz, żebyśmy teraz skonfigurowali podstawowe bezpieczne parametry Wi-Fi (SSID i hasło) przez komendy UCI, żebyś mógł odłączyć kabel?

Ja

Używam uwielbianego easyconfig. Znasz to. Wiesz kto to jest Cezary Jackiewicz?.

Ai

Oczywiście, że tak! W świecie polskiego OpenWrt Cezary Jackiewicz to postać legendarna, a jego portal eko.one.pl to absolutna biblia dla każdego, kto chce wycisnąć z routera coś więcej.
Skoro używasz easyconfig, to domyślam się, że korzystasz z jego obrazów (z wbudowanym interfejsem LuCI, polskim językiem i przydatnymi skryptami) lub po prostu cenisz jego minimalistyczne i skuteczne podejście do konfiguracji.

Rozbawiło mnie to. Zostałem pochwalony big_smile
Ai

Czy wiesz już, jak skopiować plik obrazu do folderu /tmp przed wydaniem tej komendy?

Ja

Tępy jestem ale to wiem :-).

Ai

Bez przesady, nikt nie rodzi się z terminalem w ręku! Skoro ogarniasz wrzucanie plików przez scp albo wget do /tmp, to jesteś już dalej niż 90% użytkowników.

Taka sytuacja.
Edycja.
Drugie podejście i poszło.

root@OpenWrt:~# owut check
ASU-Server     https://sysupgrade.eko.one.pl
Upstream       https://dl.eko.one.pl
Target         x86/64
Profile        generic
Package-arch   x86_64
Version-from   25.12-SNAPSHOT r32403-ec16f2532d (kernel 6.12.63)
Version-to     25.12-SNAPSHOT r32537-6afff2039b (kernel 6.12.66)
218 packages are out-of-date
There are 0 missing and 1 modified default packages
It is safe to proceed with an upgrade (re-run with '--verbose' for details)
root@OpenWrt:~# owut download
ASU-Server     https://sysupgrade.eko.one.pl
Upstream       https://dl.eko.one.pl
Target         x86/64
Profile        generic
Package-arch   x86_64
Version-from   25.12-SNAPSHOT r32403-ec16f2532d (kernel 6.12.63)
Version-to     25.12-SNAPSHOT r32537-6afff2039b (kernel 6.12.66)
218 packages are out-of-date
There are 0 missing and 1 modified default packages
Request hash:
  7bbad0fc6e832cefa171da80670927b5756f7c9cc6f1e7431edbeaed955e05b8
--
Status:   queued - 0 ahead of you
Progress:   0s total =   0s in queue +   0s in build
--
Status:   container_setup
Progress:   1s total =   0s in queue +   1s in build
--
Status:   validate_manifest
Progress: 124s total =   0s in queue + 124s in build
--
Status:   Error: Impossible package selection
Progress: 127s total =   0s in queue + 127s in build

Build failed in 127s total =   0s in queue + 127s to build:
ASU server stderr =
Generate local signing keys...
WARNING: can't open config file: /opt/projects/openwrt-25.12/openwrt/x86/64/staging_dir/host/etc/ssl/openssl.cnf
WARNING: can't open config file: /opt/projects/openwrt-25.12/openwrt/x86/64/staging_dir/host/etc/ssl/openssl.cnf
read EC key
writing EC key
WARNING: opening /builder/packages/packages.adb: No such file or directory
Package list missing or not up-to-date, generating it.

Building package index...
ERROR: wget: exited with error 4
ERROR: libjpeg-turbo-3.1.1-r1: Network is unreachable
make[2]: *** [Makefile:254: package_install] Error 1
make[1]: *** [Makefile:193: _call_manifest] Error 2
make: *** [Makefile:369: manifest] Error 2

Traceback (most recent call last):
  File "/app/.venv/lib/python3.14/site-packages/rq/worker.py", line 1439, in perform_job
    return_value = job.perform()
  File "/app/.venv/lib/python3.14/site-packages/rq/job.py", line 1318, in perform
    self._result = self._execute()
                   ~~~~~~~~~~~~~^^
  File "/app/.venv/lib/python3.14/site-packages/rq/job.py", line 1376, in _execute
    result = self.func(*self.args, **self.kwargs)
  File "/app/asu/build.py", line 468, in build
    result = _build(build_request, job)
  File "/app/asu/build.py", line 289, in _build
    report_error(job, check_package_errors(job.meta["stderr"]))
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/asu/util.py", line 332, in report_error
    raise RuntimeError(msg)
RuntimeError: Impossible package selection

ERROR: Build failed with status 500 (--version-to 25.12-SNAPSHOT --device x86/64:generic:ext4)
The above errors are often due to the upgrade server lagging behind the
build server, first suggestion is to wait a while and try again.

103

(100 odpowiedzi, napisanych Oprogramowanie / Software)

Galeria zdjęć PhotoPrism.

Live demo https://demo.photoprism.app/library/browse Także można przetestować bez konieczności instalowania.

Udostępniam gotowy stack dla portainer. Aczkolwiek pewnie ręcznie z pliku docker-compose.yml też ruszy.
Stack utworzony przy pomocy Ai, modyfikowany testowany kilkanaście razy. Tak żeby uruchamiało się i działało bez błędów itp.

PhotoPrism to już taki kombajn. Wizualnie przyjazny. Ale nie ma kluczowej dla mnie funkcji udostępniania na hasło.
Jest możliwość zrobienia opisów pod zdjęciem oraz z boku. Domyślnie opis jest z boku, ale jak się schowa panel boczny to opis wyświetla się pod zdjęciem. Natomiast oferuje linki z terminem działania. Filmy mov tu też nie działają, natomiast avi jakiś przypadkowy działał.

Wersja z optymalizacją pod mini pc Intel Celeron N3160, 8 GB RAM, dysk SSD.

services:
  mariadb:
    image: mariadb:11
    container_name: photoprism-mariadb
    restart: unless-stopped
    stop_grace_period: 15s
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    # ========================
    # Zmienne srodowiskowe MariaDB
    # ========================
    environment:
      MARIADB_DATABASE: "photoprism"                 # Nazwa bazy danych PhotoPrism
      MARIADB_ROOT_PASSWORD: "haslo"                 # Twoje haslo root do bazy danych
      MARIADB_USER: "photoprism"                     # Uzytkownik bazy dla PhotoPrism
      MARIADB_PASSWORD: "haslo"                      # Haslo uzytkownika bazy
      MARIADB_AUTO_UPGRADE: "1"                      # Automatyczna aktualizacja bazy przy starcie
      MARIADB_INITDB_SKIP_TZINFO: "1"                # Pomija import stref czasowych przy inicjalizacji
    # ========================
    # Optymalizacja MariaDB dla OpenWrt i 8GB RAM
    # ========================
    command: >
      --innodb-buffer-pool-size=512M
      --transaction-isolation=READ-COMMITTED
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --max-connections=512
      --innodb-rollback-on-timeout=OFF
      --innodb-lock-wait-timeout=120
    # ========================
    # Volume z danymi MariaDB
    # ========================
    volumes:
      - "/mnt/sda3/multimedia/docker/photoprism/database:/var/lib/mysql"

  photoprism:
    image: photoprism/photoprism:latest
    container_name: photoprism
    restart: unless-stopped
    stop_grace_period: 15s
    depends_on:
      - mariadb
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    ports:
      - "2342:2342"
    working_dir: "/photoprism"
    # ========================
    # Zmienne srodowiskowe PhotoPrism
    # ========================
    environment:
      # Polaczenie do bazy danych
      PHOTOPRISM_DATABASE_DRIVER: mysql
      PHOTOPRISM_DATABASE_SERVER: mariadb:3306
      PHOTOPRISM_DATABASE_NAME: photoprism
      PHOTOPRISM_DATABASE_USER: photoprism
      PHOTOPRISM_DATABASE_PASSWORD: "haslo"

      # Konto administratora PhotoPrism
      PHOTOPRISM_ADMIN_USER: admin
      PHOTOPRISM_ADMIN_PASSWORD: "admin"

      # URL dostepu do PhotoPrism
      PHOTOPRISM_SITE_URL: "http://twoja_domena:2342/"

      # Stabilnosc i konfiguracja dla OpenWrt
      PHOTOPRISM_DISABLE_CHOWN: "true"       # Nie zmienia uprawnien plikow
      PHOTOPRISM_HTTP_COMPRESSION: "gzip"    # Kompresja HTTP
      PHOTOPRISM_LOG_LEVEL: "info"           # Poziom logow

      # Wydajnosc dla 8GB RAM
      PHOTOPRISM_WORKERS: 2
      PHOTOPRISM_INDEX_WORKERS: 2
      PHOTOPRISM_THUMB_WORKERS: 2

      # AI calkowicie wylaczone
      PHOTOPRISM_DISABLE_TENSORFLOW: "true"
      PHOTOPRISM_DISABLE_FACES: "true"
      PHOTOPRISM_DISABLE_CLASSIFICATION: "true"
      PHOTOPRISM_DISABLE_VECTORS: "true"

      # Tryb tylko-odczyt galerii. Wylaczylem to.
    # PHOTOPRISM_READONLY: "true"

      # ========================
      # Automatyczne indeksowanie
      # ========================
      PHOTOPRISM_INDEX_SCHEDULE: "0 3 * * 0"  # Automatyczne skanowanie w kazda niedziele, o 03:00 w nocy
    
    # ========================
    # Volumes PhotoPrism
    # ========================
    volumes:
      - "/mnt/sda3/multimedia/galeria:/photoprism/originals:ro"  # Galeria tylko do odczytu
      - "/mnt/sda3/multimedia/docker/photoprism/storage:/photoprism/storage" # Storage do miniatur, cache i bazy PhotoPrism

104

(100 odpowiedzi, napisanych Oprogramowanie / Software)

Galeria zdjęć Lychee.

Live demo https://demo.lycheeorg.dev Także można przetestować bez konieczności instalowania.

Udostępniam gotowy stack dla portainer. Aczkolwiek pewnie ręcznie z pliku docker-compose.yml też ruszy.
Stack utworzony przy pomocy Ai, modyfikowany testowany kilkanaście razy. Tak żeby uruchamiało się i działało bez błędów itp.

Kryteria wyboru galerii to.
1. Możliwość wskazania katalogu ze zdjęciami.
2. Udostępnianie publiczne z autoryzacją = hasło.
3. Możliwość dodawania opisów pod zdjęciem.

Lychee nie jest moim wymarzonym wyborem. Nie działają pliki wideo np. mov, czy niektóre avi. Ale to raczej problem wielu innych galerii / przeglądarek. Nie ma też możliwości ustawienia wygaśnięcia linku. Jednak galeria wydaje się być "lekka", co może być korzystne na słabszych maszynkach.   

Trzeba utworzyć katalogi, pliki, które są wskazane w  volumes: dostosować stack pod siebie.

1. Wersja BEZ optymalizacji pod urządzenie.

services:
  
  # Glowny serwis aplikacji Lychee (interfejs webowy i API)
  lychee_api:
    image: ghcr.io/lycheeorg/lychee:latest    # Pobiera najnowsza oficjalna wersje obrazu Lychee
    container_name: lychee-api                # Nazwa kontenera widoczna w systemie
    restart: unless-stopped                   # Automatyczny restart kontenera, chyba ze zostanie recznie zatrzymany
    security_opt:
      - no-new-privileges:true                # Blokuje mozliwosc uzyskania wyzszych uprawnien przez procesy w kontenerze
    cap_add:
      - CHOWN              # Pozwala na zmiane wlasciciela plikow
      - SETGID             # Pozwala na ustawianie ID grupy procesow
      - SETUID             # Pozwala na ustawianie ID uzytkownika procesow
      - DAC_OVERRIDE       # Pomija kontrole uprawnien do odczytu/zapisu plikow
      - NET_BIND_SERVICE   # Pozwala na bindowanie portow ponizej 1024
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    ports:
      - "8090:8000"  # Mapowanie portu zewnetrznego 8090 na port kontenera 8000
    environment:
      PUID: 1000     # ID uzytkownika systemowego dla uprawnien plikow
      PGID: 1000     # ID grupy systemowej dla uprawnien plikow
      APP_NAME: Lychee    # Nazwa wyswietlana aplikacji
      APP_ENV: production # Tryb pracy aplikacji (produkcyjny)
      TZ: Europe/Warsaw   # Ustawienie strefy czasowej
      APP_TIMEZONE: Europe/Warsaw # Ustawienie strefy czasowej
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      APP_URL: "https://twoja_domena"    # Adres URL pod ktorym dostepna jest galeria
      APP_FORCE_HTTPS: true   # Wymus HTTPS, true lub false
      TRUSTED_PROXIES: "*"    # Zaufanie do reverse proxy (wymagane przy SSL poza kontenerem)
      DB_CONNECTION: mysql    # Typ polaczenia z baza danych
      DB_HOST: lychee_db      # Nazwa hosta bazy danych (zgodna z nazwa serwisu)
      DB_PORT: 3306           # Port bazy danych
      DB_DATABASE: lychee                    # Nazwa bazy (musi byc taka sama jak MYSQL_DATABASE, sekcja lychee_db)
      DB_USERNAME: lychee                    # Nazwa uzytkownika (musi byc taka sama jak MYSQL_USER, sekcja lychee_db)
      DB_PASSWORD: password                  # Haslo uzytkownika (musi byc takie samo jak MYSQL_PASSWORD, sekcja lychee_db)
      QUEUE_CONNECTION: database             # Obsluga kolejki zadan przez baze danych
    depends_on:
      - lychee_db    # Uruchamia API dopiero po wystartowaniu bazy danych

  # Serwis wykonawczy przetwarzajacy zadania w tle (np. tworzenie miniatur)
  lychee_worker:
    image: ghcr.io/lycheeorg/lychee:latest    # Wykorzystuje ten sam obraz co API
    container_name: lychee-worker
    restart: unless-stopped
    healthcheck:
      disable: true    # Wylaczenie sprawdzania stanu dla workera
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    environment:
      LYCHEE_MODE: worker    # Definiuje kontener jako proces roboczy (nie serwer www)
      PUID: 1000
      PGID: 1000
      TZ: Europe/Warsaw
      APP_TIMEZONE: Europe/Warsaw
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      DB_CONNECTION: mysql
      DB_HOST: lychee_db
      DB_PORT: 3306
      
      # Te dane musza byc identyczne jak w sekcji lychee-api, aby worker widzial te sama baze
      DB_DATABASE: lychee
      DB_USERNAME: lychee
      DB_PASSWORD: password
      QUEUE_CONNECTION: database
    depends_on:
      - lychee_api    # Uruchamia workera po starcie glownego API

  # Serwis bazy danych MariaDB
  lychee_db:
    image: mariadb:10    # Obraz bazy danych MariaDB w wersji 10
    container_name: lychee_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword  # Haslo administratora Root - calkowicie inne, uzywane tylko do zarzadzania serwerem bazy
      MYSQL_DATABASE: lychee             # Nazwa bazy tworzonej przy starcie
      MYSQL_USER: lychee                 # Nazwa uzytkownika tworzonego dla aplikacji Lychee 
      MYSQL_PASSWORD: password           # Haslo dla uzytkownika aplikacji Lychee
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/db_mysql:/var/lib/mysql    # Trwale przechowywanie plikow bazy danych

networks:
  default:    # Definicja domyslnej sieci mostkowej dla komunikacji miedzy kontenerami

2. Wersja z optymalizacją pod mini pc Intel Celeron N3160, 8 GB RAM, dysk SSD.

services:
  
  # Glowny serwis aplikacji Lychee (interfejs webowy i API)
  lychee_api:
    image: ghcr.io/lycheeorg/lychee:latest    # Pobiera najnowsza oficjalna wersje obrazu Lychee
    container_name: lychee-api                # Nazwa kontenera widoczna w systemie
    restart: unless-stopped                   # Automatyczny restart kontenera, chyba ze zostanie recznie zatrzymany
    # Dodano limity zasobow, aby PHP nie "zjadlo" calego CPU podczas ladowania galerii. Opcjonalnie.
    deploy:
      resources:
        limits:
          memory: 2G
    security_opt:
      - no-new-privileges:true                # Blokuje mozliwosc uzyskania wyzszych uprawnien przez procesy w kontenerze
    cap_add:
      - CHOWN              # Pozwala na zmiane wlasciciela plikow
      - SETGID             # Pozwala na ustawianie ID grupy procesow
      - SETUID             # Pozwala na ustawianie ID uzytkownika procesow
      - DAC_OVERRIDE       # Pomija kontrole uprawnien do odczytu/zapisu plikow
      - NET_BIND_SERVICE   # Pozwala na bindowanie portow ponizej 1024
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    ports:
      - "8090:8000"  # Mapowanie portu zewnetrznego 8090 na port kontenera 8000
    environment:
      PUID: 1000     # ID uzytkownika systemowego dla uprawnien plikow
      PGID: 1000     # ID grupy systemowej dla uprawnien plikow
      APP_NAME: Lychee    # Nazwa wyswietlana aplikacji
      APP_ENV: production # Tryb pracy aplikacji (produkcyjny)
      TZ: Europe/Warsaw   # Ustawienie strefy czasowej
      APP_TIMEZONE: Europe/Warsaw # Ustawienie strefy czasowej
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      APP_URL: "https://twoja_domena"    # Adres URL pod ktorym dostepna jest galeria
      APP_FORCE_HTTPS: true   # Wymus HTTPS, true lub false
      TRUSTED_PROXIES: "*"    # Zaufanie do reverse proxy (wymagane przy SSL poza kontenerem)
      DB_CONNECTION: mysql    # Typ polaczenia z baza danych
      DB_HOST: lychee_db      # Nazwa hosta bazy danych (zgodna z nazwa serwisu)
      DB_PORT: 3306           # Port bazy danych
      DB_DATABASE: lychee                    # Nazwa bazy (musi byc taka sama jak MYSQL_DATABASE, sekcja lychee_db)
      DB_USERNAME: lychee                    # Nazwa uzytkownika (musi byc taka sama jak MYSQL_USER, sekcja lychee_db)
      DB_PASSWORD: password                  # Haslo uzytkownika (musi byc takie samo jak MYSQL_PASSWORD, sekcja lychee_db)
      QUEUE_CONNECTION: database             # Obsluga kolejki zadan przez baze danych
      # Zwiekszenie pamieci dla PHP, co przyspieszy generowanie miniatur na SSD. Opcjonalnie.
      PHP_MEMORY_LIMIT: 1G
    depends_on:
      - lychee_db    # Uruchamia API dopiero po wystartowaniu bazy danych

  # Serwis wykonawczy przetwarzajacy zadania w tle (np. tworzenie miniatur)
  lychee_worker:
    image: ghcr.io/lycheeorg/lychee:latest    # Wykorzystuje ten sam obraz co API
    container_name: lychee-worker
    restart: unless-stopped
    # Ograniczenie CPU dla workera, aby tlo nie zamulilo interfejsu OpenWrt. Opcjonalnie.
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
    healthcheck:
      disable: true    # Wylaczenie sprawdzania stanu dla workera
    volumes:
     - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    environment:
      LYCHEE_MODE: worker    # Definiuje kontener jako proces roboczy (nie serwer www)
      PUID: 1000
      PGID: 1000
      TZ: Europe/Warsaw
      APP_TIMEZONE: Europe/Warsaw
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      DB_CONNECTION: mysql
      DB_HOST: lychee_db
      DB_PORT: 3306
      
      # Te dane musza byc identyczne jak w sekcji lychee-api, aby worker widzial te sama baze
      DB_DATABASE: lychee
      DB_USERNAME: lychee
      DB_PASSWORD: password
      QUEUE_CONNECTION: database
    depends_on:
      - lychee_api    # Uruchamia workera po starcie glownego API

  # Serwis bazy danych MariaDB
  lychee_db:
    image: mariadb:10    # Obraz bazy danych MariaDB w wersji 10
    container_name: lychee_db
    restart: unless-stopped
    # Optymalizacja MariaDB pod 8GB RAM (wiekszy bufor przyspiesza wyszukiwanie i ladowanie albumow). Opcjonalnie.
    command: [
      "mysqld",
      "--innodb-buffer-pool-size=1G",
      "--innodb-log-file-size=256M",
      "--innodb-flush-log-at-trx-commit=2",
      "--skip-name-resolve"
    ]
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword  # Haslo administratora Root - calkowicie inne, uzywane tylko do zarzadzania serwerem bazy
      MYSQL_DATABASE: lychee             # Nazwa bazy tworzonej przy starcie
      MYSQL_USER: lychee                 # Nazwa uzytkownika tworzonego dla aplikacji Lychee 
      MYSQL_PASSWORD: password           # Haslo dla uzytkownika aplikacji Lychee
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/db_mysql:/var/lib/mysql    # Trwale przechowywanie plikow bazy danych

networks:
  default:    # Definicja domyslnej sieci mostkowej dla komunikacji miedzy kontenerami

3. Wersja z optymalizacją bardziej zaawansowaną z użyciem Redis pod mini pc Intel Celeron N3160, 8 GB RAM, dysk SSD.

services:

  # Serwis Redis - szybka kolejka w pamieci RAM. Co jest znacznie szybsze niz ciagle zapisywanie i odczytywanie ich z bazy MariaDB
  # Redis nie zastepuje bazy MariaDB calkowicie, lecz wyrecza ja w jednym, konkretnym zadaniu - obsludze kolejki zadan (Queue).
  lychee_redis:
    image: redis:alpine
    container_name: lychee-redis
    restart: unless-stopped
    # Redis jest bardzo lekki, ograniczenie do 300MB RAM w zupelnosci wystarczy
    deploy:
      resources:
        limits:
          memory: 300M
    tmpfs:
      - /data   # Dane Redis przechowywane w RAM (tmpfs), brak wolumenu na dysku i brak anonimowych volume

    # Uruchomienie Redis z bezpiecznymi limitami pamieci dla OpenWrt
    command:
      - redis-server
      - --maxmemory 250mb               # maxmemory ustawia soft limit pamieci Redis ponizej limitu Dockera
      - --maxmemory-policy allkeys-lru  # allkeys-lru usuwa najrzadziej uzywane zadania z kolejki zeby nie doprowadzic do OOM

  # Glowny serwis aplikacji Lychee (interfejs webowy i API)
  lychee_api:
    image: ghcr.io/lycheeorg/lychee:latest    # Pobiera najnowsza oficjalna wersje obrazu Lychee
    container_name: lychee-api                # Nazwa kontenera widoczna w systemie
    restart: unless-stopped                   # Automatyczny restart kontenera, chyba ze zostanie recznie zatrzymany
    # Dodano limity zasobow, aby PHP nie "zjadlo" calego CPU podczas ladowania galerii. Opcjonalnie.
    deploy:
      resources:
        limits:
          memory: 2.5G
    security_opt:
      - no-new-privileges:true                # Blokuje mozliwosc uzyskania wyzszych uprawnien przez procesy w kontenerze
    cap_add:
      - CHOWN              # Pozwala na zmiane wlasciciela plikow
      - SETGID             # Pozwala na ustawianie ID grupy procesow
      - SETUID             # Pozwala na ustawianie ID uzytkownika procesow
      - DAC_OVERRIDE       # Pomija kontrole uprawnien do odczytu/zapisu plikow
      - NET_BIND_SERVICE   # Pozwala na bindowanie portow ponizej 1024
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    ports:
      - "8090:8000"  # Mapowanie portu zewnetrznego 8090 na port kontenera 8000
    environment:
      PUID: 1000     # ID uzytkownika systemowego dla uprawnien plikow
      PGID: 1000     # ID grupy systemowej dla uprawnien plikow
      APP_NAME: Lychee    # Nazwa wyswietlana aplikacji
      APP_ENV: production # Tryb pracy aplikacji (produkcyjny)
    # TZ: Europe/Warsaw   # Ustawienie strefy czasowej
    # APP_TIMEZONE: Europe/Warsaw # Ustawienie strefy czasowej
    # PHP_TZ: Europe/Warsaw   # Ustawienie strefy czasowej  
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      APP_URL: "https://twoja_domena"    # Adres URL pod ktorym dostepna jest galeria
      APP_FORCE_HTTPS: true   # Wymus HTTPS, true lub false
      TRUSTED_PROXIES: "*"    # Zaufanie do reverse proxy (wymagane przy SSL poza kontenerem)
      DB_CONNECTION: mysql    # Typ polaczenia z baza danych
      DB_HOST: lychee_db      # Nazwa hosta bazy danych (zgodna z nazwa serwisu)
      DB_PORT: 3306           # Port bazy danych
      DB_DATABASE: lychee                    # Nazwa bazy (musi byc taka sama jak MYSQL_DATABASE, sekcja lychee_db)
      DB_USERNAME: lychee                    # Nazwa uzytkownika (musi byc taka sama jak MYSQL_USER, sekcja lychee_db)
      DB_PASSWORD: password                  # Haslo uzytkownika (musi byc takie samo jak MYSQL_PASSWORD, sekcja lychee_db)
      # Zmiana z database na Redis dla lepszej wydajnosci na OpenWrt
      QUEUE_CONNECTION: redis   # Obsluga kolejki zadan przez Redis zamiast bazy danych
      REDIS_HOST: lychee_redis
      # Zwiekszenie pamieci dla PHP, co przyspieszy generowanie miniatur na SSD. Opcjonalnie.
      PHP_MEMORY_LIMIT: 1536M   # 1.5G
    depends_on:
      - lychee_db    # Uruchamia API dopiero po wystartowaniu bazy danych
      - lychee_redis # Redis wymagany do obslugi kolejki zadan

  # Serwis wykonawczy przetwarzajacy zadania w tle (np. tworzenie miniatur)
  lychee_worker:
    image: ghcr.io/lycheeorg/lychee:latest    # Wykorzystuje ten sam obraz co API
    container_name: lychee-worker
    restart: unless-stopped
    # Ograniczenie CPU dla workera, aby tlo nie zamulilo interfejsu OpenWrt. Opcjonalnie.
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
    healthcheck:
      disable: true    # Wylaczenie sprawdzania stanu dla workera
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads               # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                    # Przechowywanie logow aplikacji
      - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                      # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app              # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css   # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

    environment:
      LYCHEE_MODE: worker    # Definiuje kontener jako proces roboczy (nie serwer www)
      PUID: 1000
      PGID: 1000
    # TZ: Europe/Warsaw
    # APP_TIMEZONE: Europe/Warsaw
    # PHP_TZ: Europe/Warsaw
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      DB_CONNECTION: mysql
      DB_HOST: lychee_db
      DB_PORT: 3306
      
      # Te dane musza byc identyczne jak w sekcji lychee-api, aby worker widzial te sama baze
      DB_DATABASE: lychee
      DB_USERNAME: lychee
      DB_PASSWORD: password
      # Worker musi polaczyc sie z tym samym serwisem Redis
      QUEUE_CONNECTION: redis
      REDIS_HOST: lychee_redis
    depends_on:
      - lychee_api    # Uruchamia workera po starcie glownego API
      - lychee_redis  # Redis wymagany do odbierania zadan z kolejki

  # Serwis bazy danych MariaDB
  lychee_db:
    image: mariadb:10    # Obraz bazy danych MariaDB w wersji 10
    container_name: lychee_db
    restart: unless-stopped
    # Optymalizacja MariaDB pod 8GB RAM (wiekszy bufor przyspiesza wyszukiwanie i ladowanie albumow). Opcjonalnie.
    command: [
      "mysqld",
      "--innodb-buffer-pool-size=2G",
      "--innodb-log-file-size=512M",
      "--innodb-flush-log-at-trx-commit=2",
      "--skip-name-resolve"
    ]
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword  # Haslo administratora Root - calkowicie inne, uzywane tylko do zarzadzania serwerem bazy
      MYSQL_DATABASE: lychee             # Nazwa bazy tworzonej przy starcie
      MYSQL_USER: lychee                 # Nazwa uzytkownika tworzonego dla aplikacji Lychee
      MYSQL_PASSWORD: password           # Haslo dla uzytkownika aplikacji Lychee
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/db_mysql:/var/lib/mysql    # Trwale przechowywanie plikow bazy danych

networks:
  default:    # Definicja domyslnej sieci mostkowej dla komunikacji miedzy kontenerami

4. Wersja z MAX optymalizacją z użyciem Redis i przekierowaniem plików tymczasowych (np. podczas przetwarzania miniatur) do tmp w RAM. Pod mini pc Intel Celeron N3160, 8 GB RAM, dysk SSD.
Według Ai niby najbardziej wydajna, ale też najbardziej hardkorowa. A czy rzeczywiście tak jest?, czas pokaże.

services:

  # Serwis Redis - szybka kolejka w pamieci RAM. Co jest znacznie szybsze niz ciagle zapisywanie i odczytywanie ich z bazy MariaDB
  # Redis nie zastepuje bazy MariaDB calkowicie, lecz wyrecza ja w jednym, konkretnym zadaniu - obsludze kolejki zadan (Queue).
  lychee_redis:
    image: redis:alpine                       # Lekki oficjalny obraz Redis
    container_name: lychee-redis              # Stala nazwa kontenera Redis
    restart: unless-stopped                   # Automatyczny restart po bledzie
    # Redis jest bardzo lekki, ograniczenie do 300MB RAM w zupelnosci wystarczy
    deploy:
      resources:
        limits:
          memory: 300M                        # Twardy limit RAM dla kontenera Redis
    tmpfs:
      - /data                                 # Dane Redis przechowywane w RAM (tmpfs), brak zapisu na dysk

    # Uruchomienie Redis z bezpiecznymi limitami pamieci dla OpenWrt
    command:
      - redis-server
      - --maxmemory 250mb                     # Soft limit pamieci Redis ponizej limitu Dockera
      - --maxmemory-policy allkeys-lru        # Usuwanie najrzadziej uzywanych kluczy przy braku RAM

  # Glowny serwis aplikacji Lychee (interfejs webowy i API)
  lychee_api:
    image: ghcr.io/lycheeorg/lychee:latest    # Pobiera najnowsza oficjalna wersje obrazu Lychee
    container_name: lychee-api                # Glowny kontener API i UI, nazwa kontenera widoczna w systemie
    restart: unless-stopped                   # Automatyczny restart kontenera przy awarii
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/init-tmp.sh:/init-tmp.sh:ro                                # Skrypt inicjalizujacy prawa katalogow
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads                                # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                                     # Przechowywanie logow aplikacji
    # - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                                       # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                                 # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app                               # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css                    # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js                  # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini # Wymuszenie date.timezone w PHP

    tmpfs:
      - /app/storage/tmp                 # Pliki tymczasowe (np. podczas przetwarzania). Katalog tmp w RAM dla szybszego przetwarzania miniatur
    command: ["/bin/sh", "-c", "/init-tmp.sh && php -S 0.0.0.0:8000 -t /app/public"]

    ports:
      - "8090:8000"                      # Mapowanie portu zewnetrznego 8090 na port kontenera 8000
    environment:
      PUID: 1000                         # ID uzytkownika systemowego dla uprawnien plikow
      PGID: 1000                         # ID grupy systemowej dla uprawnien plikow
      APP_NAME: Lychee                   # Nazwa wyswietlana aplikacji
      APP_ENV: production                # Tryb pracy aplikacji (produkcyjny)
    # TZ: Europe/Warsaw                  # Ustawienie strefy czasowej
    # APP_TIMEZONE: Europe/Warsaw        # Ustawienie strefy czasowej
    # PHP_TZ: Europe/Warsaw              # Ustawienie strefy czasowej
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      APP_URL: "https://krynio.noip.pl"  # Adres URL pod ktorym dostepna jest galeria
      APP_FORCE_HTTPS: true              # Wymus HTTPS, true lub false
      TRUSTED_PROXIES: "*"               # Zaufanie do reverse proxy (wymagane przy SSL poza kontenerem)
      DB_CONNECTION: mysql               # Typ polaczenia z baza danych
      DB_HOST: lychee_db                 # Nazwa hosta bazy danych (zgodna z nazwa serwisu)
      DB_PORT: 3306                      # Port bazy danych
      DB_DATABASE: lychee                # Nazwa bazy (musi byc taka sama jak MYSQL_DATABASE, sekcja lychee_db)
      DB_USERNAME: lychee                # Nazwa uzytkownika (musi byc taka sama jak MYSQL_USER, sekcja lychee_db)
      DB_PASSWORD: password              # Haslo uzytkownika (musi byc takie samo jak MYSQL_PASSWORD, sekcja lychee_db)

      # Zmiana z database na Redis dla lepszej wydajnosci na OpenWrt
      QUEUE_CONNECTION: redis   # Obsluga kolejki zadan przez Redis zamiast bazy danych
      REDIS_HOST: lychee_redis
      # Zwiekszenie pamieci dla PHP, co przyspieszy generowanie miniatur na SSD. Opcjonalnie.
      PHP_MEMORY_LIMIT: 1536M   # 1.5G
    depends_on:
      - lychee_db    # Uruchamia API dopiero po wystartowaniu bazy danych
      - lychee_redis # Redis wymagany do obslugi kolejki zadan
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/"] # Sprawdzenie dostepnosci API
      interval: 30s                                         # Czas miedzy kolejnymi testami
      timeout: 10s                                          # Timeout sprawdzenia
      retries: 3                                            # Liczba prob przed uznaniem kontenera za niezdrowy
      start_period: 30s                                     # Jesli w ciagu 30 sekund test healthcheck sie nie powiedzie, Docker nie zaliczy go jako bledu

  # Serwis wykonawczy przetwarzajacy zadania w tle (np. tworzenie miniatur)
  lychee_worker:
    image: ghcr.io/lycheeorg/lychee:latest    # Wykorzystuje ten sam obraz co API
    container_name: lychee-worker             # Kontener workera
    restart: unless-stopped
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/init-tmp.sh:/init-tmp.sh:ro                                # Skrypt inicjalizujacy prawa katalogow
      - /mnt/sda3/multimedia/docker/lychee/uploads:/app/public/uploads                                # Folder na przeslane zdjecia i miniatury
      - /mnt/sda3/multimedia/docker/lychee/logs:/app/storage/logs                                     # Przechowywanie logow aplikacji
    # - /mnt/sda3/multimedia/docker/lychee/tmp:/app/storage/tmp                                       # Pliki tymczasowe (np. podczas przetwarzania)
      - /mnt/sda3/multimedia/moja_galeria:/app/import/moja_galeria:ro                                 # Folder do importu zdjec w trybie tylko do odczytu
      - /mnt/sda3/multimedia/docker/lychee/storage/app:/app/storage/app                               # Do trwalego przechowywania danych aplikacji, zapewnienia trwalosc danych
      - /mnt/sda3/multimedia/docker/lychee/dist/user.css:/app/public/dist/user.css                    # Plik user.css sluzy do personalizacji wygladu galerii bez koniecznosci modyfikowania plikow zrodlowych
      - /mnt/sda3/multimedia/docker/lychee/dist/custom.js:/app/public/dist/custom.js                  # Plik custom.js wlasne skrypty JavaScript, ktore sa automatycznie ladowane przez galerie
      - /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini # Wymuszenie date.timezone w PHP

    tmpfs:
      - /app/storage/tmp  # Pliki tymczasowe (np. podczas przetwarzania). Katalog tmp w RAM dla szybszego przetwarzania miniatur
    command: ["/bin/sh", "-c", "/init-tmp.sh && php /app/artisan queue:work --verbose"]

    environment:
      LYCHEE_MODE: worker    # Definiuje kontener jako proces roboczy (nie serwer www)
      PUID: 1000
      PGID: 1000
    # TZ: Europe/Warsaw
    # APP_TIMEZONE: Europe/Warsaw
    # PHP_TZ: Europe/Warsaw
      APP_KEY: base64:c0OEXPo/uKBi6N8+kv19k6yKqZBRjJAuHm8S9HgEVF0=
      DB_CONNECTION: mysql
      DB_HOST: lychee_db
      DB_PORT: 3306

      # Te dane musza byc identyczne jak w sekcji lychee-api, aby worker widzial te sama baze
      DB_DATABASE: lychee
      DB_USERNAME: lychee
      DB_PASSWORD: password
      # Worker musi polaczyc sie z tym samym serwisem Redis
      QUEUE_CONNECTION: redis
      REDIS_HOST: lychee_redis
    depends_on:
      - lychee_api    # Uruchamia workera po starcie glownego API
      - lychee_redis  # Redis wymagany do odbierania zadan z kolejki
    healthcheck:
      test: ["CMD-SHELL", "pgrep -f artisan || exit 1"] # Sprawdzenie czy proces workera dziala
      interval: 30s                                     # Czas miedzy kolejnymi testami
      timeout: 5s                                       # Timeout sprawdzenia
      retries: 3                                        # Liczba prob przed uznaniem kontenera za niezdrowy

  # Serwis bazy danych MariaDB
  lychee_db:
    image: mariadb:10    # Obraz bazy danych MariaDB w wersji 10
    container_name: lychee_db
    restart: unless-stopped
    # Optymalizacja MariaDB pod 8GB RAM (wiekszy bufor przyspiesza wyszukiwanie i ladowanie albumow). Opcjonalnie.
    command: [
      "mysqld",
      "--innodb-buffer-pool-size=2G",          # Bufor InnoDB w RAM
      "--innodb-log-file-size=512M",           # Rozmiar logow transakcji
      "--innodb-flush-log-at-trx-commit=2",    # Lepsza wydajnosc kosztem minimalnego ryzyka
      "--skip-name-resolve"                    # Szybsze laczenie bez DNS
    ]
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword        # Haslo administratora Root - calkowicie inne, uzywane tylko do zarzadzania serwerem bazy
      MYSQL_DATABASE: lychee                   # Nazwa bazy tworzonej przy starcie
      MYSQL_USER: lychee                       # Nazwa uzytkownika tworzonego dla aplikacji Lychee
      MYSQL_PASSWORD: password                 # Haslo dla uzytkownika aplikacji Lychee
    volumes:
      - /mnt/sda3/multimedia/docker/lychee/db_mysql:/var/lib/mysql    # Trwale przechowywanie plikow bazy danych

networks:
  default:    # Definicja domyslnej sieci mostkowej dla komunikacji miedzy kontenerami

Wymagane jest utworzenie skryptu o nazwie "init-tmp.sh" o uprawnieniach rwxr-xr-x
Moja lokalizacja skryptu /mnt/sda3/multimedia/docker/lychee/init-tmp.sh
Zawartość skryptu. Jest on potrzebny aby wyeliminować Warningi w GUI, Diagnostyka, Auto-diagnoza.

#!/bin/sh
# Tworzenie katalogow tmpfs dla Lychee
set -e

echo "[init-tmp] Tworzenie katalogow tmpfs..."

mkdir -p /app/storage/tmp/jobs
mkdir -p /app/storage/tmp/uploads

chmod 0775 /app/storage/tmp
chmod 0775 /app/storage/tmp/jobs
chmod 0775 /app/storage/tmp/uploads

chown -R www-data:www-data /app/storage/tmp

echo "[init-tmp] tmpfs gotowe"

# Koniec skryptu – nie wywolujemy php-fpm ani entrypoint

5. Eliminacja Warning dotyczący timezone, w GUI, Diagnostyka, Auto-diagnoza.
Należy utworzyć plik "php-timezone.ini" z zawartością "date.timezone = Europe/Warsaw" lokalizacja dowolna, u mnie:

echo 'date.timezone = Europe/Warsaw' > /mnt/sda3/multimedia/docker/lychee/php-timezone.ini
chmod -R 0644 /mnt/sda3/multimedia/docker/lychee/php-timezone.ini

W sekcjach volumes: dodać lokalizację pliku php-timezone.ini

- /mnt/sda3/multimedia/docker/lychee/php-timezone.ini:/usr/local/etc/php/conf.d/99-timezone.ini   # Wymuszenie date.timezone w PHP

chmod -R 0644 /mnt/sda3/multimedia/docker/lychee/php-timezone.ini dodać również do /etc/rc.local
6. Opcjonalnie dodanie wpisów do /etc/rc.local Bez tego też działa, lecz w Auto-diagnoza pokazuje warningi.

# Naprawa uprawnień dla kontenera Lychee po 60 sekundach
(
    sleep 60

    # Naprawa uprawnień dla kontenera Lychee, galeria zdjęć
    chown 1000:1000 /mnt/sda3/multimedia/docker/lychee
    chown -R 1000:1000 /mnt/sda3/multimedia/docker/lychee/dist
    chown -R 1000:1000 /mnt/sda3/multimedia/docker/lychee/logs
    chown -R 1000:1000 /mnt/sda3/multimedia/docker/lychee/storage
    chown -R 1000:1000 /mnt/sda3/multimedia/docker/lychee/tmp
    chown 1000:1000 /mnt/sda3/multimedia/docker/lychee/uploads

    chmod -R 0755 /mnt/sda3/multimedia/docker/lychee
    chmod -R 0775 /mnt/sda3/multimedia/docker/lychee/storage
    chmod -R 0775 /mnt/sda3/multimedia/docker/lychee/tmp
    chmod -R 0775 /mnt/sda3/multimedia/docker/lychee/uploads
    chmod -R 0644 /mnt/sda3/multimedia/docker/lychee/php-timezone.ini
) &

exit 0

7. Prowizoryczne pozbycie się masowego logowania WARNING do pliku deprecations.log (co jest spowodowane niezgodnością PHP).
Po instalacji lychee, z konsoli wykonać.

docker exec -it lychee-api sh -c '
rm -f /app/storage/logs/deprecations.log &&
ln -s /dev/null /app/storage/logs/deprecations.log
'
docker exec -it lychee-worker sh -c '
rm -f /app/storage/logs/deprecations.log &&
ln -s /dev/null /app/storage/logs/deprecations.log
'

Następnie

docker restart lychee-api lychee-worker

8. Skrypt do synchronizowania galerii z katalogiem "moja_galeria", uruchamiany z crona wg uznania.
Lokalizacja /usr/bin/lychee_sync_moja_galeria.sh

#!/bin/sh

# Nazwa kontenera zgodnie z Twoim stackiem (docker-compose.yml)
CONTAINER_NAME="lychee-api"

# Sciezka wewnatrz kontenera do Twoich zdjec na dysku SSD
IMPORT_PATH="/app/import/moja_galeria"

echo "Rozpoczynam inteligentna synchronizacje galerii zgodna ze specyfikacja Lychee v7"

# Wywolanie z uzyciem wartosci =1 dla aktywacji opcji. Opis funkcji
# --import_via_symlink=1: Nie kopiuje plikow, tworzy tylko linki (oszczedza Twoj dysk SSD)
# --skip_duplicates=1: Pomin zdjecia i albumy, jesli juz znajduja sie w galerii.
# --delete_missing_photos=1: Usun zdjecia z albumu, ktorych nie ma w zsynchronizowanym katalogu "moja_galeria"
# --delete_missing_albums=1: Usuwa z galerii foldery skasowane ktorych nie ma w katalogu synchronizowanym "moja_galeria"
# --dry_run=0: Musimy ustawic na 0, aby faktycznie wprowadzic zmiany (domyslnie jest 1 - tylko test)
# docker exec -u 1000: Skrypt wykonuje polecenie jako uzytkownik o ID 1000 (Twoje PUID), co zapobiega problemom z uprawnieniami do plikow w /app/storage/logs 

docker exec -u 1000 $CONTAINER_NAME php artisan lychee:sync "$IMPORT_PATH" \
    --import_via_symlink=1 \
    --skip_duplicates=1 \
    --delete_missing_photos=1 \
    --delete_missing_albums=1 \
    --dry_run=0

# Sprawdzenie poprawnosci wykonania synchronizacji
if [ $? -eq 0 ]; then
    echo "Synchronizacja zakonczona: Twoja galeria jest teraz identyczna jak folder "moja_galeria" na dysku."
else
    echo "Blad: Synchronizacja przerwana. Sprawdz logi w /mnt/sda3/multimedia/docker/lychee/logs"
fi

9. Lychee ma wbudowaną Diagnostykę dostępną w GUI. Czego efektem jest generowanie podsumowania Auto-diagnoza.
Mogą się tam pojawiać komunikaty Info typu small2x i medium – co w skrócie oznacza brakujące miniatury.
Mogło do tego dojść np. w sytuacji gdy została przerwana synchronizacja z naszym katalogiem ze zdjęciami "moja_galeria", np. z powodu reboot itp. Żeby to naprawić zbiorczo wystarczy zrobić.

docker exec -it lychee-api php artisan lychee:generate_thumbs small
docker exec -it lychee-api php artisan lychee:generate_thumbs small2x
docker exec -it lychee-api php artisan lychee:generate_thumbs medium
docker exec -it lychee-api php artisan lychee:encode_placeholders

Lub wersja okrojona (szybsza?), ale może nie być skuteczna, np.

docker exec -it lychee-api php artisan lychee:generate_thumbs small 1
docker exec -it lychee-api php artisan lychee:generate_thumbs small2x 1
docker exec -it lychee-api php artisan lychee:generate_thumbs medium 1
docker exec -it lychee-api php artisan lychee:encode_placeholders 2

Również można zrobić skrypt, który systematycznie przeprowadzi tego typu konserwację.

105

(100 odpowiedzi, napisanych Oprogramowanie / Software)

Cezary. W artykule Perfekcyjny router podróżny wspominasz o Immich - galeria zdjęć. Używasz?.
Poszukuję galerii zdjęć na docker, która spełnia pewne założenia.
1. Możliwość wskazania katalogu ze zdjęciami.
2. Udostępnianie publiczne z autoryzacją = hasło.
3. Możliwość dodawania opisów do zdjęć, najlepiej pod zdjęciem.
W weekend testowałem kilka galerii. Najbliżej mi do PhotoPrism. Jednak w nowej wersji nie ma możliwości udostępnienia publicznego z autoryzacją. Niby można to obejść w nginx proxy manager, ale mam z tym problem.
Trafiłem na opis Lychee, test w krótce.

106

(21 odpowiedzi, napisanych Inne)

O tym koledzy piszą.
Po kliknięciu w Nowe posty przeniesie na https://eko.one.pl/forum/search.php?act … mp;forum=5
i otworzy się strona z tym poniżej

Fatal error: Uncaught Error: mysqli_result object is already closed in /home/jackiewicz/domains/eko.one.pl/public_html/forum/include/dblayer/mysqli.php:216 Stack trace: #0 /home/jackiewicz/domains/eko.one.pl/public_html/forum/include/dblayer/mysqli.php(216): mysqli_free_result() #1 /home/jackiewicz/domains/eko.one.pl/public_html/forum/footer.php(130): DBLayer->close() #2 /home/jackiewicz/domains/eko.one.pl/public_html/forum/search.php(540): require('/home/jackiewic...') #3 {main} thrown in /home/jackiewicz/domains/eko.one.pl/public_html/forum/include/dblayer/mysqli.php on line 216

Cezary napisał/a:

W repo 25.12 pojawiły się dalsze zmiany naprawiające kolejne problemy z zależnościami. Niech się to jeszcze chwilę przetrawi i chyba pod koniec miesiąca będą w takim razie kolejne buildy.

W który weekend można się spodziewać nowych bulidów. I czy będą to już rc3 ?.
Na zapasowym mini pc (z ostatnim Twoim Openwrt 25.12) kończę testy. W krótce będę robił wszystko od nowa na docelowym mini pc. Nie wiem czy warto czekać za Twoim nowym bulidem. Czy instalować bieżącą wersję. A później aktualizacja owut, o ile nie będzie przeciwskazań?.

108

(26 odpowiedzi, napisanych Inne)

Za to około 25.02.2026 szykuje się okrągła 20 rocznica forum eko.one.pl z którym spędziłem już ~1/3 mojego życia.
Wow szmat czasu. Robi wrażenie. Achów i ochów nie ma końca...

109

(8 odpowiedzi, napisanych Tablety)

Kupiłeś wersję X1 czy M1. Bo to różnica.
To X1 prawie niedostepne w Polsce. Wyjątek Kaufland.

110

(8 odpowiedzi, napisanych Tablety)

A co powiesz na to Xiaomi Poco Pad X1 Tablet 8/512GB
https://www.kaufland.pl/product/547957452/
Chyba wolałbym matowy wyświetlacz. Z drugiej strony. Poza córką mam jeszcze młodszego syna i może nie ma się co aż tak spuszczać. Z doświadczenia obawiam się że tablet może długo nie wytrzymać...
Edycja - kupiony, dziękuję.

111

(8 odpowiedzi, napisanych Tablety)

Córka na 9 urodziny uzbierała na tablet, powiedzmy 1000-1500 zł. Tablet głównie do zabawy, trochę nauki. I trzeba coś wybrać a jest tego sporo. Warunek konieczny na androidzie. Ktoś przerabiał ostatnio podobny temat?.

Siostra ma internet z multimediów. Około rok temu zmieniałem u niej stary "router" na nowy, który podłączony jest po LAN do modemu z multimediów. Wszystko poszło bez problemów. Jedynie co kojarzę to w przypadku modemu multimediów ma znaczenie w który port LAN należy podłączyć swój router. Siostra ma publiczny adres IP, który jest dostępny na konkretnym porcie LAN.
Kiedyś w multimedia publiczny IP było standardem, a od pewnego czasu opcją.

Ok. Ostatnie pytanie.
Np. do /www mam dodane swoje katalogi (cgi-bin, wol) a w nich pliki konfiguracyjne włącznie z index.html.
Mam kopię tych plików na dysku. Czy byłaby jakaś możliwość dodania tego wprost z dysku (np. wskazując katalog, plik) do Skrypt do uruchomienia przy pierwszym rozruchu (uci-defaults) na dl.eko.one.pl/firmware/
Czy pozostają tylko polecenia konsolowe, tworzenie katalogów, plików z właściwą konfiguracją.
Heh pewnie myślisz, dałem palec a chcą rękę wink

A ja dopytam o Skrypt do uruchomienia przy pierwszym rozruchu (uci-defaults).
Załóżmy że coś wpisze w uci-defaults, zbuduje i pobiorę obraz. Następnie wgram go standardowo do routera.
Teraz pytanie. Czy to co wpisałem do uci-defaults np.
uci add firewall forwarding >/dev/null
uci set firewall.@forwarding[-1].src='wg'
...
będzie się zawsze wykonywać przy uruchomieniu routera (coś w stylu rc.local). Czy zrobi się tylko 1 raz. I Już na zawsze pozostanie w miejscach docelowych. Czyli w tym przypadku /etc/config/firewall

Rozumiem, że to co dodam w uci-defaults z poziomu dl.eko.one.pl/firmware/ wykona się dopiero po odpaleniu na routerze. O czym świadczy nazwa "Skrypt do uruchomienia przy pierwszym rozruchu". A nie będzie już zawarte w pobranym obrazie, we właściwym miejscu. Nie mam obecnie wolnego urządzenia żeby przetestować.

Cezary napisał/a:

Zrodziło się pytanie: jak często kompilować obrazy?

1 raz na miesiąc jest dobrze.
Wolę jak Ty to zrobisz. Jesteś na bieżąco, wiesz co z czym...
Mam pewność że jest dobrze.
A "moje kompilacje" póki co traktuję doświadczalnie.

Feedback ode mnie. Dla testu zrobiłem dla Xiaomi Mi Router AX3000T i openwrt 24.10 bez luci.
Dodałem tylko easyconfig i wireguard i klik żądanie budowy. Poniżej Error: Impossible package selection.
Tak samo zrobiłem dla x86/64 i efekt ten sam.
Dodatkowo przy x86/64 ciekawi mnie jaki rodzaj obrazu zostanie zbudowany, COMBINED-EFI (EXT4), COMBINED (EXT4)... czy będzie możliwość wyboru?.

Ostatnie pytanie poza tematem. Witryna https://dl.eko.one.pl/firmware fajnie ukrywa to co jest za https://dl.eko.one.pl/firmware/
Dopiero po kliknięciu Link (ikonę spinacza) pokazuje się pełna ścieżka / lokalizacja. Ogólnikowo jak zrobiłeś to ukrywanie. To jest opcja po stronie serwera, np. lighttpd ?. 
 

Error: Impossible package selection
STDERR
Generate local signing keys...
Generate local certificate...
Package list missing or not up-to-date, generating it.

Building package index...
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/base/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibopenwrt_base
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/base/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibopenwrt_luci
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/luci/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibopenwrt_packages
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibopenwrt_routing
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/routing/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibopenwrt_telephony
Downloading https://downloads.openwrt.org/releases/24.10-SNAPSHOT/packages/aarch64_cortex-a53/telephony/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/targets/mediatek/filogic/packages/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_core
Downloading https://dl.eko.one.pl/openwrt-24.10/targets/mediatek/filogic/packages/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/base/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_base
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/base/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_luci
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/luci/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_packages
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/packages/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_routing
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/routing/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_telephony
Downloading https://dl.eko.one.pl/openwrt-24.10/packages/aarch64_cortex-a53/telephony/Packages.sig
Signature check passed.
Downloading https://dl.eko.one.pl/openwrt-24.10/targets/mediatek/filogic/kmods-6.6.119/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibeko1_kmods
Downloading https://dl.eko.one.pl/openwrt-24.10/targets/mediatek/filogic/kmods-6.6.119/Packages.sig
Signature check passed.
Downloading file:packages/Packages
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/imagebuilder
Downloading file:packages/Packages.sig
Signature check passed.
Downloading https://github.com/4IceG/Modem-extras/raw/main/myrepo/Packages.gz
Updated list of available packages in /builder/build_dir/target-aarch64_cortex-a53_musl/root-mediatek/../../../../builder/dl/ibIceG_repo
Downloading https://github.com/4IceG/Modem-extras/raw/main/myrepo/Packages.sig
Signature check passed.
Collected errors:
 * opkg_install_cmd: Cannot install package wiregaurd-tools.
 * opkg_install_cmd: Cannot install package kmod-wiregaurd.
make[2]: *** [Makefile:234: package_install] Error 255
make[1]: *** [Makefile:171: _call_manifest] Error 2
make: *** [Makefile:349: manifest] Error 2

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/rq/worker.py", line 1659, in perform_job
    return_value = job.perform()
                   ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/rq/job.py", line 1318, in perform
    self._result = self._execute()
                   ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/rq/job.py", line 1376, in _execute
    result = self.func(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/asu/build.py", line 465, in build
    result = _build(build_request, job)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/asu/build.py", line 284, in _build
    report_error(job, "Impossible package selection")
  File "/app/asu/util.py", line 329, in report_error
    raise RuntimeError(msg)
RuntimeError: Impossible package selection
Cezary napisał/a:

Systemy zostały przeniesione na nowy serwerek, dotyczy to także ASU.  Lekko wzrosła szybkość składania obrazów i na dodatek można to zrobić i z poziomu działającego OpenWrt jak i bezpośrednio z https://dl.eko.one.pl/firmware/

Podziękowania za dokonania!. A teraz do rzeczy, pytanie jak tego używać.
Jestem na https://dl.eko.one.pl/firmware/
Przykładowo wybrałem Xiaomi Mi Router AX3000T i 24.10-SNAPSHOT
Klikam "Dostosuj zainstalowane pakiety i/lub skrypt pierwszego rozruchu"
Pojawia się okno z

base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-crypto-hw-safexcel kmod-gpio-button-hotplug kmod-leds-gpio kmod-nft-offload kmod-phy-aquantia libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only opkg ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-mt7915e kmod-mt7981-firmware mt7981-wo-firmware ekooneplstat sysinfo

1. Rozumiem, że w tym oknie są pakiety domyślnie zawarte w obrazach przez Ciebie. I mogę je skasować lub dodać kolejne.
2. Dodanie polega na ręcznym dopisaniu interesującego mnie pakietu (zależności już sam pociągnie?). Lub można wybrać z powyższej listy np. easyconfig.
3. Dodałem co potrzebuję i klikam ŻĄDANE BUDOWY, rozumiem że zbuduje mi się obraz do pobrania i gotowy do zainstalowania. Jestem w pracy i nie mogę przetestować.
4. O co chodzi z "Skrypt do uruchomienia przy pierwszym rozruchu (uci-defaults)". Kiedy i jak to używać.

118

(13 odpowiedzi, napisanych Inne)

A tak z ciekawości używasz / używacie do czegoś urządzeń apple?.

119

(15 odpowiedzi, napisanych Inne)

drk napisał/a:
pablo.see napisał/a:

Najlepsza bramka będzie oparta na ESP32.

a mogę coś więcej poprosić? Na razie mam lekko blade pojęcie co mam zrobić (za to wiem co chcę osiągnąć smile ).

Lub zobacz na linki w moim poprzednim poście. Również jest mowa o ESP32.
A w którą stronę iść czy ESPHome / HA czy supla itd. to indywidualna sprawa. Supla jest polska, w mojej ocenie prostsza i ma darmowe serwery.

120

(15 odpowiedzi, napisanych Inne)

Może nie do końca w temacie ? ale o bramce zigbee.
Spora ilość materiału, można się przestraszyć smile https://forum.supla.org/viewforum.php?f=127
Aczkolwiek pakiet startowy opisany jest tu, i to w zasadzie wystarczy https://forum.supla.org/viewtopic.php?t=17672

121

(38 odpowiedzi, napisanych Mini komputery)

Cezary napisał/a:

Na 90% jestem przekonany do M5 plus - taki kompromis pomiędzy wydajnością a zużyciem energii, zakładam że da się także bezpiecznie odłączyć wentylatory żeby nie spowodować zbytniego przegrzania systemu. Celowałem w coś co ma już porty 2.5G na pokładzie.

Na pierwszy rzut oka fajny w rozsądnej cenie.
Piszą WiFi 6E, ale anten nie widzę ani też wyprowadzonych otworów pod anteny. Czy wbudowana karta wifi będzie działać pod openwrt w trybie AP. Jeśli tak to 2 radia jednocześnie czy albo / albo.
Wspominasz o zużyciu energii. Nie widzę tam takich danych. Jakiego zużycia się spodziewasz?.

122

(38 odpowiedzi, napisanych Mini komputery)

Mam siostry poprzedni mini pc, również YANLING, chłodzenie pasywne. Niski pobór prądu około 7W.
Jest na Intel I3 i 16GB RAM. Jedyny mankament to że 1 z 2 gniazd Lan szwankuje. Działa ale coś jest nie tak z transferem, nie podejmowałem próby naprawy. Mini pc jest bez dysku.

Trzymam go z myślą o dzieciach. Miałem się zabrać za uruchomienie i tak już minął niespełna rok...
Także jeśli faktycznie przyda Ci się ten sprzęt do ASU to dostaniesz gratis.

Modelu i konkretnych parametrów nie pamiętam, pisze z pracy. W weekend mogę podać szczegóły.

123

(38 odpowiedzi, napisanych Mini komputery)

U siostry jest YANLING Nano N3422 chłodzenie pasywne, wersja Intel Core Ultra 5 125U (12 core 14 threads, Max Turbo 4.3 GHz, 15W) z 32GB Ram i nośnikiem NVME, oraz SSD.
https://ylipc.com/product/14thgen-core- … or-mini-pc

Zakup pewne na wyrost. Ale zamysł był taki żeby przez długie długie lata zapomnieć o wymianie sprzętu. Co najwyżej wymiana samej karty WiFi. Co ważne to gniazdo MINI PCIE jest "podwyższone". Bez problemu mieszczą się karty WiFi np. Wallys/DR7915-MT7915 MT7975 / WiFi6 mini pcie card / 2×2.4G & 2x5G z radiatorem do dołu. W poprzednim mini pc był z tym problem i kombinacje. Ponadto w obudowie są wyprowadzenia (otwory) na 4 anteny. W poprzednim były 2 otwory i trzeba było dorobić.
Cały asortyment tu https://ylipc.com/product/category/mini_computer

A jak z aktualizacją immortalwrt. Mają jakieś narzędzie np. jak u Cezarego własny serwer ASU. Czy może w inna metoda, z zachowaniem ustawień konfiguracji?.
Może bym spróbował i zobaczył jakie są różnice w działaniu wifi do ostatniej kompilacji Cezarego.

Drugie pytanie to czy po przejściu na immortalwrt, nadal będzie możliwe zainstalowanie i korzystanie z easyconfig ?.

125

(2 odpowiedzi, napisanych Inne)

Nie oglądałem. Zatrzymałem się na Braveheart, Ostatni Mohikanin ... W wolnej chwili może obejrzę Devs. Szkoda tylko że to serial, z czasem kiepsko.