IT

Docker Composition Wordpress with pure-ftpd - FTP 사용자에게 쓰기 권한이 없습니다.

itgroup 2023. 10. 20. 13:34
반응형

Docker Composition Wordpress with pure-ftpd - FTP 사용자에게 쓰기 권한이 없습니다.

도커가 처음이라 조금만 참아주세요.

배경: WSL2를 사용하는 Win 10 OS에서 다음과 같은 컨테이너를 설정했습니다.

워드프레스 + 마리아DB + PhpMyAdmin + Pure-ftpd

전체 웹사이트 속도가 느려지기 때문에 프로젝트 파일을 OS로 묶지 않습니다.대신, 저는 제 볼륨을 업데이트하기 위해 pure-ftpd를 사용하고 있습니다.

이 설정이 잘 수행됩니다!ATM 나의 DB는 약 1GB+, 파일은 약 500MB, 업로드는 약 22GB 입니다. *셰프의 키스

문제: FTP를 사용하여 파일을 만들면 "쓰기" 권한이 없습니다.따라서 새 스크립트를 만드는 것이 불가능해집니다.문제 해결 방법이 볼륨으로 이동하여 파일 권한을 "777"로 업데이트했습니다.

pure-ftpd는 사용자 "1000"을 사용하여 파일을 생성하지만 컨테이너에서 사용자를 검색하면 아무것도 반환되지 않습니다.

제가 뭘 놓쳤나 봐요.순수 ftpd가 "wordpress" 볼륨에 "root"으로 쓸 수 있도록 허용하는 YML

이것은 나의 .YML입니다.

services:
#DATABASE
  db:
    container_name: cc_db
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.9-focal
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - cc_db:/var/lib/mysql/****_woo
      - ./my_customized.cnf:/etc/mysql/my.cnf
    ports:
      - "3306:3306"  # To Allow Remote Connections
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=******++
      - MYSQL_DATABASE=******
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060

    networks:
      - cc_network

#PHPMYADMIN
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    environment:
      - UPLOAD_LIMIT=768M
      - PMA_HOST:db
      - PMA_PORT:3306
      - PMA_ARBITRARY:1
      - MYSQL_ROOT_PASSWORD=******++
    restart: always
    ports:
      - 8080:80
    networks:
    - cc_network

#WORDPRESS
  wordpress:
    container_name: cc_wordpress
    #image: wordpress:latest
    # Current Website:  Wordpress @ 6.0.2  -- PHP 8.1.10  -- Maria DB 10.6.9  :: Post Max Size: 128 MB , PHP Limit 120  :: Max Inpt Var 4500
    image: wordpress:6.0.2-php8.1
    ports:
      - 80:80
    restart: always
    networks:
      - cc_network
    environment:
      # our local dev environment
      - WORDPRESS_DEBUG:1
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=*****
    volumes:
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - ./httpd/wp-config.php:/var/www/html/wp-config.php
      - ./httpd/.htaccess:/var/www/html/.htaccess
      - cc_wordpress:/var/www/html/wp-content:rw

  ftp:
    container_name: ftpd-server
    image: stilliard/pure-ftpd:hardened
    depends_on:
      - wordpress
    ports:
      - 21:21
      - 20:20
      - 30000-30009:30000-30009
    volumes:
     - cc_wordpress:/home/user/:rw
     - './ftp/pass:/etc/pure-ftpd/passwd'
    environment:
      PUBLICHOST: "10.47.61.236"
      FTP_USER_NAME: "user"
      FTP_USER_PASS: "*****++"
      FTP_USER_HOME: "/home/user"
      ADDED_FLAGS: "--tls=2"
      TLS_CN: "**** FTP"
      TLS_ORG: "*****"
      TLS_C: "US"
      MAX_CONNECTIONS: "20"
    restart: always
    
    networks:
      - cc_network


networks:
  cc_network:

volumes:
  cc_wordpress:
  cc_db:

에 의하면pure-ftpd 당신이 나타낼 수 있는 문서.UID그리고.GID적절한 환경 변수를 사용하는 FTP 사용자:

설정하려면UID&GIDFTP 사용자의FTP_USER_UID&FTP_USER_GID환경 변수.

이 문서는 다음을 사용하는 를 제공합니다.pure-ftpd노골적으로 워드프레스로다음을 언급합니다.

워드프레스 컨테이너에서 파일의 소유자는UID 33&GID 33, 이에 따라 FTP 사용자의 UID & GID를 설정하고 다음과 같은 코드 스니플릿을 제공합니다.

version: "3.2"
services:
  web:
    image: wordpress:4.8-apache
    # other configs for wordpress
    volumes:
      - ./data/wordpress:/var/www/html
  ftp:
    # optionally replace username/repo:tag with your name and image details
    image: stilliard/pure-ftpd:latest
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    environment:
      PUBLICHOST: xxx.xxx.xxx.xxx
      FTP_USER_NAME: "bob"
      FTP_USER_PASS: "foobarqux"
      FTP_USER_HOME: "/var/www/html"
      FTP_USER_UID: 33
      FTP_USER_GID: 33
    volumes:
      - ./data/wordpress:/var/www/html
      - ./data/ftp:/etc/ssl/private
    ports:
      - target: 21
        published: 21
        protocol: tcp
        mode: host

# Bind each passive ports to the host
      - target: 30000
        published: 30000
        protocol: tcp
        mode: host
# ...

당신의 것을 수정해보세요.docker-compose이에 따라 파일은 다음과 유사한 것으로 추정됩니다.

services:
#DATABASE
  db:
    container_name: cc_db
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.9-focal
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - cc_db:/var/lib/mysql/****_woo
      - ./my_customized.cnf:/etc/mysql/my.cnf
    ports:
      - "3306:3306"  # To Allow Remote Connections
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=******++
      - MYSQL_DATABASE=******
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060

    networks:
      - cc_network

#PHPMYADMIN
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    environment:
      - UPLOAD_LIMIT=768M
      - PMA_HOST:db
      - PMA_PORT:3306
      - PMA_ARBITRARY:1
      - MYSQL_ROOT_PASSWORD=******++
    restart: always
    ports:
      - 8080:80
    networks:
    - cc_network

#WORDPRESS
  wordpress:
    container_name: cc_wordpress
    #image: wordpress:latest
    # Current Website:  Wordpress @ 6.0.2  -- PHP 8.1.10  -- Maria DB 10.6.9  :: Post Max Size: 128 MB , PHP Limit 120  :: Max Inpt Var 4500
    image: wordpress:6.0.2-php8.1
    ports:
      - 80:80
    restart: always
    networks:
      - cc_network
    environment:
      # our local dev environment
      - WORDPRESS_DEBUG:1
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=*****
    volumes:
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - ./httpd/wp-config.php:/var/www/html/wp-config.php
      - ./httpd/.htaccess:/var/www/html/.htaccess
      - cc_wordpress:/var/www/html/wp-content:rw

  ftp:
    container_name: ftpd-server
    image: stilliard/pure-ftpd:hardened
    depends_on:
      - wordpress
    ports:
      - 21:21
      - 20:20
      - 30000-30009:30000-30009
    volumes:
     - cc_wordpress:/home/user/:rw
     - './ftp/pass:/etc/pure-ftpd/passwd'
    environment:
      PUBLICHOST: "10.47.61.236"
      FTP_USER_NAME: "user"
      FTP_USER_PASS: "*****++"
      FTP_USER_HOME: "/home/user"
      FTP_USER_UID: 33
      FTP_USER_GID: 33
      ADDED_FLAGS: "--tls=2"
      TLS_CN: "**** FTP"
      TLS_ORG: "*****"
      TLS_C: "US"
      MAX_CONNECTIONS: "20"
    restart: always
    
    networks:
      - cc_network


networks:
  cc_network:

volumes:
  cc_wordpress:
  cc_db:

이미지를 사용하고 있으며 이는 다음을 기반으로 합니다.php:8.1-apache. 제가 알기로는 당신이Dockerfile 조정할 필요가 있다고 생각합니다.FTP_USER_UID그리고.FTP_USER_GID사용자가 아파치를 실행하는데 사용되는 변수와 일치하는 변수라고 가정합니다.www-data, Debian 시스템에서 기본적으로 생성됩니다.UID그리고.GID 33.

@jccampanero의 훌륭한 답변.도커는 다음과 같은 것을 실행할 수 있다고 덧붙이고 싶습니다.pure-pw useradd yourusername -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/youruser. 또한 문서에 의하면,

생성된 사용자의 uid 또는 gid로 인해 볼륨 권한에 문제가 있는 경우 사용할 uid의 -u 플래그를 변경하거나 그룹 ID로 -g를 지정할 수 있습니다.자세한 내용은 이슈 참조

언급URL : https://stackoverflow.com/questions/74008865/docker-compose-wordpress-with-pure-ftpd-ftp-user-has-no-write-permissions

반응형