도커로 그누보드 설치하기 #5

오늘은 디렉토리 구조를 먼저 만들어 봤습니다.

 

1893124284_1665482289.4726.png

 

gnuboard 디렉토리는 나중에 깃헙 디렉토리 올릴때에는 불필요한 곳이라서 별도로 web이란 디렉토리를 하나 만들었습니다.

 

디렉토리 구조는 만들어 가면서 조금씩 변경될 수 있습니다. (과정을 가능하면 깃헙에 커밋을 할 예정입니다.)

 

docker-compose.yml에서 아래는 이미지가 php와 apache가 한 이미지로 되어 있는데,  

오늘은 이것을 분리해 보겠습니다.

[code]

  php-apache-environment:

    container_name: php-apache

    build:

      context: ./php

      dockerfile: Dockerfile

    depends_on:

      - db

    volumes:

      - ./gnuboard:/var/www/html

    ports:

      - 8000:80

[/code]

를 아래와 같이 나누겠습니다.

 

Apache2는

[code]

  apache2:

    image: httpd:2.4

    container_name: apache2

    build:

      context: ./etc/httpd

      dockerfile: Dockerfile

    ports:

      - "8000:80"

    volumes:

      - "./app/web:/var/www/html"

      - "./etc/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf"

      # - ./etc/httpd/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf

[/code]

 

build: 아래는 etc/httpd 아래에 있는 dockerfile로 이미지를 만들라는 것입니다.

미리 만들어진 이미지보다는 자기가 원하는 기능을 넣을 때 이렇게 합니다.

현재는 이미지만 그냥 오는 것으로, 나중에 필요할 때 쉽게 추가..

 

[code]

FROM httpd:2.4

[/code]

 

httpd.conf는

 

[code]

ServerRoot "/usr/local/apache2"

 

Listen 80

 

LoadModule mpm_event_module modules/mod_mpm_event.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authn_core_module modules/mod_authn_core.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule authz_core_module modules/mod_authz_core.so

LoadModule access_compat_module modules/mod_access_compat.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule reqtimeout_module modules/mod_reqtimeout.so

LoadModule filter_module modules/mod_filter.so

LoadModule mime_module modules/mod_mime.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule env_module modules/mod_env.so

LoadModule headers_module modules/mod_headers.so

LoadModule setenvif_module modules/mod_setenvif.so

LoadModule version_module modules/mod_version.so

LoadModule unixd_module modules/mod_unixd.so

LoadModule status_module modules/mod_status.so

LoadModule autoindex_module modules/mod_autoindex.so

LoadModule dir_module modules/mod_dir.so

LoadModule alias_module modules/mod_alias.so

LoadModule rewrite_module modules/mod_rewrite.so

# additional

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

 

ServerAdmin test@test.com

 

<Directory />

    AllowOverride none

    Require all denied

</Directory>

 

DocumentRoot "/var/www/html"

<Directory "/var/www/html">

    Options Indexes FollowSymLinks Includes ExecCGI

    AllowOverride All

    Require all granted

</Directory>

 

<IfModule unixd_module>

    User daemon

    Group daemon

</IfModule>

 

<IfModule dir_module>

    DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \

                   default.php default.pl default.cgi default.asp default.shtml default.html default.htm \

                   home.php home.pl home.cgi home.asp home.shtml home.html home.htm

</IfModule>

 

<Files ".ht*">

    Require all denied

</Files>

 

<IfModule log_config_module>

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    LogFormat "%h %l %u %t \"%r\" %>s %b" common

 

    <IfModule logio_module>

        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

    </IfModule>

</IfModule>

 

<IfModule alias_module>

    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

</IfModule>

 

<Directory "/usr/local/apache2/cgi-bin">

    AllowOverride All

    Options None

    Require all granted

</Directory>

 

<IfModule headers_module>

    RequestHeader unset Proxy early

</IfModule>

 

<IfModule mime_module>

    TypesConfig conf/mime.types

    AddType application/x-compress .Z

    AddType application/x-gzip .gz .tgz

    AddType text/html .shtml

    AddHandler cgi-script .cgi .pl .asp

    AddOutputFilter INCLUDES .shtml

</IfModule>

 

#

# FPM

#

<IfModule proxy_module>

    <FilesMatch "\.php$">

        SetHandler  "proxy:fcgi://php:9000"

    </FilesMatch>

</IfModule>

[/code]

 

PHP 부문은

 

[code]

  php:

    # image: php:7.4-fpm

    container_name: php

    build:

      context: ./etc/php

      dockerfile: Dockerfile

    volumes:

      - ./app/gnuboard:/var/www/html

    ports:

      - "9000:9000"

    command:

      - /bin/sh

      - -c

      - |

        echo "security.limit_extensions = .php .phtml .php3 .php4 .php5 .html .htm" >> /usr/local/etc/php-fpm.d/www.conf

              php-fpm

    networks:

      - app-network

[/code]

 

dockerfile은

 

[code]

FROM php:7.4-fpm

 

RUN apt-get update > /dev/null && apt-get install -y \

   git \

   unzip \

   libzip-dev \

   libjpeg-dev \

   libxpm-dev \

   libwebp-dev \

   libfreetype6-dev \

   libjpeg62-turbo-dev \

   libmcrypt-dev \

   libpng-dev \

   zlib1g-dev \

   libicu-dev \

   jpegoptim \

   g++ \

   libxrender1 \

   libfontconfig \

   nano \

   cron \

#    php-gd \

   acl

 

RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/

 

RUN docker-php-ext-configure intl \

   && docker-php-ext-install intl > /dev/null \

   && docker-php-ext-install zip > /dev/null \

   && docker-php-ext-install bcmath > /dev/null \

   && docker-php-ext-install gd > /dev/null

 

RUN pecl install mcrypt-1.0.5 \

   && docker-php-ext-enable mcrypt

 

RUN docker-php-ext-install pdo pdo_mysql mysqli

 

# Install Composer

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer > /dev/null

 

RUN usermod -u 1000 www-data

 

RUN chown -R www-data:1000 /var/www

 

USER www-data

 

WORKDIR /var/www

[/code]

 

생각보다 확실히 어렵네요.  아직 networks 개념도 완벽하지 않고, depends_on, links(이것은 안쓴다고 하니.) 등..  

 

현재로서는 그누보드 설치는 됩니다. gd 라이브러리 설치가

 

[code]

docker-php-ext-install gd > /dev/null

[/code]

 

로 되네요.  예전에 apt-get install php-gd 뭐 이런식으로 인스톨 했던 것 같은데..

 

조금 바꾸었더니 fopen 에러인지 워닝인지 나오네요.. 

2000813730_1665558962.5381.png

 

 

|

댓글 8개

하나하나 잘 알려 주시니 배우는 재미에 즐겁습니다.
감사 합니다.
@들레아빠 자도 이것 저것 하면서 배우고 있는데, 코드만 봤을 때에는 다 아는 것 같은데, 실제로 해보니 막히는 것이 많네요..
감사 드려요.
여기서 php.ini 수정하는 방법도 좀 알려 주세요.
@들레아빠 가능하면 빠른 시간내에 정리해서 올리겠습니다. 간단히 설명드리면 리눅스에 필요한 파일은 로컬에서 만들어 두고 시작할 때 Volume을 사용해서 매핑시킵니다.(올립니다.)
@들레아빠 여기 Dockerfile안에 && docker-php-ext-install gd > /dev/null 에서 아래와 같이

&& docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg && \
docker-php-ext-install gd

넣어보세요. 이전 gd 관련 네가지(?) 옵션을 다 넣어보세요

참조

https://github.com/docker-library/wordpress/issues/461
@마젠토님 감사 합니다.
etc/php/Dockerfile이 동작이 되지 않는 것 같습니다.
etc/php/php.ini는 잘 되는데..
@들레아빠 빌드에 문제가 있는지 아니면 동작에 문제가 있는지 체크해 봐야 됩니다.
docker-compose logs [컨테이너 서비스]
@마젠토
RUN apt-get install -y libfreetype6-dev libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev
RUN docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg
로 해결이 되었습니다.
[http://sir.kr/data/editor/2210/3523fe249c4eba4630eabf57fbd2f833_1666596742_6658.png]
댓글을 작성하시려면 로그인이 필요합니다.

Docker

+
제목 글쓴이 날짜 조회
2년 전 조회 715
2년 전 조회 567
3년 전 조회 706
3년 전 조회 915
3년 전 조회 476
3년 전 조회 1,574
3년 전 조회 1,070
3년 전 조회 1,940
3년 전 조회 980
3년 전 조회 950
3년 전 조회 996
3년 전 조회 1,844
3년 전 조회 1,153
3년 전 조회 1,285
3년 전 조회 1,603
3년 전 조회 4,683
3년 전 조회 1,000
3년 전 조회 748
3년 전 조회 803
4년 전 조회 944
4년 전 조회 930
4년 전 조회 1,085
4년 전 조회 1,162