Jér*_*eau 1 python django django-rest-framework docker docker-compose
我正在尝试将使用 django-rest-framework 制作的 API 放入 docker 容器中。
除了我无法访问我的静态文件之外,一切似乎都有效。
这是我的settings.py:
MEDIA_URL = '/uploads/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)
我的网址.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
path('api/bookmakers/', include('bookmakers.urls')),
path('api/pronostics/', include('pronostics.urls')),
path('api/', include('authentication.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
ENV LANG fr_FR.UTF-8
ENV LANGUAGE fr_FR
ENV LC_ALL fr_FR.UTF-8
RUN python --version
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/
COPY docker-entrypoint.sh /code/
ENTRYPOINT ["/code/docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
最后是我的 docker-compose.yml
version: '3.1'
services:
db:
image: postgres
container_name: nyl2pronos-db
restart: always
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: nyl2pronos
website:
container_name: nyl2pronos-website
image: nyl2pronos-website
build:
context: nyl2pronos_webapp
dockerfile: Dockerfile
ports:
- 3000:80
api:
container_name: nyl2pronos-api
build:
context: nyl2pronos_api
dockerfile: Dockerfile
image: nyl2pronos-api
restart: always
ports:
- 8000:8000
depends_on:
- db
environment:
- DJANGO_PRODUCTION=1
Run Code Online (Sandbox Code Playgroud)
因此,一旦我转到 url:http://localhost:8000/admin/,我就可以登录但没有 css,因为静态文件没有加载。
GET http://localhost:8000/static/admin/css/forms.css net::ERR_ABORTED 40
Run Code Online (Sandbox Code Playgroud)
如果你看到另一个错误,不要犹豫,告诉我。
先感谢您!
如果您使用Gunicorn或任何生产级 django 服务器,它们通常不提供静态内容。有其他方法可以为他们服务。其中之一是使用whitenoise。你可以这样试试:
pip install whitenoise
Run Code Online (Sandbox Code Playgroud)
并添加一个新的中间件:
MIDDLEWARE = [
# 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用 NGINX。我建议你可以这样做
# inside config/nginx/conf.conf in source code
upstream web {
ip_hash;
server web:8000;
}
server {
location /static/ {
autoindex on;
alias /src/static/;
}
location /media/ {
autoindex on;
alias /src/media/;
}
location / {
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}
Run Code Online (Sandbox Code Playgroud)
现在更新您的 docker compose 以添加 NGINX 和上面给出的配置:
db:
image: postgres
container_name: nyl2pronos-db
restart: always
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: nyl2pronos
website:
container_name: nyl2pronos-website
image: nyl2pronos-website
build:
context: nyl2pronos_webapp
dockerfile: Dockerfile
ports:
- 3000:80
api:
container_name: nyl2pronos-api
build:
context: nyl2pronos_api
dockerfile: Dockerfile
image: nyl2pronos-api
restart: always
ports:
- 8000:8000
depends_on:
- db
environment:
- DJANGO_PRODUCTION=1
nginx:
image: nginx:latest
container_name: nz01
ports:
- "8000:8000"
volumes:
- ./src:/src # for syncing with django source code
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- nyl2pronos-api
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,您可以在此处查看我的存储库:https : //github.com/ruddra/docker-django或者您可以查看有关我如何配置 NGINX 的这篇文章。
| 归档时间: |
|
| 查看次数: |
3916 次 |
| 最近记录: |