Почему /static/ не отображается для /admin в проекте Django?
Итак, я перепробовал кучу вещей. Настройки выглядят хорошо, но, возможно, я что-то упускаю.
Я использую: PostegreySQL, Reddis, Celery beat, nginx, gunicorn.
Я не могу понять, в чем проблема: может быть, дело в правах, может быть, в директориях...
Я просто не могу понять, что не получается.
введите описание изображения здесь
[error] 280897#280897: *40433 open() "/app/crm_market/collected_static/grappelli/js/grappelli.min.js" failed (2: No such file or directory), client: 31.128.32.152, server: my_domen.com, request: "GET /static/grappelli/js/grappelli.min.js HTTP/1.1", host: "my_domen.com", referrer: "https://my_domen.com/admin/login/?next=/admin/"
(venv) root@fuvscqxzga://root/CRM-WB# docker compose exec web ls -l /app/crm_market/collected_static/ total 12 drwxr-xr-x 6 www-data www-data 4096 Jun 25 09:15 admin drwxr-xr-x 4 www-data www-data 4096 Jun 25 09:15 debug_toolbar drwxr-xr-x 9 www-data www-data 4096 Jun 25 09:15 grappelli
структура проекта:
введите описание изображения здесь
settings.py:
STATIC_URL = "/static/"
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "collected_static")
/etc/nginx/sites-enabled/default
server {
server_name my_domen.com;
location /static/ {
alias /app/crm_market/collected_static/;
}
location /admin/ {
proxy_pass http://127.0.0.1:8000;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
listen 443 ssl;
Dockerfile
FROM python:3.9-slim
WORKDIR /app/crm_market
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "CRM-WB.wsgi:application"]
docker-compose.yml
services:
db:
image: postgres:latest
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:latest
command: redis-server --requirepass $REDIS_PASSWORD
ports:
- '6379:6379'
volumes:
- redisdata:/data
env_file:
- .env
web:
build: .
command: >
sh -c "python manage.py migrate --noinput &&
python manage.py collectstatic --noinput &&
gunicorn crm_market.wsgi:application --bind 0.0.0.0:8000"
volumes:
- .:/app
- static_volume:/app/crm_market/collected_static
ports:
- "8000:8000"
depends_on:
- db
- redis
working_dir: /app/crm_market
worker:
build: .
command: celery -A crm_market worker -l info
volumes:
- .:/app
depends_on:
- db
- redis
environment:
- DJANGO_SETTINGS_MODULE=crm_market.settings
- PYTHONPATH=/app/crm_market
working_dir: /app/crm_market
beat:
build: .
command: celery -A crm_market beat -l info
volumes:
- .:/app
depends_on:
- db
- redis
environment:
- DJANGO_SETTINGS_MODULE=crm_market.settings
- PYTHONPATH=/app/crm_market
working_dir: /app/crm_market
volumes:
db_data:
redisdata:
static_volume:
Я хочу, чтобы admin/ видел collected_static. Я пробовал разные варианты nginx, Dockerfile, docker-compose:
Пытался настроить доступ с помощью этих команд:
docker compose exec web chown -R www-data:www-data /app/crm_market/collected_static
docker compose exec web chmod -R 755 /app/crm_market/collected_static
docker compose exec web ls -ld /app/crm_market/collected_static
docker compose exec web ls -l /app/crm_market/collected_static/admin/css/base.css
docker compose down
docker compose up -d --build
curl -I https://handonpulse.ru/static/admin/css/base.css
результат: введите описание изображения здесь
Я пробовал собирать статику вручную, но она не применяется докером:
docker compose exec web python manage.py collectstatic --noinput