Jak poprawnie uruchomić aplikację w kontenerach w wersji deweloperskiej i produkcyjnej?

1

Cześć!

Mam lokalne środowisko w którym uruchamiam w kontenerach WordPressa, bazę i inne wspierające narzędzia.

version: '3.1'

services:
  wordpress:
    image: wordpress:latest 
    container_name: wrotkaweb_wordpress
    #command: pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: <tajne hasło>
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress_data:/var/www/html
      - ./wp_content:/var/www/html/wp-content 
    networks:
      - wrotkaweb

  db:
    image: mariadb:latest
    container_name: wrotkaweb_db
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: <tajne hasło>
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - ./db_data:/var/lib/mysql
    networks:
      - wrotkaweb

  redis:
    image: redis:latest
    container_name: wrotkaweb_redis
    networks:
      - wrotkaweb
    ports:
      - "6379:6379"

  nginx:
    image: nginx:latest
    container_name: wrotkaweb_nginx
    volumes:
      - ./nginx-conf/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - wordpress
      - varnish 
    networks:
      - wrotkaweb


  varnish:
    image: varnish:latest
    container_name: wrotkaweb_varnish
    ports:
      - "6081:6081"
    depends_on:
      - wordpress
    networks:
      - wrotkaweb
    volumes:
      - ./varnish-conf/default.vcl:/etc/varnish/default.vcl


networks:
  wrotkaweb:
    driver: bridge

volumes:
  wordpress_data:
    driver: local
  wp_content:  
    driver: local
  db_data:
    driver: local

Na lokalnym środowisku wszystko działa jak trzeba. Powołuję kontenery do życia wydając polecenie docker compose -f docker-compose.yml up.

Cały katalog . utrzymuję w repozytorium (Git). Jeżeli więc modyfikuję sam plik docker-compose.yml czy pliki szablonów WordPressa korzystam z standardowego mechanizmu git add, git commit, git push. W repozytorium nie utrzymuję jedynie katalogu ./db_data.

Przy takiej konfiguracji teoretycznie więc wystarczyłoby żebym na środowisku docelowym wykonał git pull z repo, uruchomił docker compose [...] i tyle wystarczy do przeniesienia aplikacji na środowisko produkcyjne. Oczywiście pomijam na razie kwestię automatyzacji tego procesu czy też konieczności dostosowania danych w bazie (wordpress site_url i home).

Pytanie czy takie podejście jest zgodne ze sztuką?

Drugie pytanie brzmi jak w takim układzie poradzić sobie z przeniesieniem bazy na prod? Teoretycznie pliki z volume ./db_data:/var/lib/mysql też mogą siedzieć w repo, ale nie brzmi to dla mnie zbyt dobrze.

Jak waszym zdaniem najlepiej to ogarnąć?

Dodatkowo byłbym też wdzięczny za podpowiedź jak najlepiej rozwiązać konieczność instalacji rozszerzenia php-redis w kontenerze wordpress tak aby zapewnić wtyczce WP Total Cache możliwość korzystania z backendu Redis.

0

używaj obrazów wersjonowanych, :latest może rodzić problemy przy nowych releasach a juz tym bardziej na wordpressie

0

Co do wp: na CI zbuduj sobie obraz dockera który juz w srodku bedzie mial wszystkie pliki z wordpress_data oraz wp_content - i wtedy odpalaj ten zbudowany obraz zamiast "wordpress:latest"

Co do bazy: chodzi ci o przeniesienie samego schematu bazki na potrzeby stawiania srodowiska?

0
Jan Ko napisał(a):

Co do bazy: chodzi ci o przeniesienie samego schematu bazki na potrzeby stawiania srodowiska?

Moglibyśmy od tego rozpocząć, ale sam schemat to może być za mało. Na lokalnym środowisku mogę wprowadzać zmiany, np. dodawać nowe podstrony do WP, instalować wtyczki, etc i to wszystko odkłada się też w bazie, więc później trzeba to zmigrować na proda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1