일기장
도커 nginx + php-fpm + mariadb 본문
도커로 php cms인 그누보드 서버를 만들어보자
글에서 사용한 도커 버전
$ docker -v
Docker version 19.03.7, build 7141c199a2
선택] 사용할 도커 이미지들을 미리 pull 해준다
$ docker pull nginx
$ docker pull mariadb
$ docker pull php:7.4.3-fpm
그누보드는 gd, mysql, iconv php플러그인이 따로 필요해서 Dockerfile과 docker-php-extension-installer로 설치
*iconv는 php 기본 이미지에 설치되어 있다
./Dockerfile
FROM php:7.4.3-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
원하는 이름으로 image를 build
$ docker build -t "php:7.4-fpm-gd-mysqli" .
docker-compose.yml 작성
version: "3.7"
services:
mariadb:
image: mariadb:latest
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=[mariadb 루트로 설정할 비밀번호]
ports:
- "3306:3306"
volumes:
- ./var_lib_mysql/:/var/lib/mysql
php:
image: php:7.4-fpm-gd-mysqli
restart: unless-stopped
depends_on:
- mariadb
volumes:
- ./var_www_html/:/var/www/html
nginx:
image: nginx:latest
restart: unless-stopped
depends_on:
- php
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./var_www_html/:/var/www/html
*위 경우 /var/www/html 의 volume 으로 설정한 /var_www_html/ 경로에 그누보드 파일들을 압축해제했다
nginx.conf 파일 http 안에 server 추가
server {
listen 443 ssl;
ssl_certificate [ssl_certificate 경로];
ssl_certificate_key [ssl_certificate_key 경로];
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
server_name [사이트 주소];
index index.php;
client_max_body_size 32m;
#include snippets/rhymix.conf;
#### 그누보드5 nginx rules BEGIN #####
if (!-e $request_filename){
rewrite ^/content/([0-9a-zA-Z_]+)$ /bbs/content.php?co_id=$1&rewrite=1 break;
rewrite ^/content/([^/]+)/$ /bbs/content.php?co_seo_title=$1&rewrite=1 break;
rewrite ^/rss/([0-9a-zA-Z_]+)$ /bbs/rss.php?bo_table=$1 break;
rewrite ^/([0-9a-zA-Z_]+)$ /bbs/board.php?bo_table=$1&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/write$ /bbs/write.php?bo_table=$1&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/([^/]+)/$ /bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;
rewrite ^/([0-9a-zA-Z_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;
}
#### 그누보드5 nginx rules END #####
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
#include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
docker-compose 실행
$ docker-compose up -d