Rocky Linux 8에 UVdesk Helpdesk 시스템을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Nginx 설치
  4. 3단계 - PHP 및 확장 프로그램 설치\n
  5. 4단계 - MySQL 서버 설치 및 구성
  6. 5단계 - UVdesk 다운로드
  7. 6단계 - SELinux 권한 구성\n
  8. 7단계 - SSL 설치 및 구성
  9. 8단계 - Nginx 및 PHP 구성
    1. PHP-FPM 구성
    2. Nginx 구성

    UVdesk는 기업이 고객과 상호 작용하고 24시간 지원을 제공할 수 있는 오픈 소스 Saas 기반 헬프데스크 시스템입니다. 그 기능에는 티켓 관리, 지식 기반 지원, 미리 준비된 답변, 이메일을 기반으로 한 자동 티켓 생성이 포함됩니다. Uvdesks 기능은 외부 모듈을 사용하여 확장할 수 있습니다. 워크플로를 개선하기 위해 특정 트리거를 기반으로 특정 작업을 자동화할 수 있습니다.

    이 튜토리얼에서는 Nginx, MySQL 및 PHP를 사용하여 Rocky Linux 8 기반 서버에 Uvdesk를 설치하는 방법을 배웁니다.

    전제 조건

    • A server running Rocky Linux 8.

    • A domain name for the helpdesk pointing to the server. For our tutorial, we will use the uvdesk.example.com domain.

    • A non-root based user with sudo privileges.

    • Make sure everything is updated.

      $ sudo dnf update
      
    • Install basic utility packages. Some of them may already be installed.

      $ sudo dnf install wget curl nano unzip yum-utils -y
      

    1단계 - 방화벽 구성

    첫 번째 단계는 방화벽을 구성하는 것입니다. Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

    $ sudo firewall-cmd --state
    running
    

    방화벽은 다른 영역에서 작동하며 공개 영역은 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

    $ sudo firewall-cmd --permanent --list-services
    

    다음 출력이 표시되어야 합니다.

    cockpit dhcpv6-client ssh
    

    HTTP 및 HTTPS 포트를 허용합니다.

    $ sudo firewall-cmd --permanent --add-service=http
    $ sudo firewall-cmd --permanent --add-service=https
    

    방화벽의 상태를 다시 확인하십시오.

    $ sudo firewall-cmd --permanent --list-services
    

    비슷한 출력이 표시되어야 합니다.

    cockpit dhcpv6-client http https ssh
    

    변경 사항을 적용하려면 방화벽을 다시 로드하십시오.

    $ sudo firewall-cmd --reload
    

    2단계 - Nginx 설치

    Rocky Linux는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

    공식 Nginx 리포지토리를 만들기 위한 /etc/yum.repos.d/nginx.repo 파일을 만들고 엽니다.

    $ sudo nano /etc/yum.repos.d/nginx.repo
    

    다음 코드를 붙여넣습니다.

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Nginx를 설치합니다.

    $ sudo dnf install nginx
    

    설치를 확인하십시오.

    $ nginx -v
    nginx version: nginx/1.20.2
    

    Nginx 서비스를 활성화합니다.

    $ sudo systemctl enable nginx
    

    3단계 - PHP 및 확장 설치

    자습서에서는 Remis 저장소를 사용하여 최신 버전의 PHP를 설치해야 합니다. 첫 번째 단계는 Epel 저장소를 가져오는 것입니다.

    $ sudo dnf install epel-release
    

    다음으로 Remi 저장소를 설치합니다.

    $ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    

    사용 가능한 PHP 스트림을 확인하십시오.

    $ dnf module list php -y
    Last metadata expiration check: 0:00:12 ago on Fri 03 Dec 2021 09:39:32 AM UTC.
    Rocky Linux 8 - AppStream
    Name                Stream                 Profiles                                 Summary
    php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
    php                 7.3                    common [d], devel, minimal               PHP scripting language
    php                 7.4                    common [d], devel, minimal               PHP scripting language
    
    Remi's Modular repository for Enterprise Linux 8 - x86_64
    Name                Stream                 Profiles                                 Summary
    php                 remi-7.2               common [d], devel, minimal               PHP scripting language
    php                 remi-7.3               common [d], devel, minimal               PHP scripting language
    php                 remi-7.4               common [d], devel, minimal               PHP scripting language
    php                 remi-8.0               common [d], devel, minimal               PHP scripting language
    php                 remi-8.1               common [d], devel, minimal               PHP scripting language
    
    Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
    

    기본 버전은 7.2입니다. Remis PHP 8.0 저장소를 활성화합니다.

    $ sudo dnf module reset php
    $ sudo dnf module enable php:remi-8.0
    

    다음으로 UVDesk에 필요한 PHP 및 확장 프로그램을 설치합니다.

    $ sudo dnf install php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-cli php-intl php-bcmath php-gd php-tokenizer php-imap php-pear php-mailparse
    

    설치를 확인하십시오.

    $ php --version
    PHP 8.0.16 (cli) (built: Feb 15 2022 21:34:32) ( NTS gcc x86_64 )
    Copyright (c) The PHP Group
    Zend Engine v4.0.16, Copyright (c) Zend Technologies
    

    4단계 - MySQL 서버 설치 및 구성

    우리는 데이터를 저장하기 위해 MySQL 데이터베이스를 사용할 것입니다. Rocky Linux의 Appstream 리포지토리는 최신 버전의 MySQL과 함께 제공됩니다.

    MySQL을 설치합니다.

    $ sudo dnf install mysql-server
    

    MySQL 서비스를 활성화하고 시작합니다.

    $ sudo systemctl enable mysqld --now
    

    안전한 MySQL 설치.

    $ sudo mysql_secure_installation
    

    첫 번째 단계에서는 MySQL 암호의 강도를 테스트하는 데 사용할 수 있는 암호 유효성 검사 플러그인을 설정할지 묻는 메시지가 표시됩니다. 계속하려면 Y를 선택하십시오. 다음 단계에서 암호 유효성 검사 수준을 선택하라는 메시지가 표시됩니다. 가장 강력한 수준인 2를 선택하고 비밀번호는 최소 8자 이상이어야 하며 대문자, 소문자, 숫자 및 특수 문자를 혼합해야 합니다.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD COMPONENT can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD component?
    
    Press y|Y for Yes, any other key for No: Y
    
    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    

    다음 단계에서 루트 암호를 선택하라는 메시지가 표시됩니다. 암호 유효성 검사 플러그인의 요구 사항을 충족하는 강력한 암호를 선택하십시오. 다음 단계에서는 선택한 암호를 계속 사용할 것인지 묻는 메시지가 표시됩니다. 계속하려면 y를 누르십시오.

    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
    

    Y를 누른 다음 다음 프롬프트에 대해 ENTER 키를 눌러 익명 사용자 및 테스트 데이터베이스를 제거하고 루트 로그인을 비활성화하고 새로 설정된 규칙을 로드합니다.

    ...
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
    Success.
    ...
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
    Success.
    ...
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
     - Dropping test database...
    Success.
     - Removing privileges on test database...
    Success.
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    ...
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
    Success.
    All done!
    

    MySQL 쉘을 입력하십시오. 계속하려면 루트 암호를 입력하십시오.

    $ mysql -u root -p
    

    uvdesk 사용자를 만듭니다. 암호가 이전에 설정된 요구 사항을 충족하는지 확인하십시오.

    mysql> CREATE USER 'uvdesk'@'localhost' IDENTIFIED BY 'Your_password2';
    

    uvdeskdb 데이터베이스를 생성합니다.

    mysql> CREATE DATABASE uvdeskdb;
    

    uvdeskdb 데이터베이스에 대한 사용자 권한을 부여합니다.

    mysql> GRANT ALL PRIVILEGES ON uvdeskdb.* TO 'uvdesk'@'localhost';
    

    셸을 종료합니다.

    mysql> exit
    

    5단계 - UVdesk 다운로드

    최신 안정 버전의 UVdesk를 다운로드합니다.

    $ wget https://cdn.uvdesk.com/uvdesk/downloads/opensource/uvdesk-community-current-stable.zip
    

    다운로드한 파일의 압축을 풉니다.

    $ unzip uvdesk-*.zip
    

    추출된 디렉토리를 /var/www/uvdesk 위치로 이동합니다.

    $ sudo mv uvdesk-community-v1.0.18 /var/www/uvdesk
    

    UVdesks 디렉토리로 전환합니다.

    $ cd /var/www/uvdesk
    

    편집을 위해 환경 파일(.env)을 엽니다.

    $ sudo nano .env
    

    APP_ENV=dev 줄을 찾아 다음과 같이 변경합니다.

    APP_ENV=prod
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    루트 디렉터리의 소유권을 Nginx 사용자로 변경합니다.

    $ sudo chown -R nginx:nginx /var/www/uvdesk
    

    6단계 - SELinux 권한 구성

    SELinux의 chcon 명령을 사용하여 /var/www/uvdesk 디렉토리에서 제공되는 웹 콘텐츠에 대한 파일 보안 컨텍스트를 변경합니다.

    $ sudo chcon -t httpd_sys_content_t /var/www/uvdesk -R
    $ sudo chcon -t httpd_sys_rw_content_t /var/www/uvdesk -R
    

    UVDesk에 대한 네트워크 연결을 허용하도록 SELinux를 구성합니다.

    $ sudo setsebool -P httpd_can_network_connect on
    

    7단계 - SSL 설치 및 구성

    Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 다운로드해야 합니다. Certbot을 설치하려면 Epel 리포지토리가 필요하지만 자습서의 앞부분에서 설치했기 때문에 이 단계를 건너뛸 수 있습니다.

    Certbot을 설치합니다.

    $ sudo dnf install certbot
    

    SSL 인증서를 생성합니다.

    $ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d uvdesk.example.com
    

    위의 명령은 서버의 /etc/letsencrypt/live/uvdesk.example.com 디렉토리에 인증서를 다운로드합니다.

    Diffie-Hellman 그룹 인증서를 생성합니다.

    $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
    

    Lets Encrypt 자동 갱신을 위한 챌린지 웹 루트 디렉터리를 만듭니다.

    $ sudo mkdir -p /var/lib/letsencrypt
    

    SSL을 갱신하기 위해 Cron 작업을 생성합니다. 인증서를 확인하고 필요한 경우 갱신하기 위해 매일 실행됩니다. 이를 위해 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집을 위해 엽니다.

    $ sudo nano /etc/cron.daily/certbot-renew
    

    다음 코드를 붙여넣습니다.

    #!/bin/sh
    certbot renew --cert-name uvdesk.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    실행 가능하도록 태스크 파일에 대한 권한을 변경하십시오.

    $ sudo chmod +x /etc/cron.daily/certbot-renew
    

    8단계 - Nginx 및 PHP 구성

    PHP-FPM 구성

    /etc/php-fpm.d/www.conf 파일을 엽니다.

    $ sudo nano /etc/php-fpm.d/www.conf
    

    PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-datagroup=www-data 줄을 찾아 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 서비스를 활성화하고 시작합니다.

    $ sudo systemctl enable php-fpm --now
    

    PHP 세션 디렉터리의 그룹을 Nginx로 변경합니다.

    $ sudo chgrp -R nginx /var/lib/php/session
    

    Nginx 구성

    편집을 위해 /etc/nginx/conf.d/uvdesk.conf 파일을 만들고 엽니다.

    $ sudo nano /etc/nginx/conf.d/uvdesk.conf
    

    다음 코드를 붙여넣습니다.

    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  uvdesk.example.com;
    
        access_log  /var/log/nginx/uvdesk.access.log;
        error_log   /var/log/nginx/uvdesk.error.log;
        
    	# SSL
        ssl_certificate      /etc/letsencrypt/live/uvdesk.example.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/uvdesk.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/uvdesk.example.com/chain.pem;
        ssl_session_timeout  5m;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        resolver 8.8.8.8;
    
        root /var/www/uvdesk/public;
        index index.php;
        
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        # Pass PHP Scripts To FastCGI Server
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_pass unix:/run/php-fpm/www.sock; # Depends On The PHP Version
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            include fastcgi_params;
            try_files $uri =404;
        }    
    }
    
    # enforce HTTPS
    server {
        listen       80;
        listen       [::]:80;
        server_name  uvdesk.example.com;
        return 301   https://$host$request_uri;
    }
    

    Nginx 구성에서 사용할 루트 디렉토리는 /var/www/uvdesk/public/이며 /var/www/uvdesk/가 아닙니다. .

    완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

    편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

    $ sudo nano /etc/nginx/nginx.conf
    

    include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

    server_names_hash_bucket_size  64;
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    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
    

    9단계 - UVdesk 설치

    브라우저에서 URL https://uvdesk.example.com을 실행하면 다음 화면이 나타납니다.

    Lets Begin 버튼을 클릭하여 설치 프로세스를 시작합니다. 설치 프로그램은 다음 페이지에서 PHP 설정 및 파일 권한을 확인합니다.

    계속하려면 진행을 클릭하십시오. 다음 페이지에서 데이터베이스 세부 정보를 입력하라는 메시지가 표시됩니다. 4단계에서 구성한 대로 데이터를 입력합니다.

    계속하려면 진행을 클릭하십시오. 다음으로 최고 관리자 계정을 생성하라는 메시지가 표시됩니다. 귀하의 세부 정보를 입력하십시오.

    계속하려면 진행을 클릭하십시오. 다음으로 회원 및 고객 패널 접두사에 이름을 지정하여 웹 사이트를 구성하라는 메시지가 표시됩니다. 이러한 접두사는 웹사이트 URL에서 사용됩니다.

    계속하려면 진행을 클릭하십시오. 최종 설치 페이지에 도달하게 됩니다.

    지금 설치를 클릭하여 설치를 시작하십시오. 완료되면 다음 화면이 나타납니다.

    제공된 링크를 통해 관리자 패널과 프런트엔드 웹사이트에 액세스할 수 있습니다. UVDesk 설치를 사용할 준비가 되었습니다.

    결론

    Nginx, MySQL 및 PHP를 사용하여 Rocky Linux 8 기반 서버에 UVdesk Helpdesk 시스템을 설치했습니다. 질문이 있으시면 아래 의견에 게시하십시오.