
⚠️ 문제
북스택을 Laravel 기반 Docker 컨테이너로 AWS LightSail에 올린 후, 마이그레이션 완료하고 실행도 잘 실행되는데, 이미지가 브라우저에서 깨지는 문제



🧐 원인
`.env` 또는 `docker-compose.yml`에 APP_URL이 정확하지 않으면 이미지 링크가 절대경로로 잘못 렌더링 된다.
따라서 docker-compose.yml 이랑 \app\www\.env 파일의 APP_URL을 아래와 같이 맞춰야 한다.
APP_URL=http://<퍼블릭IP 또는 도메인>
두 설정파일의 APP_URL을 정확히 맞추고, Laravel 캐시 비우기로 이미지 깨짐 해결이 가능하다.
⚡ 해결법
1. docker-compose.yml에서 APP_URL 수정
nano docker-compose.yml
아래 항목이 있어야 한다. (도메인 또는 IP 기준):
environment:
- APP_URL=http://dainwiki.com
혹은 도메인 안 쓸 거면 http://43.202.6.70(Lightsail 인스턴스의 pubilc IP주소)로 정확히 지정한다.
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- APP_LANG=kr
- TZ=Asia/Seoul
- APP_KEY=secret
- APP_URL=http://dainwiki.com # ✅ 요거 추가!
2. /app/www/.env에도 동일하게 맞추기
컨테이너 내부에서
docker exec -it bookstack bash
nano /app/www/.env
APP_URL=http://dainwiki.com
혹은 도메인 안 쓸 거면 http://43.202.6.70(Lightsail 인스턴스의 pubilc IP주소)로 정확히 지정한다.
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- APP_LANG=kr
- TZ=Asia/Seoul
- APP_KEY=base64:e+a+iNSPR1dPRb1z0ujLve2XTyqmrifWza/0ssF1rp4=
- APP_URL=http://dainwiki.com # ✅ 요거 추가!
- DB_HOST=bookstack_db
- DB_DATABASE=bookstack
- DB_USER=bookstack
- DB_PASS=MySecret123!
volumes:
- ./bookstack_data:/config
depends_on:
- bookstack_db
ports:
- "80:80"
- "443:443"
networks:
- bookstack_net
bookstack_db:
image: mariadb:10.4
container_name: bookstack_db
restart: always
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=MySecret123!
volumes:
- ./db_data:/var/lib/mysql
networks:
- bookstack_net
networks:
bookstack_net:
driver: bridge
만약 nano 에디터로 편집중이면 수정 후, Ctrl + O, Ener, Ctrl + X (저장, 파일명확인, 나가기)
그릐고 반드시 컨테이너 종료 후 재시작
docker-compose down
docker-compose up -d
3. 컨테이너 들어가서 Laravel 캐시 정리
설정파일의 IP가 바뀌었으니 수정 후 캐시 정리하기
docker exec -it bookstack bash
cd /app/www
php artisan config:clear
php artisan cache:clear
4. 저장된 URL도 업데이트
BookStack은 초기 URL을 DB에도 저장한다.
이미 등록된 이미지가 있다면 URL을 일괄 업데이트해서 저장된 URL까지 교체해야 한다.
php artisan bookstack:update-url https://example.com http://dainwiki.com
https://example.com → 이전 잘못된 URL
http://dainwiki.com → 현재 정확한 URL
💡기존 URL 잘 모르겠다면 먼저 DB 안의 URL이 뭔지 확인하는 명령어
docker exec -it bookstack bash
ls /config/www/uploads/images/
위 명령어 수행하면 아래 두 개를 수행하면 된다.
계속하시겠습니까? yes 입력하기
Are you sure you want to proceed? (yes/no) [no]:
> yes
이건 기존 db를 백업했는지 물어보는 건데
This operation could cause issues if used incorrectly. Have you made a backup of your existing database? (yes/no) [no]:
> yes
나는 현재 실서비스가 아니고, 새로 설치한 BookStack이기 때문에 DB 백업은 안해도 되므로 yes 입력했다.
성공하면 아래와 같은 메세지가 뜬다.
✔ URL update completed successfully!
이제 브라우저에서 다시 접속하면 대성공
'TroubleShooting' 카테고리의 다른 글

⚠️ 문제
북스택을 Laravel 기반 Docker 컨테이너로 AWS LightSail에 올린 후, 마이그레이션 완료하고 실행도 잘 실행되는데, 이미지가 브라우저에서 깨지는 문제



🧐 원인
.env
또는 docker-compose.yml
에 APP_URL이 정확하지 않으면 이미지 링크가 절대경로로 잘못 렌더링 된다.
따라서 docker-compose.yml 이랑 \app\www\.env 파일의 APP_URL을 아래와 같이 맞춰야 한다.
APP_URL=http://<퍼블릭IP 또는 도메인>
두 설정파일의 APP_URL을 정확히 맞추고, Laravel 캐시 비우기로 이미지 깨짐 해결이 가능하다.
⚡ 해결법
1. docker-compose.yml에서 APP_URL 수정
nano docker-compose.yml
아래 항목이 있어야 한다. (도메인 또는 IP 기준):
environment: - APP_URL=http://dainwiki.com
혹은 도메인 안 쓸 거면 http://43.202.6.70(Lightsail 인스턴스의 pubilc IP주소)로 정확히 지정한다.
services: bookstack: image: lscr.io/linuxserver/bookstack:latest container_name: bookstack environment: - PUID=1000 - PGID=1000 - APP_LANG=kr - TZ=Asia/Seoul - APP_KEY=secret - APP_URL=http://dainwiki.com # ✅ 요거 추가!
2. /app/www/.env에도 동일하게 맞추기
컨테이너 내부에서
docker exec -it bookstack bash nano /app/www/.env
APP_URL=http://dainwiki.com
혹은 도메인 안 쓸 거면 http://43.202.6.70(Lightsail 인스턴스의 pubilc IP주소)로 정확히 지정한다.
services: bookstack: image: lscr.io/linuxserver/bookstack:latest container_name: bookstack environment: - PUID=1000 - PGID=1000 - APP_LANG=kr - TZ=Asia/Seoul - APP_KEY=base64:e+a+iNSPR1dPRb1z0ujLve2XTyqmrifWza/0ssF1rp4= - APP_URL=http://dainwiki.com # ✅ 요거 추가! - DB_HOST=bookstack_db - DB_DATABASE=bookstack - DB_USER=bookstack - DB_PASS=MySecret123! volumes: - ./bookstack_data:/config depends_on: - bookstack_db ports: - "80:80" - "443:443" networks: - bookstack_net bookstack_db: image: mariadb:10.4 container_name: bookstack_db restart: always environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=bookstack - MYSQL_USER=bookstack - MYSQL_PASSWORD=MySecret123! volumes: - ./db_data:/var/lib/mysql networks: - bookstack_net networks: bookstack_net: driver: bridge
만약 nano 에디터로 편집중이면 수정 후, Ctrl + O, Ener, Ctrl + X (저장, 파일명확인, 나가기)
그릐고 반드시 컨테이너 종료 후 재시작
docker-compose down docker-compose up -d
3. 컨테이너 들어가서 Laravel 캐시 정리
설정파일의 IP가 바뀌었으니 수정 후 캐시 정리하기
docker exec -it bookstack bash cd /app/www php artisan config:clear php artisan cache:clear
4. 저장된 URL도 업데이트
BookStack은 초기 URL을 DB에도 저장한다.
이미 등록된 이미지가 있다면 URL을 일괄 업데이트해서 저장된 URL까지 교체해야 한다.
php artisan bookstack:update-url https://example.com http://dainwiki.com
https://example.com → 이전 잘못된 URL
http://dainwiki.com → 현재 정확한 URL
💡기존 URL 잘 모르겠다면 먼저 DB 안의 URL이 뭔지 확인하는 명령어
docker exec -it bookstack bash ls /config/www/uploads/images/
위 명령어 수행하면 아래 두 개를 수행하면 된다.
계속하시겠습니까? yes 입력하기
Are you sure you want to proceed? (yes/no) [no]:
> yes
이건 기존 db를 백업했는지 물어보는 건데
This operation could cause issues if used incorrectly. Have you made a backup of your existing database? (yes/no) [no]:
> yes
나는 현재 실서비스가 아니고, 새로 설치한 BookStack이기 때문에 DB 백업은 안해도 되므로 yes 입력했다.
성공하면 아래와 같은 메세지가 뜬다.
✔ URL update completed successfully!
이제 브라우저에서 다시 접속하면 대성공