Web + WordPress 서비스 구축 - 1

SummerToday·2024년 3월 23일

도커, 서버 기술

목록 보기
28/34
post-thumbnail

구축 서비스 흐름

nginx reverse proxy로 특정 경로로는 wordpress 서버 연결, 이외 경로는 별도 웹페이지를 구성하고 있는 내부 nginx 서버로 이동 시킨다.


docker-compose.yml 설정

version: "3"

services:
  nginxproxy:
    depends_on: # 다른 컨테이너들이 모두 실행 된 후 요청을 포워딩 해줘야하기 때문
      - nginx
      - db
      - wordpress
    image: nginx:latest
    ports:
      - "80:80" # 해당 컨테이너만 외부에 포트를 열어둔다.
    restart: always # 서버가 항상 돌아가도록 설정.
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"

  nginx:
    image: nginx:latest
    restart: always

  db: # 워드프로세스는 기본적으로 db가 필요함.
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on: # db가 먼저 실행된 후 워드프레스가 동작해야 정상 동작.
      - db
    image: wordpress:5.7.0
    ports:
      - "8080:80" # 워드프레스 테스트를 위한 테스트용 포트를 열어둔다.
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

nginx.conf 작성

user nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" "$request_uri" "$uri"'
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile on;
    keepalive_timeout 65;

    upstream docker-wordpress {
        server wordpress:80;
    }

    upstream docker-web {
        server nginx:80;
    }

    server {
        location /blog/ {
            #rewrite ^/blog(.*)$ $1 break;
            proxy_pass         http://docker-wordpress;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }

        location / {
            proxy_pass         http://docker-web;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
}
  • #rewrite ^/blog(.*)$ $1 break;
    wordpress는 자체적으로 실행이 되는 HTTP 요청들이 존재한다. 하지만 rewrite 옵션 사용시 URL의 /blog 부분을 제거 시 해당 요청이 nginx의 location에 매칭이 될 수 있으므로 rewrite 옵션을 사용하지 않는다.
    따라서 경로를 유지해서 호출하고, wordpress도 /bolg/ 폴더에 설치해야한다.

wordpress 설치 경로 변경

nginx reverse proxy 서버에서 경로에 /blog 부분이 매칭되므로, 내부 wordprocess 서버로 동일 주소로 요청하게 된다.
따라서 워드 프레스 기본 설치 주소 /wp-admin/install.php에서 /blog에 매칭이 될 수 있도록 기존 파일들을 /blog/ 폴더로 옮겨야한다. 옮긴 후 파일 경로는 /blog/wp-admin/install.php가 된다.

  • wordpress 설치 경로 변경

    • wordpress 컨테이너 쉘 실행

      docker exec -it 06_wordpress_nginx_proxy-wordpress-1 /bin/bash

    • blog 폴더를 만들어 해당 폴더로 현재 디렉토리의 모든 하위 폴더/파일 이동

      mkdir blog

      move * blog/

    • 해당 move 명령 시 cannot move 'blog' to a subdirectory of itself, 'blog/blog'가 발생하는데 blog 폴더까지 blog 폴더에 넣는다는 의미이므로 오류가 나는 것이 당연한 것이다.
      따라서 현재 디렉토리(/var/www/html)에서 blog를 제외한 폴더와 파일들이 blog 디렉토리 하단으로 이동한다.


테스트

  • 해당 URl을 입력하여 wordpress 사이트가 정상 동작하는지 테스트한다.

    http://자신의 서버 IP/blog/wp-admin/install.php

  • 해당 URl을 입력하여 nginx 사이트가 정상 동작하는지 테스트한다.

    http://자신의 서버 IP




해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다.
인프런, 잔재미 코딩, ⌜풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]⌟
profile
블로그 이관했습니다.

0개의 댓글