Как получить доступ к удаленной базе данных с помощью Rails + Nginx + Postgresql + DigitalOcean? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть приложение, в котором я использовал базу данных, расположенную на том же сервере (DigitalOcean Droplet), что и приложение.Так что в моем приложении на Rails это было:

config / database.yml:

production:
  <<: *default
  database: example_production
  username: rails
  password: <%= ENV['EXAMPLE_DATABASE_PASSWORD'] %>

И это работало.Теперь я хочу выделенный сервер для базы данных.DigitalOcean выпустила кластеры баз данных для него.Поэтому я его создал.

Мой config / database.yml Я изменил на:

production:
  url: <%= ENV["DO_DATABASE"] %>

Я сделал rails db: migrate и db: seed.И это сработало.Когда я проверяю содержимое базы данных, то все внутри, как и должно быть.Итак, у меня есть соединение с базой данных.

Но после перезапуска моего приложения, когда я захожу на свою веб-страницу, я получаю:

502 Bad Gateway nginx / 1.14.0 (Ubuntu)

Через некоторое время оно меняется на:

503 Служба недоступна Нет доступных серверов для обработки этого запроса.

Ошибка моего сервераlog выглядит так:

2019/02/18 23:33:06 [error] 32636#32636: *1267 connect() failed (111: Connection refused) while connecting to upstream, client: some_IP_which_doesnt_matter, server: _, request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:3000/", host: "cloud.digitalocean.com"

Итак: даже если бы я мог подключиться к удаленной базе данных, чтобы перенести и заполнить ее, я не могу получить к ней доступ через веб-страницу.Когда я возвращаюсь (на некоторое время) к внутренней базе данных, тогда страница работает.

Я не знаю, касается ли это конфигурации сервера или конфигурации базы данных (в кластере баз данных DigitalOcean я не могу получить доступ к файлам конфигурации, у меня естьтолько прямой доступ к postgresql).

В базе данных настройки уровня DigitalOcean являются регулярными, поэтому: Моя капля добавлена ​​в «РАЗРЕШЕННЫЕ ВХОДНЫЕ ИСТОЧНИКИ».По сути, на панели «База данных DigitalOcean» есть несколько вариантов настройки.Похоже, что он должен просто работать "как очарование", когда вы подключаетесь к нему.

Я много пробовал с NGINX 'серверным блоком' для моего приложения моей капли.Теперь файл / etc / nginx / sites-available / rails выглядит следующим образом:

server {
    listen   80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    root /home/rails/model_app/public;
    server_name _;
    index index.htm index.html;

        location ~ /.well-known {
                allow all;
        }

        # From https://object.io/site/2015/rails-nginx-easy-assets
        #
        # Cache forever publicly: files for generated assets
        #   /assets/application-2565b50fc38a0b3a44882faa3e936262.css
        #
        # This setup means a CDN may cache these files
        location ~ "^/assets/.+-[0-9a-f]{32}.*" {
                gzip_static on;
                expires     max;
                add_header  Cache-Control public;
        }

        location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header X-Client-Verify SUCCESS;
        proxy_set_header X-Client-DN $ssl_client_s_dn;
        proxy_set_header X-SSL-Subject $ssl_client_s_dn;
        proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;
        }
}

Настройка моего брандмауэра:

Status: active

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
22/tcp                     LIMIT       Anywhere                  
3000                       ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
Nginx Full                 ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
25060                      ALLOW       Anywhere                  
25061                      ALLOW       Anywhere                  
25060/tcp                  ALLOW       Anywhere                  
25061/tcp                  ALLOW       Anywhere                  
53                         ALLOW       Anywhere                  
53/tcp                     ALLOW       Anywhere                  
53/udp                     ALLOW       Anywhere                  
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
22/tcp (v6)                LIMIT       Anywhere (v6)             
3000 (v6)                  ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
Nginx Full (v6)            ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
25060 (v6)                 ALLOW       Anywhere (v6)             
25061 (v6)                 ALLOW       Anywhere (v6)             
25060/tcp (v6)             ALLOW       Anywhere (v6)             
25061/tcp (v6)             ALLOW       Anywhere (v6)             
53 (v6)                    ALLOW       Anywhere (v6)             
53/tcp (v6)                ALLOW       Anywhere (v6)             
53/udp (v6)                ALLOW       Anywhere (v6)  

Так что мне кажется, что это вопросКонфигурация NGINX, но сейчас я понятия не имею, где искать.Есть идеи?

[EDIT]

Речь идет о сервере приложений - puma.С "локальной" базой данных она запускается автоматически:

rails@app:~/model_app$ ps aux | grep [p]uma
rails    31314  5.7  1.6 1054540 133500 ?      Ssl  06:05   0:02 puma 3.12.0 (tcp://0.0.0.0:3000) [model_app]

С "удаленной" базой данных это не так;Когда я запускаю его по:

bundle exec puma

Тогда получается:

rails@app:~$ ps aux | grep [p]uma
rails      535  1.6  1.7 1056636 142552 pts/3  Sl+  06:13   0:06 puma 3.12.0 (tcp://0.0.0.0:3000) [model_app]

Мой файл: /etc/systemd/system/rails.service

[Unit]
Description=ExampleApp
Requires=network.target

[Service]
Type=simple
User=rails
Group=rails
WorkingDirectory=/home/rails/model_app/
ExecStart=/bin/bash -lc 'bundle exec puma'

TimeoutSec=30s
RestartSec=30s
Restart=always

[Install]
WantedBy=multi-user.target

Почему он не запускается автоматически, когда я связываю удаленную базу данных?

1 Ответ

0 голосов
/ 20 февраля 2019

Вы проверили, работает ли ваш сервер приложений?Nginx выдает 502 при сбое пересылки прокси.Попробуйте запустить ps aux | grep [p]uma (замените puma на используемый вами сервер приложений) и посмотрите, работает ли он.

Если он не запущен, запустите его, он должен работать.Если это по-прежнему не работает, проверьте наличие ошибок в журналах nginx (/var/log/nginx/error.log).Вы найдете проблему там.Если вам все еще нужна помощь, опубликуйте последние несколько строк из файла журнала здесь, чтобы мы могли попытаться понять проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...