Docker LEMP 구축(Nginx+PHP+Mysql+phpmyadin)

docker를 이용하여 nginx 웹서버, php-fpm, mysql 데이터베이스, phpmyadmin 까지 구축 해 보겠습니다. 구축 실습 디렉토리는 /home/test/lemp로 하겠습니다.자신의 상황에 맞게 디렉토리를 수정해서 적용하세요. php7.4-fpm 빌더하기 실습 디렉토리 /home/test/lemp로 이동하여 Dockerfile을 작성합니다. $ cd /home/test/lemp$ sudo nano Dockerfile FROM php:7.4-fpm ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/ RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \ install-php-extensions gd mysqli pdo_oci pdo_odbc pdo_mysql […]


docker를 이용하여 nginx 웹서버, php-fpm, mysql 데이터베이스, phpmyadmin 까지 구축 해 보겠습니다.

구축 실습 디렉토리는 /home/test/lemp로 하겠습니다.
자신의 상황에 맞게 디렉토리를 수정해서 적용하세요.

php7.4-fpm 빌더하기

실습 디렉토리 /home/test/lemp로 이동하여 Dockerfile을 작성합니다.

$ cd /home/test/lemp
$ sudo nano Dockerfile

FROM php:7.4-fpm

ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions gd mysqli pdo_oci pdo_odbc pdo_mysql zip #추가하고 싶은 모듈 이름을 계속 입력할 수 있다.

$docker build -t “php:7.4-fpm-gd-mysqli” .

php.ini 설정 파일을 작성

아래의 설정값은 예를 든 것이므로 자신의 상황에 맞게 값을 수정하세요.
위치: /home/test/lemp/php/
$ sudo mkdir -p /home/test/lemp/php/
$ sudo nano /home/test/lemp/php/php.ini

short_open_tag = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
post_max_size = 101M
max_execution_time = 360
date.timezone = Asia/Seoul
expose_php = off

nginx 환경설정 파일을 작성

테스트 도메인이름: test.co.kr
위치: /home/test/lemp/nginx/conf
작성할 파일명: test.conf
$ sudo mkdir -p /home/test/lemp/nginx/conf
$ sudo nano /home/test/lemp/nginx/conf/test.conf

server {
        listen 80;
        listen [::]:80;


        server_name test.co.kr www.test.co.kr; #도메인이름 지정, 공백으로 여러개 나열할 수 있다
        index index.php index.html index.htm;
        root /var/www/html;  #홈페이지 root 디렉토리 지정


        server_tokens off;
        client_max_body_size 0; #nginx가 웹상에서 업로드할 수 있는 파일 크기, 0이라면 무제한


        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }


        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }


        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass php:9000; #컨테어터 상에서 php 컨테어너 이름 또는 아이피
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }


        location ~ /\.ht {
                deny all;
        }


        location = /favicon.ico {
                log_not_found off; access_log off;
        }
        location = /robots.txt {
                log_not_found off; access_log off; allow all;
        }
        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                expires max;
                log_not_found off;
        }
}

docker-compose.yml을 작성

$ sudo nano /home/test/lemp/docker-compose.yml

version: "3.7"

services:
    mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: unless-stopped
        environment:
            - MYSQL_ROOT_PASSWORD=yourpasswd
        ports:
            - "3306:3306"
        volumes:
            - /home/test/lemp/mysql:/var/lib/mysql
        networks:
            - lemp

    php:
        image: php:7.4-fpm-gd-mysqli
        container_name: php
        restart: unless-stopped
        depends_on:
            - mariadb
        volumes:
            - /home/test/lemp/php/php.ini:/usr/local/etc/php/php.ini
            - /home/test/html:/var/www/html
        networks:
            - lemp

    nginx:
        image: nginx:latest
        container_name: nginx
        restart: unless-stopped
        depends_on:
            - php
        ports:
            - "82:80"
            - "4443:443"
        volumes:
            - /home/test/lemp/nginx/conf:/etc/nginx/conf.d
            - /home/test/html/:/var/www/html
        networks:
            - lemp

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "83:80"
        environment:
            - PMA_HOST=mariadb
        restart: always
        depends_on:
            - mariadb
        networks:
            - lemp

volumes:
  nginx-conf:
  mariadb:

networks:
  lemp:
      driver: bridge

docker-compose 실행

$ cd /home/test/lemp/
$ sudo docker-compose up -d

웹브라우저 접속 테스트 및 데이터베이스 추가 및 사용자 추가

홈페이지 접속 주소는 http://test.co.kr:82
phpmyadmin 웹브라우저 접속 주소는 http://test.co.kr:83

데이터 베이스 추가 및 사용자 추가는 관련 자료를 참고합니다.
ftp로 웹페이지를 업로드할때는 /home/test/html 디렉토리 아래에 폴더를 생성하고 파일을 업로드 합니다.

나중에 위 주소를 nginx proxy manager를 이용하여 역방향 프로록시 서버로 등록하면 포트 번호를 지정하지 않고 본인이 정한 도메인 주소로 접속되도록 할 수있습니다. 

예를 들어 아래와 같이 접속되게 할 수 있습니다.
htttp://test.co.kr:82 —> http://myweb.test.co.kr 

Views: 1


마음에 드시는 글이 있다면 다른 분에게도 알려 주세요.
위로 스크롤