HAOS Apps – WordPress

Home Assistant OS · Supervisor Apps · WordPress

WordPress를 HAOS Apps 위에,
그리고 REST API 404를 잡기까지

n8n과 같은 방식으로 WordPress를 HAOS Local App으로 올리고, 기존 외부 MySQL과 연결한 뒤, n8n에서 WordPress REST API로 접속하기까지의 과정. 404 하나를 원인 찾는 데 제일 오래 걸렸다.

대상 wordpress:7.0-php8.3-apache DB 외부 MySQL 192.168.219.137 도메인 w-wordpress.duckdns.org/
기동, 접속, n8n 인증 모두 성공

설계 결정

DB는 어떤 걸 쓸까 — Postgres vs MySQL

같은 HAOS에 이미 두 DB가 있었음: HA 자신이 쓰는 TimescaleDB(Postgres)와, 같은 네트워크의 외부 MySQL 서버. WordPress 코어는 MySQL/MariaDB 전용이라 MySQL을 선택. HA의 recorder DB와 섞이지 않도록 wordpress 전용 DB/계정을 새로 생성.

컨테이너 구조 — Apps는 1앱 = 1컨테이너

compose.yaml처럼 db+web을 한 앱에 못 묶으므로, DB가 이미 외부 서버에 있다는 점을 활용해 WordPress 컨테이너 하나만 만들고 그 외부 MySQL에 바로 접속하는 구조로 단순화.

진행 기록

준비

MySQL에 전용 DB/계정 생성

CREATE DATABASE wordpress + 전용 사용자 생성. homeassistant DB/계정 재사용하지 않음 (보안 격리 목적).

변환

config.yaml 작성

image: wordpress, ports: 80→8080, map: data → /var/www/html, WORDPRESS_DB_HOST를 외부 MySQL IP로 지정. 리버스 프록시 뒤 HTTPS 인식을 위해 WORDPRESS_CONFIG_EXTRAX-Forwarded-Proto 처리 로직 포함.

문제

n8n Credential 테스트 — 404 Not Found

n8n WordPress 노드에서 연결 테스트 시 “The resource you are requesting could not be found”. /wp-json/ REST API 경로 자체가 라우팅되지 않는 상태.

원인 확인

Permalinks가 “기본(Plain)” 상태

.htaccess를 직접 열어보니 BEGIN/END WordPress 사이가 비어있었음. 고유주소 설정을 저장한 적이 없어서 리라이트 규칙 자체가 생성되지 않았던 것이 원인.

최종 해결

고유주소를 “기본”에서 변경 후 저장

wp-admin → 설정 → 고유주소에서 사용자 정의 구조(/%post_id%/)로 변경 후 저장 → .htaccess에 리라이트 규칙 생성 확인 → /wp-json/ 정상 응답 → n8n 인증 성공.

최종 config.yaml 핵심 값

image / 빌드wordpress:7.0-php8.3-apache (직접 pull)
ports80/tcp → 8080
map (data)/var/www/html
WORDPRESS_DB_HOST192.168.219.137
WORDPRESS_DB_NAMEwordpress (전용 DB)
WORDPRESS_DB_CHARSETutf8mb4
도메인w-wordpress.duckdns.org/
NPM Forward192.168.219.130 : 8080

n8n 연동

Credential: WordPress API — URL(https://w-wordpress.duckdns.org/) + 사용자명 + Application Password(wp-admin 프로필에서 발급, 로그인 비밀번호와 별개). 고유주소를 정상 설정한 뒤 정상 연결됨.

기억해둘 것

REST API 404는 mod_rewrite보다 permalinks 저장 여부부터 의심할 것. .htaccess의 BEGIN/END 사이가 비어있으면 원인은 거의 확실히 “고유주소 = 기본” 상태다.
DB를 굳이 컨테이너로 새로 안 띄워도 된다. 이미 네트워크에 있는 DB 서버를 그대로 활용하면 Apps의 “1앱=1컨테이너” 제약을 우회할 수 있다. 단, 기존 서비스(HA recorder 등)와 스키마가 섞이지 않도록 전용 DB/계정 분리는 필수.
WordPress on HAOS Apps — 구축 기록 2026-07-07