Wordpress - Capistrano 權限問題
我正在使用 Capistrano 和 Composer 管理 WordPress 安裝。一切都設置好並且執行良好,在我的 ngix / php-fpm 設置上非常快。
但是,我在嘗試從管理區域更新外掛時遇到了一個問題,WordPress 要求提供 FTP 憑據。一個快速的Google,很明顯這是因為 WordPress 可以訪問我伺服器上的網路服務。
我將 SSD 放入我的伺服器並執行以下操作:
ps aux | grep 'nginx'
nginx 在 www-data 使用者下執行。這很正常。
這是我的問題:要使用 Capistrano,您需要創建一個
deploy
使用者並為他們提供無密碼的 sudo 特權。好的。我這樣做了。Capistrano 運作良好。問題是文件必須歸該
deploy
使用者所有。為此,我只是這樣 chown:sudo chown -R deploy:www-data /srv/www/mysite.com
之後,我想確保所有新文件和目錄都繼承組所有權:
sudo chmod g+s /srv/www/mysite.com
這樣,當 capistrano 添加新文件時,它們都會繼承正確的權限。
我還將
deploy
使用者添加到www-data
組中,以避免我在使用 WordPress 時遇到的問題。我通過執行確認了這一點
groups deploy
當我遞歸地
chown
目錄到www-data:www-data
一切工作正常。我可以從後端更新和下載外掛,但我無法使用 Capistrano 進行部署。nginx 訪問我的 wordpress 安裝並解決此問題需要做什麼?
謝謝。
聽起來您可能忘記了授予組寫入權限:
$ sudo chmod g+w /srv/www/mysite.com
如果您使用
chmod g+s
而不是 g+w,那麼所有未來的文件創建都將使用指定的組作為預設組。但這是一個手動修復,這並不是使用 Capistrano 的真正意義所在。我遇到了同樣的問題,在stackoverflow的幫助下, 我設法在部署完成後掛鉤了一個任務,以修改目前/www 目錄的權限(保持部署結構的其餘部分不變。
這必須在部署命名空間中:
task :mod_group do on roles(:all) do execute "chown -R :#{fetch(:group)} #{fetch(:deploy_to)}/current/www && chmod -R g+s #{fetch(:deploy_to)}/current/www" info "Group permission of #{fetch(:deploy_to)}/current/www modified to #{fetch(:group)}" end end after :finished, 'deploy:mod_group'
set :group, 'www-data'
在任務執行之前,您還需要在配置中添加任何您想要的組名。正如其他人所建議的那樣,我還建議使用部署使用者而不是 root。在 Wordpress 的情況下,它可能是你想要修改的應用程序,而不是 www 路徑——這可能意味著你也可以設置
roles(:app)
。編輯:正如我評論的那樣,另一種方法是使用
within release_path do
更改為執行命令的特定路徑。但是,我發現該方法不適用於格式化為一個字元串的命令,因此您可以用逗號分隔 args 以執行。如下:task :mod_group do on roles(:all) do within release_path do execute 'chown', '-R', ':www-data', 'www' execute 'chmod', '-R', 'g+s', 'www' info "Group permission of www modified to www-data" end end end
在那個例子中,我還設置了組名內聯,因為使用這樣一個你只呼叫一次的通用配置有點多餘。