我有一个通过Ubuntu上的Apache 2执行expressJS应用程序的服务文件(21.04 GNU/Linux 5.11.0-1027-raspi aarch 64).正在执行的app.js文件包含的代码将从温度传感器获取数据,并将数据插入位于已安装USB驱动器上某个目录下的sqlite3数据库中。js文件,代码将执行并将数据插入到数据库文件中,没有错误。但是,当我启动服务文件时,代码将执行app.js文件,但在尝试将数据插入到数据库中时将抛出以下错误。
SQLITE_READONLY: attempt to write to a readonly database
我已经看了几个类似问题的解决方案,我相信问题是由于文件/目录权限和所有权。我知道如何设置文件权限/所有权,但我不知道究竟需要设置什么权限,或他们应该设置在什么文件,以使应用程序正常工作。我已经包括了下面的几条信息。任何帮助将不胜感激。
需要注意的是,www-data组包含用户ubuntu和www-data。
服务文件的权限和代码
/etc/systemd/system/app.service
- rxw rwx r-- root www-data
[Unit]
Description=App
[Service]
ExecStart=/home/node/website.com/app.js
Restart=always
DynamicUser=yes
User=ubuntu
Group=nogroup
Environment=PATH=/usr/bin:usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/node/website.com
[Install]
WantedBy=multi-user.target
/etc/apache 2中所有Apache文件的权限
rwx rwx r-- ubuntu www-data
website.com.conf的权限和代码
/etc/apache2/sites-available/website.com.conf
- rwx rwx r-- ubuntu www-data
<virtualHost *:80>
ServerAdmin email.email.com
ServerName website.com
ServerAlias *.website.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualHost>
网站目录和app.js文件的权限
/home/node/website.com
d rwx rwx r-- ubuntu www-data
/home/node/website.com/app.js
- rwx rwx rwx ubuntu www-data
sqlite3数据库目录和文件的权限
/mnt/db-drive/data/sqlite3/website
d rwx rwx rw www-data www-data
/mnt/db-drive/data/sqlite3/website/website.db
- rwx rwx rw- www-data www-data
1条答案
按热度按时间mfpqipee1#
我无法使用AppService文件找到解决方案,而是使用PM2作为我的守护进程管理器,写入数据库工作正常。