vuejs初学者です。
前提
alpine ベースの Dockerコンテナ内に vuejs
インストールさせてvueプロジェクトを作成しました。
作成したプロジェクトのルートフォルダはホスト(VPSサーバ)とvolumeマウントさせています。
実現したいこと
マウントしたVueプロジェクト配下のファイルを、VSCodeエディタで編集したい。
発生している問題・エラーメッセージ
Dockerコンテナ内で vue create
すると、基本的にはプロジェクトはroot
権限で作成されてしまいます。
このファイルをVSCode等のエディターで編集したいのですが、一般ユーザーとしてリモート接続しているため、
ファイルを編集する権限がありません。
この問題はどう解決すべきでしょうか?
該当のソースコード
bash
1# フォルダ構造 2$ tree -a 3. 4├── .env 5├── Dockerfile 6├── app 7│ └── _sample.txt 8└── docker-compose.yml
Dockerfile
1FROM alpine 2 3WORKDIR /usr/src/app 4 5RUN apk add --no-cache \ 6 vim \ 7 less \ 8 git \ 9 sudo \ 10 nodejs \ 11 npm 12 13# ホスト(VPSサーバ)と一般ユーザを共有させてます。詳細は後述のdocker-compose.ymlへ。 14RUN echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers 15 16RUN npm install -g @vue/cli
docker
1version: '3' 2 3services: 4 app: 5 build: . 6 ports: 7 - 8080:8080 8 env_file: 9 # UID, GID って環境変数で ユーザー/グループID定義してます。 10 - .env 11 user: ${UID}:${GID} # from .env 12 volumes: 13 - ./app:/usr/src/app 14 # ホスト(VPSサーバ)と一般ユーザー共有してます。 15 - /etc/passwd:/etc/passwd:ro 16 - /etc/group:/etc/group:ro 17 tty: true 18 stdin_open: true 19 command: /bin/sh
試したこと
1. 一般ユーザーで vueプロジェクト作成
上述に記載している通り、コンテナに一般ユーザ共有させた状態で、
下記を実行することで、一般ユーザーがownerの状態でvueプロジェクトを作成しようと試みましたが、
create時に下記のエラーが発生します。
権限周りで死んでますね。
bash
1/usr/src/app $ whoami 2mosuke 3/usr/src/app $ vue create app-10 4 ERROR Error saving preferences: make sure you have write access to /home/mosuke/.vuerc. 5 (ENOENT: no such file or directory, open '/home/mosuke/.vuerc') 6 7 8Vue CLI v5.0.4 9? Please pick a preset: Manually select features 10? Check the features needed for your project: Babel, Linter 11? Choose a version of Vue.js that you want to start the project with 3.x 12? Pick a linter / formatter config: Basic 13? Pick additional lint features: Lint on save 14? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files 15? Save this as a preset for future projects? No 16 17 18Vue CLI v5.0.4 19✨ Creating project in /usr/src/app/app-10. 20🗃 Initializing git repository... 21⚙️ Installing CLI plugins. This might take a while... 22 23npm ERR! code EACCES 24npm ERR! syscall mkdir 25npm ERR! path /home/mosuke 26npm ERR! errno EACCES 27npm ERR! FetchError: Invalid response body while trying to fetch https://registry.npmjs.org/@vue%2fcli-plugin-babel: EACCES: permission denied, mkdir '/home/mosuke' 28npm ERR! at /usr/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:162:15 29npm ERR! at async Arborist.[nodeFromEdge] (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:934:19) 30npm ERR! at async Arborist.[buildDepStep] (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:880:11) 31npm ERR! at async Arborist.buildIdealTree (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:218:7) 32npm ERR! at async Promise.all (index 1) 33npm ERR! at async Arborist.reify (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:136:5) 34npm ERR! at async Install.install (/usr/lib/node_modules/npm/lib/install.js:150:5) 35npm ERR! FetchError: Invalid response body while trying to fetch https://registry.npmjs.org/@vue%2fcli-plugin-babel: EACCES: permission denied, mkdir '/home/mosuke' 36npm ERR! at /usr/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:162:15 37npm ERR! at async Arborist.[nodeFromEdge] (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:934:19) 38npm ERR! at async Arborist.[buildDepStep] (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:880:11) 39npm ERR! at async Arborist.buildIdealTree (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:218:7) 40npm ERR! at async Promise.all (index 1) 41npm ERR! at async Arborist.reify (/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:136:5) 42npm ERR! at async Install.install (/usr/lib/node_modules/npm/lib/install.js:150:5) { 43npm ERR! code: 'EACCES', 44npm ERR! errno: 'EACCES', 45npm ERR! syscall: 'mkdir', 46npm ERR! path: '/home/mosuke', 47npm ERR! type: 'system', 48npm ERR! requiredBy: '.' 49npm ERR! } 50npm ERR! 51npm ERR! The operation was rejected by your operating system. 52npm ERR! It is likely you do not have the permissions to access this file as the current user 53npm ERR! 54npm ERR! If you believe this might be a permissions issue, please double-check the 55npm ERR! permissions of the file and its containing directories, or try running 56npm ERR! the command again as root/Administrator. 57 ERROR Error: command failed: npm install --loglevel error --legacy-peer-deps 58Error: command failed: npm install --loglevel error --legacy-peer-deps 59 at ChildProcess.<anonymous> (/usr/local/lib/node_modules/@vue/cli/lib/util/executeCommand.js:138:16) 60 at ChildProcess.emit (events.js:400:28) 61 at maybeClose (internal/child_process.js:1058:16) 62 at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5) 63/usr/src/app $
2. 一般ユーザーにsudo権限与えてプロジェクト作成
権限周りで失敗してそうなので $ sudo vue create <projectName>
を実行。
作成出来ましたがプロジェクトownerはrootとして作成されました。そりゃそうだ。
補足
今の所考えてるけど自分の脳内で却下してる案がいくつかあります。
「それでいんじゃね?」「うんだめだね」って思ったら教えてほしいです。
案1: rootとして作った後に chown -R
とかで一斉変更
なんか手間だしスマートじゃない気がする。
案2: vscode でリモート接続時にrootとしてログインする
セキュリティの観点で好ましくない。はず。
案3: そもそもホスト(VPSサーバ)側で vue create
すれば?
ホストの環境をなるべく汚したく無い思ってます。
でもそれがvuejs界隈のベストプラクティスなのであればそちらへ舵を切ります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/03 15:32