DiscoverPlaces Raport #1 – docker + symfony

Poszły pierwsze commity, więc czas na pierwszy raport na temat projektu, który realizuję w ramach konkursu Daj się Poznać.  Na czym on polega opisane zostało w tym wpisie .

Wstęp

Pierwszą rzeczą od której zaczynam jest przygotowanie API. Będzie ono stosunkowo proste, więc jest to łatwiejsza część. Po zamknięciu prac nad API przejdę do tworzenia aplikacji, co będzie już trudniejsze dla mnie, gdyż wiąże się to z poznaniem nowych technologii, których nie miałem jeszcze okazji używać. Jednak z tego powodu będzie to najciekawsza część projektu. Zawsze to nowe wyzwania oraz doświadczenia, czyli nie będzie nudno. Poza tym takie mamy czasy, że technologie zmienia się częściej niż rękawiczki, szczególnie na froncie, więc dobrze jest mieć szersze rozeznanie i nie zamykać się na jedną opcję.

Środowisko

Niestety dosyć dużo czasu zajęło mi skonfigurowanie środowiska pracy. Postanowiłem przy okazji ogarnąć Dockera, z którym wcześniej nie miałem styczności, więc pojawiło się trochę problemów. Początkowo zamierzałem utworzyć własną konfigurację, jednak porzuciłem ten pomysł i użyłem gotowca php7-dockerized, którego jedynie lekko zmodyfikowałem. Tutaj również napotkałem na kilka problemów, jednak jakoś udało się to ruszyć. Poniżej przedstawione zostało kilka uwag odnośnie używania docker-compose.

Jak uruchomić docker-compose bez sudo?

Trzeba dodać  grupę, jeśli jeszcze taka nie istnieje, następnie dodać usera, na którym jesteśmy zalogowani do tej grupy oraz zrestartować usługę.

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart

Uprawnienia plików

Problem, który spotkałem dotyczy plików tworzonych w kontenerze. W moim przypadku były to pliki tworzone przez generator encji w doctrine, który odpalany był z poziomu kontenera. Następnie będąc na swoim systemie „bazowym” niemożliwe było edytowanie tych plików, gdyż właścicielem wygenerowanych plików był root. Niestety jedyne rozwiązania jakie znalazłem to

  • utworzenie użytkownika w kontenerze z takim samym uid oraz gid jak użytkownik w systemie bazowym
  • po każdym utworzeniu jakichś plików z poziomu kontenera modyfikowanie właściciela

Póki co bardziej rozsądną opcją wydaje mi się ta druga.

sudo chown -R $USER:$USER .

 Symfony

Obecnie rozplanowałem strukturę katalogów oraz dodałem dwie encje: Message oraz Comment, których konfiguracja została przedstawiona poniżej.

AppBundle\Entity\Message:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\MessageRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        content:
            type: text
            nullable: true
        photo:
            type: string
            length: 255
            nullable: true
        video:
            type: string
            length: 255
            nullable: true
        latitude:
            type: float
        longitude:
            type: float
        scope:
            type: integer
        date:
            type: datetime
    lifecycleCallbacks: {  }
    oneToMany:
        comments:
            targetEntity: AppBundle\Entity\Comment
            mappedBy: message
            cascade: ["persist"]

 

AppBundle\Entity\Comment:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\CommentRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        content:
            type: text
            nullable: true
        photo:
            type: string
            length: 255
            nullable: true
        video:
            type: string
            length: 255
            nullable: true
        date:
            type: datetime
    lifecycleCallbacks: {  }
    manyToOne:
        message:
            targetEntity: AppBundle\Entity\Message

Kontrolery podzielone zostały na dwie części: Front oraz Backend. W Front\Api powstawało będzie API używane w aplikacji, nastomiast Backend to przygotowanie pod ewentualny panel admina ze statystykami etc.

Jak na razie nie za wiele, liczę że tydzień lub dwa i API będzie gotowe, następnie przejdę do tworzenia aplikacji w React Native. Repozytorium API znajduje się tutaj.

 

Udostępnij: