Я установил приложение Django на сервере Linux (сервер Ubuntu 12.4), используя Apache (mod_wsgi) и PostgreSQL (psycopg2). У меня были проблемы с Unix-аутентификация Postgres, поэтому я выбрал обычного пользователя в качестве владельца базы данных и пользователя apache. Он работал нормально, но теперь мне нужно войти в систему с этим пользователем, чтобы mod_wsgi работал. Если я не авторизован, apache обычно обслуживает статические файлы, но при попытке доступа к mod_wsgi возникает следующая ошибка:
[...] [error] [...] Target WSGI script not found or unable to stat: /parent/folder
Я попытался проверка прав доступа к файлу (включая установку 777), но по-прежнему возникает та же ошибка (родительские папки также доступны для чтения всем). Файл (вместе со статическими файлами и файлами Django) хранится в домашнем каталоге того же пользователя. Я застрял, есть идеи?
P.S. Я очень неопытен с машинами * nix, я настроил это как взлом, чтобы система заработала и заработала. Но я бы предпочел иметь другого пользователя для Apache и PostgreSQL или, по крайней мере, одного и того же пользователя для обоих, но не обычного (то есть того, который также будет использоваться для входа в систему и выполнения каких-либо действий). Быстрое решение, которое я могу использовать прямо сейчас, было бы потрясающим, но подходящее решение - даже если я не могу применить немедленно - также было бы очень кстати.
Обновление: мой apache2.conf
файл в основном не изменен (из настроек по умолчанию), изменились только пользователь и группа:
#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}
User myuser
Group myuser
(имена пользователей и групп совпадают)
Файл с виртуальными хостами содержит в значительной степени стандартную установку Django, но с каждым файлом, хранящимся в домашней папке этого пользователя (установлено значение 755, подтверждено доступностью Apache):
<VirtualHost *:80>
DocumentRoot /home/myuser/myproject
<Directory />
Options All
AllowOverride None
</Directory>
<Directory /home/myuser/myproject>
Options All
AllowOverride None
Order allow,deny
allow from all
</Directory>
WSGIDaemonProcess myproject processes=6 threads=1
WSGIProcessGroup myproject
Alias /media/ "/home/myuser/myproject/media/"
Alias /static/ "/home/myuser/myproject/static/"
WSGIScriptAlias / "/home/myuser/myproject/myproject.wsgi"
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Я уже покинул сайт своего клиента, но постараюсь как можно скорее воспроизвести настройку на своей машине разработки (так что меня больше интересует правильное решение, а не быстрое исправление). Любые подсказки и указатели приветствуются.
Домашний каталог myuser
был зашифрованный, что означает, что он был смонтирован только тогда, когда пользователь вошел в систему. Таким образом, даже с правильными разрешениями процесс Apache не мог прочитать wsgi
файл, в результате чего в журнале появляется запись «не найдено». Статические файлы были кэшированы, по этой причине они все еще загружались нормально (в течение некоторого времени).