Fedora 34에 PostgreSQL 및 phpPgAdmin을 설치하는 방법
이 페이지에서
- 전제 조건
- 1단계 - PostgreSQL 설치
- 2단계 - 새 PostgreSQL 데이터베이스 클러스터 생성
- 3단계 - PostgreSQL 역할 및 인증 방법\n
- 4단계 - 새 역할 및 데이터베이스 생성.\n
- 5단계 - PostgreSQL 서버에 대한 원격 액세스 활성화\n
- 6단계 - phpPgAdmin, Nginx 및 PHP 설치
- PHP 구성
- Nginx 구성
- 자동 갱신을 위한 SSL 구성\n
PostgreSQL 또는 Postgres는 SQL 언어를 사용하고 확장하는 강력한 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 복잡한 데이터 워크로드를 안전하게 저장하고 확장하는 많은 고급 기능이 있습니다. phpPgAdmin은 PostgreSQL 데이터베이스를 관리하고 편집하는 PHP 기반 애플리케이션입니다.
이 튜토리얼은 Fedora 34 기반 서버에 PostgreSQL 및 phpPgAdmin을 설치하는 방법을 보여줍니다.
전제 조건
-
A Fedora 34 based server.
-
Keep your systems updated.
$ sudo dnf update
-
A non-root user with sudo privileges.
1단계 - PostgreSQL 설치
Fedora 34는 저장소에서 사용할 수 있는 다양한 버전의 PostgreSQL과 함께 제공됩니다. 패키지 및 종속성 모음인 적절한 모듈을 활성화하여 이러한 버전 중에서 선택할 수 있습니다.
먼저
dnf
명령을 사용하여postgresql
모듈에 사용 가능한 스트림을 확인합니다.$ dnf module list postgresql Name Stream Profiles Summary postgresql 9.6 client, server [d] PostgreSQL module postgresql 10 client, server [d] PostgreSQL module postgresql 11 client, server [d] PostgreSQL module postgresql 12 client, server PostgreSQL module postgresql 13 client, server PostgreSQL module
PostgreSQL을 설치하려면 해당 모듈 스트림을 활성화해야 합니다.
$ sudo dnf module enable postgresql:13
메시지가 표시되면
Y
를 입력하여 스트림을 활성화합니다.다음으로 PostgreSQL 서버를 설치합니다.
$ sudo dnf install postgresql-server
PostgreSQL 데이터베이스 시스템에 몇 가지 추가 기능을 추가하는
contrib
패키지를 설치할 수 있습니다.$ sudo dnf install postgresql-contrib
이제 서버가 설치되었으므로 새 사용자를 만들어야 합니다.
2단계 - 새 PostgreSQL 데이터베이스 클러스터 생성
먼저 새 PostgreSQL 데이터베이스 클러스터를 생성해야 합니다. 데이터베이스 클러스터는 단일 서버 인스턴스에서 관리하는 데이터베이스 모음입니다. 클러스터를 생성하면 데이터베이스가 배치될 디렉토리가 생성됩니다. 이 전체 프로세스는 PostgreSQL 초기화와 유사합니다.
이 프로세스는
template1
및postgres
데이터베이스를 생성합니다.template1
데이터베이스는 PostgreSQL에서 새 데이터베이스를 생성하는 데 사용하는 템플릿입니다.postgres
데이터베이스는 사용자, 유틸리티 및 타사 응용 프로그램에서 사용하는 기본 데이터베이스입니다.PostgreSQL을 초기화할 데이터베이스 클러스터를 생성하려면 다음 명령을 사용합니다.
$ sudo postgresql-setup --initdb
이제 PostgreSQL 서비스를 시작합니다.
$ sudo systemctl start postgresql
PostgreSQL 서비스를 활성화합니다.
$ sudo systemctl enable postgresql
이제 PostgreSQL이 실행 중이므로 새 사용자와 데이터베이스를 생성하고 사용할 수 있습니다.
3단계 - PostgreSQL 역할 및 인증 방법
Postgres는 "역할" 개념을 사용하여 인증 및 권한을 처리합니다. PostgreSQL은 여러 인증 방법을 지원합니다. 가장 일반적으로 사용되는 방법은 다음과 같습니다.
- 신뢰 -
/var/lib/pgsql/pg_hba.conf
에 정의된 조건이 충족되는 한 비밀번호 없이 연결할 수 있는 역할입니다.\n - 암호 - 암호를 사용하여 연결하는 역할입니다. 암호는
md5
,scram-sha-256
및 일반 텍스트로 저장할 수 있습니다.\n - Ident - 클라이언트 OS 사용자 이름이 필요하며 TCP/IP 연결에서만 지원됩니다.\n
- Peer - Ident와 동일하지만 localhost 연결에서만 지원됩니다.\n
Postgres는 기본적으로 피어 인증을 사용합니다. 즉, Linux 사용자 계정과 일치하는 Postgres 역할을 연결합니다. Postgres 내부에 역할이 있는 경우 동일한 이름의 Linux 사용자 이름이 해당 역할로 로그인할 수 있습니다. 클라이언트 인증에 대한 세부 정보는
/var/lib/pgsql/pg_hba.conf
파일에 저장됩니다.Postgres의 설치 프로세스는 기본 Postgres 역할과 연결된
postgres
라는 사용자 계정을 생성합니다.postgres
계정으로 전환합니다.$ sudo -i -u postgres
다음 명령을 사용하여 Postgres 프롬프트에 액세스할 수 있습니다.
$ psql
이렇게 하면 다양한 명령을 통해 데이터베이스에 액세스하고 사용할 수 있는 PostgreSQL 프롬프트에 로그인됩니다. 다음을 입력하여 프롬프트를 종료할 수 있습니다.
postgres-# \q
Postgres 계정 Linux 계정으로 돌아갑니다. 자신의 사용자 계정으로 돌아가려면 프롬프트에
exit
를 입력하십시오.다음 명령을 입력하여 계정을 전환하지 않고 Postgres 프롬프트에 액세스할 수도 있습니다.
$ sudo -u postgres psql
프롬프트를 종료하려면 다음을 입력하십시오.
postgres-# \q
4단계 - 새 역할 및 데이터베이스 생성.
bash 셸 또는
psql
셸에서 직접 역할과 데이터베이스를 만들 수 있습니다. 작업을 더 빠르게 수행하는psql
셸을 사용합니다.먼저
psql
셸에 연결합니다.$ sudo -u postgres psql
수퍼유저, 데이터베이스 생성, 역할 생성 및 로그인과 같은 권한이 있는 새 PostgreSQL 역할을 생성합니다. 이 사용자는 phpPgAdmin에 로그인하기 위한 가이드에서 추가로 사용됩니다.
postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';
다음 명령으로 사용 가능한 모든 사용자를 확인할 수 있습니다.
postgres-# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- username | Superuser, Create role, Create DB | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
새 데이터베이스를 만듭니다.
postgres-# CREATE DATABASE userdb;
다음 쿼리를 실행하여 방금 생성한 데이터베이스의 사용자에게 권한을 부여합니다.
postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;
다음 명령으로 사용 가능한 모든 데이터베이스를 확인할 수 있습니다.
postgres-# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- userdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | navjot=CTc/postgres postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
5단계 - PostgreSQL 서버에 대한 원격 액세스 활성화
기본적으로 PostgreSQL 서버는 localhost 인터페이스에서만 수신 대기합니다. PostgreSQL 서버에 대한 원격 액세스를 활성화하려면
postgresql.conf
파일을 엽니다.$ sudo nano /var/lib/pgsql/data/postgresql.conf
연결 및 인증 섹션까지 아래로 스크롤하고 해시 기호를 제거하여 다음 줄을 변경/편집합니다.
#listen_addresses = 'localhost' # what IP address(es) to listen on;
줄을 다음과 같이 변경합니다.
listen_addresses = '*' # what IP address(es) to listen on;
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
다음 단계는
pg_hba.conf
파일을 편집하여 원격 연결을 허용하도록 서버를 구성하는 것입니다.$ sudo nano /var/lib/pgsql/data/pg_hba.conf
원격 연결에 대한 액세스 권한을 부여할 수 있는 다양한 방법이 있습니다. 단일 사용자나 단일 데이터베이스 또는 이들 모두에 대한 원격 연결을 제한하고 모든 IP 주소 또는 신뢰할 수 있는 위치에 대한 연결을 제한할 수 있습니다.
# TYPE DATABASE USER ADDRESS METHOD # The user jane can access all databases from all locations using an md5 password host all john 0.0.0.0/0 md5 # The user jane can access only the janedb database from all locations using an md5 password host johndb john 0.0.0.0/0 md5 # The user jane can access all databases from a trusted location (192.168.1.110) without a password host all john 192.168.1.110 trust
파일에는 다른 항목도 있으며 해당 항목에 대해 나열된 인증 방법은
ident
입니다. 웹 인터페이스를 통해 로그인하려면ident
값을md5
로 변경해야 합니다.필요한 구성을 추가한 다음 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.
변경 사항을 적용하려면 PostgreSQL 서버를 다시 시작하십시오.
$ sudo systemctl restart postgresql
ss
유틸리티로 변경 사항을 확인하십시오.$ ss -nlt | grep 5432 LISTEN 0 128 0.0.0.0:5432 0.0.0.0:* LISTEN 0 128 [::]:5432 [::]:*
이것은 PostgreSQL 서버가 모든 인터페이스의 기본 포트에서 수신 대기하고 있음을 보여줍니다.
6단계 - phpPgAdmin, Nginx 및 PHP 설치
phpPgAdmin은 일반적으로 PostgreSQL 또는 Fedoras 리포지토리와 함께 제공되지만 Fedora 34에는 제공되지 않습니다. 따라서 수동으로 설치해야 합니다. phpPgAdmin과 함께 Nginx 웹 서버 및 PHP 소프트웨어도 설치해야 합니다.
$ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz
다운로드한 아카이브를 추출합니다.
$ tar -zxvf phpPgAdmin-7.13.0.tar.gz
사이트가 위치할 디렉토리를 생성합니다.
$ sudo mkdir /var/www/phppgadmin/html -p
압축을 푼 파일을
/var/www/phppgadmin/html
디렉터리로 이동합니다.$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html
적절한 PHP 모듈과 함께 Nginx 서버 및 PHP를 설치합니다.
$ sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring
Fedora 방화벽을 구성합니다.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
규칙을 활성화하려면 방화벽을 다시 로드하십시오.
$ sudo firewall-cmd --reload
PHP 구성
nano 편집기
를 사용하여 편집하기 위해/etc/php-fpm.d/www.conf
파일을 엽니다.$ sudo nano /etc/php-fpm.d/www.conf
PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서
user=apache
및group=apache
줄을 찾아 nginx로 변경합니다.... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache user chosen to provide access to the same directories as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ...
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
PHP-fpm 프로세스를 다시 시작하십시오.
$ sudo systemctl restart php-fpm
Nginx 구성
다음 명령을 실행하여 사이트에 대한 구성 파일을 추가하십시오.
$ sudo nano /etc/nginx/conf.d/phppgadmin.conf
편집기에 다음 코드를 붙여넣습니다.
server { listen *:80; server_name phppgadmin.example.com; root /var/www/phppgadmin/html; index index.php; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/phppgadmin.access.log; error_log /var/log/nginx/phppgadmin.error.log; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } }
Ctrl + X를 눌러 편집기를 닫고 파일을 저장하라는 메시지가 표시되면 Y를 누릅니다.
이 파일은
/var/www/html/phppgadmin
디렉토리에서phppgadmin.example.com
을 호스팅한다고 가정합니다.Nginx 구성을 테스트합니다.
$ sudo nginx -t
구성이 올바르다는 것을 나타내는 다음 출력이 표시되어야 합니다.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginx 서비스를 시작하고 활성화합니다.
$ sudo systemctl start nginx $ sudo systemctl enable nginx
브라우저에서
http://phppgadmin.example.com
을 시작하면 브라우저에 기본 phpPgAdmin 페이지가 표시됩니다.왼쪽 사이드바에서
PostgreSQL
링크를 클릭하고 이전에 생성한 사용자와 비밀번호를 입력하여 로그인하고 포털에 액세스합니다.7단계 - SSL 설치(선택 사항)
Lets Encrypt SSL 서비스를 사용하여 SSL을 활성화할 수 있습니다. 이를 위해 Certbot 도구를 설치합니다.
$ sudo dnf install certbot-nginx
SSL 인증서를 생성합니다.
$ sudo certbot --nginx -d phppgadmin.example.com
이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. HTTPS 액세스를 요청하면 보안 방법을 선택하여 HTTP에서 HTTPS로 모든 요청을 리디렉션합니다.
브라우저에
https://phppgadmin.example.com
을 입력하여 phpPgAdmin에 액세스할 수 있어야 합니다.자동 갱신을 위한 SSL 구성
Crontab 편집기를 엽니다.
$ EDITOR=nano sudo crontab -e
맨 아래에 다음 줄을 붙여넣습니다.
. . . 25 2 * * * /usr/bin/certbot renew --quiet
이 줄의
25 2 * * *
부분은 "매일 오전 2:25에 다음 명령 실행\을 의미합니다. 언제든지 선택할 수 있습니다.Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
SSL 인증서가 자동으로 갱신됩니다.
결론
이것으로 Fedora 34 기반 서버에 PostgreSQL 및 phpPgAdmin을 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.