DevOps

Kako podesiti PHP opcije WordPressa u Dockeru

Kako podesiti PHP opcije Wordpressa u Dockeru

Naučite kako da podesite PHP opcije kada pokrećete WordPress u kontejneru koristeći Docker, Docker Svarm, Docker Compose i Kubernetes.
U ovom tekstu ćete naučiti kako da podesite PHP opcije u Docker-u koristeći .htaccess za WordPress.

U zavisnosti od toga kako se koristi vaša PHP aplikacija, u ovom slučaju WordPress, možda ćete morati da prilagodite neke od PHP opcija.
Obično su ove opcije postavljene u vašoj php.ini fajlu, a mogu se onda prepisati .htaccess datotekom, što pojednostavljuje stvari.

Najčešće opcije koje ćete prilagoditi za WordPress su:

  • memory_limit
  • upload_max_size
  • post_max_size
  • upload_max_filesize
  • max_execution_time
  • max_input_time

Podrazumevane vrednosti će obično biti dovoljne. Međutim, ako primetite da ograničenja memorije ili ograničenja za otpremanje vas sprečavaju da dodate sadržaj, ove vrednosti bi trebalo da se podese.

[bkinfobox textcolor=”#ffffff” backgroundcolor=”#003366″ title=”” infobox_align=”aligncenter”]PHP opcije treba prilagođavati samo prema potrebi. Preporučuje se da se ove vrednosti ostave kao podrazumevane, osim ako ne budete imali problema.[/bkinfobox]

U primerima ispod, napravićemo .ini datoteku za čuvanje naših novih PHP opcija. Datoteka će zatim biti dodata u direktorijum conf.d za PHP. Strategija dodavanja ove datoteke zavisi od toga na kojoj platformi vaš Docker kontejner radi. Uključili smo uputstva za najčešće: Docker, Docker Compose \ Svarm i Kubernetes.

Docker

Napravimo novi fajl pod nazivom wordpress.ini i postavimo PHP podešavanje.
file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 1000

Kada pokrenete kontejner, potrebno je mountovati wordpress.ini kao volume unutar kontejnera. Mora da se mountuje kao datoteka u direktorijum /usr/local/etc/php/conf.d

docker run -d -p 8080:80 \
-v ./wordpress.ini:/usr/local/etc/php/conf.d/wordpress.ini \
-e WORDPRESS_DB_HOST="db:3306" \
-e WORDPRESS_DB_PASSWORD="NekiPassword" \
wordpress:5.5.0-php7.4-apache

Docker Compose \ Swarm

Napravimo novi fajl pod nazivom wordpress.ini i postavimo PHP podešavanje.

file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 1000

A zatim mountujemo fajl kao volume u svoj kontejner.

version: '2'
services:
   wordpress:
     depends_on:
       - db
     image: wordpress:5.5.0-php7.2-apache
     ports:
       - "8080:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_PASSWORD:NekiPassword
 volumes: - ./wordpress.ini:/usr/local/etc/php/conf.d/wordpress.ini volumes: db_data:

Kubernetes

apiVersion: v1
kind: ConfigMap
metadata:
  name: wordpress-php-options
data:
  wordpress.ini: |
    file_uploads = On
    memory_limit 256M
    upload_max_filesize 64M
    post_max_size 64M
    max_execution_time 300
    max_input_time 1000   

Potvrdićemo ConfigMap da bismo ga kreirali u Kubernetes klasteru.

kubectl apply -f wordpress-htaccess-configmap.yaml

Sada updejtujemo yaml fajl da bismo postavili ConfigMap ključ podataka wordpress-htaccess kao datoteku.

apiVersion: apps/v1
kind: Deployment
metadata:
    name: wordpress
    labels:
        app: wordpress
spec:
    replicas: 1
    selector:
        matchLabels:
            app: wordpress
    template:
        metadata:
            labels:
                app: wordpress
        spec:
            containers:
                - name: wordpress
                  image: wordpress:5.5.0-php7.2-apache
                  ports:
                    - containerPort: 80
                  envFrom:
                    configMap:
                      name: wordpress
                  volumeMounts:
                  - name: wordpress-php-optons
                    mountPath: "/usr/local/php/conf.d/uploads.ini"
            volumes:
            - name: wordpress-htaccess
              configMap:
                configMapName: wordpress-php-options
                defaultMode: 0400

4 Komentara

  • Zasto se radi mount fajla a ne kopiranje fajla, koja je razlika?
    Konkretno na Dockeru, zasto mount wordpress.ini u /usr/local/etc/php/conf.d/wordpress.ini a ne COPY wordpress.ini /usr/local/etc/php/conf.d/wordpress.ini

    • Kada se koristi mount umesto copy datoteke, to znači da se datoteka ne kopira između dve različite lokacije u memoriji, već je prikačena na određenu lokaciju u memoriji.
      Kada se datoteka kopira, to znači da se nova fizička kopija datoteke kreira na drugoj lokaciji u memoriji.

      U Dockeru, kada se koristi datoteka mount, to znači da se datoteka ne kopira u Docker kontejner, već se montira na određenu lokaciju u Docker kontejneru.
      Ovo omogućava da se datoteka promeni van kontejnera i da se promene odraze unutar kontejnera bez potrebe za kreiranjem nove Docker slike, odnosno image-a.

      Kada se komanda “COPY” koristi u Dockerfile-u, to znači da se datoteka kopira iz sistema datoteka hosta u Docker kontejner.
      To znači da će svaka promena datoteke van kontejnera zahtevati kreiranje nove Docker slike koja će odražavati te promene unutar kontejnera.

      U ovom slučaju, mountovanje datoteke “wordpress.ini” na određenu lokaciju u kontejneru omogućava laku izmenu konfiguracije WordPressa van kontejnera bez potrebe za kreiranjem nove Docker slike.
      Ako bismo koristili komandu COPY, sve promene u datoteci wordpress.ini van kontejnera bi zahtevale kreiranje nove Docker slike koja bi odražavala te promene unutar kontejnera.
      Hvala na komentaru.

      • Hvala puno, odlicno objasnjeno, ni na kraj pameti mi nije palo da su u pitanju potencionalne dodatne izmene nakon sto se napravi image.

        • Ustvari imam jos jedno pitanje – kad se uradi mount umesto copy, pa se uradi push na Docker Hub znaci li to onda da taj kontejner nece raditi kad se skine i pokrene na nekom drugom hostu koji nema taj eksterni fajl koji je mountovan prilikom izrade image-a?

Napišite komentar