magento2を搭載したNginx + Php-Fpm + MySQLの束を拡張し、Dockerでコンテナーをレイアウトします

こんにちは



ますます、さまざまな開発会社をDevOpsエンジニアとしてノックすると、ほぼ同じテストタスクが得られます。 それらは、開始する必要のあるPHPまたはプロジェクトのバージョンによって互いに異なります。



しかし、一般的には、Nginx \ Appache、SQL(多くのバリエーションがあり、すべて顧客の好みに依存します)、PHP、およびこれらはコンテナーに分解されることが望ましいです。

したがって、多くの労力をかけずにこのすべてを上げる方法を例で伝えることにしました。



おそらく、これは、簡単な例で、何が何であるかを誰かが理解するのに役立つでしょう。 Dockerについては説明しません。 ワゴンと小型カートに関する記事。



この記事では、小さな構造を準備します。





まず、Dockerをインストールします。



それはすべて、クロスプラットフォームの点で、作業したいシステムに依存します、dockerは驚くべきことです(同じ構成ファイルにより、任意の* nix、Win、iOSシステムでコンテナを構築して実行できます)。



Linux(例:CentOS)



インストール:



# yum install docker
      
      





サービスをオンにして開始します。



 # systemctl enable docker.service # systemctl start docker.service
      
      





1つのチームで構造を作成するには、docker-composeが必要です。



まず、必要なコンポーネントを配置します。



 # yum install epel-release # yum install -y python-pip
      
      





次に、docker-composeをインストールしてPythonを更新します。



 # yum install docker-compose
      
      





(または#pip install docker-compose)



 # yum upgrade python*
      
      





Winシステムの場合(これは多くの場合、倒錯と見なされます)



ただし、決定する場合は、Hyper-Vをサポートするバージョン(win10 Profなど)でこれを行うことを強くお勧めします。



[Windowsの機能の有効化または無効化]でHyper-Vコンポーネントを有効にします。



Dockerの公式サイトからインストーラーをダウンロードしてインストールします。 また、視覚的な表示のためにGUI(Kitematic)を追加することもできます。



環境の作成を始めましょう:



最初に、このプロジェクト用のフォルダーを作成し、そこに移動します。



 # mkdir /mage (     ) # cd /mage
      
      





次に、この方法でフォルダー構造を構築します。



 # mkdir MySQL Nginx PHP
      
      





nginxの使いやすい環境を作成します。



 # cd Nginx # mkdir core html Logs www
      
      





MySQL-データベースはこのフォルダーに保存されます。 バックアップと転送に便利です。

Nginx-ログ、設定ファイル、プロジェクトはここに保存されます。

PHP-ここで、設定とphp.iniを使用してDockerfileを追加します。

ルート(この例では/ mageフォルダー)のdocker-compose.ymlファイルになります。



Nginxの構成ファイルを作成します。



 # cd /mage/Nginx/core # touch nginx.conf # nano nginx.conf
      
      





他のエディターを使用できます。 そうでない場合は、次の方法でインストールできます。



 # yum install nano
      
      





そして、nginx.confに次を追加します。



 server { listen 80; index index.php index.html index.htm; server_name magento2.dev; set $MAGE_ROOT /var/www/magento2; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root $MAGE_ROOT; location ~* \.php$ { try_files $uri $uri/ /index.php last; fastcgi_split_path_info (.+?\.php)(/.*)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location ~* .php/ { rewrite (.*.php)/ $1 last; } }
      
      





これは、すべてを開始するための最小構成です。 最初のブロックでは、どのポートをリッスンするか、可能なインデックスページをリストし、それを呼び出し、magento2が存在する長いパスのエイリアスを作成し、必要なログを書き、それらを保存する場所を示し、magento2が存在するフォルダーを示します(この場合、エイリアス$ MAGE_ROOT) 。



2番目のブロックでは、fastcgiパラメーターを規定します。



表示の問題を解決するには、3番目のブロックが必要です。プロジェクトに空白ページが表示されました。 magento2の書き換えが必要であることをドキュメントから読みました。 (他のプロジェクトでは、このような問題は発生しませんでした)。



wwwフォルダーに、プロジェクトのディレクトリを作成します。



 # cd /mage/Nginx/www # mkdir magento2
      
      





オフサイトmagento2からダウンロード

アーカイブからフォルダ/ mage / Nginx / www / magento2に抽出します



Nginxの設定が完了しました。



次に、PHPについて説明します。



dockerfileから始めましょう



 # cd /mage/PHP # touch Dockerfile php.ini # nano Dockerfile
      
      





私たちは自分自身を組み立てます:



 FROM php:7.0-fpm RUN apt-get update && apt-get install -y \ curl \ wget \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libxslt-dev \ libicu-dev \ libmcrypt-dev \ libpng12-dev \ libxml2-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt mbstring mysqli pdo_mysql zip \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd RUN docker-php-ext-configure intl RUN docker-php-ext-install intl RUN docker-php-ext-install xsl RUN docker-php-ext-install soap RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini WORKDIR /var/www/magento2 CMD ["php-fpm"]
      
      





これは、このプロジェクトに特に必要なモジュールを使用できるようにするために必要です。



このファイルでは、このイメージに何をインストールするかを指定し、ルートディレクトリの場所とphp.iniから設定をコピーする場所も示しました。



php.iniを構成します。



 # nano php.ini
      
      





これは、Magento2開発者自身が提供するphp.ini.sampleから取得されます。 超自然的なものは何も追加しませんでした。



 memory_limit = 2G always_populate_raw_post_data = -1 cgi.fix_pathinfo = 1 fastcgi_split_path_info = 1 max_execution_time = 18000 flag session.auto_start = off zlib.output_compression = on suhosin.session.cryptua = off display_errors = Off
      
      





これで、PHPのセットアップは完了です。



次に、すべてを1つの便利なシステムに収集するdocker-composeファイルを作成します。



 # cd /mage # touch docker-compose.yml # nano docker-compose.yml
      
      





ここで、どのサービスとどの設定で開始するかを書き留めます。



 #   version: '3.3' #   services: nginx: #       image: nginx:latest #      container_name: nginx #   ports: - "80:80" - "443:443" #   volumes: - ./Nginx/core:/etc/nginx/conf.d - ./Nginx/www:/var/www/ - ./Nginx/Logs:/var/log/nginx/ - ./Nginx/html:/usr/share/nginx/html/ #   links: - php mysql: image: mysql:latest ports: - "3306:3306" container_name: mysql #  ,    mypassword   ,   root environment: - MYSQL_ROOT_PASSWORD=mypassword - MYSQL_DATABASE=magento2 - MYSQL_USER=magento2 - MYSQL_PASSWORD=magento2 volumes: - ./MySQL:/var/lib/mysql php: #    dockerfile      build: ./PHP container_name: php-fpm volumes: - ./Nginx/www:/var/www links: - mysql phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin ports: - 8090:80 links: - mysql:db
      
      





(または、コンテナの動作を監視したくない場合は、-dを追加できます)



そして、線が画面を横切って走り、マシンが動作している間、簡単にマグカップを注ぐことができます。



インストール後、MySQLフォルダーに多くのファイルとフォルダーが作成され、そのうちの1つがmagento2になり、2つのログがNginx / Logsフォルダーに表示されます。



ブラウザを開いてそこにlocalhostを入力すると、Magento2をインストールするように求めるプロンプトが表示されます。



それでも同じように、何かがうまくいかなかった場合、おそらく次の解決策のリストが役立ちます:



1)docker-composeファイルのバージョンが適合しなかったため、「version: '3.3'」を修正する必要があります。 ここでどちらが適切かを確認できます





2)すべてが正常に開始されましたが、ブラウザーは単一のエラーなしでクリーンなページを開きます-nginx.confの行が役立ちます



 "location ~* .php/ { rewrite (.*.php)/ $1 last; }"
      
      





3)Magento2自体を(ブラウザに)インストールした後、フレームが描画されておらず、すべてがサイトのテキストバージョンのように見える場合、次の手順を実行する必要があります。



3.1 SQLの場合、phpmyadmin localhost :8090 login root password mypasswordを通過し、magento2データベースを選択して、sqlクエリを入力することをお勧めします



 insert into core_config_data (config_id, scope, scope_id, path, value) values (null, 'default', 0, 'dev/static/sign', 0)
      
      





3.2 PHP(php-fpm)を使用してコンテナに接続し、入力します



 # php bin/magento cache:clean config # php bin/magento setup:static-content:deploy
      
      





彼はすべてを再確認して検証しなければなりません。 その後、すべてが正しく表示されるはずです。



4)Dockerにフォルダーへの書き込み権限がない場合(入力したかどうかがわかります)docker-compose up(-dなし)



4.1 Linuxでは、保護ポリシーを無効にする必要があります



再起動前にシャットダウンする



 # setenforce Permissive
      
      





または永久にシャットダウンする



 # nano /etc/selinux/config
      
      





行を変更する



 "SELINUX=disabled"
      
      





4.2 Windowsでは、Docker設定で共有ドライバーを選択し、プロジェクトが配置されているドライブを選択する必要があります。 Dockerを再起動すると、問題はなくなります。



皆さん、頑張ってください!



完成したアセンブリへのリンクはこちら



All Articles