Mam problem zdjęcia mi się nie ładują pomimo dobrej ścieżki, dostaje bład Failed to load resource: the server responded with a status of 404 (Not Found), a zdjęcie link ma dobry. Robiłem php artisan storage:link ale nic nie pomogło. Korzystam z dockera i wyczytałem, że gdzieś tutaj może leżeć problem, ale nie wiem gdzie szukać głębiej.
Zdjęcia się nie ładują pomimo dobrej ścieżki
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wielkopolska
Pokaż konfig vhosta, infry i opisz coś więcej, bo z dockerem można zrobić kilkaset różnych konfiguracji.
Nie może zaczytać resourca bo pewnie gdzieś jest albo źle podana ścieżka, tylko nie da się tego wywróżyć z fusów :)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
version: "3.8"
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel
mysql:
image: mariadb:latest
restart: unless-stopped
tty: true
ports:
- "${DB_PORT}:3306"
environment:
- MYSQL_DATABASE=${DB_DATABASE}
- MYSQL_USERNAME=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
networks:
- laravel
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/var/www/html
ports:
- "8000:8000"
- "5173:5173"
networks:
- laravel
FROM php:8.1-fpm-buster
ENV WORKDIR=${WORKDIR:-/var/www/html}
ARG NODE_VERSION=18
RUN apt-get update \
RUN docker-php-ext-configure gd --with-jpeg --with-freetype \
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl
RUN docker-php-ext-install \
RUN pecl install imagick pcov \
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN curl -sLS https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
RUN set -eux; \
RUN apt-get -y clean \
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh
WORKDIR ${WORKDIR}
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/html/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php server.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wielkopolska
F12 - devtoolsy jaki komunikat pokazują?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
kbi64 napisał(a):
F12 - devtoolsy jaki komunikat pokazują?

o to ci chodzi? czy coś innego

- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wielkopolska
folder storage chyba jest powyżej public jak pamiętam? Dorzuciłbym jakiegoś symlinka na ten folder bo vhost wskazuje na public
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
kbi64 napisał(a):
folder
storagechyba jest powyżejpublicjak pamiętam? Dorzuciłbym jakiegoś symlinka na ten folder bo vhost wskazuje napublic
Tak, wyżej jest, jeżeli chodzi ci o ten drugi.

- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wielkopolska
Wygląda ok, obstawiałbym raczej że po dopaleniu dockera ten symlink jest usunięty albo w nieprawidłowy sposób zaczytany.
Odpal docker-compose i wejdź do kontenera w którym odpalisz jeszcze raz php artisan storage:link od tego bym zaczął
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
kbi64 napisał(a):
Wygląda ok, obstawiałbym raczej że po dopaleniu dockera ten symlink jest usunięty albo w nieprawidłowy sposób zaczytany.
Odpal docker-compose i wejdź do kontenera w którym odpalisz jeszcze razphp artisan storage:linkod tego bym zaczął
Już robiłem tak i nic nie pomogło docker exec -it -u www nazwa-kontenera php artisan storage:link
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wielkopolska
Dobra, to ostatnie co mi przychodzi do głowy to zmiana adresu z localhost na 127.0.0.1, miałem też case z tym że docker nie radził sobie z obsługą tego, możesz tez wywalić ten adres ipv6 z nginxa listen [::]:80;
Może trzeba gdzieś w routingu dopisać:
Artisan::call('storage:link');
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3581
Domyślnie o ile pamiętam symlink idzie pod storage/app/public i URL wtedy wygląda localhost/storage/someFileFromPublicDirectory
Spróbuj na test umieścić pliki w katalogu app/public i jak będzie działać to musisz pogrzebać w configu i dodać symlink do tego katalogu wyżej cars
Sprawdź w Config jakie masz symlinki
https://laravel.com/docs/9.x/filesystem#the-public-disk
Ostatnie to uprawnienia na katalog i pliki w tym katalogu cars nadaj na ten katalog 755 jak jest coś innego.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
jurek1980 napisał(a):
Domyślnie o ile pamiętam symlink idzie pod
storage/app/publici URL wtedy wyglądalocalhost/storage/someFileFromPublicDirectory
Spróbuj na test umieścić pliki w kataloguapp/publici jak będzie działać to musisz pogrzebać w configu i dodać symlink do tego katalogu wyżejcars
Sprawdź w Config jakie masz symlinki
https://laravel.com/docs/9.x/filesystem#the-public-disk
Ostatnie to uprawnienia na katalog i pliki w tym katalogucarsnadaj na ten katalog 755 jak jest coś innego.
Zmieniłem, żeby zdjęcia się zapisywały do public zamiast do oddzielnego folderu i nadal nic i zmienił się błąd na

W kontenerze z nginx jest zlinkowany.

- Rejestracja: dni
- Ostatnio: dni
- Postów: 3581
To pokaż jeszcze jak budujesz te linki i jak umieszczasz pliki w katalogu? Pliki mają nazwy jak w linkach?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Po dodaniu pliku w formularzu sam się wrzuca do folderu.
$car->photo = $request->file('photo')->store('public');
Tak, mają taką samą nazwę

Jak buduje linki, co masz na myśli?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3581
Raloseq napisał(a):
Jak buduje linki, co masz na myśli?
W sensie czy sklejasz je ręcznie, czy używasz jakiejś funkcji pomocniczej?
Sprawdzałeś uprawnienia do tego pliku i katalogu?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Te linki same się robią ja nic nie zmieniałem w domyślnej konfiguracji Laravela. Plik z przesłanego formularza ląduje w folerze storage/app/public do bazy przesyła się string lokalizacji zdjęcia w takiej postaci public/V0AkWXifX70Lj3M17VzmrlVFMDxwBOQgXnnjrk7J.png i potem wyświetlam go tak <img src="{{ asset('storage/' . $car->photo) }}" alt="">
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Ogólnie to jak wywalę public z url to działa czyli np. localhost/storage/V0AkWXifX70Lj3M17VzmrlVFMDxwBOQgXnnjrk7J.png. Tylko w, którym miejscu dodaje mi się ten public? bo raczej
$car->photo = $request->file('photo')->store('public'); nie przez store()?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Nie wiem czy to dobre rozwiązanie ale musi tak zostać bo nie mam pomysłu na coś innego.
Trzeba ręcznie utworzyć symlinka w folderze public/ ln -s ../storage/app/example example w konterzene z nginexem i wtedy bazować na tym, że do bazy zapisuje się zdjęcie z public/.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Kraków
- Postów: 64
Raloseq napisał(a):
Ogólnie to jak wywalę public z url to działa czyli np. localhost/storage/V0AkWXifX70Lj3M17VzmrlVFMDxwBOQgXnnjrk7J.png. Tylko w, którym miejscu dodaje mi się ten public? bo raczej
$car->photo = $request->file('photo')->store('public');nie przez store()?
artisan storage:link robi Ci symlinka ze storage/app/public do public/storage czyli katalogu storage/ dostępnego z poziomu przeglądarki. W bazie trzymasz relatywną ścieżkę na użytek wewnętrzny, a nie publiczny url, więc przed przekazaniem jej do atrybutu src w htmlu musisz przepuścić ją przez funkcję asset() - https://laravel.com/docs/10.x/filesystem#the-public-disk