美文网首页
nextcloud on kubernetes

nextcloud on kubernetes

作者: H_appiness | 来源:发表于2019-04-13 15:53 被阅读0次

摘要

在这片文章中,我将展示如何在nextcloud搭建在kubernetes上。本文不叙述如何安装搭建docker和kubernetes,有关详情请上网查阅!

部署+服务:MariaDB

首先创建文件夹nextcloud,下载预定义的MariaDB描述。根据需要进行调整并部署:

mkdir nextcloud
cd nextcloud
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/db-deployment.yaml
vim db-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: db
  name: db
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
      - env:
        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_PASSWORD
          value: <someMySqlPass> #在这里更改MYSQL_PASSWORD
        - name: MYSQL_USER
          value: nextcloud
        - name: MYSQL_ROOT_PASSWORD
          value: <someMySqlRootPass> #在这里更改MYSQL_ROOT_PASSWORD
        image: mariadb
        name: db
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: db
      restartPolicy: Always
      volumes:
      - name: db
        hostPath:
          path: "/home/<someFolderLocation>/db-pv" #在这里更改db的HostPath,它应该是'nc-deployment'/db-pv的绝对位置(例如/home/andremotz/nc-deployment/db-pv)

更改完成后进行部署,并部署其服务

kubectl create -f db-deployment.yaml
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/db-svc.yaml
kubectl create -f db-svc.yaml

部署+服务:Nextcloud:

接下来下载Nextcloud描述,调整它们并部署:

wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/nc-deployment.yaml
vim nc-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: nc
  name: nc
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nc
    spec:
      containers:
      - env:
        - name: TZ
          value: Europe/Berlin
        - name: DEBUG
          value: "false"
        - name: NEXTCLOUD_URL
          value: http://<someDomain> #输入域名
        - name: NEXTCLOUD_ADMIN_USER
          value: admin
        - name: NEXTCLOUD_ADMIN_PASSWORD
          value: <someNextCloudAdminPass> #输入NEXTCLOUD_ADMIN_PASSWORD
        - name: NEXTCLOUD_UPLOAD_MAX_FILESIZE
          value: 4G
        - name: NEXTCLOUD_MAX_FILE_UPLOADS
          value: "20"
          
        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_HOST
          value: db
        - name: MYSQL_PASSWORD
          value: <someMysqlPass> #更改MYSQL_PASSWORD(您之前输入的值)
        - name: MYSQL_USER
          value: nextcloud
        name: nc
        image: nextcloud
        ports:
        - containerPort: 80
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/www/html
          name: html
      restartPolicy: Always
      volumes:
        - name: html
          hostPath:
            path: "/home/<someFolderLocation>/nc-pv" #更改html的hostPath(例如更改为/home/andremotz/nc-deployment/nc-pv)

更改完成后进行部署,并部署其服务

kubectl create -f nc-deployment.yaml
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/nc-svc.yaml #编辑下载完成的nc-svc.yaml把type: NodePort打开!最后通过这个随机端口进行访问!
kubectl create -f nc-svc.yaml

创建自签名证书

OMGWTFSSL-Docker镜像提供易于使用的证书创建。这里我们只使用Pod,而不是部署。创建证书后,Pod将停止。

wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/omgwtfssl-pod.yaml
vim omgwtfssl-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: omgwtfssl
  name: omgwtfssl
spec:
  restartPolicy: Never
  containers:
  - env:
    - name: SSL_SUBJECT
      value: <my-server-name> #输入服务器名称
    - name: CA_SUBJECT
      value: <my-email> #输入邮件地址
    - name: SSL_KEY
      value: /certs/<my-server-name>.key #更改为正确的文件名
    - name: SSL_CSR
      value: /certs/<my-server-name>.csr #更改为正确的文件名
    - name: SSL_CERT
      value: /certs/<my-server-name>.crt #更改为正确的文件名
    name: omgwtfssl
    image: paulczar/omgwtfssl
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: certs
      name: certs
  volumes:
    - name: certs
      hostPath:
        path: "/home/<someFolderLocation>/certs-pv" #更改cert的hostPath(例如/home/andremotz/nc-deployment/certs-pv)

更改完成后进行部署,并部署其服务

kubectl create -f omgwtfssl-pod.yaml

部署+服务:Nginx反向代理

接下来下载nginx并修改

wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/nginx.conf
vim nginx.conf
# Kubernetes proxy-config
#
# used for adding https security

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  65;

    server {
        listen 80;
        server_name <my-server-name>; #更改域名
        return 301 https://$server_name$request_uri;
        #rewrite ^/(.*)$ https://nc/$1 permanent;
    }

    server {
        listen 443 ssl;
        access_log  /var/log/nginx/access.log;
        #root /var/www/html;

        # [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
        # ssl on;
        server_name <my-server-name>; #更改域名
        ssl_certificate /etc/nginx/certs/<my-server-name>.crt; #更改为正确名字
        ssl_certificate_key /etc/nginx/certs/<my-server-name>.key; #更改为正确名字

        location / {
            proxy_pass http://nc;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_buffering off;
            proxy_request_buffering off;

        }
    }


}

下载proxy并修改

wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/proxy-pod.yaml
vim proxy.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: proxy
  name: proxy

spec:
  containers:
  - env:
    - name: TZ
      value: Europe/Berlin

    name: proxy
    image: nginx
    ports:
    - containerPort: 80
      protocol: TCP
      hostPort: 80
    - containerPort: 443
      protocol: TCP
      hostPort: 443

    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /etc/nginx/certs
      name: certs
    - mountPath: /tmp/docker.sock
      name: docker-socket
    - mountPath: /etc/nginx/nginx.conf
      name: nginx-config
    - mountPath: /var/log/nginx
      name: nginx-logs
  restartPolicy: Always
  volumes:
    - name: certs
      hostPath:
        path: "/home/<someFolderLocation>/certs-pv" #将cert的hostPath更改为之前提供的位置--->将nginx-config的主机路径更改为之前存储
nginx.conf的位置(例如/home/andremotz/nc-deployment/nginx.conf)
    - name: docker-socket
      hostPath:
        path: "/var/run/docker.sock"
        type: Socket
    - name: nginx-config
      hostPath:
        path: "/home/<someFolderLocation>/nginx.conf" #刚刚下载nginx.conf的位置
        type: File
    - name: nginx-logs
      hostPath:
        path: "/home/<someFolderLocation>/nginx-logs" #更改为正确的位置,如/var/log/nginx.log

更改完成后进行部署

kubectl create -f proxy-pod.yaml

现在可以通过浏览器指向http://<yourserver>:NodePort并在kubernetes dashboard上查看到位于default下的实例!

可参考本人已完成的配置文件(链接:https://pan.baidu.com/s/1ele1F0xD7-GMPzVMG9xEGA
提取码:4sos )


这时候可能会出现如下失败效果


图片.png

没关系!不要慌!这个问题不是问题!我们来看看怎么解决这个问题

找到我们刚才下载的配置文件nc-deployment.yaml,查看这个配置文件的HostPath存放目录,编辑该文件,我这里存放在/opt/nc-pv/config/config.php 找到如下字段添加上刚才配置的域名重新刷新网页即可!

'trusted_domains' =>
array (
'lijian.cloud.com',
),

展示图

图片.png

相关文章

网友评论

      本文标题:nextcloud on kubernetes

      本文链接:https://www.haomeiwen.com/subject/umglwqtx.html