Skip to main content

Command Palette

Search for a command to run...

Docker로 워드프레스 설치하기 및 관련 이슈 정리

Published
•2 min read•View as Markdown

외주 작업으로 웹사이트를 개발했다. 주로 정적 컨텐츠를 제공하는 웹사이트여서 워드프레스로 구성했다. 혼자 기획, 개발, 디자인을 직접 진행하여, 2주에 걸쳐 웹사이트를 완성하였다.(와이어 프레임, 로고 디자인까지 다했다.. 디자인이 제법 빡세다;;) 본 포스트에서는 도커+워드프레스 인프라를 세팅하는 과정과, 그 과정에서 생긴 이슈들을 간단히 정리하였다.

작업 내용

  • 백엔드 : AWS EC2에 docker+wordpress(php+apache), docker+mySQL 컨테이너 구성
  • 프론트엔드 : wordpress
  • 기획, 디자인

인프라 구성 절차

  1. 서버를 구성한다(저자는 aws ec2 사용)

    ssh -i xxx.pem ubuntu@xxx.xxx.xxx.xxx
    
  2. 도커를 설치한다.

  3. 다음 쉘스크립트를 한 줄씩 실행한다.(참고 : https://blog.cosmosfarm.com/archives/248/우분투-18-04-도커-docker-설치-방법/)

sudo apt update

sudo apt install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

sudo apt update

apt-cache policy docker-ce

sudo apt install docker-ce
sudo apt install docker-compose
  1. docker-compose.yml 만들고 docker-compose up -d로 컨테이너 설치 및 실행한다.
version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "80:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306 // mysql 기본 설정
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./html:/var/www/html
            - ./upload.ini:/usr/local/etc/php/conf.d/uploads.ini // php 업로드 설정파일
  1. 설정 완료. 웹 주소(aws 퍼블릭 주소)로 접근하면 워드프레스 설정 창이 뜬다. 이후로 워드프레스로 웹사이트를 개발하면 완성이다.

워드프레스+도커 개발 과정에서 발생한 이슈들

  1. 테마 용량이 커서 업로드되지 않는다.

    • php 파일 업로드 크기 관련 설정을 수정하여 해결
  2. 웹사이트 제작 과정에서 서버가 자주 다운

    • cpu 사용율 100% 찍고 장시간 응답하지 않음
    • 서버 사양 문제로 추정하여(문제의 서버가 aws 프리티어), 서버 사양을 업그레이드함
  3. 서버 재부팅 후 IP 문제

    • AWS EC2는 탄력적 ip주소를 지정하지 않으면 재부팅시 IP가 변경되는데, 워드프레스는 ip가 바뀔 경우 ip와 관련해 다음 이슈가 생긴다.
      • 이미지 등 업로드한 파일 링크 깨짐 현상
      • IP 관련 설정 변경(wp_options에서 siteurl 및 home ip 값 변경), wp-config.php 파일 변경 필요
      • IP가 변경되지 않도록 탄력적 ip 사용으로 해결
  4. 도커 db 외부 접근 문제

    • 참고 : https://bluese05.tistory.com/21, https://dev-r.tistory.com/9
    • docker exec -i -t
    • 외부(intellij) 접근 하려면 ip를 알아야 한다. ssh터널 접속 후 ip:3306포트로 접근
    • 도커를 거쳐서 DB에 접근해야되므로 외부 접근 및 관리에 손이 더 많이가며 DB 백업, 라이브 중 수정 및 신속한 이슈 대응이 DB 직접 사용에 비해 어렵다.
  5. 맥 로컬 관련 이슈가 있다. 맥에선 컨테이너 ip로 직접 접근이 불가하다. 127.0.0.1로 간접 접근

  6. 이미지 파일 업로드 및 플러그인 삭제가 동작하지 않는다.

    • 도커 권한 문제로 발생하였음. 로컬에서 프로덕션으로 업로드한 후 권한 문제가 생겨 다음 스크립트를 실행하였음

    https://www.python2.net/questions-519446.htm

     docker exec -it ssamwordpress_wordpress_1 /bin/sh
    
     chown -R www-data:www-data /var/www/html/wp-content/uploads
    
3 views

More from this blog

"고객 인터뷰는 해봤어?" — RAG 프로젝트 회고

AI가 나에게 물었다. "고객 인터뷰는 해봤어?" 이 질문 하나로 개발 프로세스가 바뀌었다. 프로젝트 개요 이 프로젝트는 상담 추천 시스템(콘텐츠 기반 필터링)을 만들기 위해 벡터 DB를 설계하고 POC를 해보는 과정에서 파생됐다. 2026년 3월부터 1주 단위 스프린트 4번으로 4주 동안 기획·디자인·FE·BE·AI 개발을 1인으로 진행했다. 원래는 유사한 상담을 벡터 검색으로 추천해주는 모듈을 개발 중이었다. 여기서 아이디어를 확장하여 새로...

Apr 21, 20263 min read20

『인스파이어드』를 읽고 — 엔지니어의 시선으로

책에 대하여 『인스파이어드』는 IT 제품(앱, 웹, 일반 프로그램 등)을 어떻게 하면 더 잘 만들 수 있을지 가이드를 주는 책이다. 특히 IT 제품팀과 제품 관리자의 관점에서 중요한 내용이 많이 수록되어 있다. 나는 엔지니어로서 더 나은 제품팀을 만드는 데 어떻게 기여할 수 있을지, 그리고 엔지니어링 기술력을 어떻게 효율적으로 활용할 수 있을지에 대한 관점으로 읽어나갔다. 엔지니어의 역할에 주목하며 대부분의 내용은 제품팀과 제품 관리자, 그리고...

Jul 30, 20242 min read11

API 응답 속도가 얼마나 빨라야될까? (페이지 로딩시간, API TPS, latency)

안녕하세요. 팀에서 최근 들어 API 최적화에 대한 논의가 이루어지면서, API의 응답 속도에 대한 기준과 논리가 필요하여 몇 가지 찾아 정리해보았습니다. ## 왜 API 응답 속도가 빨라야 할까요? 사용자가 서비스를 기다리는 페이지 로드 시간이 곧 비용이기 때문입니다. 긴 페이지 로딩 시간은 서비스 트래픽과 전환율에 악영향을 줍니다. (자료가 과장됐거나 정확하지 않을 수는 있겠지만, 일관된 언급이 신뢰성을 준다고 생각합니다.) 기존에 페이지...

Jan 5, 20231 min read12

typeORM에서 timezone 올바르게 적용하기

글로벌 서비스를 대비하여, typeORM 사용시 DB 타임존을 어떻게 적용할지 정리하였습니다. typeORM 사용시 다음 절차를 통해, 타임존을 올바르게 설정해 사용할 수 있습니다. DB 타임존 확인하기 typeORM의 타임존 설정 설정된 타임존 확인하기 DB 타임존 확인하기 DB의 타임존은 다음 쿼리로 확인할 수 있습니다. 현재 저는 AWS RDS mySQL을 사용하고 있어서, 파라미터 그룹 변경을 통해 타임존을 설정할 수 있어요. 참고자...

Dec 29, 20221 min read

4년차 초보 개발자의 성장 방법

개발자로써 밥을 먹은 지 4년차가 되었다. 일하면서 배울수록 모르는 것, 배울 것이 많이 보이고, 업무 범위와 책임이 커졌다. 특히 팀장으로써의 직무를 수행하면서 나, 개인에 대한 성장 뿐만아니라 팀의 성장, 회사의 성장을 고민하게 되었다. 동료 개발자들과 일하면서 “4년 동안 어떻게 실력을 키울 수 있었느냐”에 대한 질문을 많이 받았다. 이에 대해서 명확하게 말로 설명할 수 없었던, 정리되지 않은 것들이 있었고, 지금까지 개발하면서 성장하는데...

Sep 7, 20223 min read2
D

dev-marco-song

42 posts

Hi there 👋 백엔드 개발자 마르코입니다.

A natural-born problem solver. I can do this all day :)