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
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
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?