現状

centos7(VPS)+nginx+uwsgi+flask+seleniumでブラウザーから渡されたURLでスクリーンショットを取ろうとしているのですが、chromedriver(chrome本体?)が起動に失敗します。

確認したこと

  • nginxを経由せずにflaskの単体サーバーでは問題ありませんでした。
  • uwsgi経由でflaskサーバー立ち上げて実行しても問題ありませんでした。
  • 画面がありませんので、Xvfbを使用してます。
  • nginxはhttpsになります。

どうもlocalhostの名前解決ができていないような感じがあるのですが。
解決策ご存じの方よろしくお願いいたします。

エラー

Traceback (most recent call last):
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
  File "./api/route_api_walls.py", line 56, in create_walls_data
selenium_util = libs.SeleniumUtility(request_form_dict['url'])
  File "./libs/seleniumutility.py", line 35, in __init__
self.driver = webdriver.Chrome(chrome_options=opts,executable_path=self.driver_location,service_log_path=self.service_log_path)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 86, in __init__
desired_capabilities=desired_capabilities)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 155, in __init__
self.start_session(desired_capabilities, browser_profile)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 244, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 318, in execute
self.error_handler.check_response(response)
  File "/usr/local/pyenv/versions/3.6.1/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 246, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (Driver info: chromedriver=2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752),platform=Linux 3.10.0-693.17.1.el7.x86_64 x86_64)

uwsgiの設定

[uwsgi]
uid =nginx
gid = nginx
chdir = /var/www/xxxxx/xxxxxx
app = index:app
module = %(app)
callable = app
logto = /var/log/uwsgi/%n.log
master = true
processes = 5
socket = xxxxxx.sock
chmod-socket =666
vacuum = true
die-on-term = true

 

nginxの設定

location / {
    include uwsgi_params;
    uwsgi_read_timeout 3000;
    uwsgi_pass unix:/var/www/xxxxx/xxxxxx/xxxxxx.sock;
}

ソースコード(一部)

def __init__(self, url):
        self.display = Display(visible=0, size=(1366, 768))
        self.display.start()

        opts = Options()
        opts.binary_location = self.browser_path
        opts.add_argument('--headless')
        opts.add_argument('--disable-gpu')
        opts.add_argument('--no-sandbox')
        self.driver = webdriver.Chrome(chrome_options=opts,executable_path=self.driver_location,service_log_path=self.service_log_path)
        self.driver.get(url)

補足

https://teratail.com/questions/121424
とのマルチポストになります。
解決策は相互に記述しますので、ご容赦ください。