新手求助:在Plesk Obsidian(Ubuntu 16)服务器安装ApostropheCMS遇npm权限问题,如何将node_modules安装到网站目录
解决Plesk非root用户安装Apostrophe-cli的权限问题
嘿,作为Node.js新手碰到这个权限问题太正常了!我来一步步帮你搞定:
核心原因
默认情况下,npm install -g会把包安装到系统级目录(比如你这里的/opt/plesk/node/12/lib/node_modules),但非root用户没有写入这个目录的权限,所以我们要把npm的全局包安装路径改成你自己的网站目录。
具体操作步骤
创建专属的全局包存储目录
先在你的网站根目录下创建一个用来存放全局npm包、可执行命令和缓存的文件夹:mkdir -p /var/www/vhosts/mywebsite/.npm-global/{lib/node_modules,bin,cache}lib/node_modules:用来存放全局安装的npm包bin:存放全局包对应的可执行命令(比如apostrophe)cache:npm的缓存目录,加快后续安装速度
配置npm使用新路径
分两种方式配置,推荐永久生效的方案:- 临时生效(仅当前SSH会话):
直接运行这条命令,npm会临时把全局包安装到你指定的目录:npm config set prefix '/var/www/vhosts/mywebsite/.npm-global' - 永久生效(所有后续会话都能用):
- 编辑你的shell配置文件(比如
~/.bashrc,如果用Zsh就是~/.zshrc):nano ~/.bashrc - 在文件末尾添加一行,把新的bin目录加入系统PATH,这样你能直接运行全局命令:
export PATH=/var/www/vhosts/mywebsite/.npm-global/bin:$PATH - 保存退出后,让配置立即生效:
source ~/.bashrc - 再设置npm的全局prefix,确保后续
npm install -g都指向你的目录:npm config set prefix '/var/www/vhosts/mywebsite/.npm-global'
- 编辑你的shell配置文件(比如
- 临时生效(仅当前SSH会话):
安装Apostrophe-cli
现在再运行安装命令,就不会有权限问题了:npm install -g apostrophe-cli验证安装成功
运行这条命令,查看apostrophe命令的位置,如果返回你网站目录下的路径,就说明配置成功了:which apostrophe预期输出:
/var/www/vhosts/mywebsite/.npm-global/bin/apostrophe
额外提示
之后你安装其他全局npm包时,都会自动存到这个专属目录,再也不用跟系统目录的权限较劲啦~
内容的提问来源于stack exchange,提问作者Zmove
相关产品推荐
相关产品推荐

