все еще не может получить сервер apache, чтобы получить доступ к базе данных после добавления www-data к определенной группе - PullRequest
0 голосов
/ 12 апреля 2020

вот код для подключения сеанса sqlalchemy к файлу базы данных

from sqlalchemy.orm import sessionmaker
from DB_setup_alchemy import Base,User,Visitor,VisitRecord
from os import getcwd

# link to the DB we are using
# pay attention to this part, if without check_same_thread=false, there will be lots of errors
# but what is going on behind this part of code
# what does engine and session really means
db_path='sqlite:///'+getcwd()+'/data.db'
print(db_path)
engine = create_engine(db_path,connect_args={'check_same_thread': False})
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()

все файлы моего проекта находятся в папке flaskapp

drwxrwxr-x 9 ubuntu ubuntu 4096 Apr 11 20:09 .
drwxr-xr-x 3 root   root   4096 Apr 11 04:11 ..
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 11 04:31 .aws
drwxrwxr-x 5 ubuntu ubuntu 4096 Apr 11 20:38 flaskapp
drwx------ 2 root   ubuntu 4096 Apr 11 20:11 test

файлы в папке flaskapp:

drwxrwxr-x 5 ubuntu ubuntu  4096 Apr 11 20:38 .
drwxrwxr-x 9 ubuntu ubuntu  4096 Apr 11 20:09 ..
-rw-rw-r-- 1 ubuntu ubuntu   345 Apr 11 16:37 AWS_API.py
drwxrwxr-x 2 ubuntu ubuntu  4096 Apr 11 17:37 __pycache__
-rw-rw-r-- 1 ubuntu ubuntu   296 Apr 11 16:23 app.wsgi
-rwxrwxr-x 1 ubuntu ubuntu 20480 Apr 11 17:37 data.db
-rw-rw-r-- 1 ubuntu ubuntu  7426 Apr 11 20:38 flaskapp.py
-rw-rw-r-- 1 ubuntu ubuntu     6 Apr 11 04:34 index.html
drwxrwxr-x 2 ubuntu ubuntu  4096 Apr 11 16:46 templates
drwxrwxr-x 4 ubuntu ubuntu  4096 Apr 11 16:13 venv

и data.db, и папка flask имеют разрешения для пользователей в группе Ubuntu, и я вижу, что пользователь www-data также входит в группу Ubuntu:

(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ groups ubuntu
ubuntu : ubuntu adm dialout cdrom floppy sudo audio dip www-data video plugdev lxd netdev

, но если я наберу : groups www-data

(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ groups www-data
www-data : www-data

Вот информация об ошибке:

(venv) ubuntu@ip-172-31-24-93:~/flaskapp$ cat /var/log/apache2/error.log

[Sat Apr 11 20:57:03.891126 2020] [wsgi:error] [pid 26861:tid 140079813093120] [client 209.6.74.140:53631] ERROR:flaskapp:Exception on / [GET]
[Sat Apr 11 20:57:03.891160 2020] [wsgi:error] [pid 26861:tid 140079813093120] [client 209.6.74.140:53631] Traceback (most recent call last):
..............
[Sat Apr 11 20:57:03.891568 2020] [wsgi:error] [pid 26861:tid 140079813093120] [client 209.6.74.140:53631] sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
[Sat Apr 11 20:57:03.891574 2020] [wsgi:error] [pid 26861:tid 140079813093120] [client 209.6.74.140:53631] (Background on this error at: http://sqlalche.me/e/e3q8)
[Sat Apr 11 20:57:03.891581 2020] [wsgi:error] [pid 26861:tid 140079813093120] [client 209.6.74.140:53631]

Вот ошибка из браузера:

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Я пробовал простую печать Привет, веб-приложение, и оно работает. Итак, мне было интересно, что мне нужно сделать, чтобы изменить владельца или права доступа к файлу, чтобы мое flask приложение работало?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Наконец-то я сам понял, в чем проблема: ошибка в этой проблеме заключается в том, что apache пользователь отличается от ubuntu. Поэтому, когда apache запускает мое веб-приложение, оно запускается из другого рабочего каталога и, конечно, не может найти файл базы данных.

Итак, я сначала изменил путь к файлу базы данных .db в своем коде на введите правильный абсолютный путь, например:

engine = create_engine('sqlite:////home/ubuntu/flaskproject/data.db',connect_args={'check_same_thread': False})

, затем измените владельца папки проекта и файла базы данных на www-data (apache user):

sudo chown www-data .
sudo chown www-data data.db

, а также убедитесь, что этот владелец имеет права на чтение и запись для папки проекта и файла data.db (что уже удовлетворено в моем случае)

Другое решение для решения проблемы с разрешениями состоит в том, чтобы добавить пользователя www-data в группу Ubuntu, поэтому мы не нужно менять владельца папки проекта и файла data.db (но убедитесь, что у пользователя в группе ubuntu есть права на чтение и запись)

usermod -a -G ubuntu www-data

Так что в общем, пока путь к базе данных правильно (укажите абсолютный путь), и пользователь www-data имеет разрешение на проектную папку и файл базы данных, все должно работать нормально.

0 голосов
/ 12 апреля 2020

Вы показали нам вывод для $ groups ubuntu и $ groups www-data. Это означает, что ubuntu имеет разрешение на запись в группу, например, для добавления файла 664 в группу www-data.

Но ваш веб-сервер работает как пользователь www-data, а не ubuntu, так что не актуально. имеет значение , так как www-data хочет принадлежать к группе ubuntu для записи в текущий файл БД, но его нет в этой группе. Вы можете отредактировать /etc/groups, чтобы исправить это.

В качестве альтернативы вы можете захотеть $ sudo chgrp www-data data.db (или chown), чтобы предоставить apache веб-пользователю доступ к этому файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...