Prj PJ

[리눅스] wordpress 설치 ( docker, mysql , nginx )

솔헬레나 2023. 5. 19. 22:35

리눅스에 docker를 이용하여 wordpress를 설치해보았다.

설치 시 php는 자동으로 설치되어 별도의 설정은 없었으며 mysql도 docker compose를 통해 설정해주었다. 

 

[ 사전조건 ]

1. mysql 설치 ( https://helena90-study.tistory.com/27

2. docker 설치 ( https://helena90-study.tistory.com/23 )

 

 

1. DB 준비 ( mysql ) 

1) mysql에 wordpress 계정 추가하기

root계정으로 로그인하고

$ mysql -u root -p

mysql에서 wordpress db에 접속할 계정을 추가한다.

mysql > create user 'wordpressID'@'localhost' identified by '패스워드';
mysql > create user 'wordpressID'@'%' identified by '패스워드';

 

2) database 추가

mysql > create database wordpress ;
mysql > show database;

 

3) 계정에 권한 부여

mysql> grant all privileges on wordpress.*to'wordpressID'@'%';
mysql> grant all privileges on wordpress.*to'wordpressID'@'localhost';

--  변경사항 적용 , 반드시 해야함
mysql> flush privileges;

 

4) 생성한 계정으로 로그인

# userID로 로그인
$ mysql -u {유저아이디} -p

 

5) 내 데이터베이스 접근권한 확인

mysql> show grants for current_user;

 


2. docker으로 워드프레스 설치 

1) 버전확인

docker-compose --version

 

2) 디렉토리 생성

$ mkdir my_wordpress
$ cd my_wordpress

3) docker-compose.yml 생성

echo '' > 'docker-compose.yml'
vim 'docker-compose.yml'

4) docker-compose.yml 작성

version: '3.3'
services:
  wordpress:
    image: wordpress:latest
    volumes:
      - ./wordpress_data:/var/www/html
    ports:
      - 80:80
    container_name: home-wordpress
    restart: always
    environment:
      - WORDPRESS_DB_HOST = "DB주소"
      - WORDPRESS_DB_USER = "DB사용자 이름"
      - WORDPRESS_DB_PASSWORD = "DB사용자 비밀번호"
      - WORDPRESS_DB_NAME = "DB이름"
      - WORDPRESS_TABLE_PREFIX="prefix이름"

5) yml 파일을 실행하여 설치

docker-compose up -d

 

-) yml 파일 수정 시 docker-compose 파일을 내린 후 다시 up해야 적용된다.

docker-compose down

 

-)  yml 파일을 실행주의사항 

1) yaml: line 24: did not find expected key 오류 - 참고

해결방법 : yml파일 작성 시 앞부분에 띄어쓰기같은 간격을 맞춰주어야 한다. 

2) Error response from daemon: invalid mount config for type "volume": invalid mount path: 'var/www/html' mount path must be absolute - 참고 

해결방법 : docker경로를 지정할 때, ./ 또는 ../ 를 사용해서 발생하는 이슈이므로 경로를 정확하게 지정하면 된다. 

 

 

6) 브라우저에서 워드프레스가 설치된 URL로 이동 후 확인

 

7) 1에서 생성한 데이터베이스 정보와 ID, PW, ID의 호스트 를 입력 후 [제출]클릭

만약 이 단계에서 넘어가지 않는다면 워드프레스와 연결할 DB에 문제가 있는 것이므로 본 글의 1번을 재수행해야한다.

 


3. Nginx를 이용하여 지정된 도메인으로 워드프레스 접근설정하기

ㄴ1) docker 및 인증서, 공유기의 포트정보 설정

( https://helena90-study.tistory.com/29 의 '#docker 로 설치하기' 의 1, 2 를 준비한다. ( 이미 설치되었다면 생략한다. ) 

 

ㄴ2) docker compose의 실행을 위한 문서 작성

1에서 사용한 글에서 Dockerfile , docker-compose.yml, nginx.conf를 작성 및 추가함

 

ㄴ3) default.conf 파일에 블로그 설정을 추가한다.

$sudo vi ./nginx/conf.d/default.conf
upstream blog_server {
   keepalive 20;
   server 198.162.0.69:80 max_fails=1 fail_timeout=10s;
   # 192.168.0.69:80 : 워드프레스가설치OS의IP:포트번호
}

# blog.solena.kr
server {
    listen 80;
    listen [::]:80;
    server_name blog.solena.kr;
    charset utf-8;
    root /var/www/blog;

    access_log /var/log/nginx/blog.solena.kr_access.log;
    error_log /var/log/nginx/blog.solena.kr_error.log error;

    location / {
        return 301 https://$host$request_uri;
    }
}

#https설정
server {
    listen 443 ssl;
    server_name blog.solena.kr;
    server_tokens off;
    charset utf-8;
    root /var/www/blog;

    access_log /var/log/nginx/blog.solena.kr_access.log;
    error_log /var/log/nginx/blog.solena.kr_error.log error;

    ssl_certificate 보안키 정보;
    ssl_certificate_key 보안키 정보;

    client_max_body_size 0;
    chunked_transfer_encoding on;

    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-Proto $scheme;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    add_header Pragma "no-cache";
    add_header X-Frame-Options sameorigin;

    client_body_buffer_size 1m;
    proxy_redirect off;
    proxy_next_upstream error timeout invalid_header http_502 http_503;
    proxy_connect_timeout 2;
    proxy_intercept_errors on;
    proxy_buffering on;
    proxy_buffer_size 128k;
    proxy_buffers 256 16k;
    proxy_busy_buffers_size 256k;
    proxy_temp_file_write_size 256k;
    proxy_max_temp_file_size 0;
    proxy_read_timeout 300;

	# /api 경로로 오는 요청을 백엔드 upstream 의 /api 경로로 포워딩
    # location /api {
    #     proxy_pass         http://myweb-api/api;
    # }

	# / 경로로 오는 요청을 백엔드 upstream 의 / 경로로 포워딩
    location / {
        proxy_pass http://blog_server;
    }
}

ㄴ4) docker 실행

$ docker-compose -f docker-compose-nginx.yml up -d

 

 


참고

https://kjun.kr/1646

https://www.seankim.life/2022/06/23/docker%EB%A1%9C-wordpress-%EC%9A%B4%EC%98%81%ED%95%98%EA%B8%B0-mysql-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

https://bill1224.tistory.com/357

 

 

-> docker 말고 직접설치

https://suee-b.tistory.com/entry/Linux%EB%A1%9C-wordpress-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0