投稿

3月, 2022の投稿を表示しています

PHPセッションの設定確認

Oauthのstate用にセッションIDをハッシュ化して開発している時に本番環境でうまく動かなかったので、一つずつ原因を紐解いていったときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PHP 7.4.19, WordPress 5.9.2 Android上のChromeで動作確認している。 デバイスの開発者向けオプションを設定する  |  Android デベロッパー  |  Android Developers Remote debug Android devices - Chrome Developers PHPセッション設定 まずはPHPのセッション関連設定を確認する。 セッションIDの置き場所の確認 # less /etc/php-fpm.d/www.conf php_value[session.save_handler] = files php_value[session.save_path]    = /var/lib/php/session セッションのタイムアウト時間設定の確認 # php -i | grep session session.cookie_lifetime => 0 => 0 session.gc_maxlifetime => 1440 => 1440 session.name => PHPSESSID => PHPSESSID cookie_lifetime=0の場合はブラウザが閉じるまでセッションを維持する。 gc_maxlifetime=1440は秒数。24分経過するとガベージコレクションで(一定確率で)消去される。 念のためphpinfo()をどこかに設置して、php-fpm経由のphpinfo()を表示して確認する。 セッションID生成の動作確認 PHPセッションの基本的な動作は公式サイトを参考に。 PHP: 基本的な使用法 - Manual session_start()したときに生成したセッションIDを確認する。 ChromeブラウザのDeveloper Toolsの「Network→(リクエストしたパス)→ Cookie」を見る。session_start()するパスではPHPSESSIDが生成されているはず。 Name: PHPSESSID Val

JavaScriptでシークレット/プライベートモードか判定できる?

ブラウザがシークレットモード(Incognito mode/Private mode)だと予期せぬ不具合が発生するので、事前に警告するためJavaScriptで現在のモードを判断できるか調査したときの覚書。 シークレット ブラウジング - パソコン - Google Chrome ヘルプ Gist | Detect if the browser is running in Private mode (Promise based) ユーザーエージェント文字列を用いたブラウザーの判定 - HTTP | MDN Gistのサンプルコードは動作しないというコメントがある。 そもそもシークレットモードが検知できるのがセキュリティ的な欠陥という議論がある。 「Chrome」のシークレットモードを検知できる手法、研究者が指摘 - CNET Japan 今検知できたとしても、将来的に出来なくなる可能性が高そう。 事前に検知するのは諦めた。 IEのテストをしなくてよくなったと思ったら、意外な検査項目が増えた(笑) 【関連記事】 WordPressのSessionの仕組み LINE Notifyでメールアドレスがないユーザーとの問合せ機能を実現したい

nginxで国単位のIPアドレス制限

セキュリティのために日本国外からのアクセスをブロックしようとしたときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PostgreSQL 14.2 IPアドレスから国を判定するためにMaxMind社が提供しているデータを使う。 MaxMind社はIPアドレスの位置情報を提供しているアメリカの会社。 参考:  MaxMind - Wikipedia nginxにGeoIP2モジュールを追加するとパフォーマンスに影響が出そうな気がするので、まずは国ごとのIPアドレスリストを生成することから始めてみた。 MaxMindはAPIを幅広く提供していて使いやすい。 GeoIP2 and GeoLite2 Database Documentation | MaxMind Developer Portal GeoLite2はクリエイティブコモンズライセンスで提供されている。 配布する場合はクレジット表示が必要。 参考:  GeoLite2 Free Geolocation Data | MaxMind Developer Portal 国別IPアドレスリストをPostgreSQLにインポート 公式サイトを参考に。MySQLへのインポート方法もある。 PostgreSQLにはcidrというIPv4とIPv6を格納するデータ型があるので便利。 Importing GeoIP2 and GeoLite2 databases to PostgreSQL | MaxMind Developer Portal PostgreSQL: Documentation: 14: 8.9. Network Address Types 簡単な手順 メールアドレスでサインアップする。 マイページ左メニューの「Download Files」から「GeoLite2-Country-CSV」zipファイルをダウンロード。 ASNはAS番号を割り当てられた組織 参考:  自律システム (インターネット) - Wikipedia PostgreSQLにインポート CSVファイルを開発サーバーに置いて、DBeaverでデータベースを作成して、公式サイトのcreate table文を実行。 参考:  Importing GeoIP2 and GeoLite2 databases to Po

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 gunicorn After=syslog.target After=network.target [Service] User=nginx Group=www # Location of venv pgadmin4 Environment="PATH=/opt/software/python-venv/pgadmin4/bin/" ExecStart=/opt/software/python-venv/pgadmin4/bin/gunicorn  --bind unix:/tmp/pgadmin4.sock -

pgAdmin4をCentOS8にvenvでインストール

venvを知って仮想環境へインストールしたときの覚書。 環境: CentOS Stream 8, Python 3.9.7, PostgreSQL 14.2, pgAdmin4 6.6, gunicorn 20.1.0, nginx 1.20.2 pip経由でインストールする。公式サイトを参考に。 pgAdmin 4 (Python) Download pgAdmin4用システムディレクトリを作成 # mkdir /var/lib/pgadmin # mkdir /var/log/pgadmin Python仮想環境用のディレクトリを作成してpgadmin4仮想環境を作成。 # mkdir /opt/software/python-venv # cd /opt/software/python-venv # python -m venv pgadmin4 仮想環境用スクリプト実行 # source pgadmin4/bin/activate pipの確認とアップグレード (pgadmin4)# python -m pip list (pgadmin4)# python -m pip install --upgrade pip setuptools pip経由でpgAdmin4のインストール。 (pgadmin4)# python -m pip install pgadmin4 pgAdmin4実行 (pgadmin4)# pgadmin4 このPCはLAN内の開発サーバー。ブラウザでアクセスして確認してみる。 表示できないのでファイヤーウォール確認 (pgadmin4)# systemctl status firewalld (pgadmin4)# firewall-cmd --list-all pgAdmin4の5050ポートを開けて確認 (pgadmin4)# firewall-cmd --add-port=5050/tcp --permanent (pgadmin4)# firewall-cmd --reload (pgadmin4)# firewall-cmd --list-all pgAdmin4実行 (pgadmin4)# pgadmin4 ブラウザでアクセスして確認する。 表示できない…。 別コンソールを開いてポートが空いているか確認。 TCPソケット(

Pythonモジュールを全アンインストールして初期化

Pythonにはvenvというモジュールで仮想環境を作るということを知ったので、今までインストールしたモジュールを削除したときの覚書。 環境: Python 3.9.7 参考サイト pipで一括"アン"インストールする方法【Python】 – アヒルの豆知識 インストールしてあるモジュールを書き出してアンインストール実行 # pip freeze > uninstall.txt # pip uninstall -y -r uninstall.txt # pip list pipアップグレード # python -m pip install --upgrade pip ファイル削除 # rm uninstall.txt 必要なモジュールはインストール # python -m pip install requests psycopg 【関連記事】 Python3.6と3.9を共存させようとして結局3.6はアンインストール Python3.6からPython3.9に切り替える

Python3.6と3.9を共存させようとして結局3.6はアンインストール

前にpipコマンドをPython3.9にするためにPython3.6をアンインストールしたけれど、本番環境ではPython3.6を残す方向でインストールしたときの覚書。 参考:  Python3.6からPython3.9に切り替える 環境: CentOS Stream 8, Python 3.6.8, Python 3.9.7 Python3.6だけでいいかな?と思ったけれど、バッチ処理がPython3.6だと90分掛かるのに対して、Python3.9だと10分ほどで終わるので 速度メリットが圧倒的 すぎる。 そもそもPythonの世界では1つのPCで複数のバージョンやライブラリを使うのが普通であり、そのためのvenvモジュールが用意されている。次回venvを試す予定。 Python3.9をインストール # dnf install python39 確認 # python3.9 --version python3コマンドとpythonコマンドのバージョンを変えない。 一応alternativesに登録されているか確認。 # alternatives --list # alternatives --config python3 # alternatives --config python pipコマンドの確認 # pip --version # which pip pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6) # python3.9 -m pip --version pip 20.2.4 from /usr/lib/python3.9/site-packages/pip (python 3.9) とりあえずアップデートする # python3.9 -m pip list # python3.9 -m pip install -U pip setuptools # python3.9 -m pip list そうしたらpipコマンドは3.9に置き換わっていた。 # pip --version pip 22.0.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9) ん?これでpython3.6のpipを更

WordPressのSessionの仕組み

WordPressでsession_id()を実行しても値が返って来なかったので調査したときの覚書。 環境: PHP 7.4.19, WordPress 5.9.1 WordPressはPHPのsession_start()を使っていない。 おそらくPHPセッションが使えない環境でも動作するため。 だからCookieにPHPSESSIDは保存されないはず。 Cookie($_COOKIE)を使って自前でセッションを実装している。 WordPressが現在のユーザーを判定する仕組み ログインしたときにwp_set_auth_cookie()でcookieにトークン書き込み。 wp-includes\pluggable.php:904行目 このトークンをwp_user_metaのsession_tokensにも保存。 wp-includes\class-wp-user-meta-session-tokens.php ページを表示したときにwp_get_current_user()が実行。 wp-includes\pluggable.php:69行目 apply_filters( 'determine_current_user', false )からwp_validate_auth_cookie()が実行されcookieの情報を参照。 wp-includes\pluggable.php:681行目 cookieに書き込まれたユーザー名からユーザーIDを取得。 このユーザーIDのwp_user_metaのsession_tokens=cookieトークンならばログインユーザー。 一言でいうならWordPressはセッション管理を自前で行っている。 ここで気付いたのは WordPressはサーバーのsession設定と関係なく、cookieに書き込まれた時間でsession切れ になる。 wp_set_auth_cookie()に記述されているのは デフォルトで2日間 ログイン状態を保存するだと14日間 auth_cookie_expirationフィルターで設定変更できる でも管理画面開きっぱなしで何もしていないと自動ログアウトしているような…。 この処理はまた後日調べる。 ゲストユーザーもセッションを使いたい場合 PHPのsession_start()を使

LINE Notifyでメールアドレスがないユーザーとの問合せ機能を実現したい

ホームページから問い合わせしたユーザーと メールアドレスなし でLINEでうまいことやり取りできないものかと調査したときの覚書。 LINE公式アカウント+Messaging APIではなく、もう少し緩い繋がりでメッセージのやり取りだけしたい。 WEBサービスからLINE通知を送れるLINE Notifyという機能がある。 LINE Notify ヘルプセンター | LINE Notify LINE Notify API Document LINE Notifyの使い方(PHPコードを例に) - Qiita LINE Notifyの概要 WEBサービスからユーザーのLINEへ通知を送ることができる。 特徴まとめ 通知はLINEの公式「LINE Notify」というアカウントのメッセージとして表示される。 サイトに訪れた不特定多数のユーザーに通知するためにはサービス登録して、通知許可画面でユーザーに許可してもらう必要がある。 WEBサービスを登録しなくてもパーソナルアクセストークンを使うと、事前選択した通知先トークルームへ通知を送ることができる。 サービス登録にLINEアカウントが必要。 LINE Businessアカウントではログイン出来なかった。 → プライベートと分ける場合は別の電話番号が必要(Androidのマルチユーザー機能を使うとLINEアプリの複数インストールは可能) サービスの制限 トークンごとAPIのcall回数は1時間1000回 1ユーザーあたりトークン発行数100個 送信可能なメッセージ 改行とリンクは送信可能 画像(最大 2048×2048px / JPEG)とスタンプも送信可能 参考:  LINE Notify API Document 活用すればメールアドレスがないユーザーともやり取りできる仕組みが出来そう。 試してみる予定。 (2022/03/14追記)試してみた iPhoneで標準ブラウザをSafariに設定していないLINEアプリが起動しない。 (iPhoneのChromeだとウェブのログイン画面が表示される) Androidで標準ブラウザをChromeに設定していないLINEアプリが起動しない。 (Firefoxだとウェブのログイン画面が表示される) ブラウザがシークレット(プライベート)モードだと「ページが見つかりません」になる。

PostgreSQLのチューニング設定

データ分析用PostgreSQLを本番環境へインストールしてチューニングしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 Autovacuumの設定 autovacuumはデフォルトで有効。 track_countsもデフォルトでオンになっているので、特に設定しなかった。 参考:  PostgreSQL: Documentation: 14: 20.10. Automatic Vacuuming 参考:  autovacuumのチューニング要素について考えてみる - Qiita サーバーに合わせたチューニング設定 下記サイトを参考にしながら設定した。 チューニング ~データベースチューニング~|PostgreSQLインサイド : 富士通 【PostgreSQL】PostgreSQLのチューニング(設定編) - PEOPLE Engineering Blog # su - postgres $ cd 14/data/ $ less postgresql.conf max_connections = 200 shared_buffers = 512MB work_mem = 8MB maintenance_work_mem = 256MB rootに戻って再起動 # systemctl restart postgresql-14 # systemctl status postgresql-14 状態を監視 PostgreSQLでは組み込みの統計情報表示用Viewが用意されている。 参考サイト PostgreSQL: Documentation: 14: 28.2. The Statistics Collector PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料 データベースシステムの監視 ~監視方法と監視例~|PostgreSQLインサイド : 富士通 縦表示にしてrecruitテーブルの統計情報を見てみる。 # su - postgres $ psql # \x # select viewname from pg_views; # select * from pg_stat_database where datname = '

WordPressのページ間キャッシュTransients API

WordPressのログインユーザーはnginxキャッシュは効かないように設定してあるので、ページ間でキャッシュする仕組みはないものかと調査したときの覚書。 環境: WordPress 5.9.1 Transients APIがあるのを知った。 オブジェクトキャッシュとの違い WP_Object_Cache: メモリに保存。リクエストごと。ページ間でキャッシュ出来ない。 参考:  WP_Object_Cache | Class | WordPress Developer Resources WP Transients API : データベースに保存(wp_options)。指定時間経過でキャッシュクリアできる。 参考:  Transients | Common APIs Handbook | WordPress Developer Resources 参考:  set_transient() | Function | WordPress Developer Resources Nginx Proxy Cache: ファイル保存。リクエストをPHPに渡さずに返す。 WP Transients APIはwp-includes/option.phpのget_transientとset_transientを見た方が早い。 PHP Cache で実装しようとしていたところなのでこの機能はありがたい。 【関連記事】 WordPress記事を投稿時にNginxのキャッシュを削除 静的WordPress向けNginxのfastcgi_cache設定 WordpressでAPCを使ったObject Cacheを有効にする

PostgresSQLの言語設定(locale)をja_JPにする

データ分析用PostgreSQLの言語設定したときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 インストールは 前の記事 を参考に。 CentOSの言語設定を確認 # localectl status    System Locale: LANG=en_US.UTF-8        VC Keymap: jp106       X11 Layout: jp,us      X11 Variant: , OSは英語のままデータベースは日本語にする。 言語設定は照合順序に関係する。詳しくは下記公式サイトで。 23.1. ロケールのサポート | PostgreSQL PostgreSQL: Documentation: 14: 24.1. Locale Support OSで提供している言語設定一覧を確認 # locale -a ja_JPがない場合はこの記事の下を参照してインストール。 今のPostgreSQLの設定を確認 # su - postgres データベースのリストを表示 $ psql -l 既存のデータベースのCollate, Ctypeは変更できない。作り直す必要がある。 PostgreSQLの設定変更 $ cd 14/data/ $ less postgresql.conf lc_messages = 'ja_JP.UTF-8' # メッセージの言語 lc_monetary = 'ja_JP.UTF-8' # 通貨書式 lc_numeric = 'ja_JP.UTF-8'  # 数字の書式 lc_time = 'ja_JP.UTF-8'     # 日付と時刻の書式 rootに戻ってPostgreSQL再起動して確認 # systemctl restart postgresql-14 # systemctl status postgresql-14 ログが日本語になっているのは気持ち悪いので英語に戻す # less /var/lib/pgsql/14/data/postgresql.conf lc_messages = 'en_US.UTF-8' # systemctl restart postgresql-14 # systemctl

PHPからPostgreSQLへ接続

PHPからPostgreSQLへ接続 → クエリを発行 → データ取得しているときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, PHP 7.4.19 参考サイト PHP: PostgreSQL - Manual pgsqlインストール PHPからPostgreSQLに接続するためのextensionをインストール # dnf install php-pgsql /etc/php.d/20-pgsql.iniが作成された。 依存関係のlibpg5がpgdg-commonリポジトリからインストールされた。 これはPostgreSQLをインストールした際に追加されたリポジトリ。 確認 # php --ri pgsql pgsql PostgreSQL Support => enabled PostgreSQL(libpq) Version => 13.5 PostgreSQL(libpq)  => PostgreSQL 13.5 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-5), 64-bit Multibyte character support => enabled SSL support => enabled Active Persistent Links => 0 Active Links => 0 Directive => Local Value => Master Value pgsql.allow_persistent => On => On pgsql.max_persistent => Unlimited => Unlimited pgsql.max_links => Unlimited => Unlimited pgsql.auto_reset_persistent => Off => Off pgsql.ignore_notice => Off => Off pgsql.log_notice => Off => Off サンプルプログラム ローカルホストのPostgreSQ

pgAdmin4をCentOS8+Python3.9へインストールしようとして失敗

PostgreSQLを久しぶりに触ってウェブ版pgAdmin4をインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, pgAdmin4 6.5 インストールに成功した記事はこちら。 参考:  pgAdmin4をCentOS8にvenvでインストール 参考 pgAdmin - PostgreSQL Tools Download | pgAdmin 上記サイトを参考にインストール # dnf install pgadmin4-redhat-repo # dnf info pgadmin4-web # dnf install pgadmin4-web Package pgadmin4-redhat-repo-0.9-2.noarch is already installed. なぜかpgadmin4-redhat-repo-0.9-2をインストールしようとしている… cleanして再実行 # dnf clean all # dnf install pgadmin4-web …変わらずインストールできないので、リポジトリ情報だけ残して削除。 # cd /etc/yum.repos.d/ # cp pgadmin4.repo pgadmin4.repo.bak # dnf remove pgadmin4-redhat-repo # mv pgadmin4.repo.bak pgadmin4.repo # dnf install pgadmin4-web 依存関係でPython3.6をインストールするので止めた。 前の記事 でPython3.9に変更したばっかり。 pip経由でインストールすることにした。 # pip install pgadmin4 エラー ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. pyopenssl 22.0.0 requires cryptography>=35.0, but you ha

Python3.6からPython3.9に切り替える

開発サーバーのPythonを3.6から3.9に切り替えたときの覚書。 ちなみに本番環境ではgsutilの要件がPython3.8までなのでPython3.6のまま。 環境: CentOS Stream 8, Python 3.6.8, Python 3.9.7 Python3.9をインストール # dnf install python39 Pythonのコマンドをデフォルトで3.9にして確認 # alternatives --config python3 # alternatives --config python # alternatives --list バージョンとパスの確認 # python3 --version Python 3.9.7 # which python3 /usr/bin/python3 pipの確認 # pip --version # pip3 --version /usr/local/binに設置されている。 /usr/local/binはpython3.9がインストールされた/usr/binより優先されてしまうので、python3.6はアンインストールする。 (共存できるためpython3.6をアンインストールする必要はない) # dnf remove python36 あれ?pipが/usr/local/binに残っている。 シンボリックリンクでないことを確認して手動で削除。 # cd /usr/local/bin # ll # rm -f pip* 関係ありそうなライブラリを削除しておく (/usr/local/lib/python3.6/はpip installしたモジュールの保存場所) # rm -rf /usr/local/lib/python3.6/ シェルの再読み込み # cd # source .bash_profile pipコマンドをalternativesで登録する。最後の1は優先順位。 参考:  alternatives による標準コマンドの切り替え # alternatives --install /usr/bin/pip pip /usr/bin/pip3.9 1 確認してアップデート # pip --version # pip list # pip install -U pip setuptools 本番環

ローカルのPostgreSQLにUnix socketで接続する

PythonでローカルのPostgreSQLに接続するならUnix socket経由の方が速いだろうと設定したときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 参考 PostgreSQL: Documentation: 14: 20.3. Connections and Authentication PostgreSQL: Documentation: 14: 34.1. Database Connection Control Functions # su - postgres $ cd 14/data/ $ less postgresql.conf unix_socket_directories = '/var/run/postgresql' PostgreSQL再起動 # systemctl restart postgresql-14 ファイルがあるか確認 # ls -a /var/run/postgresql/ postgresでpythonプログラムを実行する # su - postgres psycopg.connectはhost名にunix_socket_directoriesを設定。 psycopg.connect("host=/var/run/postgresql dbname=recruit") 計測してみたら数秒速くなった程度なのでTCP/IPで運用することにした。 でもWindowsからリモートでDB接続するよりローカルの方が圧倒的に速い。 【関連記事】 Python+psycopg3でPostgreSQLに接続 CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続 TCP/IPとUNIX Socketの接続でどれくらい違うか

Python+psycopg3でPostgreSQLに接続

PythonからPostgreSQLに接続する方法を調査している時の覚書。 環境: Windows10, Python 3.10.2, psycopg 3.0.9 検索すると psycpg2 のサンプルプログラムが多く見つかるけど、今はpsycopg3がメインストリームになっている。 psycopg 3.1.dev0 documentation Differences from psycopg2 - psycopg 3.1.dev0 documentation psycopg3をインストール > pip install psycopg[binary] psycopg-binaryはPostgreSQLのlibpqをインストールしていない環境でも動作させるためのライブラリ。 PostgreSQLをインストールしたCentOS上は「pip install psycopg」だけでOK サンプルプログラムは公式サイトを参考にする。 Basic module usage - psycopg 3.1.dev0 documentation ざっと読んだポイントとしては connect()でデータベースのセッション開始 cursor()でクエリ制御開始 execute()した後にselectした値を取得するにはcur.fetchone, cur.fetchallを使う 参考:  Cursor classes - psycopg 3.1.dev0 documentation withブロック推奨。withを使うことでwithの終了と同時に自動コミットされる 参考:  Transactions management - psycopg 3.1.dev0 documentation 一発目のcur.execute()でトランザクションを開始する(SELECTでも) SELECTしかないwithブロックならautocommit=Trueにすることで不必要なロックを回避できる(psycopgはデフォルトでautocommit=Falseで接続する) 参考:  Connection classes - psycopg 3.1.dev0 documentation 【関連記事】 CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続 Pythonのコ

CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続

久しぶりにPostgreSQLをインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 CentOSにPostgreSQLのインストール リポジトリにあるposgresql-serverのバージョンを確認。 # dnf search postgresql # dnf info postgresql-server Available Packages Name         : postgresql-server Version      : 10.19 Release      : 1.module_el8.6.0+1047+4202cf9a Architecture : x86_64 # dnf module list postgresql 最新バージョンv14を公式ページに従ってインストールすることにした。 参考:  PostgreSQL: Linux downloads (Red Hat family) # dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # dnf -qy module disable postgresql インストール # dnf install postgresql14-server 初期化して自動起動Onしてサーバー起動 # /usr/pgsql-14/bin/postgresql-14-setup initdb # systemctl enable postgresql-14 # systemctl start postgresql-14 バージョン確認 # psql --version psql (PostgreSQL) 14.2 設定ファイル(pg_hba.confなど)の場所確認。起動オプションで与えられているはず。 # systemctl status postgresql-14 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/ 設定ファイル確認 # cd /var/lib/pgsql/14/data/ # less postgres