• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    JON
    JON --- ---
    TOOMIX: pak to udelej na tom linuxu:
    udelej si adresar youtrack a v nem adresare backups, conf, data, logs a tem nastav prava zapisu (chmod 0777 backups atd...)
    pak tam udelej docker-compose.yml
    docker-compose.yml 
    services:
      youtrack:
        image: jetbrains/youtrack:2025.1.74704
        restart: always
        ports:
          - "8080:8080"
        volumes:
          - ./data:/opt/youtrack/data
          - ./conf:/opt/youtrack/conf
          - ./logs:/opt/youtrack/logs
          - ./backups:/opt/youtrack/backups
    a spust to pres docker-compose up -d

    ten restart: always ti zaridi, ze jak to jednou nastartujes, tak i kdyz se stroj rebootne, tak hned jak se spusti docker daemon, tak to nastartuje i ten youtrack.

    co se tyce tech prav, tak dat tomu ty prava zapisu je potreba PRED tim, nez to nastartujes (a je jednodussi udelat ty adresare predtim nez to nastartujes, jinak ti je to typicky udela samo pod uzivatelem root, coz nechces)

    kdybys si chtel vyhrat s tema pravama lip (nez tam pustit kazdyho), tak bys musel udelat usera 13001 jetbrains, protoze pod tim to uvnitr toho containeru bezi (a ten potrebuje mit pristup k tem adresarum).
    TOOMIX
    TOOMIX --- ---
    SH_PANDA: volume? Pomalu s tim na mě.

    Obecně potřebuju rozjet jenom YouTrack. Podle tohohle návodu to rozjedu na linuxu i na windows - udělám složky, pull na image, docker run a jede to.

    Installation | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/youtrack-docker-installation.html#run-youtrack-service

    Pak ale restartuju počítač a nic...

    Zkoušel jsem to rozjet jako službu přes systemd na linuxu, případně přes docker-compose na windows serveru ale nic, všechno se tváří že dobrý, ale po restartu nic nenaběhne, dokud se zas nepřihlásím na plochu a nepozapínám ručně (v CLI nebo zapnu docker desktop).

    Run Docker Container as a Service | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/run-docker-container-as-service.html
    SH_PANDA
    SH_PANDA --- ---
    TOOMIX: tak to bych se teda vratil k tomu linuxu. btw co ti brani pouzit volume?
    TOOMIX
    TOOMIX --- ---
    SH_PANDA: jako vesměs mi to je jedno, jestli ten docker pojede na linuxu nebo na windows serveru. Zkoušel jsem oboje, na Ubuntu se mi nějak totálně domrdalo oprávnění na složky namapovaný ke kontejneru, že jsem to zahodil a zkouším to na windows serveru 2022. Ale je to past vedle pasti. Přitom tam chci jenom jeden kontejner.
    SH_PANDA
    SH_PANDA --- ---
    TOOMIX: co nejaky virtual s linuxem? je tam sice nejaky overhead, ale to ti asi nebude az tak vadit, nez nutnost poustet Docker Desktop, ne?
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    TOOMIX: a je mozny, ze bude stacit dat automaticky poustet jenom docker engine a uz to pobezi
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    TOOMIX: bohuzel, s timhle nemam vubec, ale vubec zadnou zkusenost. docker jsem nikdy nepustil jinde, nez na linuxu.
    ale zkusil bzch se podivat n a neco jako docker engine, akorat to pravdepodobne asi nebude kompatabilni s docker desktop a bude se to muset spravovat z prikazove radky
    TOOMIX
    TOOMIX --- ---
    TOOMIX: Nikdo nic? Řeším to několik dní a ani prd.
    TOOMIX
    TOOMIX --- ---
    YouTrack mi zrušil ZIP distribuci a musím přejít na docker. Takže jsem na windows stroj nainstaloval docker desktop, stáhnul image, udělal kontejner jako službu a běží to.

    Run Docker Container as a Service | YouTrack Server Documentation
    https://www.jetbrains.com/help/youtrack/server/run-docker-container-as-service.html

    Ale běží to, jen když pustím Docker Desktop aplikaci a co nechci. Ve windows službách je služba Docker Desktop Service. Když jí nastavím automatické spuštění a restartuju počítač, tak se služba tváří, že je zapnutá, ale k YouTracku se nepřipojím. Když zapnu normálně z plochy Docker Desktop, tak ten odstaví tu službu, pustí kontejner s Youtrackem a všechno šlape. Nevíte, kde by mohl být zádrhel, aby to CELÉ běželo jako windows služba bezobslužně? Díky
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON: diky moc.
    JON
    JON --- ---
    MLEKAR_STEIN: takze vlastne v tvym pripade asi takhle:
    
    {{- with .context.nameConstraints.permitted.dnsDomains }}
      dnsDomains:
      {{- toYaml . | nindent 2 }}
    {{- end }}
    
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JON: dik, tak se zbavim objektu range, coz je vice mene to, co jsem chtel.
    JON
    JON --- ---
    MLEKAR_STEIN:

    toho indentu by melo jit se zbavit pomoci `nindent` a zbytek by mohl jit pres `with`, `toYaml` a lokalni kontext:
    spec:
      selector:
        matchLabels:
          {{- include "app.selectorLabels" . | nindent 6 }}
      template:
        metadata:
          {{- with .Values.podAnnotations }}
          annotations:
            {{- toYaml . | nindent 8 }}
          {{- end }}
          labels:
            {{- include "app.selectorLabels" . | nindent 8 }}
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    píšu helm charty a potřebuju názory.

    v podstate porad se v helmu opakuje named list

    nejakeJmeno:
      - polozka
      - druha
    ...

    a je moznost to delat pres pojmenovanou template a include
    akorat to volani mi prijde zase takovy nesikovny v tom, ze tomu musim predat spoustu parametru a je to jak volani win32 api,

    vypada to nejakj takhle
    {{ include "common.printNamedList" ( dict "name" "dnsDomains" "items" .context.nameConstraints.permitted.dnsDomains "indent" "6" "quote" true ) }}

    protoze mu musim predat
    - jmeno listu,
    - jeho obsah,
    - indent a
    - jestli musi polozky dat do uvozovek

    a to uz je trochu neprehledny

    implementace je naopak docela v poho
    {{- define "common.printNamedList" }}
    {{- $items := .items }}
    {{- $name := .name }}
    {{- $indent := ( .indent | int ) }}
    {{- $quote := .quote }}
    {{ printf "%s:" $name | indent $indent }}
    {{- range $val := .items }}
    {{- if ( eq $quote true )  }}
    {{ printf "- \"%s\"" $val | indent $indent }}
    {{- else }}
    {{ printf "- %s" $val | indent $indent }}
    {{- end }}
    {{- end }}
    {{- end }}
    me na tom odrazuje to volani, protoze jsou to ctyri parametry a to je proste uz neprehledny a blbe zapamatovatelny
    a sice usporim par radek, ale ve vysledku vlastne mi prijde ze ten overhead s parametry a dict je docela nesikovnej

    a kdybyste nekdo meli nejaky lepsi napad, tak sem s nim
    VELDRANE
    VELDRANE --- ---
    VELDRANE: tak se pochvalim sam, nakonec ovn-kubernetes rozchozeno pres cisty kubeadm. Hodne casu sem vytuh na osklive, zle nepekne veci v novejsich k8s, kdy pri vytvoreni service accountu se jiz defaultne nevytvari prislusnej secret token (coz si tak rikam, k cemu to sa pak tedy vlastne je).
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    VELDRANE: bohužel. máme calico.
    VELDRANE
    VELDRANE --- ---
    Hola, je tu nejaky masochista kteremu se povedlo rozchodit ovn-kubernetes na vanilla k8s ? Potrejuju pro testovani a nechci instalovat plnotucne okd
    JFM
    JFM --- ---
    MLEKAR_STEIN: Děkuji velice za hint, pomohlo. Už jsem to vyřešil.
    K HTTPS webu v kontejneru je potřeba přistupovat jako k TCP službě a použít TCP router.
    Aby mohli uživatelé používat více takových služeb a rozlišovat je různými FQDN, musí se použít v routeru pravidlo HostSNI.
    Takové pravidlo lze použít pouze u routerů se zapnutým TLS, ale pak je klíčové použít parametr passthrough.
    Entrypoint mám v traefik.toml definovaný běžným způsobem:
    [entryPoints]
      [entryPoints.websecure]
        address = ":443"
    a kontejner pak spouštím takto:
    docker container run -dit \
      --name myapp \
      --label 'traefik.tcp.services.myapp.loadbalancer.server.port=443' \
      --label 'traefik.tcp.routers.myapp.rule=HostSNI(`myapp.my.domain`)' \
      --label 'traefik.tcp.routers.myapp.service=myapp' \
      --label 'traefik.tcp.routers.myapp.entrypoints=websecure' \
      --label 'traefik.tcp.routers.myapp.tls.passthrough=true' \
      myapp:latest
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    JFM:
    to co hledas je tcp proxy
    ja to mam v kubernetes konfigurovane takhle
    napred otevru v traefiku port
    tcpredir:
      port: 9443
      expose:
        default: true
      exposedPort: 9443
      protocol: TCP
    a pak jen udelam ingressroutetcp a reknu ji ze ma pouzit otevreny port, ktery se jmenuje `tcpredir`
    a pokud chces aby to delalo match podle nejake domeny, tak je to
    match HostSNI
    ` - match: HostSNI(`oneprovider.example.com`)`

    apiVersion: traefik.io/v1alpha1
    kind: IngressRouteTCP
    metadata:
      name: test-oneprovider-config
      namespace: test-onedata
    spec:
      entryPoints:
      - tcpredir
      routes:
      - match: HostSNI(`oneprovider.example.com`)
        services:
        - name: oneprovider-oneprovider
          port: 9443
    LUCIEN
    LUCIEN --- ---
    JFM: Mně běží většinou aplikace pro traefik přes docker-compose a tam prostě nadefinuju např. něco takovýho

    wordpress:
      container_name: ${PROJECT_NAME}__wordpress
      build:
        context: .
      env_file: .env.wordpress
      environment:
        - PROJECT_NAME=${PROJECT_NAME}
      restart: unless-stopped
      volumes:
        - "${VOLUME}:/var/www/html"
        - ./volumes/wordpress-uploads:/var/www/html/web/app/uploads
      depends_on:
        - mysql
      networks:
        - internal
        - web
      ports:
        - ${PORT_NGINX}:80
      labels:
        - traefik.http.routers.${PROJECT_NAME}__nginx.rule=Host(`${HOST_WORDPRESS}`)
        - traefik.http.routers.${PROJECT_NAME}__nginx.tls=true
        - traefik.http.routers.${PROJECT_NAME}__nginx.tls.certresolver=lets-encrypt
        - traefik.port=${PORT_NGINX}

    Pak by mělo stačit upravit ten port z 80 na 443, ne?
    Kliknutím sem můžete změnit nastavení reklam