웹사이트 검색

Fedora 34에 PostgreSQL 및 phpPgAdmin을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - PostgreSQL 설치
  3. 2단계 - 새 PostgreSQL 데이터베이스 클러스터 생성
  4. 3단계 - PostgreSQL 역할 및 인증 방법\n
  5. 4단계 - 새 역할 및 데이터베이스 생성.\n
  6. 5단계 - PostgreSQL 서버에 대한 원격 액세스 활성화\n
  7. 6단계 - phpPgAdmin, Nginx 및 PHP 설치
    1. PHP 구성
    2. Nginx 구성

    1. 자동 갱신을 위한 SSL 구성\n

    PostgreSQL 또는 Postgres는 SQL 언어를 사용하고 확장하는 강력한 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 복잡한 데이터 워크로드를 안전하게 저장하고 확장하는 많은 고급 기능이 있습니다. phpPgAdmin은 PostgreSQL 데이터베이스를 관리하고 편집하는 PHP 기반 애플리케이션입니다.

    이 튜토리얼은 Fedora 34 기반 서버에 PostgreSQL 및 phpPgAdmin을 설치하는 방법을 보여줍니다.

    전제 조건

    1. A Fedora 34 based server.

    2. Keep your systems updated.

      $ sudo dnf update
      
    3. 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 초기화와 유사합니다.

    이 프로세스는 template1postgres 데이터베이스를 생성합니다. 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=apachegroup=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을 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.