Home >Backend Development >PHP Tutorial >Tutorial on deploying LNMP working environment under Docker (detailed steps)

Tutorial on deploying LNMP working environment under Docker (detailed steps)

不言
不言forward
2019-01-28 09:44:404793browse

This article brings you a tutorial (detailed steps) on deploying LNMP working environment under Docker. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Ordinary PC environment can also use the following configuration, just replace MYSQL with the official version of mysql.

Docker installation

$ curl -sSL get.docker.com | sudo sh

Working directory

/lnmp/conf stores virtual host configuration
/lnmp/data /mysql Stores mysql database data
/lnmp/log Stores nginx and mysql logs
/lnmp/workspace Stores various project files

/lnmp/.env Environment variable configuration when starting docker
/lnmp/docker-compose.yml Build configuration file
/lnmp/php/Dockerfile Compile PHP configuration file

Build Nginx

Create project

First create a static file index.html
/lnmp/workspace/default/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    Hello, Docker!
</body>
</html>

Add environment variables during build

Edit .env file

SOURCE_DIR=./workspace
HTTP_HOST=80

NGINX_VERSION=alpine
NGINX_CONFD_DIR=./conf/conf.d
NGINX_CONF_FILE=./conf/nginx.conf
NGINX_LOG_DIR=./log

SOURCE_DIR=./workspace workspace文件夹挂载到nginx下的 /var/www/html
HTTP_HOST=80           宿主机的80端口映射到nginx下的80端口
NGINX_VERSION=alpine   nginx镜像使用alpine版本
NGINX_CONFD_DIR=./conf/conf.d   conf.d文件夹挂载到nginx下的/etc/nginx/conf.d
NGINX_CONF_FILE=./conf/nginx.conf   nginx.conf挂载nginx的 /etc/nginx/nginx.conf
NGINX_LOG_DIR=./log


Nginx.conf

Create /lnmp/conf/nginx.conf file

user  nginx;
worker_processes  1;

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

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/nginx.access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Configure virtual host

Create /lnmp/conf/conf.d/default.conf file
Note: The path under root must start with /var/www/html, default is our local A folder under the workspace

server {
    listen       80;
    server_name  localhost default-server;
    root   /var/www/html/default;
    index  index.php index.html index.htm;

    access_log  /var/log/nginx/nginx.localhost.access.log  main;
    error_log  /var/log/nginx/nginx.localhost.error.log  warn;

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Build Nginx configuration

Edit docker-composer.yml
The following ${} are all configured in the above .env file The variable

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always

Start Nginx

After running the command, access the IP of the Raspberry Pi. Normally, Hello, Docker!

$ docker-compose up

# will be displayed. ##Build PHP

Edit /lnmp/.env to add PHP build variables

PHP_CONFIG_FILE=./conf/php.ini
PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf
Because the php.ini configuration is a bit long, you can copy it at the following address

php.ini
php-fpm.conf

Add Dockerfile

/lnmp/php/Dockerfile

ARG PHP_VERSION
FROM php:${PHP_VERSION}-fpm
RUN apt update
RUN apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        unixodbc-dev \
        gcc g++ make autoconf libc-dev pkg-config

Add build PHP

Edit /lnmp/docker-compose.yml file

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always
  php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${PHP_PHP_CONFIG_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONFIG_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
    cap_add:
      - SYS_PTRACE
    restart: always
    networks:
      - default

Virtual host supports PHP parsing

/lnmp/conf/conf.d/default. conf

The php of fastcgi_pass php:9000 below refers to a service name in docker-compose.yml above, which can be used to specify the PHP version for a certain project

#...其它代码

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Add files

/lnmp/workspace/default/index.php

<?php

echo ‘Hello, PHP!’;

Start preview

If you have not terminated the process before, you can terminate it with ctrl c Run the following command.

If nothing unexpected happens, the IP when accessing the Raspberry Pi will display Hello, PHP!.

$ docker-compose up

Add PHP extension

/lnmp/.env Add variables, The following is a swoole extension demonstration. For other extensions, please refer to the following operations.

PHP_SWOOLE_VERSION=4.2.10
/lnmp/docker-compose.yml Add variables

php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
        PHP_SWOOLE: ${PHP_SWOOLE_VERSION}
/lnmp/php/Dockerfile Download and compile swoole

# ...其它代码
ARG PHP_SWOOLE=false
RUN if [ ${PHP_SWOOLE} != false ]; then \
    curl -O http://pecl.php.net/get/swoole-${PHP_SWOOLE}.tgz -L \
    && pecl install swoole-${PHP_SWOOLE}.tgz \
    && docker-php-ext-enable swoole \
;fi
Recompile

Note: If the Dockerfile is changed, you must add --build and recompile it once, otherwise it will not take effect when docker-compose up

$ docker-compose up --build
Preview

Edit /lnmp/workspace/default/index.php to save, access the IP of the Raspberry Pi, and as expected you can find the swoole extension

<?php

phpinfo();

Build MYSQL

MYSQL persistence

The Docker container service has been deleted to ensure that data will not be lost

Create the /lnmp/data/mysql folder

Build-time variables

Edit the /lnmp/.env file and add the mysql service port, login password and data persistence folder.

MYSQL_HOST_PORT=3306
MYSQL_PASSWORD=1234
MYSQL_DATA_DIR=./data/mysql
Build configuration

version: "3"
services:
    #... 其它代码
    mysql:
      image: tobi312/rpi-mysql
      ports:
        - ${MYSQL_HOST_PORT}:3306
      volumes:
        - ${MYSQL_DATA_DIR}:/var/lib/mysql:rw
      environment:
        MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"

Startup

After starting, use the data connection tool to test, link address: Raspberry Pi IP Port: 3306 Username: root Password: 1234

$ docker-compose up
So far, your own LNMP working environment is ready.

The above is the detailed content of Tutorial on deploying LNMP working environment under Docker (detailed steps). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete