Directus 无法安装在共享主机上
Posted
技术标签:
【中文标题】Directus 无法安装在共享主机上【英文标题】:Directus can't be installed on a shared hosting 【发布时间】:2020-01-01 09:26:05 【问题描述】:我正在尝试设置 Directus。
我刚刚按照文档中描述的指南执行了全新的安装。但是,一旦我登录,就会出现以下错误:“服务器错误 - 此实例的服务器或数据库有问题。”
用户界面应该会显示以下消息:“没有集合设置 - 似乎还没有任何集合设置”
使用 WAMP 在 localhost 上安装工作正常,所以我怀疑共享主机或数据库上的某些内容配置错误。
根据控制台,很多资源无法访问:
404:/_/users/me?fields=last_page:1
401:/interfaces:1
401:/layouts:1
401:/pages:1
403:/_/collections:1
403:/_/settings:1
401:(API root)
403:/_/collection_preset...
403:/_/users?field...
403:/_/relations?limit=1
mysql 版本 (5.7) 和 php 版本 (7.3) 满足 Directus 的要求...
我真的不知道要寻找什么来诊断与共享主机的任何兼容性问题...
编辑
这是日志(没有堆栈):
[2019-08-28 11:31:24] api[_].ERROR: Directus\Database\Exception\ItemNotFoundException: Item not found in [server root path]/directus/src/core/Directus/Services/ItemsService.php:139
[2019-08-28 11:31:29] api[_].ERROR: Directus\Database\Exception\ItemNotFoundException: Item not found in [server root path]/directus/src/core/Directus/Services/ItemsService.php:139
[2019-08-28 11:31:29] api[].ERROR: Directus\Exception\UnauthorizedException: Unauthorized request in [server root path]/directus/src/helpers/app.php:268
[2019-08-28 11:31:29] api[].ERROR: Directus\Exception\UnauthorizedException: Unauthorized request in [server root path]/directus/src/helpers/app.php:268
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_collections" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_settings" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
[2019-08-28 11:31:29] api[].ERROR: Directus\Exception\UnauthorizedException: Unauthorized request in [server root path]/directus/src/helpers/app.php:268
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_collection_presets" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
[2019-08-28 11:31:29] api[].ERROR: Directus\Exception\UnauthorizedException: Unauthorized request in [server root path]/directus/src/helpers/app.php:268
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_relations" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_collection_presets" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
[2019-08-28 11:31:29] api[_].ERROR: Directus\Permissions\Exception\ForbiddenCollectionReadException: Reading items from "directus_users" collection was denied in [server root path]/directus/src/core/Directus/Permissions/Acl.php:988
【问题讨论】:
我刚刚放弃了 OVH。我浪费了很多时间让它在 Pro 主机和 WebCloud 上运行。我去了 Infomaniak,完全没有问题! 你尝试过什么调试问题? 【参考方案1】:在执行 git clone 后,我在共享主机上也遇到了一些问题。
不知何故,在挠挠我的头一段时间后,composer install
在directus 基本目录中运行,瞧,它工作了(v8)。我能够按照文档中的说明进行安装。
我的假设是composer install
操作正在设置/更正某些文件夹权限和/或依赖项。
【讨论】:
【参考方案2】:我在共享主机上请求安装的应用程序时发现的阻止程序。
应用程序的名称需要出现在 API 调用中(因为 Directus 可以处理具有相同实例的多个应用程序)。
您希望在管理员之外访问的集合需要具有公共角色才能访问。
此外,在我的public/.htaccess
的RewriteEngine On
行下添加RewriteBase /
对Ionos/1and1 共享主机起到了作用。如果没有这一行,则无法执行重写并返回 500 错误。
例如:
# Comment this line if you are getting: "Option SymLinksIfOwnerMatch not allowed here" error in Apache
Options +SymLinksIfOwnerMatch
# php5_module automatically handles HTTP_AUTHORIZATION headers, but fcgi_module does not.
<IfModule mod_setenvif.c>
<IfModule mod_proxy_fcgi.c>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
</IfModule>
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Map all admin endpoints to the admin app (except static files)
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^admin/(.*) admin/index.html [NC,L]
# Map all other requests to invoke the API router (except static files)
RewriteCond %REQUEST_FILENAME !-f
RewriteRule !^admin index.php?%QUERY_STRING [L]
</ifModule>
# Uncomment the following lines to modify PHP settings. The lines below can be used to increase the max upload size of files in Directus
#<IfModule mod_php7.c>
#php_value upload_max_filesize 50M
#php_value post_max_size 100M
#</IfModule>
我在处理 SSH 的共享主机 (ionos/1and1) 上安装的所有其他步骤:
环境:
创建 PHP 7.4+ 环境
创建Mysql 5.2+ Db
下载 Directus 套件并从 https://github.com/directus/directus 或 ssh git clone git@github.com:directus/directus.git
推送到 FTP
推送到 FTP 或 git clone。
将管理员(子)域名绑定到/public
文件夹。
递归设置文件夹/bin
的执行权限:$ chmod -R +x ./bin
设置文件夹/logs
和/public/uploads
的写权限:
$ chmod -R +w /logs
$ chmod -R +w /public/uploads
安装依赖:
连接到 ssh 控制台并导航到 Directus 的根文件夹
下载作曲家:
$ curl -sS https://getcomposer.org/installer | /usr/bin/php7.4-cli
检查 Composer 安装:$ /usr/bin/php7.4-cli composer.phar
查看最新版本:$ /usr/bin/php7.4-cli composer.phar selfupdate
安装依赖:$ /usr/bin/php7.4-cli composer.phar install
创建项目:
您可以转到 URL https://admin.mysite.com/admin/#/install
或使用以下命令行界面设置项目:
配置 Directus:
$ /usr/bin/php7.4-cli bin/directus install:config -k my-project -h db_host -n db_name -u db_user -p db_pass -d directus_path -a super_admin_token
填充数据库架构:
$ /usr/bin/php7.4-cli bin/directus install:database -d directus_path
安装初始配置:
$ install:install -e admin_email -p admin_password -t site_name
【讨论】:
以上是关于Directus 无法安装在共享主机上的主要内容,如果未能解决你的问题,请参考以下文章
如何在 cPanel 上安装 etherpad-lite(共享主机)
在没有 gcc 或 root 访问权限的共享主机上安装需要 gcc 的 python 模块