Docker Compose WordPress with pure-ftpd – FTP-Benutzer hat keine Schreibrechte

Lesezeit: 5 Minuten

Benutzeravatar von Jpv
Jpv

Etwas neu bei Docker, also bitte haben Sie Geduld mit mir.

HINTERGRUND:
Ich habe die folgenden Container in einem Win 10-Betriebssystem mit WSL2 eingerichtet:

WordPress + MariaDB + PhpMyAdmin + Pure-ftpd

Ich binde meine Projektdateien nicht an mein Betriebssystem, da dies die gesamte Website verlangsamt. Stattdessen verwende ich pure-ftpd, um meine Volumes zu aktualisieren.

Dieses Setup funktioniert großartig! ATM my DB ist etwa 1 GB+, Dateien etwa 500 MB und Uploads etwa 22 GB. *Kuss des Küchenchefs

PROBLEM:
Wenn ich eine Datei mit FTP erstelle, hat diese keine “Schreiben”-Berechtigungen. So wird das Erstellen neuer Skripte unmöglich. Eine Problemumgehung wurde auf das Volume verschoben und die Dateiberechtigung auf „777“ aktualisiert.

pure-ftpd erstellt die Dateien mit dem Benutzer „1000“, aber wenn ich versuche, den Benutzer im Container zu suchen, gibt dies nichts zurück.

Mir fehlt etwas in meiner .YML, damit pure-ftpd als “root” in das Volume “wordpress” schreiben kann

Das ist meine .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:

Benutzeravatar von jccampanero
jccampanero

Laut dem pure-ftpd Dokumentation könntest du angeben UID und GID des FTP-Benutzers mit den entsprechenden Umgebungsvariablen:

Wenn Sie die einstellen möchten UID & GID des FTP-Benutzers verwenden Sie die FTP_USER_UID & FTP_USER_GID Umgebungsvariablen.

Die Dokumentation bietet auch eine Beispiel vom Benutzen pure-ftpd explizit mit WordPress. Es erwähnt:

Im WordPress-Container hat der Eigentümer der Dateien die UID 33 & GID 33also setzen wir die UID & GID des FTP-Benutzers entsprechend und stellen das folgende Code-Snipplet bereit:

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
# ...

Bitte versuchen Sie, Ihre zu ändern docker-compose Datei entsprechend, ich nehme etwas Ähnliches an:

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:

Sie verwenden die wordpress:6.0.2-php8.1 Bild die wiederum darauf basiert php:8.1-apache. Soweit ich das verstehe von php:8.1-apache Dockerfile die müsstest du anpassen FTP_USER_UID und FTP_USER_GID Variablen, die mit denen übereinstimmen, die zum Ausführen von Apache verwendet werden, nehme ich an, der Benutzer www-data, standardmäßig erstellt in Debian-Systeme mit UID und GID 33.

Hervorragende Antwort von @jccampanero. Möchte hinzufügen, dass Sie so etwas wie Docker Exec ausführen können pure-pw useradd yourusername -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/youruser. Auch laut Dokumentation,

Wenn Sie aufgrund der UID oder GID des erstellten Benutzers Probleme mit Volume-Berechtigungen haben, können Sie das Flag -u für die UID ändern, die Sie verwenden möchten, und/oder -g auch mit der Gruppen-ID angeben. Weitere Informationen siehe Ausgabe

1435600cookie-checkDocker Compose WordPress with pure-ftpd – FTP-Benutzer hat keine Schreibrechte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy