Mírně mimo téma, ale všiml jsem si, že spousta projektů FOSS je v jakémsi divném stavu. Buď se to přestalo vyvíjet, což je nejpochopitelnější, ale co moc nechápu, proč není náhrada. Sháním webovou galerii a tu energii, kterou jsem do toho vložil bych mnohem lépe využil napsáním vlastní. Už jsem tady o tom psal trochu rozčílený blog, ale vyzkoušel jsem všechno a ke všemu můžu napsat seznamy chyb, špatné volby programovacích jazyků, styl vývoje, (ne)balíčkování apod.
A mimochodem, tohle je příklad dobře vedeného projektu. Bylo to napsané pro PostgreSQL v době 7.4 a fungovalo to i na 11 zcela beze změn. Bylo to napsané pro první PHP 5 a s jednou malou úpravou to fungovalo i na PHP 7.4.
Oni teda napsali blog, ve kterém se vyjadřovali proč potom napsali Gallery 3, že dvojka byla až moc technická (ano, mělo to i ACL jak v linuxu), ale právě proto jsem měl dvojku tak rád. DB byla snadno čitelná, snadno se psaly další pluginy a těch existujících byly stovky a instalace znamenala untar do webrootu apache s mod php. Toť vše.
Ja jsem hledani webgalerie vzdal protoze temer vse pouzivali DB a ja mel levny hosting bez databaze. Takze jsem po 2 hodinach vyhodnotil ze si to musim napsat sam. A tak jsem udelal. No funguje to, jde to hezky prenaset a verzovat, vcetne komentaru a pod.
Ale je to priserne slabe. Jo pro rodinu staci ale jinak nic moc. Takze asi si nevyberes.
Zkoušeli jste někdo Immich? Mluvil o tom Lojza Rozumbrada a asi to sponzoruje FUTO.
https://immich.app/
Mělo by jít to mít self-hosted a mělo by to umět ty AI features.
Ten docker je ten balíček 😉 Balíčky si mají dělat distribuce, těžko bude vývojář dělat desítky balíčků pro roztříštěný svět Linuxu, kde je spousta distribucí, a ty mají několik aktivních verzí. Ani Snap, FlatPack apod. nejsou záchrana, když v některých distribucích nejsou nebo rozbité.
18. 10. 2025, 18:53 editováno autorem komentáře
Samozřejmě, tohle je součást práce na vývoji čehokoliv. Pokud se zvolený programovací jazyk ukáže jako z libovolného pohledu nevhodný (třeba nelze snadno udělat balíček), tak je nejvyšší čas na jeho výměnu. Já přešel z Pythonu na Golang právě proto, že v Pythonu není moc velká standardní knihovna (nebyla) a na každou blbost jsem měl externí závislosti. Dneska mám jen stdlib a externí závislosti jsou native golang, takže nic nebrání statické binárce.
To je možné, ale pokud někdo není schopen ani udělat standardní balíček, tak by se měl určitě zamyslet nad stylem svého vývoje. Já to potřeboval dostat na stovky serverů, takže jsem změnil jazyk na jiný s mnoha dalšími výhodami (třeba snadný multithreading) a dostal jsem tak mnohem lepší řešení.
A u zákazníků, kde neakceptovali jiný než standardní repositář, tak instalace go programu znamená jeden copy do /usr/local/bin a opět je to nainstalované nebo updatované.
Dobře, ale je potřeba nějak začít. Já jsem vyrůstal na C, kde byla výsledkem binárka a max závislost na standardní knihovně, která byla všude. A jak vypadal celý projekt bylo hned vidět pohledem do ručně psaného Makefile.
Pokud někdo programuje v jazyku a nevšimne si, že to má stovky externích závislostí a ještě je dává do kontejneru, kde se všechno provede takzvaně samo, tak to potom není dlouhodobě udržovaný program. A pokud ty závislosti potřebuje, tak je lepší z nich udělat jednotlivé balíčky, jak to má třeba PHP (které moc nemusím, ale funguje), takže v každém distru nainstaluju PHP + 5 dalších balíčků (hlavně postgresql a gd) a funguje i 15 let stará Gallery 2.
na serverech se běžně používá Docker
Asi záleží na kterých serverech. Já jsem Docker dal na blacklist před lety, kdy si to dělalo vlastní síť pomocí složitých iptables pravidel a o IPv6 nebyla ani čárka v manuálu. V práci máme pro všechny IPv6 od roku 2012, protože to tehdy chtěla vláda. Jak je to dneska nevím, ale v roce 2012 jsme to prostě nasadili a funguje to spolehlivě dodnes.
Já chápu výhody kontejnerů, sám je používám a napsal jsem články o nspawn a jails, ale to jsou systémové kontejnery, kde funguje vše stejně jako na základním systému a vůbec se nemusím bát o podporu věcí jako například IPv6. A ve FreeBSD se dají kontejnery krásně ovládat přímo systémovými nástroji a to včetně update a instalace balíčků, takže ani nepotřebuju vynálezy jako Ansible.
Dneska se to staví tak, že skoro před každou službou je další služba, například proxy, která už IPv6 umí. Ale to golang taky, takže proxy vůbec nepotřebuju. A o externích DB se ani bavit nemusím, takto spousta firem přišla o data, protože DB měla jinde u provozovatele kontejnerů a zálohovala pouze svůj kontejner s logikou. A DB vůbec. I u Azure se stalo, že někomu po roce vypli a smazali jeho data, protože to neměl správně zaregistrované.
Ano, pokud má někdo miliony kontejnerů, tak potřebuje nějakou infrastrukturu, ale služby se dají dělat tak, že mám jeden tlustý kontejner pro jednu službu a nic dalšího kromě připojení na internet to nepotřebuje. Tohle mi funguje v podstatě od roku 2008, kdy jsme přešli na vmware a v každé virtuálce bylo všechno včetně dns resolveru, takže ten stroj potřeboval vlastně jenom IP. A tímto stylem dělám svoje kontejnery dodnes, včetně DB, takže stačí zálohovat nebo přenést snapshot jinam, změnit IP a opět mi to běží.
A jak jsem psal v článku, kontejner je primárně nádoba na odpad (sranda) a jestli to tak někdo chápe i při vývoji, tak do budoucna ten projekt má prostě problém.
Vy to robite nejako lebo mate nejake potreby, niekto iny to robi inac lebo ma ine potreby. Co je spravne. Pri vyvoj SW dnes potrebujete bambilion zavislosti. Neplanujem sa hrabat s nizkourovnovymi vecami, potrebujem robit uzivatelske funkcie. Urobit image pre Docker je dnes to iste ako urobit staticky linkovanu binarku.
Dobře, každý to máme evidentně jinak. Mě jako dlouhodobého admina opravdu zajímá, jak je který program distribuován a napsán.
Docker je možná fajn na vyhrazený stroj před kterým bude proxy. Tohle nemusíme mít, v Golangu stačí binárka, databázi si to vytvoří samo a poslouchá na portu 443. V podstatě nemusíme mít ani FW, protože db je přes unix socket, ssh pouze klíče, takže na většině serverů jsou otevřené pouze ty porty, které bychom stejně povolili ve fw.
Vy zijete v jednoduchom svete, to je problem. Inac predradena proxy minimalne koli load balancingu pripadne fail over, filtrovanie vstupov, pre-autorizacia, cryptovanie spojenia (HTTPS), GZIP ... az po spajanie vystupov sluzieb, ich kontrola.
A to som teda este zacal iba s tou API GW.
Dufam ze v tej svojej binarke mate vyrieseny rate limiting per IP, per user, ... pripadne nieco podobne. Auditing, logging, tracing ...
Proste takete tie normalne enterprise feature ktore sa akosi ocakavaju.
Dufam ze v tej svojej binarke mate vyrieseny rate limiting per IP, per user, ... pripadne nieco podobne.
Problémy řeším, až nastanou. V našem případě jsou procesory rychlejší než linka do internetu, takže žádný klient to nezahltí. Takže ani slavná proxy nepomůže, protože je na stejné lince.
Auditing, logging, tracing ...
Samozřejmě, vše podle přání klienta, vyhlášek a zákonů.
V PHP rád použávám zaboxování do phar archivu. Něco jako Javovské jar.
V Rustu mám rád podobně jako vy, že mi z toho vyleze jedna binárka.
V C# by to mělo jít taky ještě jsem nezkoušel, a asi brzy vyzkouším, protože ta změť dll je hrozná.
Každopádně to nic nemění na skutečnosti, že Docker nemá sloužit k zabalení Pythoních souborů do jednoho úhledné balíčku. Ale naopak, a zabalení systému jako aplikace. Je to, monžná trochu histerické, řešení potřeby, kdy nejen, že vám nestačí jako závislost runtime, nebo libc, ale chcete vysloveně vlastní OS.
Docker je standardní "balíček" pro cloudové služby. Pokud tedy znáte OCI standard - https://opencontainers.org/.
Já teda nechci moc rýpat a vypadat jako rozčílený důchodce, ale tohle by chtělo jednak větší publicitu a taky zpracování. V oblasti virtuálních serverů se pohybuju už od střední školy (ukončeno 2001), na vysoké jsem si tak simuloval síť s mnoha uzly a když poprvé přišel Docker, tak krom default instalace se o tom nepsalo nic a když to kámoš zkoušel, tak nefungovala ani IPv6 a po pohledu do iptables bylo jasné proč.
Proto mám vlastní virtuály / kontejnery, protože u těch fungovalo vždy všechno a protokoly sítě se na této úrovni vůbec nemusely řešit.
Tohle je další příklad nadšeneckého přístupu, který kritizuju kudy chodím a vidím to i na datacentrech v česku. Prostě se něco nasadí, nějak to funguje, Casablanca INT zapomněla na své sliby a na georeplikaci a VPSFree jsem kritizoval tolikrát, že to nemá cenu. Hanět své klienty protože si dovolí používat procesor nebo něco posílat po síti opravdu do profi světa nepatří a naši klienti si mohli na svém serveru dělat úplně všechno a pokud se to někomu nelíbí, tak od toho je Policie a trestní oznámení a nikoliv provozovatel datacentra.
A Immich jsem zkoušel naposledy včera, samozřejmě v nspawnu a prostě to nefunguje a jejich návod na povolení volání jádra samozřejmě opět nefunguje. Pokud to není schopné detekovat ani běh v kontejneru a nevolat zbytečné věci, tak to skutečně není moc profi nástroj. A to provozuju věci, které chtějí posílat raw packety a přímo v manuálu pro Jail je napsáno, co je potřeba povolit.
Můžu to ještě zkusit v HyperV na W11Pro, ale tím opravdu končím.
:-D
Aha, takže někdo prohlásí že Immich je super a když se zeptám, jak to nainstalovat tak vlastně nikdo neví. Jasně. Nesetkávám se s tím přístupem poprvé, ale na rozdíl od ostatních, já to co vím alespoň píšu pro všechny ostatní, zatímco experti to sice používají (dle jejich hodnocení), ale nainstalovat to taky neumí.
A default instalace Dockeru opravdu nepovažuju za znalost instalace. To jsem si samozřejmě rozjel taky, abych tu ... věc vyzkoušel. To si opravdu napíšu galerii vlastní.
Já si to rád osahám sám. Immich je jistě super, má to klienta i pro mobily, ale mě se prostě nelíbí způsob vývoje, hromada závislostí a hromada souborů. Mám prostě jiné priority. Data dlouhodobě ukládám do PostgreSQL BYTEA včetně fotek, takže napsat si galerii s jednou binárkou a jedním konfigem není tak těžké. A nspawn kontejner napojený do standardního bridge je otázkou možná dvou příkazů (psal jsem o tom v roce 2016 - https://www.heronovo.cz/index.php/2016/02/21/nspawn-btrfs/).
Chápu Docker pro ty, kteří se nechtějí zabývat systémem, nemají více IP adres a nechtějí rozumět síťování v linuxu nebo freebsd. Já to mám přesně naopak, udělat si KVM, Jail, Hyper-V nebo nspawn je pro mne triviální a dělám to rád pro své projekty. Každý projekt má vlastní kontejner nebo hypervizor virtuál, vlastní IP, vlastní port v bridge a vlastní VLAN, pokud je to potřeba.
Chováš se šíleně, ale dám config.
version: "3.8"
services:
database:
image: ankane/pgvector:latest
container_name: immich_db
environment:
POSTGRES_PASSWORD: immich
POSTGRES_USER: postgres
POSTGRES_DB: immich
volumes:
- /data/compose/immich/pgdata:/var/lib/postgresql/data
networks:
immich_net:
ipv4_address: 10.10.0.10
restart: unless-stopped
redis:
image: redis:6.2
container_name: immich_redis
command: ["redis-server", "--requirepass", "immich"]
networks:
immich_net:
ipv4_address: 10.10.0.11
restart: unless-stopped
immich-server:
image: ghcr.io/immich-app/immich-server:v1.142.1
container_name: immich_server
depends_on:
- redis
- database
environment:
DB_PASSWORD: immich
DB_USERNAME: postgres
DB_DATABASE_NAME: immich
DB_HOSTNAME: 10.10.0.10
REDIS_HOSTNAME: 10.10.0.11
REDIS_PASSWORD: immich
UPLOAD_LOCATION: /data/upload
BACKUP_LOCATION: /data/backups
IMMICH_SERVER_HOST: 0.0.0.0
volumes:
- /docker/compose/immich/upload:/data/upload
- /docker/compose/immich/backups:/data/backups
- /docker/compose/fotogalerie:/import:ro
- /docker/compose/immich/encoded-video:/data/encoded-video
- /docker/compose/immich/library:/data/library
- /docker/compose/immich/thumbs:/data/thumbs
- /docker/compose/immich/profile:/data/profile
ports:
- "2283:2283"
networks:
immich_net:
ipv4_address: 10.10.0.12
restart: unless-stopped
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:v1.137.3
container_name: immich_machine_learning
volumes:
- /docker/compose/immich/model-cache:/cache
networks:
immich_net:
ipv4_address: 10.10.0.13
restart: unless-stopped
networks:
immich_net:
external: false
S bridgem to nemám a testovat se mi to nechce, ale tohle rozhodně funguje.
Akorat ze docker vas to sitovani necha nastavit dle individualnich potreb taky (vc. toho, ze ani nehrabe do firewallu). Jen se to chce zacist do dokumentace a rozumet tomu sitovani v linuxu :) Aha, dokumentaci jsem necetl bo je to ztrata casu, copy & paste navod preci nemam, tak nastupuje hen ten hate :-)
Sis našel téma na sobotu? ;-) Immich jsem nasadil na vlastní HW. Toť vše.
Jako free self hosted klon Google Photos je to dobré, ještě se v tom musím pohrabat. Neumí to stromová alba a zatím jsem nenašel ani tagy na celé galerie (fotky jednotlivě tagovat nebudu). Ale zatím teda dobrý a slibuju, že do zdrojáků se dneska dívat nebudu :-D.