Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
linux_faq:deploy_dokuwiki_in_kubernetes [2020/01/30 11:09] – [Создаем объекты в kubernetes] adminlinux_faq:deploy_dokuwiki_in_kubernetes [2020/01/30 11:17] (current) admin
Line 1: Line 1:
 +Todo:
 +  - change sendmail path in php.ini
 +====== Dockerfile ======
 +===== Вариант с postfix =====
 +Недостаток - жирный сервис постфикса нужно запускать в контейнере.
 +<code>
 +FROM php:fpm
 +RUN echo "postfix postfix/main_mailer_type string 'Satellite system'" | debconf-set-selections \
 +    && echo "postfix postfix/mailname string autosys.tk" | debconf-set-selections \
 +    && DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
 +    postfix \
 +    libfreetype6-dev \
 +    libjpeg62-turbo-dev \
 +    libpng-dev \
 +    libicu-dev \
 +    libldap2-dev \
 +    libxml2-dev \
 +    libxslt1-dev \
 +    libwebp-dev \
 +    libxpm-dev \
 + && CFLAGS="-I/usr/src/php" docker-php-ext-configure gd --with-gd --with-webp-dir --with-jpeg-dir \
 +    --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir \
 + && CFLAGS="-I/usr/src/php" docker-php-ext-install -j$(nproc) pcntl exif gd \
 +    calendar gettext intl ldap shmop sockets sysvmsg \
 +    sysvsem sysvshm tokenizer xml xmlreader xmlwriter xsl \
 + && apt-get clean \
 + && rm -Rf /var/www/* \
 + && chown -R www-data:www-data /var/www \
 + && postconf -e "smtp_generic_maps = hash:/etc/postfix/generic" \
 + && postconf -e "relayhost = mail.autosys.tk"
 + && postconf -e "mydestination = localhost" \
 + && echo 'www-data mike@autosys.tk' >> /etc/postfix/generic \
 + && echo 'root mike@autosys.tk' >> /etc/postfix/generic \
 + && postmap /etc/postfix/generic \
 + && echo "root: mike@autosys.tk" >> /etc/aliases \
 + && echo "www-data: mike@autosys.tk" >> /etc/aliases \
 + && newaliases \
 + && mkfifo /var/spool/postfix/public/pickup \
 + && sed -i '/sendmail_path/ s/=.*$/= "\/usr\/sbin\/sendmail -t -i"/' /usr/local/etc/php/php.ini-production \
 + && sed -i '/sendmail_path/ s/^.*;//' /usr/local/etc/php/php.ini-production \
 + && mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \
 + && sed -i '/exec/ s/^/service postfix start \& /' /usr/local/bin/docker-php-entrypoint
 +</code>
 +===== Вариант с nullmailer =====
 +http://www.panticz.de/install-nullmailer
 +<code>
 +FROM php:fpm
 +RUN echo "nullmailer shared/mailname string wiki.autosys.tk" | debconf-set-selections \
 +    && echo "nullmailer nullmailer/relayhost string mail.autosys.tk smtp" | debconf-set-selections \
 +    && echo "nullmailer nullmailer/adminaddr string mike@autosys.tk" | debconf-set-selections \
 +    && echo "nullmailer nullmailer/defaultdomain string autosys.tk" | debconf-set-selections \
 +    && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
 +    nullmailer \
 +    libfreetype6-dev \
 +    libjpeg62-turbo-dev \
 +    libpng-dev \
 +    libicu-dev \
 +    libldap2-dev \
 +    libxml2-dev \
 +    libxslt1-dev \
 +    libwebp-dev \
 +    libxpm-dev \
 + && CFLAGS="-I/usr/src/php" docker-php-ext-configure gd --with-gd --with-webp-dir --with-jpeg-dir \
 +    --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir \
 + && CFLAGS="-I/usr/src/php" docker-php-ext-install -j$(nproc) pcntl exif gd \
 +    calendar gettext intl ldap shmop sockets sysvmsg \
 +    sysvsem sysvshm tokenizer xml xmlreader xmlwriter xsl \
 + && apt-get clean \
 + && rm -Rf /var/www/* \
 + && chown -R www-data:www-data /var/www \
 + && sed -i '/sendmail_path/ s/=.*$/= "\/usr\/sbin\/sendmail -f mike@autosys.tk -t -i"/' /usr/local/etc/php/php.ini-production \
 + && sed -i '/sendmail_path/ s/^.*;//' /usr/local/etc/php/php.ini-production \
 + && mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \
 + && sed -i '/exec/ s/^/service nullmailer start \& /' /usr/local/bin/docker-php-entrypoint
 +</code>
 +===== Собираем и пушим образ =====
 +  docker build -t registry.autosys.tk/dokuwiki-php .
 +  docker login -u _reg_user_ -p __superpassword__ registry.domain.com
 +  #docker tag dokuwiki-php registry.autosys.tk/dokuwiki-php
 +  docker push registry.autosys.tk/dokuwiki-php
  
 +====== Создаем объекты в kubernetes ======
 +<code>kind: Namespace
 +apiVersion: v1
 +metadata:
 +  name: wiki
 +  labels:
 +    name: wiki
 +---
 +apiVersion: v1
 +data:
 +  .dockerconfigjson: ewoJ....
 +kind: Secret
 +metadata:
 +  name: autosys-regcred
 +  namespace: wiki
 +type: kubernetes.io/dockerconfigjson
 +---
 +apiVersion: apps/v1
 +kind: Deployment
 +metadata:    
 +  name: wiki
 +  namespace: wiki
 +spec:
 +  replicas: 1
 +  selector:  
 +    matchLabels:
 +      app: wiki
 +  template:  
 +    metadata:
 +      labels:
 +        app: wiki
 +    spec:
 +      imagePullSecrets:
 +      - name: autosys-regcred
 +      containers:    
 +        - name: wiki-php-fpm
 +          image: registry.autosys.tk/dokuwiki-php
 +          volumeMounts:
 +            - name: doku-wiki-files
 +              mountPath: /var/www
 +        - name: wiki-nginx
 +          image: nginx
 +          volumeMounts:
 +            - name: doku-wiki-files
 +              mountPath: /var/www
 +            - name: nginx-config-volume
 +              mountPath: /etc/nginx/nginx.conf
 +              subPath: nginx.conf
 +      volumes:
 +        - name: doku-wiki-files
 +          persistentVolumeClaim:
 +            claimName: doku-wiki-files-pv-claim
 +        - name: nginx-config-volume
 +          configMap:
 +            name: nginx-config       
 +      
 +---
 +apiVersion: v1
 +kind: PersistentVolumeClaim
 +metadata:
 +  name: doku-wiki-files-pv-claim
 +  namespace: wiki
 +spec:
 +  accessModes:
 +    - ReadWriteOnce
 +  resources:
 +    requests:
 +      storage: 20Gi
 +  selector:
 +    matchLabels:
 +      app: wiki
 +---
 +apiVersion: v1
 +kind: PersistentVolume
 +metadata:
 +   name: doku-wiki-data-pv
 +   namespace: wiki
 +   labels:
 +     app: wiki
 +spec:
 +  capacity:
 +    storage: 20Gi
 +  accessModes:
 +  - ReadWriteOnce
 +  hostPath:
 +    path: "/kubernetes_volumes/wiki-data"
 +    type: Directory
 +  persistentVolumeReclaimPolicy: Retain
 +  claimRef: {}
 +---
 +kind: ConfigMap
 +apiVersion: v1
 +metadata:
 +  name: nginx-config
 +  namespace: wiki
 +data:
 +  nginx.conf: |
 +    user www-data;
 +    worker_processes 4;
 +    worker_rlimit_nofile 100000;
 +    
 +    events {
 +        worker_connections 4000;
 +        multi_accept on;
 +        use epoll;
 +    }
 +    http {
 +        ##
 +        # Basic Settings
 +        ##
 +        sendfile on;
 +        tcp_nopush on;
 +        tcp_nodelay on;
 +        types_hash_max_size 2048;
 +        server_tokens off;
 +
 +        ##
 +        # Cache
 +        ##
 +        open_file_cache max=200000 inactive=20s;
 +        open_file_cache_valid 30s;
 +        open_file_cache_min_uses 2;
 +        open_file_cache_errors on; 
 +
 +        include /etc/nginx/mime.types;
 +        default_type application/octet-stream;
 +        
 +        ##
 +        # Gzip Settings
 +        ##
 +        # reduce the data that needs to be sent over network -- for testing environment
 +        gzip on;
 +        # gzip_static on;
 +        gzip_min_length 10240;
 +        gzip_comp_level 9;
 +        gzip_vary on;
 +        gzip_disable msie6;
 +        gzip_proxied expired no-cache no-store private auth;
 +        gzip_types
 +                text/html
 +                text/css
 +                text/javascript
 +                text/xml
 +                text/plain
 +                text/x-component
 +                application/javascript
 +                application/x-javascript
 +                application/json
 +                application/xml
 +                application/rss+xml
 +                application/atom+xml
 +                font/truetype
 +                font/opentype
 +                application/vnd.ms-fontobject
 +                image/svg+xml;
 +
 +        ##
 +        # Misc options
 +        ##
 +
 +        # allow the server to close connection on non responding client, this will free up memory
 +        reset_timedout_connection on;
 +
 +        # request timed out -- default 60
 +        client_body_timeout 10;
 +
 +        # if client stop responding, free up memory -- default 60
 +        send_timeout 2;
 +
 +        # server will close connection after this time -- default 75
 +        keepalive_timeout 30;
 +
 +        # number of requests client can make over keep-alive -- for testing environment
 +        keepalive_requests 100000;
 +
 +      server {
 +        listen 80 default_server;
 +        listen [::]:80 default_server;
 +
 +        root /var/www;
 +        #server_name dokuwiki;
 +        autoindex off;
 +        client_max_body_size 15M;
 +        client_body_buffer_size 128k;
 +        index doku.php;   
 +        
 +        location ~ /(data|conf|bin|inc|vendor)/ {
 +          deny all;
 +        }
 +        
 +        location / {
 +          try_files $uri $uri/ @dokuwiki;
 +        }
 + 
 +        location ~ ^/lib.*\.(jpg|jpeg|png|gif|ico|css|js|svg)$ {
 +          expires 30d;
 +        }
 +
 +        location = /robots.txt  { access_log off; log_not_found off; }
 +        location = /favicon.ico { access_log off; log_not_found off; }
 +        location ~ /\.          { access_log off; log_not_found off; deny all; }
 +        location ~ ~$           { access_log off; log_not_found off; deny all; }
 +
 +        location @dokuwiki {
 +          rewrite ^/([\d\s\w]*)(\.)(.*)(\.ashx) /$1/$3 last;
 +          rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
 +          rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
 +          rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
 +          rewrite ^/(.*) /doku.php?id=$1 last;
 +        }
 +
 +        location ~ \.php$ {
 +            include /etc/nginx/fastcgi_params;
 +            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +            try_files $uri =404;
 +            fastcgi_pass 127.0.0.1:9000;
 +            fastcgi_intercept_errors        on;
 +            fastcgi_ignore_client_abort     off;
 +            fastcgi_connect_timeout 60;
 +            fastcgi_send_timeout 180;
 +            fastcgi_read_timeout 180;
 +            fastcgi_buffer_size 128k;
 +            fastcgi_buffers 4 256k;
 +            fastcgi_busy_buffers_size 256k;
 +            fastcgi_temp_file_write_size 256k;
 +        }
 +      }
 +    }
 +---
 +apiVersion: v1
 +kind: Service
 +metadata:
 +  name: wiki-http
 +  namespace: wiki
 +spec:
 +  selector: 
 +    app: wiki
 +  type: ClusterIP
 +  ports:
 +  - name: http
 +    port: 80
 +    protocol: TCP
 +    targetPort: 80
 +---
 +apiVersion: extensions/v1beta1
 +kind: Ingress
 +metadata:
 +  annotations:
 +    kubernetes.io/ingress.class: nginx
 +    cert-manager.io/cluster-issuer: letsencrypt
 +    nginx.ingress.kubernetes.io/proxy-body-size: "0"
 +    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
 +    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
 +  name: wiki-ingress
 +  namespace: wiki
 +spec:
 +  rules:
 +  - host: wiki.autosys.tk
 +    http:
 +      paths:
 +      - backend:
 +          serviceName: wiki-http
 +          servicePort: 80
 +        path: /
 +  tls:
 +  - hosts:
 +    - wiki.autosys.tk
 +    secretName:  wiki-autosys-tk-tls
 +</code>
  • linux_faq/deploy_dokuwiki_in_kubernetes.txt
  • Last modified: 2020/01/30 11:17
  • by admin