Za na­me­sti­tev Ne­xt­clo­u­da v okolju Ku­ber­ne­tes pri­po­ro­ča­mo uporabo S3 kot shra­nje­val­ne­ga strežnika in MariaDB kot po­dat­kov­ne zbirke. Z nekaj spre­mem­ba­mi v na­sta­vi­tvah lahko iz­bolj­ša­te zmo­glji­vost.

Nextcloud in Ku­ber­ne­tes sta odlična kom­bi­na­ci­ja

Kom­bi­na­ci­ja Ne­xt­clo­u­da in Ku­ber­ne­te­sa s sto­ri­tvi­jo S3 za shra­nje­va­nje je obetavna rešitev v zasebnem in poslovnem sektorju. Ta ne­ko­mer­ci­al­na pro­gram­ska oprema za oblak je primerna tako za delo z lokalnimi strežniki kot z zunanjimi go­sti­te­lji ter se v pri­mer­ja­vi s šte­vil­ni­mi al­ter­na­ti­va­mi Ne­xt­clo­u­du ponaša z odlično varnostno ar­hi­tek­tu­ro. Ku­ber­ne­tes je od­pr­to­ko­dni sistem za upra­vlja­nje kon­tej­ner­skih aplikacij, ki se poleg lokalne rabe lahko uporablja tudi za ra­ču­nal­ni­štvo v oblaku. Sistem velja za pri­la­go­dlji­ve­ga, visoko pri­la­go­dlji­ve­ga in odpornega proti okvaram. Preberite naprej in izvedite, kako nastaviti Nextcloud na Ku­ber­ne­te­su.

Kateri pogoji morajo biti iz­pol­nje­ni?

Preden začnete z na­me­sti­tvi­jo Ne­xt­clo­u­da na Ku­ber­ne­te­su, morajo biti iz­pol­nje­ni nekateri pogoji. Po­tre­bu­je­te dovolj prostora za shra­nje­va­nje in morate imeti že ustvarjen Ku­ber­ne­te­sov klaster. Odvisno od raz­po­lo­žlji­ve zmo­glji­vo­sti se lahko odločite, da ga ustvarite na svojem lokalnem ra­ču­nal­ni­ku ali uporabite shra­nje­va­nje v oblaku. Poleg tega poskrbite, da je za Ku­ber­ne­tes na­sta­vljen upra­vi­telj paketov Helm. Ko ste pri­pra­vlje­ni, lahko na­da­lju­je­te s postopkom.

Kako korak za korakom namestiti Nextcloud na Ku­ber­ne­tes

Ko imate ustrezno podlago, lahko začnete z na­me­sti­tvi­jo Ne­xt­clo­u­da na Ku­ber­ne­tes. Ključni koraki so povzeti v na­sle­dnjih poglavjih.

Nastavi DNS

Prvi korak je ustvariti A-zapis za pod­do­men­sko ime, ki bo usmerjen na želeni IP-naslov. Če upo­ra­blja­te lokalno rešitev, je pravi cilj vaš javni IP-naslov; v na­spro­tnem primeru vnesite IP-naslov, ki ga je za­go­to­vi­la vaša storitev v oblaku. Glede na ponudnika storitev DNS se lahko potrebni koraki nekoliko raz­li­ku­je­jo.

Dodajanje in po­so­da­blja­nje Helm

Ku­ber­ne­tes se namesti s pomočjo upra­vi­te­lja paketov Helm, ki mora biti nameščen na vašem ra­ču­nal­ni­ku. Poleg tega se pre­pri­čaj­te, da imate vzpo­sta­vlje­no povezavo s svojim Ku­ber­ne­tes-ovim grozdom. Če je tako, dodajte re­po­zi­to­rij Helm in ga po­so­do­bi­te z na­sle­dnji­mi ukazi:

helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo update
shell

Ustvari datoteko values.yaml

Sedaj ustvarite nov Helmov diagram z na­sle­dnjim ukazom:

nano values.yaml
shell

Nato v to datoteko vnesite naslednje spe­ci­fi­ka­ci­je.

Nastavi cron naloge

Najprej določite časovno omejitev za cron naloge. V ope­ra­cij­skih sistemih tipa Unix so cron naloge opravila, ki se samodejno izvajajo v ozadju v vnaprej določenih časovnih in­ter­va­lih. Pri Nextcloud na Ku­ber­ne­te­su gre predvsem za vzdr­že­val­na opravila. V tem primeru bomo nastavili, da se cron naloga izvaja vsakih pet minut. Pri večjih količinah podatkov je morda pri­po­ro­člji­vo po­go­stej­še vzdr­že­va­nje. Uporabite naslednjo kodo:

cronjob:
    annotations: {}
    curlInsecure: false
    enabled: true
    failedJobsHistoryLimit: 5
    image: {}
    schedule: '*/5*     *** '
    successfulJobsHistoryLimit: 2
shell

Vklopite HPA

Sedaj one­mo­go­či­te Ho­ri­zon­tal Pod Au­to­sca­ler (HPA), ki samodejno prilagaja število podov. Če za Nextcloud upo­ra­blja­te Re­a­dWri­te­On­ce in želite pri­la­ga­ja­nje števila podov nad­zo­ro­va­ti ročno, morate one­mo­go­či­ti HPA in se osre­do­to­či­ti na en pod. Ta pristop je pri­mer­nej­ši, če dostop potrebuje le nekaj upo­rab­ni­kov. Ustrezna koda je:

hpa:
    cputhreshold: 60
    enabled: false
    maxPods: 10
    minPods: 1
shell

Prepisati oznako slike

Da se upošteva trenutna različica Helma, prepišite oznako slike. Za to uporabite naslednjo kodo:

image:
    repositor: nextcloud
    tag: 28.0.2-apache
    pullPolicy: IfNotPresent
shell

Zdaj je izbrana različica 28.0.2 ali novejša različica.

Izberi bazo podatkov

Pri izbiri po­dat­kov­ne zbirke imate na voljo tri možnosti: MariaDB, Po­stgre­SQL ali SQLite. V našem primeru se odločimo za MariaDB. To po­dat­kov­no zbirko nastavite na naslednji način in one­mo­go­či­te ostali dve:

internalDatabase:
    enabled: false
mariadb:
    db:
        name: nextcloud
        password: db-password
        user: nextcloud
    enabled: true
    master:
        persistence:
            accessMode: ReadWriteOnce
            enabled: true
            size: 8Gi
    replication:
        enabled: false
    rootUser:
        password: root-db-password
        forcePassword: true
postgresql:
    enabled: false
shell

Spre­mlja­nje ka­zal­ni­kov

Če želite izvajati spre­mlja­nje s Pro­me­the­u­som ali Grafano, vstavite naslednjo kodo. To je neobvezno.

metrics:
    enabled: true
    https: false
    image:
        pullPolicy: IfNotPresent
        repository: xperimental/nextcloud-exporter
        tag: v0.3.0
    replicaCount: 1
    service:
        annotations:
            prometheus.io/port: '9205'
            prometheus.io/scrape: 'true'
        labels: {}
        type: ClusterIP
    timeout: 5s
shell

Omogoči uporabo lastnih kon­fi­gu­ra­cij­skih datotek

Nextcloud privzeto uporablja tudi datoteko config.php za kon­fi­gu­ra­ci­jo v Ku­ber­ne­te­su. Da bi to po­e­no­sta­vi­li ali omogočili večjo pri­la­go­dlji­vost, lahko vstavite svoje kon­fi­gu­ra­cij­ske datoteke z naslednjo kodo:

nextcloud:
    configs:
        custom.config.php: |-
            <?php
            $CONFIG = array (
                'overwriteprotocol' => 'https',
                'overwrite.cli.url' => 'https://drive.example.com',
                'filelocking.enabled' => 'true',
                'loglevel' => '2',
                'enable_previews' => true,
                'trusted_domains' =>
                     [
                        'nextcloud',
                        'drive.example.com'
                     ]
            );
shell

Na­do­me­sti­te na­do­me­stni znak »example.com« s svojo domeno.

Na­sta­vi­tev Redisa

Za iz­bolj­ša­nje pred­po­mnje­nja z Redisom in povečanje splošne zmo­glji­vo­sti lahko vključite lastno kon­fi­gu­ra­cij­sko datoteko. Helm Redis je privzeto nameščen brez zaščite z geslom, vendar je pri­po­ro­člji­vo dodati dodatno raven varnosti. Uporabite naslednjo kodo, da nastavite Redis z zaščito z geslom in ga in­te­gri­ra­te v Nextcloud:

redis.config.php: |-
    <?php
    $CONFIG = array (
      'memcache.local' => '\\OC\\Memcache\\Redis',
      'memcache.distributed' => '\OC\Memcache\Redis',
      'memcache.locking' => '\OC\Memcache\Redis',
      'redis' => array(
        'host' => getenv('REDIS_HOST'),
        'port' => getenv('REDIS_HOST_PORT') ?: 6379,
        'password' => getenv('your-password-for-redis')
      )
    );
shell

Na­sta­vi­tev ozadja za shra­nje­va­nje

Vsta­vlje­na je zadnja kon­fi­gu­ra­cij­ska datoteka za shra­nje­val­ni backend S3. V kodi je shranjena na naslednji način:

s3.config.php: |-
    <?php
    $CONFIG = array (
      'objectstore' => array(
        'class' => '\\OC\\Files\\ObjectStore\\S3',
        'arguments' => array(
        'bucket'     => 'bucket-name',
        'autocreate' => true,
        'key'      => 's3-access-key',
        'secret'     => 's3-secret-key',
        'region'     => 's3-region',
        'hostname'   => 's3-endpoint',
        'use_ssl'    => true,
        'use_path_style' => true
        )
      )
    );
shell

Izklopite kon­fi­gu­ra­ci­jo Redis

Ker ste zgoraj prepisali privzeto kon­fi­gu­ra­ci­jo za Redis, jo je treba zdaj one­mo­go­či­ti, da se izognete napakam. To storite z na­sle­dnjim kodom:

defaultConfigs:
    .htaccess: true
    apache-pretty-urls.config.php: true
    apcu.config.php: true
    apps.config.php: true
    autoconfig.php: false
    redis.config.php: false
    smtp.config.php: true
shell

Nastavi go­sti­te­lja, skrbnika in geslo

Sedaj vnesite ime strežnika, upo­rab­ni­ško ime skrbnika in ustrezno geslo za uporabo Ne­xt­clo­u­da v Ku­ber­ne­te­su. Za to uporabite naslednjo kodo:

host: drive.example.com
password: your-password
username: name-of-admin
shell

Za­me­njaj­te na­do­me­stne znake s svojimi podatki.

Nastavi obvestila po e-pošti

Po želji lahko nastavite storitev SMTP (Simple Mail Transfer Protocol) za pre­je­ma­nje obvestil iz Ne­xt­clo­u­da:

mail:
    domain: example.com
    enabled: false
    fromAddress: user
    smtp:
      authtype: LOGIN
      host: example.com
      name: username
      password: your-password 
      port: 465
      secure: ssl
shell

Nastavite pogon za trajno shra­nje­va­nje

Naslednja kon­fi­gu­ra­ci­ja trajnega shra­nje­va­nja je namenjena podatkom, ki jih Nextcloud shranjuje na ustreznem nosilcu podatkov. To ne vpliva na vaše upo­rab­ni­ške podatke, ki se redno shra­nju­je­jo v S3:

persistence:
    accessMode: ReadWriteOnce
    annotations: {}
    enabled: true
    size: 8Gi
shell

Zaščitite Redis z geslom

Pri­po­ro­člji­vo je, da Redis za­va­ru­je­te z geslom. S tem pre­pre­či­te napake pri av­ten­ti­fi­ka­ci­ji. Za to uporabite naslednjo kodo in na ustreznih mestih vnesite svoje geslo:

redis:
    enabled: true
    password: 'your-password-for-redis'
    usePassword: true
shell

Omejitev ponovitev

Ker ste HPA že one­mo­go­či­li, morate število možnih re­pli­ka­cij omejiti na 1:

replicaCount: 1
shell

Na­me­sti­tev Ne­xt­clo­u­da na Ku­ber­ne­tes

Na koncu namestite Nexcloud na Ku­ber­ne­tes ter dodajte tudi MariaDB in Redis:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Go to Main Menu