docker를 이용하여 nginx 웹서버, php-fpm, mysql 데이터베이스, phpmyadmin 까지 구축 해 보겠습니다.
구축 실습 디렉토리는 /home/test/lemp로 하겠습니다.
자신의 상황에 맞게 디렉토리를 수정해서 적용하세요.
- php7.4-fpm 빌더하기
- php.ini 설정 파일을 작성
- nginx 환경설정 파일을 작성
- docker-compose.yml을 작성
- docker-compose 실행
- 웹브라우저 접속 테스트 및 데이터베이스 추가 및 사용자 추가
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