如何使用服务执行expressJS应用程序并通过ubuntu上的apache将数据插入sqlite3数据库

50few1ms  于 2023-01-05  发布在  SQLite
关注(0)|答案(1)|浏览(88)

我有一个通过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
mfpqipee

mfpqipee1#

我无法使用AppService文件找到解决方案,而是使用PM2作为我的守护进程管理器,写入数据库工作正常。

相关问题