web-dev-qa-db-ja.com

nginxの背後にあるPostgreSQL管理ツール

PostgreSQLがインストールされたVPSがあります。私はさまざまなツール、grafana、Node.jsサイトなどへのリバースプロキシの束を使ってnginxをセットアップしました。現在PostgreSQLをセットアップしようとしていますが、外部からアクセスできるWebベースの管理ツールを使用できません。

Apache2ホスティングを使用して通常のpgAdminをインストールしようとしましたが、そのobvです。 nginxと競合しました。 nginxリバースプロキシの背後にあるpgAdminの良いガイドを見つけようとしましたが、私が見つけた唯一のもの( https://github.com/rbernardes/nginx-pgadmin )はまったく機能しませんでしたpy構成スクリプトを実行しようとしたとき。私はもっ​​と深く掘り下げることができましたが、私のポイントは、pgAdminはnginxでうまく機能していないようで、有効なWebベースの代替手段がほとんどあると思いましたか?しかし、ここは少し乾燥しているようです...

誰かがこれに光を当てることができますか?ありがとう!

4
Mockarutan

apache2ホスティングで通常のpgAdminをインストールしようとしましたが、そのobv。 nginxと競合

nginxが使用しなかった別のポートをリッスンするようにApache2を設定しても、そうはなりません。

pgAdminはnginxでうまく機能しないようです

インストールして pgAdminを使用してuWSGIを構成する アプリ、次にnGSを構成して uwsgi_pass を使用してuWSGIと通信します.


2020-05-10の編集:詳細と情報

ここでは、nginx + uwsgi_passを使用するか、Apache httpd + mod_proxy_wsgiを使用して、2つの解決策を得ました。両方について詳しく見てみましょう。

前提条件

  1. PythonおよびPython開発ヘッダー

    インストールPythonおよびその互換性のある開発ヘッダー、できれば Python> = 3.6 。uwsgiが正規表現ルーティングを処理するにはPCRE 3ライブラリが必要です。

$ Sudo apt-get update && apt-get -y install build-essential python3 python3-dev libpcre3-dev libpcre3
  1. Python仮想環境

    venvvirtualenvconda であっても、仮想環境にpgAdminをインストールします=、何でも。 OSパッケージマネージャーがpython環境(バージョン、パッケージなど))に干渉しないことを確認するだけです。

    venvを使用している場合は、次のようになります。

$ cd /path/to/working_directory

# Install virtual environment on .env, and activate it.
$ python3 -m venv .env
$ source .env/bin/activate

# upgrade existing pip packages, and install wheel.
(.env) $ pip install --upgrade pip setuptools
(.env) $ pip install wheel

# install pgAdmin 4.21
(.env) $ pip install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v4.21/pip/pgadmin4-4.21-py2.py3-none-any.whl

uWSGIとpgAdmin

uWSGIのインストール

ウェブサーバーをpgAdminに接続させるには、WSGIまたはHTTPサーバーを使用します。 pgAdminは WSGI および Gunicorn をサポートしています。

ここでは、uWSGIを使用しますが、別のWSGIサーバーを使用している場合は、UNIXソケット/tmp/wsgi/pgadmin.sockでリッスンしていることを確認してください。

まず、uWSGIをインストールする必要があります。 uWSGIは、apt-getまたはpipを使用してインストールできます。

どちらも問題ありません。ただし、pipを使用する場合は、独自のサービスファイルを作成する必要があります。 apt-getでは、古いバージョンのuWSGIを使用していることを受け入れる必要があります。 Ubuntuで配布されたサービスファイルとpipで配布された最新バージョンuwsgiバイナリを使用して、両方をインストールします

Install Ubuntu-distributed uwsgi
$ Sudo apt-get -y install uwsgi

Install pip-distributed uwsgi
$ source /path/to/working_directory/.env/bin/activate
(.env) $ pip install uwsgi

# Ubuntu-distributed version
(.env) $ /usr/bin/uwsgi --version
2.0.15-debian

# pip-distributed version
(.env) $ uwsgi --version
2.0.18

# service file
(.env) $ ls /etc/init.d/uwsgi
/etc/init.d/uwsgi

pgAdminのインストール

次に、pgAdminをuWSGI用に設定します。もう一度仮想環境に入る必要があります。私たちはおおまかに このpgAdmin公式ガイド に従っています。

まず、ローカル構成を作成します。

$ cd /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4
$ cp config.py config_local.py
$ vim config_local.py

PgAdminのドキュメントに従うこともできますが、DATA_DIR = '/var/lib/pgadmin'は、他のすべてがDATA_DIRを参照するため、適切なものに編集できます。ここでは、/path/to/working_directory/libを使用します

次に、pgAdminに必要なディレクトリを作成します

$ Sudo mkdir -p /var/log/pgadmin
$ mkdir /path/to/working_directory/lib

pgAdminはuWSGIの下で実行されるため、/var/log/pgadminおよびDATA_DIRはuWSGIによって完全に制御される必要があります。ここでは、www-dataをuWSGIユーザーおよびグループとして使用します。

$ Sudo chown www-data:www-data /var/log/pgadmin /path/to/working_directory/lib

/var/log/pgadminDATA_DIRへの書き込みを許可して設定する必要があることに注意してください。現在、ユーザーによる書き込みのみを許可しており、この権限は後で修正します。

$ Sudo chmod 777 /var/log/pgadmin /path/to/working_directory/lib

仮想環境に入り、pgAdminのsetup.pyを実行します。

$ source /path/to/working_directory/.env/bin/activate
(.env) $ cd /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4
(.env) $ python setup.py

設定が完了するまで設定手順に従い、ここで作成したメールとパスワードをメモします。

次に、/var/log/pgadminおよびDATA_DIR権限を修正します。

$ chmod 755 /var/log/pgadmin /path/to/working_directory/lib
$ chown -R www-data:www-data /var/log/pgadmin /path/to/working_directory/lib

これでpgAdminが完全にセットアップされました。

UWSGIとpgAdminの統合

これで、pgAdminとuWSGIを統合して、UNIXソケット/tmp/wsgi/pgadmin.sockでリッスンするWSGIサーバーを作成する準備ができました。

まず、お気に入りのエディターを使用して、/etc/uwsgi/apps-availableにuWSGI構成ファイルを作成します。それをpgadmin.iniと呼びましょう。

$ Sudo vim /etc/uwsgi/apps-available/pgadmin.ini

少なくとも次のものが含まれている必要があります。

[uwsgi]
socket = /tmp/wsgi/pgadmin.sock
chdir = /path/to/working_directory/.env/lib/python3.6/site-packages/pgadmin4
manage-script-name = true
venv = /path/to/working_directory/.env/
master = true
processes = 1
threads = 4
mount = /=pgAdmin4:app
log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"
logger = file:/tmp/wsgi/pgadmin-access.log
uid = www-data
gid = www-data

必要なディレクトリを作成し、pgAdmin uWSGIアプリを有効にします

$ Sudo mkdir -p /tmp/wsgi
$ Sudo chown www-data:www-data /tmp/wsgi
$ Sudo ln -s /etc/uwsgi/apps-available/pgadmin.ini /etc/uwsgi/apps-enabled/pgadmin.ini

デフォルトのuWSGIファイルを別のサービスファイルにコピーし、pipでインストールされたuWSGIバイナリを使用するように編集します。

$ Sudo cp /etc/init.d/uwsgi /etc/init.d/uwsgi-venv
$ vim /etc/init.d/uwsgi-venv
# replace DAEMON="/usr/bin/uwsgi" to DAEMON="/path/to/working_directory/.env/bin/uwsgi

uWSGI設定を行う必要があります。

次に、uWSGIを起動してみます。

$ Sudo service uwsgi-venv start pgadmin

ここで、pgadminは、以前に/etc/uwsgi/apps-enabledでソフトリンクしたものを指します。 pgadmin.iniとしてリンクした場合は、pgadminを使用します。

UWSGIが実行されているかどうかを確認します。

$ ps -eF | grep uwsgi
www-data 10582     1  2 32144 91480   0 03:56 ?        00:00:03 /path/to/working_directory/.env/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/pgadmin.ini --daemonize /var/log/uwsgi/app/pgadmin.log
www-data 10593 10582  0 87443  2640   0 03:56 ?        00:00:00 /path/to/working_directory/.env/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/pgadmin.ini --daemonize /var/log/uwsgi/app/pgadmin.log

nginxとuWSGI

Nginxをインストールしていない場合は、apt-getを使用してインストールしてください。

$ Sudo apt-get -y install nginx

すでにnginxをインストールしている場合は、一部の構成を調整する必要があります。問題が発生した場合はお知らせください。

次に、前に構成したuWSGIに要求を渡すようにnginxを構成しましょう。

/etc/nginx/sites-availableディレクトリで、新しいnginx構成ファイルを作成します。ここでは、仮想ホスト名としてpgadmin.localを使用しています。

$ Sudo vim /etc/nginx/sites-available/pgadmin.conf

この構成ファイルは、少なくとも次のようになります。

server {
    listen 80;
    server_name pgadmin.local;

    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass unix:/tmp/wsgi/pgadmin.sock;
    }
}

他のポートをリッスンする必要がある場合は、listen 80;listen <your_port>;に変更します。

この構成を有効にします。

$ Sudo ln -s /etc/nginx/sites-available/pgadmin.conf /etc/nginx/sites-enabled/pgadmin.conf

新しいnginx構成をテストしてリロードします。

 $ Sudo nginx -t && Sudo service nginx reload

構成によっては、この後にファイアウォールの構成が必要になる場合がありますが、その後は、お気に入りのブラウザーで構成済みの仮想ホストを参照できます。

 $ firefox http://pgadmin.local

httpdおよびuWSGI

ここではhttpdとnginxの設定に大きな違いはありません。HTTPリクエストをWSGIリクエストとしてWSGIサーバーバックエンドに転送するだけでよく、この場合はmod_proxy_wsgiを使用します。

Httpdをまだインストールしていない場合は、最初にインストールしてください。

$ Sudo apt-get -y install Apache2 Apache2-utils

すでにhttpdをインストールしている場合は、いくつかの設定を調整する必要があるかもしれません。問題が発生した場合はお知らせください。

Mod-proxyとmod-proxy-uwsgiの両方が必要なので、忘れずにインストールしてください。

$ Sudo apt-get -y install libapache2-mod-proxy-uwsgi

次に、前に構成したuWSGIにリクエストを渡すようにhttpdを構成しましょう。

/etc/Apache2/sites-availableディレクトリに、新しい仮想ホスト構成ファイルを作成します。ここでは、仮想ホスト名としてpgadmin.localを使用しています。

$ Sudo vim /etc/Apache2/sites-available/pgadmin.conf

この構成ファイルは、少なくとも次のようになります。

<VirtualHost *:80>
  ServerName pgadmin.local
  ProxyRequests off
  ProxyPass "/" "unix:/tmp/wsgi/pgadmin.sock|uwsgi://localhost/"
</VirtualHost>

他のポートをリッスンする必要がある場合は、いくつかの変更が必要になります。

  1. <VirtualHost *:80><VirtualHost *:<your_port>>に変更します

  2. /etc/Apache2/ports.confで、<IfModule>sの下にあるものを含むすべての無関係なListensを削除し、Listen <your_port>を追加します。

  3. それでもデフォルトのサイトが有効になっている場合は、a2dissiteで無効にしてください。

この構成を有効にします。

$ Sudo ln -s /etc/Apache2/sites-available/pgadmin.conf /etc/Apache2/sites-enabled/pgadmin.conf

Mod_proxyとmod_proxy_uwsgiを有効にする

$ Sudo a2enmod proxy proxy_uwsgi

新しいhttpd設定をテストしてリロードします。

$ Sudo apachectl configtest && Sudo service Apache2 reload

構成によっては、この後にファイアウォールの構成が必要になる場合がありますが、その後、お気に入りのブラウザーで構成済みの仮想ホストを参照できます。

 $ firefox http://pgadmin.local
1
mforsetti