[ft_services] 6. wordpressイメージファイルを作成し、クーバーネスを介して配布します.


やるべきこと
  • ワードプレスでは、コンテナにnginxサーバが使用され、wordpressを回転させる必要があります.
  • WordPressの動的要求を処理するためにmaria DBにバインドされます.
  • phpmyadminも似ています.
  • mariaDBデータの管理が容易なphpmyadminをインストールし、mariaDBに接続します.
  • wordpress設定条件
  • word press Webサイト受信5050ポート
  • ワードプレスとMySQLデータベースを組み合わせて
  • を使用
    両方のサービスは、別々のコンテナで実行する必要があります.
  • word pressサイトには複数のユーザーと管理者がいます.
  • WordPressには独自のnginxサーバが必要です.
  • 負荷バランサは、このサービスに直接リダイレクトできる必要があります.
    「課題解析」を参照
  • srcs/wordpress/dockerfile
    Alpine linux公式サイトwiki-wordpressインストール方法
    FROM alpine:3.12
    RUN apk update && apk upgrade && \
    	apk add --no-cache nginx php7 php7-fpm php7-opcache php7-gd php7-mysqli \
    	php7-zlib php7-curl php7-mbstring php7-json php7-session
    COPY ft_wordpress.sh default.conf wp-config.php ./
    
    RUN adduser -D -g 'www' www && mkdir -p /www \
    	&& chown -R www:www /var/lib/nginx && chown -R www:www /www
    
    RUN	mkdir -p /run/nginx
    
    ADD https://wordpress.org/latest.tar.gz .
    RUN tar -xvf latest.tar.gz && \
    	mv wordpress /www && \
    	mv wp-config.php /www/ && \
    	rm -f latest.tar.gz
    
    ADD https://dl.influxdata.com/telegraf/releases/telegraf-1.6.3-static_linux_amd64.tar.gz ./
    RUN tar -C . -xzf telegraf-1.6.3-static_linux_amd64.tar.gz && \
            chmod +x telegraf/* && \
            cp telegraf/telegraf /usr/bin/ && \
            rm -rf *.tar.gz* telegraf/
    
    COPY telegraf.conf /etc/telegraf/
    COPY ./healthy.sh /tmp/healthy.sh
    RUN mv ./default.conf /etc/nginx/conf.d/default.conf
    
    EXPOSE 5050
    
    ENTRYPOINT sh ft_wordpress.sh
  • WordPressの独立nginxをインストールするために、nginxがインストールされ、ポート番号は5050に指定されています.dockerfileの設定は、前回nginxの設定と同じです.
  • addでwordpressのホームページでファイルをダウンロードし、次のコードで解凍してwwwフォルダに入れます.(なぜwwwフォルダに入れたのか、理由は何なのか分かりません.wordpressではこのように設定されていますが、wwwフォルダを探して何をしているのでしょうか?あ、webなので嫌です.論理がなく、すべて約束です.約束)ドッキングファイルの作成時に参照するサイト
  • healthy.shはlivenessprobeインストール,telegrafはimuxDBインストールである.
  • wp-config.php:ここでmaria DBに接続します.
  • インストールに必要なツール
  • apk add --no-cache php7 php7-fpm php7-opcache php7-gd php7-mysqli \
    	php7-zlib php7-curl php7-mbstring php7-json php7-session
  • php 7-fpm:PHP FastCGIプロセスマネージャの略で、CGIよりも速いバージョンと言えます.
  • モジュール
  • phpをバイトコードにコンパイルし、共有メモリにデータを格納してパフォーマンスを向上
  • php 7-gd:gdは、png、jpg、gif等に用いるライブラリ
  • である.
  • php 7-mysqli:mysqliは、mysqlよりも速く、より安全なクエリー文を作成しました.
    多分そうです.私も事前に知ってからインストールしたのではなく、Alpine公式サイトでWordPressをインストールする際に必要なインストール資料を見てインストールしました.(Alpine公式wiki)[https://wiki.alpinelinux.org/wiki/WordPress]
  • cgiとは?CGIは、汎用ゲートウェイインターフェース(Common Gateway Interface)の略称であり、Webサーバと外部プログラムとの間で情報を交換する方法や約束を指す.
    我々が使用するnginx,apachなどのサーバの機能は,クライアントが要求を受信したときに要求に一致する情報を提供することである(静的動作に限られる).
    問題は、これらの静的操作が可能である場合、会員登録時にユーザが入力したデータやオンライン注文に必要なユーザ情報をdbに格納できないことである.これらの問題を解決するためには,外部プログラムと情報を交換する約束が必要であり,これをcgiと呼ぶ.
    参考資料—cgiとは?WebサーバとWebアプリケーションサーバの違いウィキペディアcgiとは何ですか?
    srcs/wordpress/default.conf
    server {
    	listen   5050;
    	listen   [::]:5050;
       root 		/www/wordpress;
       index		index.html index.htm index.php;
       location ~ \.php$ {
          fastcgi_pass      127.0.0.1:9000;
          fastcgi_index     index.php;
          include           fastcgi.conf;
       }
       location / {
          try_files         $uri $uri/ =404;
       }
    }
  • nginxとは異なりfastcgiが増加し、php−fpmおよびnginxはソケット通信で接続できる.nginxに渡されるphpファイルをhtmlフォーマットに高速に変換します.
  • phpとは何ですか.本来は動的Webページを作成するために設計されていたのですが、それを実現するためにPHPが作成したコードをHTMLソースドキュメントに入れ、PHP処理機能を持つWebサーバ上でそのコードを認識し、著者が望むWebページを生成します.
    fastcgiとは?CGIは、データ処理要求があるたびにプロセッサを実行する必要があります.FastCGIは毎回プロセスを作成するのではなく,あらかじめ作成したプロセスとデータを交換することでCGIよりも効率的に動作する.このソリューションはCGIテクノロジーを発展させ、20年以上標準化し、多くのWebサーバ(Nginx、IIS、Apache)がFastCGI機能を提供しています.
    srcs/wordpress/wp-config.php
    <?php
    /**
     * The base configuration for WordPress
     *
     * The wp-config.php creation script uses this file during the
     * installation. You don't have to use the web site, you can
     * copy this file to "wp-config.php" and fill in the values.
     *
     * This file contains the following configurations:
     *
     * * MySQL settings
     * * Secret keys
     * * Database table prefix
     * * ABSPATH
     *
     * @link https://wordpress.org/support/article/editing-wp-config-php/
     *
     * @package WordPress
     */
    
    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define( 'DB_NAME', 'wordpress' );
    
    /** MySQL database username */
    define( 'DB_USER', 'hoylee' );
    
    /** MySQL database password */
    define( 'DB_PASSWORD', 'hoylee' );
    
    /** MySQL hostname */
    define( 'DB_HOST', 'cip-mariadb' );
    define('WP_HOME', 'http://192.168.99.10:5050' );
    define('WP_SITEURL', 'http://192.168.99.10:5050' );
    /** Database Charset to use in creating database tables. */
    define( 'DB_CHARSET', 'utf8' );
    
    /** The Database Collate type. Don't change this if in doubt. */
    define( 'DB_COLLATE', '' );
  • dbとWordPressを接続します.
  • 「DB HOST」「cip-mariadb」という設定で、DB HOSTにはmariadbのサービス名が書かれています.そして接続に必要なIDとパスワードを設定しました.これにより,mariadbとwordpressの間でTCP/IP通信が確立された.同じクバーネディス州のパイドですが、tcp/ipで通信しました.他にいい方法はありますか?
  • wordpress.yalm
  • では、すべてのイメージファイルが作成され、作成されたイメージファイルはyamlファイルを介してコンテナを作成し、作成されたコンテナはサービスを介して管理および外部通信を行います.
  • wordpres.yalm_service
    apiVersion: v1
    kind: Service
    metadata:
      name: service-wordpress
      labels:
        app: wordpress
      annotations:
        metallb.universe.tf/allow-shared-ip: wp
    spec:
      externalTrafficPolicy: Cluster
      type: LoadBalancer
      loadBalancerIP: 192.168.99.10
      ports:
        - port: 5050
          name: http
          protocol: TCP
          targetPort: 5050
            # 셀렉터에 해당하는 라벨로트래픽을 보내준다.
            #  targetport는 특정포드로 접근하기 위핸 포트 넘버, (deployment 에서 설정한 pod의 포트 넘버)
      selector:
        app: wordpress
  • nginxと同様であるため説明を省略する.
  • wordpres.yalm_Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
      replicas: 1
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
        spec:
          containers:
            - name: wordpress
              image: wordpress
              imagePullPolicy: Never
              ports:
                - containerPort: 5050
              livenessProbe:
                exec:
                    command:
                    - sh
                    - /tmp/healthy.sh
                initialDelaySeconds: 8
                periodSeconds: 5
    この友人もnginxと一緒に使いましたphpmyadmin
    Alpine linux公式Wiki-phpmyadminインストール方法
    FROM alpine:3.12
    
    RUN	echo "http://dl-2.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
    
    RUN mkdir -p /run/nginx
    
    RUN	apk update && apk upgrade
    RUN		apk add nginx openrc openssl telegraf \
    		php7 php7-fpm php7-mysqli php7-xml php7-simplexml php7-json \
        	php7-iconv php7-tokenizer php7-xmlwriter php7-session php7-mbstring
    
    COPY nginx.conf /etc/nginx/conf.d/default.conf
    COPY telegraf.conf /etc/telegraf/
    COPY ./healthy.sh /tmp/healthy.sh
    
    RUN wget http://files.directadmin.com/services/all/phpMyAdmin/phpMyAdmin-5.0.2-all-languages.tar.gz
    RUN tar -zxvf phpMyAdmin-5.0.2-all-languages.tar.gz
    RUN rm phpMyAdmin-5.0.2-all-languages.tar.gz
    RUN mv phpMyAdmin-5.0.2-all-languages phpmyadmin
    
    COPY config.inc.php phpmyadmin/config.inc.php
    RUN chmod 644 phpmyadmin/config.inc.php
    
    COPY	./start_php.sh .
    EXPOSE	5000
    
    CMD		sh start_php.sh
  • nginxとphpmyadminの間には大きな違いはありません.
  • openrcはalpine osの軽量レベルのオペレーティングシステムであるため、プロセスを制御するためのデフォルトコマンドはありません.
  • openrcで追加し、プロセスの再起動または終了を開始しました.
  • start_php.sh
    #!/bin/sh
    
    openssl req -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=KR/ST=Seoul/L=Seoul/O=42Seoul/OU=AITEAM/CN=localhost" -keyout localhost.dev.key -out localhost.dev.crt
    mv localhost.dev.crt etc/ssl/certs/
    mv localhost.dev.key etc/ssl/private/
    chmod 600 etc/ssl/certs/localhost.dev.crt etc/ssl/private/localhost.dev.key
    telegraf & /usr/sbin/php-fpm7 --nodaemonize & nginx -g 'daemon off;'
  • はあまり違いはありません.説明を省略してください.
  • phpmyadmin/config.inc.php
    <?php
    /* vim: set expandtab sw=4 ts=4 sts=4: */
    
    /**
     * This is needed for cookie based authentication to encrypt password in
     * cookie. Needs to be 32 chars long.
     */
    $cfg['blowfish_secret'] = 'hello world'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
    
    /**
     * Servers configuration
     */
    $i = 0;
    
    /**
     * First server
     */
    $i++;
    /* Authentication type */
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    /* Server parameters */
    $cfg['Servers'][$i]['host'] = 'service-mariadb';
    $cfg['Servers'][$i]['port'] = '3306';
    $cfg['Servers'][$i]['user'] = 'admin';
    $cfg['Servers'][$i]['password'] = 'password';
    $cfg['Servers'][$i]['compress'] = false;
    $cfg['Servers'][$i]['AllowNoPassword'] = false;
    
    /**
     * Directories for saving/loading files from server
     */
    $cfg['UploadDir'] = '';
    $cfg['SaveDir'] = '';
  • mariaDBへの接続に使用します.
  • の他の部分も前に行ったnginxやwordpressと似ているので、他の説明は省略する.