django.db.utils.OperationalError: attempt to write a readonly database

django.db.utils.OperationalError: attempt to write a readonly database

我正在尝试部署我的第一个网络应用程序。

我正在使用 django + docker + nginx + uwsgi。尝试先在我的笔记本电脑上部署。

当我 运行 我的 web 应用程序使用 django 服务器时一切正常,当我尝试使用 docker 启动没有 nginx 的 web 应用程序时它看起来也不错,但是当我使用使用 nginx 代理将数据写入数据库时​​出现问题(login/logout 用户会话)。如果我只去阅读页面,Web 应用程序可以很好地处理静态文件并在用户会话更改期间崩溃(登录 in/log 输出)

我的默认数据库权限问题 issue picture

app_1    | Internal Server Error: /logout/
app_1    | Traceback (most recent call last):
app_1    |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
app_1    |     return self.cursor.execute(sql, params)
app_1    |   File "/usr/local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 413, in execute
app_1    |     return Database.Cursor.execute(self, query, params)
app_1    | sqlite3.OperationalError: attempt to write a readonly database

(venv) yhobby@hp-probook-450-g5:~/PycharmProjects/web_naas$ ls -la
total 52
drwxrwsrwx 8 www-data yhobby 4096 Nov 19 15:16 .
drwsrwsrwt 9 yhobby   yhobby 4096 Nov 18 16:09 ..
drwxrwsrwx 6 www-data yhobby 4096 Nov 19 13:59 app
-rwxrwxrwx 1 yhobby   yhobby  293 Nov 19 14:51 docker-compose-deploy.yml
-rwxrwxrwx 1 yhobby   yhobby  202 Nov 19 11:35 docker-compose.yml
-rwxrwxrwx 1 yhobby   yhobby  701 Nov 19 15:16 Dockerfile
drwxrwsr-x 8 yhobby   yhobby 4096 Nov 19 09:06 .git
-rw-rw-r-- 1 yhobby   yhobby  100 Nov 19 08:40 .gitignore
drwxrwsr-x 3 yhobby   yhobby 4096 Nov 19 15:28 .idea
drwxrwsrwx 2 yhobby   yhobby 4096 Nov 19 15:11 proxy
-rwxrwxrwx 1 yhobby   yhobby   29 Nov 18 16:09 README.md
drwxrwsrwx 2 yhobby   yhobby 4096 Nov 18 18:40 scripts
drwxrwsrwx 6 yhobby   yhobby 4096 Nov 18 16:13 venv

(venv) yhobby@hp-probook-450-g5:~/PycharmProjects/web_naas/app$ ls -la
total 17820
drwxrwsrwx 6 www-data yhobby     4096 Nov 19 13:59 .
drwxrwsrwx 8 www-data yhobby     4096 Nov 19 15:16 ..
drwxrwsrwx 7 yhobby   yhobby     4096 Nov 19 12:13 dashboard
-rwxrwxrwx 1 yhobby   yhobby   131072 Nov 19 13:59 db.sqlite3
drwxrwsrwx 8 yhobby   yhobby     4096 Nov 19 08:43 .git
-rwxrwxrwx 1 yhobby   yhobby       92 Nov 19 08:43 .gitignore
-rwxrwxrwx 1 yhobby   yhobby 18075648 Oct  2 06:15 ip_core.db
-rwxrwxrwx 1 yhobby   yhobby      660 Nov 19 08:43 manage.py
drwxrwsrwx 3 yhobby   yhobby     4096 Nov 19 14:48 naas
-rwxrwxrwx 1 yhobby   yhobby       29 Nov 19 08:43 README.md
-rwxrwxrwx 1 yhobby   yhobby      187 Nov 19 08:43 requirements.txt
drwxrwsrwx 4 yhobby   yhobby     4096 Nov 19 12:06 static
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    },
    'ip_core': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'ip_core.db',
    }
}

web_naas/Dockerfile # 根文件夹 web_naas/

# pull official base image
FROM python:3.8-alpine

# set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/scripts:${PATH}"

# install dependencies
COPY app/requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN pip install -r /requirements.txt
RUN apk del .tmp

# copy directory
RUN mkdir /app
COPY ./app /app

# set work directory
WORKDIR /app

# copy directory
COPY ./scripts /scripts
RUN chmod +x /scripts/*
RUN chmod 777 /app/db.sqlite3

RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static

RUN adduser -D user
RUN chown -R user:user /vol
RUN chmod -R 777 /vol/web
USER user

CMD ["entrypoint.sh"]

web_naas/docker-compose.yml # 根文件夹

version: '3.7'

services:
  app:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: sh -c "python manage.py runserver 0.0.0.0:8000"
    environment:
      - DEBUG=1

docker-撰写-deploy.yml

version: '3.7'

services:
  app:
    build: .
    volumes:
      - static_data:/vol/web
    environment:
      - DEBUG=1

  proxy:
    build:
      context: ./proxy
    volumes:
      - static_data:/vol/static
    ports:
      - "8080:8080"
    depends_on:
      - app

volumes:
  static_data:

web_naas/proxy/Dockerfile

FROM nginxinc/nginx-unprivileged:1-alpine

COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./uwsgi_params /etc/nginx/uwsgi_params

USER root

RUN mkdir -p /vol/static
RUN chmod 777 /vol/static

USER nginx

web_naas/proxy/default.conf

server {
    listen 8080;

    location /static {
        alias /vol/static;
    }

    location / {
        uwsgi_pass app:8000;
        include /etc/nginx/uwsgi_params;
    }
}

web_naas/scripts/entrypoint.sh

#!/bin/sh

set -e

python manage.py collectstatic --noinput

uwsgi --socket :8000 --master --enable-threads --module naas.wsgi

问题是 docker 容器内缺少权限

在文件中添加了以下行

web_naas/Dockerfile # 根文件夹

RUN chown -R user:user /app