Nginx

Wordpress - Capistrano 權限問題

  • June 22, 2015

我正在使用 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

在那個例子中,我還設置了組名內聯,因為使用這樣一個你只呼叫一次的通用配置有點多餘。

引用自:https://serverfault.com/questions/597049