Introduktion: Hvorfor denne guide?
At opsætte Akeneo PIM, især en specifik version som CE 5, kan være en kompleks opgave, der involverer mange afhængigheder: en webserver, den korrekte PHP-version og udvidelser, en database og en søgeserver. Denne guide er resultatet af betydelig trial-and-error for at skabe en stabil, reproducerbar opsætning ved hjælp af Docker. Den er designet til udviklere, der ønsker et pålideligt lokalt miljø til udvikling, test eller endda en lille produktionsimplementering.
Kerneteknologier Forklaret
- Akeneo CE: Et open-source Product Information Management (PIM) system bygget på det kraftfulde Symfony PHP-framework. Det hjælper dig med at centralisere og harmonisere al din produktinformation.
- Docker: En platform, der pakker applikationer og deres afhængigheder i isolerede containere. Dette eliminerer 'det virker på min maskine'-problemet og sikrer et konsistent miljø overalt.
- MySQL: En populær open-source relationel database, der vil gemme alle dine produktdata, attributter, familier og kategorier. Vores opsætning bruger en fjern MySQL-instans, hvilket er almindeligt i cloud-miljøer.
- Elasticsearch: En kraftfuld søgemaskine, som Akeneo bruger til at levere hurtige og fleksible produktsøgnings- og filtreringsmuligheder i PIM'et.
- Apache & PHP-FPM: Apache er vores webserver, der lytter efter anmodninger, mens PHP-FPM (FastCGI Process Manager) er en avanceret og yderst effektiv processor til PHP, der udfører Akeneo-applikationskoden.
Projektets Filstruktur
Før vi begynder, skal du oprette en projektmappe og placere alle konfigurationsfilerne i den. Din struktur skal se således ud:
/akeneo-ce-project/
├── Dockerfile
├── docker-compose.yml
├── akeneo-pim.local.conf
├── run.sh
├── sshd_config
├── get_composer.sh
├── env_template
docker-compose.yml Forklaret
Denne fil orkestrerer vores Docker-opsætning. Den definerer 'pim'-tjenesten, bygger imaget ved hjælp af vores Dockerfile, mapper porte og injicerer vores databaseoplysninger som miljøvariabler. Bemærk, at vi mapper tre porte: 8080 til Akeneo UI, 2222 til SSH-adgang, og 80 for at vise, at det også er muligt at eksponere standard-http-porten.
version: '3.4'
services:
pim:
image: 'gfacrakeneosazne.azurecr.io/akeneo_ce5:1'
working_dir: '/'
ports:
- 8080:80
- 2222:2222
- 80:80
environment:
APP_DATABASE_HOST: 'gf-sqlsrv-akeneodb-s-azne.mysql.database.azure.com'
APP_DATABASE_PORT: 'null'
APP_DATABASE_NAME: 'akeneo_local'
APP_DATABASE_USER: 'akeneo_pim'
APP_DATABASE_PASSWORD: 'ghytPAQg'
Dockerfile: Opbygning af Akeneo-imaget
Det er her magien sker. Dockerfile bygger vores image lag for lag, installerer alle nødvendige systemafhængigheder, konfigurerer servere og installerer til sidst selve Akeneo. Jeg har tilføjet kommentarer for at forklare hvert større trin.
# Brug Ubuntu som base-image
FROM ubuntu:latest
# Installer grundlæggende afhængigheder og PHP 7.4 med alle krævede udvidelser
RUN apt update
RUN apt install --assume-yes lsb-release apt-transport-https ca-certificates wget gnupg make git
RUN DEBIAN_FRONTEND=noninteractive apt install --assume-yes php7.4-cli php7.4-apcu php7.4-bcmath php7.4-curl php7.4-fpm php7.4-gd php7.4-intl php7.4-mysql php7.4-xml php7.4-zip php7.4-zip php7.4-mbstring php7.4-imagick php7.4-exif
# Installer og konfigurer Apache webserver
RUN apt install --assume-yes apache2
RUN a2enmod rewrite proxy_fcgi
RUN service apache2 restart
COPY akeneo-pim.local.conf /etc/apache2/sites-available/
# Installer Node.js og Yarn til frontend-assets
RUN apt install --assume-yes nodejs
RUN apt install --assume-yes yarnpkg
# Installer og konfigurer Elasticsearch 7.x
RUN apt install --assume-yes apt-transport-https
RUN wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
RUN echo \"deb https://artifacts.elastic.co/packages/7.x/apt stable main\" | tee -a /etc/apt/sources.list.d/elastic-7.x.list
RUN apt update && apt install --assume-yes elasticsearch
# Konfigurer Elasticsearch til et single-node cluster, essentielt for udviklingsmiljøer
RUN echo \"discovery.type: single-node\" >> /etc/elasticsearch/elasticsearch.yml
# Installer Composer (PHP-pakkehåndtering)
COPY get_composer.sh .
RUN sh get_composer.sh
RUN cp composer.phar /usr/local/bin/composer
# Download og installer Akeneo CE 5
RUN wget https://download.akeneo.com/pim-community-standard-v5.0-latest-icecat.tar.gz
RUN tar xvzf pim-community-standard-v5.0-latest-icecat.tar.gz
WORKDIR /pim-community-standard
# Vi kopierer midlertidigt .env-filen for at køre installations-make-kommandoen
COPY .env /pim-community-standard/.env.local
RUN NO_DOCKER=true make prod
RUN rm .env.local
RUN chmod -R 777 /pim-community-standard
# Færdiggør Apache-konfiguration
RUN apache2ctl configtest
RUN a2ensite akeneo-pim.local
RUN a2dissite 000-default
# Opsæt hosts-fil til lokal domænemapping
CMD echo \"127.0.0.1 akeneo-pim.local\" >> /etc/hosts
# Installer og konfigurer SSH-server for debugging-adgang
RUN apt update
RUN apt install --assume-yes openssh-server \\
&& echo \"root:Docker!\" | chpasswd
COPY sshd_config /etc/ssh/
# Kopier og forbered opstartsscriptet
COPY run.sh /
RUN chmod 777 /run.sh
# Kopier miljø-skabelonen som opstartsscriptet skal bruge
COPY env_template /
# Definer containerens entrypoint
ENTRYPOINT [\"bash\", \"/run.sh\"]
# Eksponer porte
EXPOSE 80 2222
Opstartsscriptet run.sh
Dette script er containerens entrypoint. Det udfører afgørende opstartsopgaver i den korrekte rækkefølge: det opretter dynamisk .env-filen fra skabelonen og miljøvariablerne, starter alle nødvendige tjenester (SSH, Elasticsearch, PHP, Apache), og derefter, efter en forsinkelse for at sikre, at Elasticsearch er klar, nulstiller og genopbygger det Akeneos søgeindekser. Dette sidste trin er afgørende for, at PIM'et fungerer korrekt ved første opstart.
#/bin/bash
echo \"Starting ssh\"
service ssh start
echo \"apply environment variables\"
cd /pim-community-standard
rm .env
cp /env_template .env
sed -i \"s/{APP_DATABASE_HOST}/$APP_DATABASE_HOST/g\" .env
sed -i \"s/{APP_DATABASE_PORT}/$APP_DATABASE_PORT/g\" .env
sed -i \"s/{APP_DATABASE_NAME}/$APP_DATABASE_NAME/g\" .env
sed -i \"s/{APP_DATABASE_USER}/$APP_DATABASE_USER/g\" .env
sed -i \"s/{APP_DATABASE_PASSWORD}/$APP_DATABASE_PASSWORD/g\" .env
sed -i \"s/{AKENEO_PIM_URL}/$AKENEO_PIM_URL/g\" .env
echo \"Starting elastic\"
service elasticsearch stop
killall java
service elasticsearch start
echo \"Starting php\"
service php7.4-fpm start
echo \"Starting apache\"
service apache2 start
echo \"Waiting 60 seconds for elastic to start\"
sleep 60
echo \"Resetting indexes\"
php bin/console akeneo:elasticsearch:reset-indexes
echo \"Reindexing\"
php bin/console pim:product:index --all
tail -f /dev/null
Installationstrin
- Start Docker: Sørg for, at Docker Desktop kører på din maskine.
- Naviger til Projektmappen: Åbn din terminal og `cd` ind i mappen, hvor du har gemt alle konfigurationsfilerne.
- Kør Docker Compose: Udfør følgende kommando. `-d`-flaget kører containeren i detached mode (i baggrunden).
docker-compose up -d --build
- Vent på Opsætning: Første kørsel vil tage betydelig tid, da Docker skal downloade Ubuntu-imaget og køre alle installationstrinene i Dockerfile. Efterfølgende kørsler vil være meget hurtigere. Du kan overvåge fremskridtet ved at køre `docker-compose logs -f`.
- Få Adgang til Akeneo: Når containeren kører, skal du åbne din webbrowser og navigere til http://localhost:8080. Du skulle se Akeneo-login-skærmen. Standard-loginoplysninger er typisk `admin` / `admin`.
- Debugging via SSH: Hvis du har brug for at inspicere containeren, kan du SSH ind i den ved hjælp af den port, vi har mappet. Adgangskoden er 'Docker!'.
ssh root@localhost -p 2222