source

도커 워드프레스 초저속

manysource 2023. 3. 1. 11:19

도커 워드프레스 초저속

도커에서 워드프레스를 작동시키고 있는데 지역 개발을 위해 작동 속도가 매우 느려요.docker-compose.yml은 다음과 같습니다.

version: '3.3'

services:
  db:
    image: mysql:5.7
    volumes:
      - ./db_data:/var/lib/mysql
      - ./dbconfig.cnf:/etc/mysql/conf.d/custom.cnf
    restart: always
    ports:
      - "3308:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: wp_database
      MYSQL_USER: db_user
      MYSQL_PASSWORD: some_secure_password

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "80:80"
      - "443:443"
    restart: always
    volumes:
      - ./wp-content:/var/www/html/wp-content
      - ./.htaccess:/var/www/html/.htaccess
      - ./wp-config.php:/var/www/html/wp-config.php
      - ./logs/debug.log:/var/www/html/wp-content/debug.log
volumes:
  db_data: {}
  wp_content: {}

가 인터넷에서로는, 가 '아, 아, 아, 아, 아, 기어를 탑재하고 있는 것은 이 때문입니다.wp-content볼륨 - 페이지 로딩 속도가 매우 느립니다(예를 들어 jquery 파일 등 각 파일을 로드하는 데 0.5초 정도 소요되며 한 페이지에 대해 많은 파일을 로드해야 합니다).

이에 대한 해결책이 있나요?NFS에 대한 내용은 읽었지만 도커 컴포지트로 NFS를 구성할 수 없었습니다. 계속 "권한 오류"가 발생합니다.한편, MacOS의 Docker 인터페이스에는 이미 "공유 폴더" 탭이 표시되지만, 현재 공유 폴더를 사용하고 있는지 아니면 다시 마운트하고 있는지 알 수 없습니다.

어떤 도움이라도 감사합니다.

TL;DR 컨테이너의 임시 폴더에 마운트하고 해당 폴더를 Bindfs와 공용 서버 폴더에 동기화합니다.컨테이너가 호스트 파일에 일일이 액세스해야 하기 때문에 WP 사이트에 직접 마운트하는 것은 느립니다.이것은 무거운 프로세스입니다.파일이 컨테이너에 직접 포함되어 있는 동안 공용 폴더에서 제공하는 것이 훨씬 빠릅니다.

Docker Compose 개발에서 로컬 WordPress에서도 동일한 문제가 발생하였습니다.컴퓨터의 속도는 중요하지 않습니다.컨테이너에 폴더를 마운트할 때 속도가 느려집니다.

NFS와 같은 솔루션이나 바이러스 대책에서 프로젝트를 적절히 제외하거나 .dockerignore를 추가하는 등의 권장 사항도 시도해 보았습니다.이렇게 하면 성능이 약간 향상됩니다.

비슷한 속도 향상을 검색하던 중 WordPress Starter 저장소 https://github.com/visiblevc/wordpress-starter/blob/cd7a3c4dc1dacdfb247fa6a86001cf6909734c87/Dockerfile에서 이 Docker 파일을 발견했습니다.이 파일을 보면 프로젝트를 초기화하고 컨테이너에 마운트하는 방법이 예를 들어 /var/www/html/가 아니라 임시 폴더에 마운트하는 방식임을 알 수 있습니다.그런 다음 bindfs를 통해 이 임시 폴더를 /var/www/html/로 동기화합니다.이렇게 하면 WordPress 페이지를 브라우저에 로드할 때마다 호스트 파일에 액세스하여 모든 요청에 대해 읽을 필요가 없기 때문에 매우 빠릅니다.WordPress 파일은 리눅스 컨테이너의 일부입니다.코드를 변경하면 변경 내용이 컨테이너 임시 폴더에 반영되고 bindfs는 즉시 이러한 변경 내용을 공용 컨테이너 폴더에 동기화합니다.공용 폴더에 대한 모든 변경 내용은 임시 폴더에 동기화되고 거기에서 호스트 프로젝트 파일로 동기화됩니다.

Mac 및 Windows에서는 고려해야 할 몇 가지 볼륨 성능 문제가 있습니다.

docker-compose.yml

짧은 구문을 긴 구문으로 변경했으므로 주의해 주십시오.

에서는 add를 할 수 있습니다.consistency option.

는 ㅇㅇㅇㅇㅇㅇㅇㅇ다를 넣었습니다.wp-content ★★★★★★★★★★★★★★★★★」php-conf(마다 가장 (php.ini) Wordpress는 Wordpress를 사용합니다.

services:
    wordpress:

        ...

        volumes:
            - ./data:/data
            - ./scripts:/docker-entrypoint-initwp.d
            #- ./wp-content:/app/wp-content
            - type: bind
              source: ./wp-content
              target: /app/wp-content
              consistency: cached
            #- ./php-conf:/usr/local/etc/php
            - type: bind
              source: ./php-conf
              target: /usr/local/etc/php
              consistency: cached

여기에 이미지 설명 입력

저도 같은 문제를 겪고 있습니다만, 해결 방법을 찾을 수 있을지도 모릅니다.

도커 데스크톱 앱(시간이 지남에 따라 고래처럼 보인다)

[설정] 을 엽니다.파일 공유

관련 폴더를 추가합니다.MySQL과 Wordpress 폴더를 같은 부모 폴더에 두고 추가했습니다.

[적용 후 재시작]을 클릭합니다.

내 웹사이트는 엄청나게 빨라졌다.

이게 도움이 됐으면 좋겠어요.

도커가 사이트를 운영하기 위해 검색해야 하는 디렉토리를 좁히면 훨씬 더 빨리 실행될 수 있다는 것을 깨달았습니다.예를 들어 Docker Desktop Settings dock 、 [ Settings ]> [ Resources ]> [ File Sharing ]의 /Users 가 디폴트로 설정되어 있습니다.해당 리소스를 삭제하고 사이트가 있는 디렉토리로 좁히면 Docker의 오버헤드가 많이 줄어듭니다.

여기에 이미지 설명 입력

주의: OS X를 사용하고 있습니다.도커에 할당되어 있는 RAM과 CPU를 증설하고 폴더를 리소스로 포함시켜 보았지만 아직 처리속도가 느렸습니다.

가능한 한 도킹 스테이션의 개선을 검토했습니다.가장 큰 도움이 된 것은 다음과 같습니다.

  1. 컨테이너에 추가 파일을 로드하지 않도록 해야 했습니다.제 프로젝트에서, 어떤 이유로든, 누군가가 전류를 로딩하고 싶어했어요.$PWD컨테이너에 넣습니다. 제거는 많은 이 되었다.

  2. 가 a a a를 .:delegated volume에 플래그를 합니다. '이것'이 아니라 ''을 하는 거죠?:cached로컬에서 개발 중이었기 때문에 파일을 캐시하고 싶지 않아서 페이지를 새로고침하여 최신 변경 사항을 얻으려고 했습니다.

그 후, 1페이지에 1~3분 정도의 로드 시간이 있었습니다.몇 주가 지나자 편집 시 자동 저장, wp-cron 등 데이터베이스에 대한 읽기 또는 쓰기와 관련된 모든 워드프레스 기능을 꺼야겠다는 생각이 들었습니다.이것들은 제작에 좋은 기능이지만, 개발 중에 너무 많은 작업을 해서 페이지 로드가 길어지는 것이 아닌가 하는 생각이 들었습니다.로컬에서 개발할 때만 사용하는wp-config.php 파일에서 사용한 내용은 다음과 같습니다.

define( 'AUTOSAVE_INTERVAL', 60*60*60*24*365 ); // Set autosave interval to 1x per year
define( 'EMPTY_TRASH_DAYS',  0 ); // Empty trash now: Zero days
define( 'WP_POST_REVISIONS', false );
define( 'DISABLE_WP_CRON', true ); // sends an XHR request with timestamp to server on every page load which queries db for posts that may need to be published and does so; :gross:

이게 도움이 됐으면 좋겠어요.IMHO 워드프레스만으로 MAMP/LAMP 스택을 실행할 수 있기 때문에 이렇게 할 필요는 없습니다.도커와 워드프레스의 성능이 운영체제 및 도커데스크탑에서 왜 이렇게 떨어지는지에 대한 답을 찾을 수 없습니다.

언급URL : https://stackoverflow.com/questions/54291859/docker-wordpress-super-slow