한줄공지
  • 등록된 공지내용이 없습니다.

우분투 20.04에서 PHP 7.4와 Apache 2.4 Docker 설치 가이드

2022년 10월 25일
조회수 392
코멘트 0

목차

우분투 20.04에서 PHP 7.4와 아파치2 웹서버를 설치하는 방법을 안내 합니다. 이 가이드에는 ioncube 모듈 및 php-mysql php-pear php-mbstring php-curl php-gd php-imagick php-xmlrpc php-geoip php-zip php-soap php-memcache php-redis 모듈을 포함합니다.

이 문서에 안내된 파일은 github 레포지토리에도 공개되어 있습니다. github 레포지토리도 참고 해 주세요.

완성된 Docker 이미지는 아래의 도커 허브를 방분 해 주세요.

 

Dockerfile 만들기

도커에서 사용할 기본 베이스를 우분투 20.04로 설정 합니다.

FROM ubuntu:20.04

APT 저장소를 업데이트 및 업그레이드를 합니다.

RUN apt-get update -y
RUN apt-get upgrade -y

한국 시간을 사용하기 위해 우분투의 타임존관련 패키지 설치 및 타임존을 Asia/Seoul로 변경 합니다.

RUN apt-get install -y tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

기본 우분투 패키지를 설치 합니다.

RUN apt-get install -y gcc make telnet whois vim git gettext cron mariadb-client iputils-ping net-tools wget

Apache, PHP 및 PHP의 확장 패키지를 설치 합니다.

RUN apt-get install -y apache2 apache2-utils
RUN apt-get install -y php php-dev libapache2-mod-php composer
RUN apt-get install -y php-mysql php-pear php-mbstring php-curl php-gd php-imagick php-xmlrpc php-geoip php-zip php-soap php-memcache php-redis

PHP Mime관련 라이브러리를 설치 합니다.

RUN pear install MIME_Type

아파치 SSL을 설정하기 위해 ssl enable및 기본 인증서를 설치 합니다.

RUN mkdir /etc/apache2/ssl
RUN openssl genrsa -out /etc/apache2/ssl/server.key 2048
RUN openssl req -new -days 365 -key /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.csr -subj "/C=KR/ST=Daejeon/L=Daejeon/O=Docker/OU=IT Department/CN=localhost"
RUN openssl x509 -req -days 365 -in /etc/apache2/ssl/server.csr -signkey /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt
RUN sed 's//etc/ssl/certs/ssl-cert-snakeoil.pem//etc/apache2/ssl/server.crt/g' /etc/apache2/sites-available/default-ssl.conf > /etc/apache2/sites-available/default-ssl.conf.tmp
RUN sed 's//etc/ssl/private/ssl-cert-snakeoil.key//etc/apache2/ssl/server.key/g' /etc/apache2/sites-available/default-ssl.conf.tmp > /etc/apache2/sites-enabled/000-default-ssl.conf
RUN rm /etc/apache2/sites-available/default-ssl.conf.tmp -f

아파치에서 사용할 모듈을 enable합니다.

RUN a2enmod ssl
RUN a2enmod cache
RUN a2enmod cache_disk
RUN a2enmod expires
RUN a2enmod headers
RUN a2enmod rewrite

Apache 기본 index.html를 삭제 후, phpinfo()가 포함된 index.php를 복사 합니다. index.php파일은 github 레포지토리를 참고 해 주세요.

RUN rm /var/www/html/index.html
COPY index.php /var/www/html/index.php

Apache에서 사용할 http 및 https의 설정파일을 복사 합니다. 이 설정 파일은 github 레포지토리(000-default.conf, 000-default-ssl.conf)를 참고 해 주세요.

COPY default.conf /etc/apache2/sites-enabled/000-default.conf
COPY default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf

이온큐브(IonCube)모듈을 설치 합니다.

RUN mkdir /root/tmp 
RUN cd /root/tmp
RUN wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz -O /root/tmp/ioncube_loaders_lin_x86-64.tar.gz
RUN tar -zxvf /root/tmp/ioncube_loaders_lin_x86-64.tar.gz -C /root/tmp
RUN cp /root/tmp/ioncube/ioncube_loader_lin_7.4.so /usr/lib/php/20190902
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/apache2/php.ini
RUN echo "zend_extension = /usr/lib/php/20190902/ioncube_loader_lin_7.4.so" >> /etc/php/7.4/cli/php.ini

Cron데몬과 Apache 서버를 실행 합니다.

RUN echo 'service cron start
/usr/sbin/apachectl -D FOREGROUND' > /entrypoint.sh

Work 디렉토리, 볼륨, 포트 및 Entrypoint 스크립트를 설정합니다.

WORKDIR /var/www/html
VOLUME ["/var/www/html"]
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]

 

Dockerfile 빌드

다음 명령어를 입력해 dockerfile을 빌드 합니다. 빌드된 이미지는 webserver 이름으로 저장됩니다.

$ docker build -t webserver . && docker run -it --rm -p 80:80 -p 443:443 webserver

빌드가 완료되면 정상적인 테스트를 위해 다음 명령어를 입력 하세요.

$ docker run -it --rm -p 80:80 -p 443:443 webserver

정상적으로 실행되면 웹브라우저에서 http://127.0.0.1로 접속합니다. Docker 이미지 빌드에 문제가 없으면 아래와 같이 phpinfo가 출력 됩니다.

이제 콘솔에서 Ctrl+C 를 클릭하면 서버가 종료되고 테스트를 위해 실행했던 컨테이너는 자동으로 삭제 됩니다.

 

Docker 컨테이너

다음 명령어로 생성된 도커 이미지로 실행 합니다. 웹서버 포트는 80과 443(SSL), 볼륨은 Host 디렉토리를 도커이미지의 /var/www/html에 맵핑합니다. --name옵션으로 컨테이너 이미지의 이름을 설정 합니다. 

$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver webserver

만약, 위의 Docker Build 과정을 건너뛰고 필자가 직접 제작해둔 Docker Image를 사용하여 컨테이너를 실행 할 수 있습니다. 이 경우 다음 명령어로 Docker Container를 실행 합니다.

$ docker run -d -p 80:80 -p 443:443 -v [host directory]:/var/www/html --name=webserver dadyzeus/webserver:ubuntu20.04-php7.4-apache

안정적이고 저렴한 가상 서버(VPS) 안내

안정적인 서버 호스팅을 찾고 계신가요? 지금 Vultr 호스팅을 한번 이용 해 보세요. 지금 보고 계신 HaruLogs 사이트도 Vultr에서 VPS 호스팅 하고 있습니다. 한국, 일본, 미국등 다양한 국가에 클릭 몇번으로 안정적이고 저렴한 VPS를 운영 할 수 있습니다.

아래 배너를 통해 회원 가입을 하시면 100달러의 무료 크레딧을 받을 수 있습니다. 100달러의 무료 크레딧은 Vultr의 최소 사양 VPS를 20대 동시 운영가능한 크레딧입니다.

지금 무료로 Vultr $100 크레딧 선물 받기

 

Vultr 서비스 요약

  • VPS
    • 인스턴스
      • AMD 또는 Intel High Performance 인스턴스 최저 $6 - 1vCPU, 1GB Memory, 2TB Bandwidth, 25GB NVMe
    • 엣지
  • Block Storage
  • Object Storage (AWS S3 호환)
  • Firewall
  • Network
  • Load Balancers
  • Kubernetes
  • Databases
포스트 통계
지금 보고있는 포스트의 통계 데이터를 확인 해 보세요.
  • 총 조회수
    393
  • 최근 30일 조회수
    21
연관 포스트
코멘트 작성