lynx   »   [go: up one dir, main page]

ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2022年4月9日土曜日

k3sで同一ポッド内にGhostとMySQLを配置する

Ghostはブログプラットフォームです。k3sで同一ポッド内にGhostとMySQLを配置するには、以下の手順を実行します(official mysqlイメージにはarm 32bit版は無いようです)。

実行手順 1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/ghost-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MySQLデータ用
cat << EOF > local-mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mysql-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mysql-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-mysql-pv.yml

※Ghost用
cat << EOF > local-ghost-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-ghost-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/ghost-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-ghost-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MySQLデータ用
cat << EOF > local-mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mysql-pv
EOF

sudo k3s kubectl apply -f ./local-mysql-pvc.yml

※Ghost用
cat << EOF > local-ghost-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-ghost-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-ghost-pv
EOF

sudo k3s kubectl apply -f ./local-ghost-pvc.yml

4. GhostとMySQLのDeploymentの作成
以下のコマンドでGhostとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > ghost-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ghost-mysql-deployment
  labels:
    app: ghost-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ghost-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ghost-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: ghost
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: ghost
        image: ghost:4-alpine
        env:
        - name: url
          value: http://xxx.xxx.xxx.xxx:8080 # ここは外部からアクセスできるk3sをインストールしたホスト名・IPに変更します
        - name: database__client
          value: mysql
        - name: database__connection__host
          value: 127.0.0.1
        - name: database__connection__user
          value: root
        - name: database__connection__password
          value: ghost
        - name: database__connection__database
          value: ghost
        ports:
        - containerPort: 2368
        volumeMounts:
        - name: ghost-data
          mountPath: /var/lib/ghost/content
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: ghost-data
        persistentVolumeClaim:
          claimName: local-ghost-pvc
EOF

sudo k3s kubectl apply -f ./ghost-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > ghost-service.yml
apiVersion: v1
kind: Service
metadata:
  name: ghost-service
spec:
  selector:
    app: ghost-mysql
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 2368
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

sudo k3s kubectl apply -f ./ghost-service.yml

ブラウザからhttp://<ホスト名またはIP:8080>/ghost/ にアクセスしてユーザ登録などを行います。

2022年3月18日金曜日

Microk8sで同一ポッド内にGhostとMySQLを配置する

Ghostはブログプラットフォームです。Microk8sで同一ポッド内にGhostとMySQLを配置するには、以下の手順を実行します。

実行手順 1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/ghost-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MySQLデータ用
cat << EOF > local-mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mysql-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mysql-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mysql-pv.yml

※Ghost用
cat << EOF > local-ghost-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-ghost-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/ghost-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-ghost-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MySQLDBデータ用
cat << EOF > local-mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mysql-pv
EOF

microk8s kubectl apply -f ./local-mysql-pvc.yml

※Ghost用
cat << EOF > local-ghost-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-ghost-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-ghost-pv
EOF

microk8s kubectl apply -f ./local-ghost-pvc.yml

4. GhostとMySQLのDeploymentの作成
以下のコマンドでGhostとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > ghost-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ghost-mysql-deployment
  labels:
    app: ghost-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ghost-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ghost-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: ghost
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: ghost
        image: ghost:4-alpine
        env:
        - name: url
          value: http://xxx.xxx.xxx.xxx:8080 # ここは外部からアクセスできるMicrok8sをインストールしたホスト名・IPに変更します
        - name: database__client
          value: mysql
        - name: database__connection__host
          value: 127.0.0.1
        - name: database__connection__user
          value: root
        - name: database__connection__password
          value: ghost
        - name: database__connection__database
          value: ghost
        ports:
        - containerPort: 2368
        volumeMounts:
        - name: ghost-data
          mountPath: /var/lib/ghost/content
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: ghost-data
        persistentVolumeClaim:
          claimName: local-ghost-pvc
EOF

microk8s kubectl apply -f ./ghost-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > ghost-service.yml
apiVersion: v1
kind: Service
metadata:
  name: ghost-service
spec:
  selector:
    app: ghost-mysql
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 2368
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./ghost-service.yml

ブラウザからhttp://<ホスト名:8080/ghost/ にアクセスしてユーザ登録などを行います。

2022年3月7日月曜日

Minikubeで同一ポッド内にn8n.ioとMySQLを配置する

n8n.ioは自動化ワークフローツールです。Minikubeで同一ポッド内にn8n.ioとMySQLを配置するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順 1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/n8n-data

exit

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MySQLデータ用
cat << EOF > local-mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mysql-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mysql-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-mysql-pv.yml

※n8n.io用
cat << EOF > local-n8n-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-n8n-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/n8n-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-n8n-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MySQLDBデータ用
cat << EOF > local-mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mysql-pv
EOF

kubectl apply -f ./local-mysql-pvc.yml

※n8n.io用
cat << EOF > local-n8n-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-n8n-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-n8n-pv
EOF

kubectl apply -f ./local-n8n-pvc.yml

4. n8n.ioとMySQLのDeploymentの作成
以下のコマンドでn8n.ioとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > n8n-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n-mysql-deployment
  labels:
    app: n8n-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: n8n-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: n8n
        - name: MYSQL_DATABASE
          value: n8n
        - name: MYSQL_USER
          value: n8n
        - name: MYSQL_PASSWORD
          value: n8n
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: n8n
        image: n8nio/n8n
        env:
        - name: DB_TYPE
          value: mysqldb
        - name: MYSQLDB_DATABASE
          value: n8n
        - name: DB_MYSQLDB_HOST
          value: 127.0.0.1
        - name: DB_MYSQLDB_PORT
          value: "3306"
        - name: DB_MYSQLDB_USER
          value: n8n
        - name: DB_MYSQLDB_PASSWORD
          value: n8n
        - name: GENERIC_TIMEZONE
          value: Asia/Tokyo
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 5678
        volumeMounts:
        - name: n8n-data
          mountPath: /home/node/.n8n
      dnsConfig:
        options:
        - name: ndots
          value: "1"
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: n8n-data
        persistentVolumeClaim:
          claimName: local-n8n-pvc
EOF

kubectl apply -f ./n8n-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > n8n-service.yml
apiVersion: v1
kind: Service
metadata:
  name: n8n-service
spec:
  selector:
    app: n8n-mysql
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 5678
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./n8n-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/n8n-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080/ にアクセスしてワークフローを作成します。

2022年3月6日日曜日

Minikubeで同一ポッド内にGhostとMySQLを配置する

Ghostはブログプラットフォームです。Minikubeで同一ポッド内にGhostとMySQLを配置するには、以下の手順を実行します。

実行手順 1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/ghost-data

exit

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MySQLデータ用
cat << EOF > local-mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mysql-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mysql-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-mysql-pv.yml

※Ghost用
cat << EOF > local-ghost-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-ghost-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/ghost-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-ghost-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MySQLDBデータ用
cat << EOF > local-mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mysql-pv
EOF

kubectl apply -f ./local-mysql-pvc.yml
※Ghost用
cat << EOF > local-ghost-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-ghost-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-ghost-pv
EOF

kubectl apply -f ./local-ghost-pvc.yml

4. GhostとMySQLのDeploymentの作成
以下のコマンドでGhostとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > ghost-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ghost-mysql-deployment
  labels:
    app: ghost-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ghost-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ghost-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: ghost
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: ghost
        image: ghost:4-alpine
        env:
        - name: url
          value: http://xxx.xxx.xxx.xxx:8080 # ここは外部からアクセスできるMinikubeをインストールしたホスト名・IPに変更します
        - name: database__client
          value: mysql
        - name: database__connection__host
          value: 127.0.0.1
        - name: database__connection__user
          value: root
        - name: database__connection__password
          value: ghost
        - name: database__connection__database
          value: ghost
        ports:
        - containerPort: 2368
        volumeMounts:
        - name: ghost-data
          mountPath: /var/lib/ghost/content
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: ghost-data
        persistentVolumeClaim:
          claimName: local-ghost-pvc
EOF

kubectl apply -f ./ghost-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > ghost-service.yml
apiVersion: v1
kind: Service
metadata:
  name: ghost-service
spec:
  selector:
    app: ghost-mysql
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 2368
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./ghost-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/ghost-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名>:8080/ghost/ にアクセスしてユーザ登録などを行います。

2022年2月17日木曜日

Microk8sで同一ポッド内にn8n.ioとMySQLを配置する

n8n.ioは自動化ワークフローツールです。Microk8sで同一ポッド内にn8n.ioとMySQLを配置するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順 1. local永続ボリュームで使用するディレクトリの作成
Microk8sがインストールされているホスト上でlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/n8n-mysql-data

sudo mkdir -p /var/n8n-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※MySQLデータ用
cat << EOF > local-mysql-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mysql-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/n8n-mysql-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mysql-pv.yml

※n8n.io用
cat << EOF > local-n8n-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-n8n-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/n8n-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-n8n-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※MySQLDBデータ用
cat << EOF > local-mysql-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mysql-pv
EOF

microk8s kubectl apply -f ./local-mysql-pvc.yml

※n8n.io用
cat << EOF > local-n8n-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-n8n-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-n8n-pv
EOF

microk8s kubectl apply -f ./local-n8n-pvc.yml

4. n8n.ioとMySQLのDeploymentの作成
以下のコマンドでn8n.ioとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > n8n-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n-mysql-deployment
  labels:
    app: n8n-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: n8n-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: n8n
        - name: MYSQL_DATABASE
          value: n8n
        - name: MYSQL_USER
          value: n8n
        - name: MYSQL_PASSWORD
          value: n8n
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: n8n
        image: n8nio/n8n
        env:
        - name: DB_TYPE
          value: mysqldb
        - name: MYSQLDB_DATABASE
          value: n8n
        - name: DB_MYSQLDB_HOST
          value: 127.0.0.1
        - name: DB_MYSQLDB_PORT
          value: "3306"
        - name: DB_MYSQLDB_USER
          value: n8n
        - name: DB_MYSQLDB_PASSWORD
          value: n8n
        - name: GENERIC_TIMEZONE
          value: Asia/Tokyo
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 5678
        volumeMounts:
        - name: n8n-data
          mountPath: /home/node/.n8n
      dnsConfig:
        options:
        - name: ndots
          value: "1"
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: n8n-data
        persistentVolumeClaim:
          claimName: local-n8n-pvc
EOF

microk8s kubectl apply -f ./n8n-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > n8n-service.yml
apiVersion: v1
kind: Service
metadata:
  name: n8n-service
spec:
  selector:
    app: n8n-mysql
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 5678
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./n8n-service.yml
ブラウザからhttp://<ホスト名>:8080/ にアクセスしてワークフローを作成します。

関連情報 ・Microk8sで同一ポッド内にn8n.ioとPostgreSQLを配置する

2019年4月21日日曜日

DockerでRedash7.0.0, MySQL8.0, PostgreSQL11.2, Redis, Adminer4.7のコンテナを構築する

Redashでデータの可視化環境を提供する事ができます。AdminerはデータベースのWebインターフェイスで、開発・管理などに使用できます。

〇Redashの画面


〇Adminerの画面


〇構築方法
1.Redash7.0.0, MySQL8.0, PostgreSQL11.2, Redis, Adminer4.7のコンテナを以下のコマンドで構築して実行します。
docker-compose run --rm redashserver create_db
docker-compose up -d

docker-compose.yml
version: '2'
services:
  redashserver:
    image: redash/redash:7.0.0.b18042
    command: server
    depends_on:
      - db
      - redis
      - mysql
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://redash:redash@db/redash"
      REDASH_COOKIE_SECRET: "cookiesecret"
      REDASH_SECRET_KEY: "Mysecretkey123"
      REDASH_DATE_FORMAT: YYYY/MM/DD
      REDASH_RATELIMIT_ENABLED: "false"
  redashworker:
    image: redash/redash:7.0.0.b18042
    command: scheduler
    depends_on:
      - redashserver
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://redash:redash@db/redash"
      QUEUES: "queries,scheduled_queries,celery,schemas"
      REDASH_SECRET_KEY: "Mysecretkey123"
      WORKERS_COUNT: 4
      REDASH_DATE_FORMAT: YYYY/MM/DD
  redis:
    image: redis:5.0-alpine
    restart: unless-stopped
  db:
    image: postgres:11.2-alpine
    environment:
      POSTGRES_DB: redash
      POSTGRES_USER: redash
      POSTGRES_PASSWORD: redash
    ports:
      - "5432:5432"
    container_name: postgres
    volumes:
      - "db-data:/var/lib/postgresql/data"
  mysql:
    image: mysql:8.0
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
    container_name: "mysql-db"
    volumes:
      - "mysql-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: redash
        MYSQL_ROOT_PASSWORD: redash
  adminer:
    image: adminer:4.7
    container_name: "adminer"
    ports:
      - "8080:8080"
    depends_on:
      - db
      - mysql
volumes:
  db-data:
    driver: local
  mysql-data:
    driver: local

2.初期設定
ブラウザからhttp://<Dockerホスト名またはIP:5000/にアクセスして、管理者情報を入力します。


〇Redashのデータソース設定画面
MySQLをデータソースとして使用したい場合は、Datasourcesで以下のように情報を入力します。

Host: mysql
Port: 3306
User: root
Password: redash
Database name: redash



○関連情報
・Redashに関する他の記事はこちらを参照してください。

2019年4月15日月曜日

DockerでAdminer4.7とMySQL8.0のコンテナーを構築する

Adminerでブラウザからデータベースを操作する事ができます。

○Adminerの画面

ブラウザからhttp://<Dockerホスト>:8080/にアクセスします。
サーバ:mysqldb、ユーザ:root、パスワード:root、データベース:testを指定します。

○構築方法
以下のdocker-compose.ymlを使用して、Adminer4.7とMySQL8.0のコンテナーを構築する事ができます。
docker-compose up -d

docker-compose.yml
version: "2"
services:
  adminer:
    image: adminer:4.7
    container_name: "adminer"
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: mysql:8.0
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
    container_name: "db"
    volumes:
      - "db-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: test
        MYSQL_ROOT_PASSWORD: root
volumes:
  db-data:
    driver: local


〇関連情報
・Adminerに関する他の情報はこちらを参照してください。

・Adminerのプロジェクトwebサイト
https://www.adminer.org/

2019年2月24日日曜日

VagrantでMySQL8のレプリケーション設定をした仮想マシン(CentOS、master/slaveの2台)を構築する

以下のVagrantfileでMySQL8のレプリケーション設定をした仮想マシンを構築します。mysqlnode1がマスターで、mysqlnode2がスレーブになります。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "mysqlnode1" do |server|
    server.vm.box = "bento/centos-7.6"
    server.vm.hostname = "mysqlnode1"
    server.vm.network :public_network, ip:"192.168.1.103"
    server.vm.network "private_network", ip: "192.168.55.103", :netmask => "255.255.255.0"
    server.vm.provider :virtualbox do |vbox|
      vbox.name = "mysqlnode1"
      vbox.cpus = 1
      vbox.memory = 1024
      vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
    end
    server.vm.provision "shell", inline: <<-SHELL
cat << EOF > /etc/hosts
192.168.55.103       mysqlnode1
192.168.55.104       mysqlnode2
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
EOF

# install mysql8
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
yum -y install mysql-community-server
cat << EOF >> /etc/my.cnf
skip_ssl
binlog_checksum=NONE
enforce_gtid_consistency=ON
gtid_mode=ON
server_id=1
default-authentication-plugin=mysql_native_password
log-bin=mysql-bin
binlog_expire_logs_seconds=2592000
EOF

systemctl start mysqld.service
systemctl enable mysqld.service

export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot -p$MYSQL_PWD --connect-expired-password -e " ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Mysql2019#'; FLUSH PRIVILEGES; UNINSTALL COMPONENT 'file://component_validate_password'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';"
mysql -uroot -proot -e "CREATE USER 'root'@'%' identified by 'root'; GRANT ALL ON *.* to 'root'@'%' with grant option; FLUSH PRIVILEGES;"
mysql -uroot -proot -e "CREATE USER 'repl'@'%' identified by 'repl'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;"
mysql -uroot -proot -e "RESET MASTER;"

SHELL
  end
  #----------------------------------------------------------------------------------------
  config.vm.define "mysqlnode2" do |server|
    server.vm.box = "bento/centos-7.6"
    server.vm.hostname = "mysqlnode2"
    server.vm.network :public_network, ip:"192.168.1.104"
    server.vm.network "private_network", ip: "192.168.55.104", :netmask => "255.255.255.0"
    server.vm.provider :virtualbox do |vbox|
      vbox.name = "mysqlnode2"
      vbox.cpus = 2
      vbox.memory = 1024
      vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
    end
    server.vm.provision "shell", inline: <<-SHELL
cat << EOF > /etc/hosts
192.168.55.103       mysqlnode1
192.168.55.104       mysqlnode2
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
EOF

# install mysql8
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
yum -y install mysql-community-server
cat << EOF >> /etc/my.cnf
skip_ssl
binlog_checksum=NONE
enforce_gtid_consistency=ON
gtid_mode=ON
server_id=2
default-authentication-plugin=mysql_native_password
log-bin=mysql-bin
binlog_expire_logs_seconds=2592000
EOF

systemctl start mysqld.service
systemctl enable mysqld.service

export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot -p$MYSQL_PWD --connect-expired-password -e " ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Mysql2019#'; FLUSH PRIVILEGES; UNINSTALL COMPONENT 'file://component_validate_password'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';"
mysql -uroot -proot -e "CREATE USER 'root'@'%' identified by 'root'; GRANT ALL ON *.* to 'root'@'%' with grant option; FLUSH PRIVILEGES;"
mysql -uroot -proot -e "RESET SLAVE;"
mysql -uroot -proot -e "CHANGE MASTER TO MASTER_HOST='mysqlnode1', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION=1; START SLAVE;"

SHELL
  end

end

2018年9月29日土曜日

DockerでRundeck3.0.6とMySQL5.7のコンテナを構築する

Rundeckはオープンソースのジョブスケジューラです。ジョブ実行の自動化を行うことができます。

〇Rundeckの画面


〇構築方法
1. 以下のコマンドを実行して、Dockerfileとstart.shからrundeckのイメージの作成します。
docker build -t rundeck .

Dockerfile
FROM alpine:3.8
RUN  apk update \
  && apk add --no-cache openjdk8 \
  && rm -rf /var/cache/apk/* \
  && mkdir -p /opt/rundeck \
  && wget https://dl.bintray.com/rundeck/rundeck-maven/rundeck-3.0.6-20180917.war -O /opt/rundeck/rundeck-3.0.6.war
COPY ./start.sh /
RUN chmod +x ./start.sh
EXPOSE 4440
VOLUME /opt/rundeck
CMD /start.sh

start.sh
#!/bin/sh
cd /opt/rundeck
if [ ! -f /opt/rundeck/etc/profile ]; then
  /usr/bin/java -Xmx1024m -jar rundeck-3.0.6.war --installonly
  sed -i -e 's#grails.serverURL=.*4440#grails.serverURL='$SERVER_URL'#' /opt/rundeck/server/config/rundeck-config.properties
  sed -i -e 's#dataSource.url = jdbc:h2:file:/opt/rundeck/server/data/grailsdb;MVCC=true#dataSource.url = jdbc:mysql://rundeckdb/rundeck?autoReconnect=true#' /opt/rundeck/server/config/rundeck-config.properties
  echo 'dataSource.username = root' >> /opt/rundeck/server/config/rundeck-config.properties
  echo 'dataSource.password = rundeck' >> /opt/rundeck/server/config/rundeck-config.properties
  echo 'dataSource.driverClassName=com.mysql.jdbc.Driver' >> /opt/rundeck/server/config/rundeck-config.properties
fi
/usr/bin/java -Xmx2048m -jar rundeck-3.0.6.war -b /opt/rundeck

2.docker-compose.ymlのSERVER_URL環境変数を自分の環境に合わせたのち、以下のコマンドを実行してRundeckとMySQLのコンテナを構築・実行します。
docker-compose up -d

docker-compose.yml
version: "2"
services:
  rundeck:
    image: rundeck
    container_name: "rundeck"
    volumes:
      - "rundeck-data:/opt/rundeck"
    environment:
      SERVER_URL: http://192.168.1.250:4440
    ports:
      - "4440:4440"
    depends_on:
      - rundeckdb
  rundeckdb:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "rundeck-db"
    volumes:
      - "rundeckdb-data:/var/lib/mysql"
    environment:
        MYSQL_DATABASE: rundeck
        MYSQL_ROOT_PASSWORD: rundeck
volumes:
  rundeckdb-data:
    driver: local
  rundeck-data:
    driver: local

3.ブラウザからhttp://<Dockerホスト名またはIP>:4440にアクセスします。デフォルトユーザ/パスワードはadmin/adminです。

2018年9月24日月曜日

DockerでApache NiFi 1.7.1、MySQL5.7がインストールされたコンテナを構築する

Apache Nifiは様々なデータを処理・分配するためのソフトウェアです。

○Apache NiFiの画面


○構築方法
以下の手順で、Apache NiF i.7.1とMySQL 5.7のコンテナを構築・実行します。

1. Apache NiFi公式にMySQL JDBCドライバを追加したイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t nifi171mysql .

Dockerfile
FROM apache/nifi:1.7.1
USER root
RUN wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.12.tar.gz -P /tmp \
  && tar xvfz /tmp/mysql-connector-java-8.0.12.tar.gz -C /tmp \
  && cp /tmp/mysql-connector-java-8.0.12/mysql-connector-java-8.0.12.jar /usr/share/java \
  && rm -Rf /tmp/mysql-connector*
USER nifi
VOLUME /opt/nifi

2. Apache NiFiとMySQLコンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
COMPOSE_HTTP_TIMEOUT=180 docker-compose up -d

docker-compose.yml
version: "2"
services:
  db:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "nifi-db"
    volumes:
      - "nifidb-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: nifi
      MYSQL_ROOT_PASSWORD: nifi
  nifi171mysql:
    image: nifi171mysql
    container_name: "nifi171mysql"
    volumes:
      - "nifi-data:/opt/nifi"
    ports:
      - "8080:8080"
    depends_on:
      - db
volumes:
  nifidb-data:
    driver: local
  nifi-data:
    driver: local

3.ブラウザから以下のURLにアクセス
http://<Dockerホスト名またはIP>:8080/nifi/

※DBへの接続
DBCPConnectionPoolで、以下のようにパラメータを設定してローカルのPostgreSQLにアクセスします。
Database Connection -> URL jdbc:mysql://db:5432/nifi
Database Driver Class Name -> com.mysql.jdbc.Driver
Database Driver Location(s) -> /usr/share/java/mysql-connector-java-8.0.12.jar
Database User -> root
Password -> nifi


○関連情報
・Apache NiFiに関する他の記事はこちらを参照してください。

2018年8月19日日曜日

VagrantでMySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(CentOS7.5)を構築する

MySQL Server Exporterで、Prometheusの為にMySQLの監視を行うことができます。

〇MySQL Server ExporterのデータをPrometheusで表示した画面


〇構築方法
以下のVagrantfileを使用して、MySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(CentOS7.5)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75mysqlexporter"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75mysqlexporter"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.106", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.106", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install mysql
sudo yum -y remove mariadb-libs
yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum -y install yum-utils
yum -y install mysql mysql-server
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
# change password and create users and databases.
chkconfig mysqld on
service mysqld start
export MYSQL_ROOTPWD='Root123#'
export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot --connect-expired-password -e "SET PASSWORD = PASSWORD('Root123#'); FLUSH PRIVILEGES;"
mysql -uroot -pRoot123# -e "UNINSTALL PLUGIN validate_password;"
mysql -uroot -pRoot123# -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"
mysql -uroot -proot -e "CREATE USER prometheus@localhost IDENTIFIED BY 'prometheus';"
mysql -uroot -proot -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install prometheus mysql exporter
groupadd prometheus
useradd -g prometheus -s /bin/bash -d /home/prometheus -m prometheus

mkdir -p /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

ln -s /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /bin/mysqld_exporter

cat << EOF > /etc/systemd/system/mysqld-exporter.service
[Unit]
Description=Prometheus MySQL Server Exporter
Requires=network.target
[Service]
Restart=always
WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
Environment=DATA_SOURCE_NAME=prometheus:prometheus@(localhost:3306)/
ExecStart=/bin/mysqld_exporter
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable mysqld-exporter.service
systemctl start mysqld-exporter.service
echo 'port 9104'
SHELL
end

2018年8月16日木曜日

AnsibleでMySQL Server Exporter(Prometheus)をインストールする(Debian stretch用)

MySQL Server Exporter(Prometheus)でMySQLの情報の収集を行います。

〇インストール方法
1.下準備
~/.ansible.cfgに以下の内容を設定します
[ssh_connection]
pipelining=True
[defaults]
host_key_checking = False

2. インストール対象ホストのユーザやパスワードを環境に合わせてinventoryファイルに記入します

inventory例
[mysql-exporter]
192.168.1.106

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant
ansible_sudo_pass=vagrant

3.inventory mysql-exporter-deb.ymlを準備し、以下のコマンドを実行します。
ansible-playbook -i inventory mysql-exporter.yml

mysql-exporter.yml
- hosts: mysql-exporter
  vars:
    - password: prometheus
    - dbuser: prometheus
    - dbpassword: prometheus
    - dbhost: localhost
    - dbport: 3306
  tasks:
    - name: create prometheus group
      group:
        name: prometheus
      become: true
    - name: create prometheus user
      user:
        name: prometheus
        group: prometheus
        password: "{{ password | password_hash('sha512') }}"
      become: true
    - name: create prometheus directory
      file:
        path: /opt/prometheus
        state: directory
        owner: prometheus
      become: true
    - name: download mysql server exporter
      get_url:
        url: https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
        dest: /opt/prometheus/
      become: true
      become_user: prometheus
    - name: extract prometheus node exporter
      unarchive:
        remote_src: yes
        src: /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64.tar.gz
        dest: /opt/prometheus/
      become: true
      become_user: prometheus
    - name: symlink
      file:
        path: /bin/mysqld_exporter
        state: link
        src: /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter
      become: true
    - name: clean up
      file:
        state: absent
        path: /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64.tar.gz
      become: yes
      become_user: prometheus
    - name: setup systemd
      blockinfile:
        dest: /etc/systemd/system/mysqld-exporter.service
        create: yes
        block: |
          [Unit]
          Description=Prometheus MySQL Server Exporter
          Requires=network.target
          [Service]
          Restart=always
          WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
          Environment=DATA_SOURCE_NAME={{ dbuser }}:{{ dbpassword }}@({{ dbhost }}:{{ dbport }})/
          ExecStart=/bin/mysqld_exporter
          ExecReload=/bin/kill -HUP $MAINPID
          [Install]
          WantedBy=multi-user.target
      become: true
    - name: Install required software
      apt: name={{ item }} state=present
      with_items:
        - default-libmysqlclient-dev
        - python-pip
      become: true
    - name: install MySQL-python using pip
      pip:
        name: "{{ item }}"
        state: forcereinstall
      with_items:
        - pip
        - MySQL-python
      become: true
    - name: create and grant a database user
      mysql_user:
        name={{ dbuser }}
        password={{ dbpassword }}
        priv="*.*:PROCESS,REPLICATION CLIENT,SELECT"
        state=present
      become: true
    - name: enable and start mysqld-exporter
      systemd:
        daemon_reload: yes
        enabled: yes
        state: started
        name: mysqld-exporter.service
      become: true

VagrantでRundeckとMySQLをインストールした仮想マシン(CentOS7.5)を構築する

Rundeckはオープンソースのジョブスケジューラです。

〇Rundeckの画面

ブラウザからhttp://192.168.1.107:4440にアクセスする。デフォルトのユーザ名/パスワードはadmin/adminです。

〇構築方法
以下のVagrantfileを使用して、RundeckとMySQLをインストールした仮想マシン(CentOS7.5)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/centos-7.5"
  config.vm.hostname = "co75rundeckmysql"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "co75rundeckmysql"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.107", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
localectl set-locale LANG=ja_JP.UTF-8

cd /root
mkdir ./.ssh
ssh-keygen -f ./.ssh/id_rsa -t rsa -N ''

# install mysql
sudo yum -y remove mariadb-libs
yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum -y install yum-utils
yum -y install mysql mysql-devel mysql-server mysql-utilities
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
# change password and create users and databases.
chkconfig mysqld on
service mysqld start
export MYSQL_ROOTPWD='Root123#'
export MYSQL_PWD=`cat /var/log/mysqld.log | awk '/temporary password/ {print $NF}'`
mysql -uroot --connect-expired-password -e "UNINSTALL PLUGIN validate_password;"
mysql -uroot --connect-expired-password -e "SET PASSWORD = PASSWORD('root'); FLUSH PRIVILEGES;"
mysql -uroot -proot -e "CREATE DATABASE rundeck DEFAULT CHARACTER SET utf8;"

mysql -uroot -proot -e "CREATE USER rundeck@localhost IDENTIFIED BY 'rundeck';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON rundeck.* TO 'rundeck'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install java
yum -y install java-1.8.0-openjdk

# download and install rundeck
mkdir -p /opt/rundeck
cd /opt/rundeck
wget http://dl.bintray.com/rundeck/rundeck-maven/rundeck-launcher-2.11.4.jar
/usr/bin/java -Xmx1024m -jar rundeck-launcher-2.11.4.jar --installonly


# setup config files
sed -i -e 's#grails.serverURL=http://co75rundeckmysql:4440#grails.serverURL=http://192.168.1.107:4440#' /opt/rundeck/server/config/rundeck-config.properties
sed -i -e 's#dataSource.url = jdbc:h2:file:/opt/rundeck/server/data/grailsdb;MVCC=true#dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true#' /opt/rundeck/server/config/rundeck-config.properties
echo 'dataSource.username = rundeck' >> /opt/rundeck/server/config/rundeck-config.properties
echo 'dataSource.password = rundeck' >> /opt/rundeck/server/config/rundeck-config.properties


cat << EOF > /etc/systemd/system/rundeck.service
[Unit]
Description=rundeck
[Service]
Type=simple
ExecStart=/usr/bin/java -Xmx2048m -jar rundeck-launcher-2.11.4.jar -b /opt/rundeck
WorkingDirectory=/opt/rundeck
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable rundeck.service
systemctl start rundeck.service

echo 'id_rsa.pub'
echo '------------------'
cat /root/.ssh/id_rsa.pub
echo '------------------'
echo ''
echo 'access -> http://192.168.1.107:4440'
echo 'user: admin    password:admin'
SHELL
end


2018年8月15日水曜日

VagrantでApache AirflowとMySQLをインストールした仮想マシン(Ubuntu18.04)を構築する

Apache AirflowはPython言語のタスクスケジューラです。

〇Apache Airflowの画面


〇構築方法
1.以下のVagrantfileを使用して、 Apache Airflowをインストールした仮想マシン(Ubuntu18.04)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.hostname = "ub1804airflow"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1804airflow"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.115", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.115", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
export DEBIAN_FRONTEND=noninteractive
echo mysql-apt-config mysql-apt-config/enable-repo select mysql-5.7-dmr | sudo debconf-set-selections
dpkg -i mysql-apt-config_0.8.9-1_all.deb
apt-get update
apt-get -y install mysql-server
mysql -uroot -e "CREATE DATABASE airflow DEFAULT CHARACTER SET utf8;"
mysql -uroot -e "CREATE USER airflow@localhost IDENTIFIED BY 'airflow';"
mysql -uroot -e "GRANT ALL PRIVILEGES ON airflow.* TO 'airflow'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"
apt-get -y install libmysqlclient-dev python3-dev build-essential
apt-get -y install redis-server

# install pipenv
apt-get -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv


# install airflow.
groupadd airflow
useradd -g airflow -s /bin/bash -d /home/airflow -m airflow

mkdir -p /opt/airflow/dags
chown -R airflow:airflow /opt/airflow
sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
echo $HOME
pipenv --python 3.6
pipenv install
pipenv run python -V
pipenv install redis
pipenv install apache-airflow[devel,mysql,celery,cryptography]==1.9.0

wget https://raw.githubusercontent.com/apache/incubator-airflow/master/airflow/config_templates/default_airflow.cfg
cp default_airflow.cfg airflow.cfg

sed -i -e 's#sql_alchemy_conn = sqlite:///\{AIRFLOW_HOME\}/airflow.db#sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow#'  airflow.cfg
sed -i -e 's/executor = SequentialExecutor/executor = CeleryExecutor/' airflow.cfg
sed -i -e 's#\{AIRFLOW_HOME\}#/opt/airflow#' airflow.cfg
sed -i -e 's#broker_url = sqla\+mysql://airflow:airflow@localhost:3306/airflow#broker_url = redis://localhost:6379#' airflow.cfg
sed -i -e 's#load_examples = True#load_examples = False#' airflow.cfg
sed -i -e 's#default_timezone = utc#default_timezone = Asia/Tokyo#' airflow.cfg

cat << EOF > gen.py
from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key.decode('utf-8'), end='"')
EOF
pipenv run python gen.py > /tmp/fernet_key
echo -n 'export FERNET_KEY="' > /tmp/setfernetkey
cat /tmp/fernet_key >> /tmp/setfernetkey
AF_EOF

source /tmp/setfernetkey
sed -i -e "s/{FERNET_KEY}/$FERNET_KEY/" /opt/airflow/airflow.cfg

sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
pipenv run airflow initdb

# prepare a sample dag
cat << EOF > /opt/airflow/dags/dag_example1.py
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

operator_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 7, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    dag_id='dag_example1',
    default_args=operator_args,
    catchup=False,
    schedule_interval='0,5,10,15,20,25,30,35,40,45,50,55 * * * *'
)

task1 = BashOperator(
    task_id='task1',
    bash_command='echo "task1:"`date` >> /tmp/test.log',
    dag=dag
)

task2 = BashOperator(
    task_id='task2',
    bash_command='sleep 5 && echo "task2:"`date` >> /tmp/test.log',
    dag=dag
)

task1 >> task2
EOF
AF_EOF

mkdir -p /run/airflow
chown airflow:airflow /run/airflow

# setup worker service
cat << EOF > /etc/systemd/system/airflow-worker.service
[Unit]
Description=Airflow worker daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow worker --pid /run/airflow/worker.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-worker.service
systemctl start airflow-worker.service

# setup scheduler service
cat << EOF > /etc/systemd/system/airflow-scheduler.service
[Unit]
Description=Airflow scheduler daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow scheduler --pid /run/airflow/scheduler.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-scheduler.service
systemctl start airflow-scheduler.service

cat << EOF > /etc/systemd/system/airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow webserver --pid /run/airflow/webserver.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-webserver.service
systemctl start airflow-webserver.service

echo 'url  -> http://192.168.55.115:8080/'
SHELL
end

2. ブラウザでhttp://192.168.55.115:8080/にアクセスして、サンプルDAGのdag_example1をPause状態のOffからOnに変更します。5分程度待つとジョブが実行されます。

○関連情報
・Apache Airflowに関する他の記事はこちらを参照してください。

2018年8月14日火曜日

VagrantでMySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する

MySQL Server Exporterで、Prometheusの為にMySQLの監視を行うことができます。

〇MySQL Server ExporterのデータをPrometheusで表示した画面


〇構築方法
以下のVagrantfileを使用して、MySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(Ubuntu16.04)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604mysqlexporter"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604mysqlexporter"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.106", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.106", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
timedatectl set-timezone Asia/Tokyo

# install mysql
apt-get -y install libaio1 libmecab2
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-common_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-common_5.7.22-1ubuntu16.04_amd64.deb
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-community-client_5.7.22-1ubuntu16.04_amd64.deb
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-client_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-client_5.7.22-1ubuntu16.04_amd64.deb
export DEBIAN_FRONTEND=noninteractive
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server_5.7.22-1ubuntu16.04_amd64.deb
echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections
dpkg -i mysql-community-server_5.7.22-1ubuntu16.04_amd64.deb
apt-get -y install -f
mysql -uroot -e "CREATE USER prometheus@localhost IDENTIFIED BY 'prometheus';"
mysql -uroot -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"

# install prometheus mysql exporter
groupadd prometheus
useradd -g prometheus -s /bin/bash -d /home/prometheus -m prometheus

mkdir -p /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

ln -s /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /bin/mysqld_exporter

cat << EOF > /etc/systemd/system/mysqld-exporter.service
[Unit]
Description=Prometheus MySQL Server Exporter
Requires=network.target
[Service]
Restart=always
WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
Environment=DATA_SOURCE_NAME=prometheus:prometheus@(localhost:3306)/
ExecStart=/bin/mysqld_exporter
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable mysqld-exporter.service
systemctl start mysqld-exporter.service
echo 'port 9104'
SHELL
end

VagrantでZabbixとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する

Zabbixはサーバー監視ソフトウェアです。

〇Zabbixの画面

ユーザ名、パスワードはAdmin/zabbixです。

〇構築方法
1. 以下のVagrantfileを使用して、ZabbixとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604zabbixmysql"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604zabbixmysql"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.108", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.108", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install mysql
apt-get -y install libaio1 libmecab2
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-common_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-common_5.7.22-1ubuntu16.04_amd64.deb
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-community-client_5.7.22-1ubuntu16.04_amd64.deb
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-client_5.7.22-1ubuntu16.04_amd64.deb
dpkg -i mysql-client_5.7.22-1ubuntu16.04_amd64.deb
export DEBIAN_FRONTEND=noninteractive
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server_5.7.22-1ubuntu16.04_amd64.deb
echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections
dpkg -i mysql-community-server_5.7.22-1ubuntu16.04_amd64.deb
apt-get -y install -f
mysql -uroot -proot -e "CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8;"
mysql -uroot -proot -e "CREATE USER zabbix@localhost IDENTIFIED WITH mysql_native_password BY 'zabbix';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"

# install zabbix
wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
dpkg -i zabbix-release_3.4-1+xenial_all.deb
apt-get update
apt-get -y install zabbix-server-mysql zabbix-frontend-php zabbix-agent 
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -pzabbix zabbix
sed -i -e 's/# DBPassword=/DBPassword=zabbix/' /etc/zabbix/zabbix_server.conf
sed -i -e 's|# php_value date.timezone Europe/Riga|php_value date.timezone Asia/Tokyo|' /etc/apache2/conf-enabled/zabbix.conf

systemctl enable zabbix-server.service
systemctl start zabbix-server.service
systemctl enable zabbix-agent.service
systemctl start zabbix-agent.service
systemctl restart apache2

echo 'access to http://192.168.1.108/zabbix/'
echo 'user: Admin   password: zabbix'
SHELL
end

2.ブラウザからhttp://192.168.1.108/zabbix/にアクセスします。「Next Step」をクリックします。


3.「Next Step」をクリックします。


4.Passwordフィールドにzabbixを入力して、「Next Step」をクリックします。


5.「Next Step」をクリックします。


6.「Next Step」をクリックします。


7.「Finish」をクリックします。


2018年8月10日金曜日

VagrantでMySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(Debian Stretch/9.5)を構築する

MySQL Server Exporterで、Prometheusの為にMySQLの監視を行うことができます。

〇MySQL Server ExporterのデータをPrometheusで表示した画面


〇構築方法
以下のVagrantfileを使用して、MySQL Server Exporter(Prometheus)とMySQLをインストールした仮想マシン(Debian Stretch/9.5)を構築します

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/debian-9.5"
  config.vm.hostname = "db95mysqldexporter"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "db95mysqldexporter"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.106", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.106", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
# update packages
apt-get update
#DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
locale-gen ja_JP.UTF-8
localectl set-locale LANG=ja_JP.UTF-8
timedatectl set-timezone Asia/Tokyo

# install mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
export DEBIAN_FRONTEND=noninteractive
echo mysql-apt-config mysql-apt-config/enable-repo select mysql-5.7-dmr | sudo debconf-set-selections
dpkg -i mysql-apt-config_0.8.9-1_all.deb
apt-get update
apt-get -y install mysql-server
mysql -uroot -e "CREATE USER prometheus@localhost IDENTIFIED BY 'prometheus';"
mysql -uroot -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"

# install prometheus mysql exporter
groupadd prometheus
useradd -g prometheus -s /bin/bash -d /home/prometheus -m prometheus

mkdir -p /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.11.0.linux-amd64.tar.gz

ln -s /opt/prometheus/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /bin/mysqld_exporter

cat << EOF > /etc/systemd/system/mysqld-exporter.service
[Unit]
Description=Prometheus MySQL Server Exporter
Requires=network.target
[Service]
Restart=always
WorkingDirectory=/opt/prometheus/mysqld_exporter-0.11.0.linux-amd64
Environment=DATA_SOURCE_NAME=prometheus:prometheus@(localhost:3306)/
ExecStart=/bin/mysqld_exporter
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable mysqld-exporter.service
systemctl start mysqld-exporter.service
echo 'port 9104'
SHELL
end

2018年8月7日火曜日

DockerでDrupal8.5.5とMySQL5.7のコンテナ(Alpine3.8)を構築する

DrupalはPHP製のCMSです。

〇Drupalの画面


〇構築手順
1. Drupalイメージの作成(Dockerfileがあるフォルダで実行)
docker build -t mydrupal .

Dockerfile
FROM alpine:3.8
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php7-apache2 php7-mysqli php7-mbstring php7-session php7-curl php7-xml php7-dom php7-json php7-ctype php7-tokenizer php7-gd php7-pdo php7-pdo_mysql php7-simplexml php7-opcache openssl openrc \
  && rm -rf /var/cache/apk/* \
  && wget https://ftp.drupal.org/files/projects/drupal-8.5.5.tar.gz \
  && tar xvfz drupal-8.5.5.tar.gz \
  && rm -f drupal-8.5.5.tar.gz \
  && mkdir /opt \
  && mv drupal-8.5.5 /opt/drupal \
  && chown -R apache:apache /opt/drupal \
  && mkdir -p /run/apache2 \
  && echo $'<Directory "/opt/drupal">\n\
  Options Indexes FollowSymLinks \n\
  AllowOverride All \n\
  Require all granted \n\
  RewriteEngine on \n\
  RewriteBase / \n\
  RewriteCond %{REQUEST_FILENAME} !-f \n\
  RewriteCond %{REQUEST_FILENAME} !-d \n\
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] \n\
</Directory>' >> /etc/apache2/httpd.conf \
  && sed -i -e 's|#LoadModule rewrite_module modules/mod_rewrite.so|LoadModule rewrite_module modules/mod_rewrite.so|' /etc/apache2/httpd.conf \
  && sed -i -e 's|DocumentRoot "/var/www/localhost/htdocs"|DocumentRoot "/opt/drupal"|' /etc/apache2/httpd.conf
EXPOSE 80
VOLUME /opt/drupal
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

2. DrupalとMySQL5.7コンテナの構築・実行(docker-compose.ymlがあるフォルダで実行)
docker-compose up -d

docker-compose.yml
version: "2"
services:
  drupal:
    image: mydrupal
    container_name: "drupal"
    volumes:
      - "drupal-data:/opt/drupal"
    ports:
      - "80:80"
    depends_on:
      - drupaldb
  drupaldb:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    container_name: "drupal-db"
    volumes:
      - "drupaldb-data:/var/lib/mysql"
    ports:
      - "3306:3306"
    environment:
        MYSQL_DATABASE: drupal
        MYSQL_ROOT_PASSWORD: drupal
volumes:
  drupal-data:
    driver: local
  drupaldb-data:
    driver: local

2.ブラウザからhttp://<Dockerホスト>にアクセスします。「Save and continue」ボタンをクリックします。


3.「標準」を選択して「保存して次へ」をクリックします


4.以下を入力して「保存して次へ」ボタンをクリックします
データベース名: drupal
ユーザ名: root
パスワード: drupal
ホスト: drupaldb


5.サイト名・管理者の情報を入力します


6.インストール完了画面



○関連情報
・Drupalに関する他の記事はこちらを参照してください。

2018年8月6日月曜日

VagrantでApache AirflowとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する

Apache AirflowはPython言語のタスクスケジューラです。

〇Apache Airflowの画面


〇構築方法
1.以下のVagrantfileを使用して、 Apache Airflowをインストールした仮想マシン(Ubuntu16.04)を構築します。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604airflow"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604airflow"
     vbox.cpus = 4
     vbox.memory = 4096
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.115", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.115", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
timedatectl set-timezone Asia/Tokyo
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade

# install mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
export DEBIAN_FRONTEND=noninteractive
echo mysql-apt-config mysql-apt-config/enable-repo select mysql-5.7-dmr | sudo debconf-set-selections
dpkg -i mysql-apt-config_0.8.9-1_all.deb
apt-get update
apt-get -y install mysql-server
mysql -uroot -e "CREATE DATABASE airflow DEFAULT CHARACTER SET utf8;"
mysql -uroot -e "CREATE USER airflow@localhost IDENTIFIED BY 'airflow';"
mysql -uroot -e "GRANT ALL PRIVILEGES ON airflow.* TO 'airflow'@'localhost';"
mysql -uroot -e "FLUSH PRIVILEGES;"
apt-get -y install libmysqlclient-dev python3-dev build-essential
apt-get -y install redis-server

# install pipenv
apt-get -y install python-pip
#pip install --upgrade pip
pip install pip==9.0.1
pip install --upgrade setuptools
pip install pipenv


# install airflow.
groupadd airflow
useradd -g airflow -s /bin/bash -d /home/airflow -m airflow

mkdir -p /opt/airflow/dags
chown -R airflow:airflow /opt/airflow
sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
echo $HOME
pipenv --python 3.5
pipenv install
pipenv run python -V
pipenv install redis
pipenv install apache-airflow[devel,mysql,celery,cryptography]==1.9.0

wget https://raw.githubusercontent.com/apache/incubator-airflow/master/airflow/config_templates/default_airflow.cfg
cp default_airflow.cfg airflow.cfg

sed -i -e 's#sql_alchemy_conn = sqlite:///\{AIRFLOW_HOME\}/airflow.db#sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow#'  airflow.cfg
sed -i -e 's/executor = SequentialExecutor/executor = CeleryExecutor/' airflow.cfg
sed -i -e 's#\{AIRFLOW_HOME\}#/opt/airflow#' airflow.cfg
sed -i -e 's#broker_url = sqla\+mysql://airflow:airflow@localhost:3306/airflow#broker_url = redis://localhost:6379#' airflow.cfg
sed -i -e 's#load_examples = True#load_examples = False#' airflow.cfg
sed -i -e 's#default_timezone = utc#default_timezone = Asia/Tokyo#' airflow.cfg

cat << EOF > gen.py
from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key.decode('utf-8'), end='"')
EOF
pipenv run python gen.py > /tmp/fernet_key
echo -n 'export FERNET_KEY="' > /tmp/setfernetkey
cat /tmp/fernet_key >> /tmp/setfernetkey
AF_EOF

source /tmp/setfernetkey
sed -i -e "s/{FERNET_KEY}/$FERNET_KEY/" /opt/airflow/airflow.cfg

sudo -u airflow /bin/bash << AF_EOF
export AIRFLOW_HOME=/opt/airflow
export HOME=/home/airflow
cd /opt/airflow
pipenv run airflow initdb

# prepare a sample dag
cat << EOF > /opt/airflow/dags/dag_example1.py
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

operator_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 7, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    dag_id='dag_example1',
    default_args=operator_args,
    catchup=False,
    schedule_interval='0,5,10,15,20,25,30,35,40,45,50,55 * * * *'
)

task1 = BashOperator(
    task_id='task1',
    bash_command='echo "task1:"`date` >> /tmp/test.log',
    dag=dag
)

task2 = BashOperator(
    task_id='task2',
    bash_command='sleep 5 && echo "task2:"`date` >> /tmp/test.log',
    dag=dag
)

task1 >> task2
EOF
AF_EOF

mkdir -p /run/airflow
chown airflow:airflow /run/airflow

# setup worker service
cat << EOF > /etc/systemd/system/airflow-worker.service
[Unit]
Description=Airflow worker daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow worker --pid /run/airflow/worker.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-worker.service
systemctl start airflow-worker.service

# setup scheduler service
cat << EOF > /etc/systemd/system/airflow-scheduler.service
[Unit]
Description=Airflow scheduler daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow scheduler --pid /run/airflow/scheduler.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-scheduler.service
systemctl start airflow-scheduler.service

cat << EOF > /etc/systemd/system/airflow-webserver.service
[Unit]
Description=Airflow webserver daemon
Requires=network.target

[Service]
User=airflow
Group=airflow
Type=simple
WorkingDirectory=/opt/airflow
Environment=AIRFLOW_HOME=/opt/airflow
ExecStart=/usr/local/bin/pipenv run airflow webserver --pid /run/airflow/webserver.pid
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target
EOF
systemctl enable airflow-webserver.service
systemctl start airflow-webserver.service

echo 'url  -> http://192.168.55.115:8080/'
SHELL
end

2. ブラウザでhttp://192.168.55.115:8080/にアクセスして、サンプルDAGのdag_example1をPause状態のOffからOnに変更します。5分程度待つとジョブが実行されます。

○関連情報
・Apache Airflowに関する他の記事はこちらを参照してください。

VagrantでRundeckとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する

Rundeckはオープンソースのジョブスケジューラです。

〇Rundeckの画面

ブラウザからhttp://192.168.1.107:4440にアクセスする。デフォルトのユーザ名/パスワードはadmin/adminです。

〇構築方法
以下のVagrantfileを使用して、RundeckとMySQLをインストールした仮想マシン(Ubuntu16.04)を構築する事ができます。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.hostname = "ub1604rundeckmysql"
  config.vm.provider :virtualbox do |vbox|
     vbox.name = "ub1604rundeckmysql"
     vbox.cpus = 2
     vbox.memory = 2048
     vbox.customize ["modifyvm", :id, "--nicpromisc2","allow-all"]
  end
config.vm.network "private_network", ip: "192.168.55.107", :netmask => "255.255.255.0"
config.vm.network "public_network", ip:"192.168.1.107", :netmask => "255.255.255.0"
  config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp106
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade


cd /root
mkdir ./.ssh
ssh-keygen -f ./.ssh/id_rsa -t rsa -N ''

# install mysql
echo "mysql-server-5.7 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.7 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mysql-server-5.7
mysql -uroot -proot -e "CREATE DATABASE rundeck DEFAULT CHARACTER SET utf8;"
mysql -uroot -proot -e "CREATE USER rundeck@localhost IDENTIFIED BY 'rundeck';"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON rundeck.* TO 'rundeck'@'localhost';"
mysql -uroot -proot -e "FLUSH PRIVILEGES;"


# install java
apt-get -y install openjdk-8-jdk

# download and install rundeck
mkdir -p /opt/rundeck
cd /opt/rundeck
wget http://dl.bintray.com/rundeck/rundeck-maven/rundeck-launcher-2.11.4.jar
/usr/bin/java -Xmx1024m -jar rundeck-launcher-2.11.4.jar --installonly


# setup config files
sed -i -e 's#grails.serverURL=http://ub1604rundeckmysql:4440#grails.serverURL=http://192.168.1.107:4440#' /opt/rundeck/server/config/rundeck-config.properties
sed -i -e 's#dataSource.url = jdbc:h2:file:/opt/rundeck/server/data/grailsdb;MVCC=true#dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true#' /opt/rundeck/server/config/rundeck-config.properties
echo 'dataSource.username = rundeck' >> /opt/rundeck/server/config/rundeck-config.properties
echo 'dataSource.password = rundeck' >> /opt/rundeck/server/config/rundeck-config.properties


cat << EOF > /etc/systemd/system/rundeck.service
[Unit]
Description=rundeck
[Service]
Type=simple
ExecStart=/usr/bin/java -Xmx2048m -jar rundeck-launcher-2.11.4.jar -b /opt/rundeck
WorkingDirectory=/opt/rundeck
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable rundeck.service
systemctl start rundeck.service

echo 'id_rsa.pub'
echo '------------------'
cat /root/.ssh/id_rsa.pub
echo '------------------'
echo ''
echo 'access -> http://192.168.1.107:4440'
echo 'user: admin    password:admin'

SHELL
end

Лучший частный хостинг