pgAdmin4をサービス化して自動起動設定
pgAdmin4をサービス化して自動起動したときの覚書。
本番環境はphpMyAdminと同じくブラウザでデータベースを確認できるようにする。
環境: CentOS Stream 8, nginx 1.20.2, pgAdmin4 6.6, certbot 1.24.0
インストールするまでは前の記事を参考に。
参考: pgAdmin4をCentOS8にvenvでインストール
unitファイル作成
参考サイト
- systemd のユニットファイルの作り方 | 晴耕雨読
- Systemd入門(1) - Unitの概念を理解する - めもめも
- OS起動時にsystemdで行われていること - Qiita
- man systemd.unit の訳 - kandamotohiro
- Hostinghub.eu | Articles and information
システムサービス用unitファイルの置き場所に移動して一覧表示
# cd /etc/systemd/system
# ls
「systemctl enable」したシンボリックリンク一覧をみる
# ll multi-user.target.wants/
サービスの依存関係を見る
# systemctl list-dependencies
PostgreSQLのunitファイルを参考にして編集する。
# cp multi-user.target.wants/postgresql-14.service ./pgadmin4.service
# less pgadmin4.service
## pgAdmin4#[Unit]Description=pgAdmin4 service with gunicornAfter=syslog.targetAfter=network.target[Service]User=nginxGroup=www# Location of venv pgadmin4Environment="PATH=/opt/software/python-venv/pgadmin4/bin/"ExecStart=/opt/software/python-venv/pgadmin4/bin/gunicorn --bind unix:/tmp/pgadmin4.sock --workers=1 --threads=25 --chdir /opt/software/python-venv/pgadmin4/lib/python3.9/site-packages/pgadmin4 pgAdmin4:app[Install]WantedBy=multi-user.target
systemdを再読み込して登録されているか確認
# systemctl daemon-reload
# systemctl list-unit-files --type=service
# systemctl status pgadmin4
起動してみる。
# systemctl start pgadmin4
# systemctl status pgadmin4
権限エラーになったので修正して起動。
# chown nginx.www -R /var/lib/pgadmin/
# chown nginx.www -R /var/log/pgadmin/
# systemctl start pgadmin4
# systemctl status pgadmin4
無事起動された。
自動起動登録して確認
# systemctl enable pgadmin4
Created symlink /etc/systemd/system/multi-user.target.wants/pgadmin4.service → /etc/systemd/system/pgadmin4.service.
# systemctl list-unit-files --type=service
再起動して確認
# reboot
nginxの設定
設定ファイルを編集。
# cd /etc/nginx/conf.d/
# less 00_default.conf
## pgAdmin4#server {listen 80;server_name pgadmin.*;
location / {
proxy_set_header Host $http_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_pass http://unix:/tmp/pgadmin4.sock;}}
nginx再読み込み
# nginx -t
# systemctl reload nginx
ブラウザで表示して確認。
セキュリティを考えてBasic認証とIPアドレス制限とSSL暗号化する。
参考: nginxでBasic認証を設定
certbotが参照するための権限設定
# chown nginx.www /var/www/html/
nginx設定ファイル修正
# less 00_default.conf
## pgAdmin4#server {listen 80;server_name pgadmin.*;# Basic Authenticationauth_basic "Secret Area for pgAdmin4";auth_basic_user_file "/home/httpd/httpdocs/.htpasswd";# IP Limitationallow 123.456.7.89;deny all;location /.well-known/acme-challenge {auth_basic off;allow all;root /var/www/html/;}location / {proxy_set_header Host $http_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_pass http://unix:/tmp/pgadmin4.sock;}}
nginx再読み込み。
# nginx -t
# systemctl reload nginx
certbotで証明書取得
# certbot certonly --webroot -w /var/www/html/ -d pgadmin.hoge.jp
nginx設定ファイル修正。最終版。
# less 00_default.conf
## pgAdmin4#server {listen 443 ssl;server_name pgadmin.*;# Basic Authenticationauth_basic "Secret Area for pgAdmin4";auth_basic_user_file "/home/httpd/httpdocs/.htpasswd";# IP Limitationallow 123.456.7.89;deny all;# Accept for Let's Encrypt(certbot)location /.well-known/acme-challenge {auth_basic off;access_log off;allow all;root /var/www/html/;}location / {proxy_set_header Host $http_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_pass http://unix:/tmp/pgadmin4.sock;}include conf.d/global/gzip.conf;include conf.d/global/ssl.conf;ssl_certificate /etc/letsencrypt/live/pgadmin.hoge.jp/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/pgadmin.hoge.jp/privkey.pem;ssl_trusted_certificate /etc/letsencrypt/live/pgadmin.hoge.jp/chain.pem;}
nginx再読み込み。
# nginx -t
# systemctl reload nginx
ブラウザでアクセスして確認。