웹사이트 검색

Nginx와 무료로 SuiteCRM을 설치하는 방법 Ubuntu 22.04에서 SSL을 암호화하자


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 16.04(Xenial Xerus)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Nginx 설치
  4. 3단계 - MariaDB 설치 및 구성
  5. 4단계 - PHP 및 확장 프로그램 설치\n
  6. 5단계 - SuiteCRM 다운로드
  7. 6단계 - SSL 설치 및 구성
  8. 7단계 - Nginx 및 PHP 구성
    1. PHP-FPM 구성
    2. PHP 업로드 크기 구성
    3. Nginx 구성

    SuiteCRM은 PHP로 작성된 오픈 소스 고객 관계 관리 솔루션입니다. SugarCRM이 커뮤니티 에디션 출시를 중단한 후 인기 있는 SugarCRM 소프트웨어의 포크입니다. 비즈니스 관계를 강화하고 육성하는 데 사용할 수 있는 통찰력을 얻기 위해 모든 고객 데이터에 대한 중앙 리포지토리를 만드는 데 사용됩니다.

    일부 기능에는 문서 저장, 이메일 마케팅, 캘린더, 소셜 미디어 통합, 영역 관리, 세분화, 마케팅 자동화, 리드 자격, 내부 채팅 통합, 고객 지원, 소셜 CRM, 영업 인력 자동화, 마케팅 캠페인, 모바일 CRM 및 보고. Mandrill, Sendgrid, Amazon SES 등과 같은 타사 SMTP 릴레이 서비스와 통합할 수 있습니다. 플러그인을 설치하여 SuiteCRM의 기능을 확장할 수 있습니다. Mautic, Facebook, Twitter, MailChimp, Zoom, Quickbooks, DocuSign 등과 같은 타사 앱과 통합할 수 있습니다.

    이 게시물에서는 Nginx 웹 서버를 사용하여 SuiteCRM을 설치하는 방법과 Ubuntu 22.04에서 Lets Encrypt SSL을 배웁니다.

    전제 조건

    • A server running Ubuntu 20.04.

    • A non-root sudo user.

    • A Fully Qualified Domain Name (FQDN) pointing to the server like suitecrm.example.com.
    • Make sure everything is updated.

      $ sudo apt update
      $ sudo apt upgrade
      
    • Few packages that your system needs.

      $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
      

      Some of these packages may already be installed on your system.

    1단계 - 방화벽 구성

    첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(복잡하지 않은 방화벽)와 함께 제공됩니다.

    방화벽이 실행 중인지 확인하십시오.

    $ sudo ufw status
    

    다음과 같은 결과가 표시됩니다.

    Status: inactive
    

    방화벽이 활성화 시 현재 연결을 끊지 않도록 SSH 포트를 허용합니다.

    $ sudo ufw allow OpenSSH
    

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

    $ sudo ufw allow http
    $ sudo ufw allow https
    

    방화벽 활성화

    $ sudo ufw enable
    Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
    Firewall is active and enabled on system startup
    

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

    $ sudo ufw status
    

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

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    80/tcp                     ALLOW       Anywhere
    443                        ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    80/tcp (v6)                ALLOW       Anywhere (v6)
    443 (v6)                   ALLOW       Anywhere (v6)
    

    2단계 - Nginx 설치

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

    Nginxs 서명 키를 가져옵니다.

    $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    

    Nginxs 안정 버전용 리포지토리를 추가합니다.

    $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
        | sudo tee /etc/apt/sources.list.d/nginx.list
    

    시스템 리포지토리를 업데이트합니다.

    $ sudo apt update
    

    Nginx를 설치합니다.

    $ sudo apt install nginx
    

    설치를 확인하십시오.

    $ nginx -v
    nginx version: nginx/1.20.2
    

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

    $ sudo systemctl enable nginx
    

    3단계 - MariaDB 설치 및 구성

    Ubuntu 22.04는 MariaDB v10.6.7과 함께 제공됩니다. 다음 명령을 실행하여 설치하십시오.

    $ sudo apt install mariadb-server
    

    MariaDB 설치를 보호합니다.

    $ sudo mysql_secure_installation
    

    당신은 다양한 프롬프트에 직면하게 될 것입니다. 다음과 같이 답하십시오.

    Enter current password for root (enter for none): Press Enter
    Switch to unix_socket authentication [Y/n] Type y
    Change the root password? [Y/n] Type n
    Remove anonymous users? [Y/n] Type y
    Disallow root login remotely? [Y/n] Type y
    Remove test database and access to it? [Y/n] Type y
    Reload privilege tables now? [Y/n] Type y
    

    다음 명령을 사용하여 MariaDB 셸에 연결합니다.

    $ sudo mysql
    

    SuiteCRM용 새 데이터베이스를 만듭니다.

    $ CREATE DATABASE suitecrm;
    

    새 데이터베이스 사용자를 만들고 t에 대해 강력한 암호를 사용합니다.

    $ CREATE USER 'suitecrmuser'@'localhost' identified by 'yourpassword';
    

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

    $ GRANT ALL PRIVILEGES ON suitecrm.* TO 'suitecrmuser'@'localhost';
    

    모든 권한을 플러시합니다.

    $ FLUSH PRIVILEGES;
    

    MySQL 셸을 종료합니다.

    $ exit
    

    4단계 - PHP 및 확장 설치

    Ubuntu 22.04는 아직 SuiteCRM에서 지원하지 않는 PHP 8.1과 함께 제공됩니다. PHP 8.0을 설치해야 합니다. 이를 위해 Ondrejs PHP 저장소를 추가해야 합니다.

    $ sudo add-apt-repository ppa:ondrej/php
    

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

    $ sudo apt install php-imagick php8.0-fpm php8.0-mysql php8.0-common php8.0-gd php8.0-imap php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-bz2 php8.0-intl php8.0-gmp
    

    설치를 확인하십시오.

    $ php --version
    PHP 8.0.18 (cli) (built: May  1 2022 04:42:09) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v4.0.18, Copyright (c) Zend Technologies
        with Zend OPcache v8.0.18, Copyright (c), by Zend Technologies
    

    5단계 - SuiteCRM 다운로드

    SuiteCRM의 안정적인 최신 버전을 다운로드하십시오. SuiteCRM 공식 웹사이트에서 다운로드 링크를 가져올 수 있습니다.

    튜토리얼에서는 장기간 지원되는 SuiteCRM v7을 설치합니다. 원하는 경우 v8 버전을 설치할 수 있지만 처음에는 지원 기간이 더 짧습니다.

    $ wget -O suitecrm.zip https://suitecrm.com/files/147/SuiteCRM-7.12/614/SuiteCRM-7.12.5.zip
    

    SuiteCRM을 제공할 웹 루트 디렉터리를 만듭니다. -p 플래그는 존재하지 않는 경우 경로에 최상위 디렉토리를 생성합니다.

    $ sudo mkdir -p /var/www/
    

    다운로드한 zip 아카이브를 추출합니다.

    $ sudo unzip suitecrm.zip -d /var/www/
    

    -d 플래그는 아카이브의 대상 디렉토리를 지정합니다.

    /var/www/SuiteCRM-7.12.5/ 디렉토리에 저장됩니다. 더 간단하게 만들기 위해 이름을 바꿉니다.

    $ sudo mv /var/www/SuiteCRM-7.12.5/ /var/www/suitecrm
    

    웹 루트로 전환합니다.

    $ cd /var/www/suitecrm
    

    다양한 디렉토리에 올바른 소유권과 권한을 설정하십시오.

    $ sudo chown -R nginx:nginx .
    $ sudo chmod -R 755 .
    $ sudo chmod -R 775 cache custom modules themes data upload
    $ sudo chmod 775 config_override.php 2>/dev/null
    

    6단계 - SSL 설치 및 구성

    Nginx를 구성하기 전에 SSL 인증서를 설정해야 합니다.

    Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 다운로드해야 합니다. 이를 위해 Snapd 패키지 설치 프로그램을 사용합니다.

    Snap 설치 프로그램을 설치합니다.

    $ sudo apt install snapd
    

    Snapd 버전이 최신인지 확인하세요.

    $ sudo snap install core 
    $ sudo snap refresh core
    

    Certbot을 설치합니다.

    $ sudo snap install --classic certbot
    

    다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령이 실행되도록 합니다.

    $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

    Certbot 도구를 방해하므로 Nginx 서버를 중지합니다.

    $ sudo systemctl stop nginx
    

    SSL 인증서를 생성합니다.

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

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

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

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

    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 suitecrm.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
    

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

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

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

    7단계 - Nginx 및 PHP 구성

    PHP-FPM 구성

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

    $ sudo nano /etc/php/8.0/fpm/pool.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.
    user = nginx
    group = nginx
    ...
    

    또한 파일에서 listen.owner=www-datalisten.group=www-data 줄을 찾아 nginx.

    listen.owner = nginx
    listen.group = nginx
    

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

    PHP 업로드 크기 구성

    PHP는 업로드 파일 크기에 대한 제한을 설정합니다. PHP에서 설정한 기본 크기는 2MB입니다. 업로드 크기를 늘리려면 편집을 위해 PHP 구성 파일을 엽니다.

    $ sudo nano /etc/php/8.0/fpm/php.ini
    

    다음 줄을 찾으십시오.

    upload_max_filesize = 2M
    

    표시된 대로 값을 20MB로 변경합니다.

    upload_max_filesize = 20M
    

    다음 줄을 찾으십시오.

    post_max_size = 8M
    

    표시된 대로 값을 20MB로 변경합니다.

    post_max_size = 20M
    

    다음 줄을 찾으십시오.

    ;cgi.fix_pathinfo=1
    

    세미콜론을 제거하고 값을 0으로 변경하여 주석 처리를 해제하십시오.

    cgi.fix_pathinfo=0
    

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

    PHP-fpm 프로세스를 다시 시작하십시오.

    $ sudo systemctl restart php8.0-fpm
    

    Nginx 구성

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

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

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

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name suitecrm.example.com;
    
        root /var/www/suitecrm;
        error_log /var/log/nginx/suitecrm.error.log;
        access_log /var/log/nginx/suitecrm.access.log;
        client_max_body_size 20M;
    
        index index.php index.html index.htm;
        
        ssl_certificate      /etc/letsencrypt/live/suitecrm.example.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/suitecrm.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/suitecrm.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;
    
        location / {
            # try to serve file directly, fallback to app.php
            try_files $uri /index.php$is_args$args;
        }
    
        location ~ \.php$ {
            # try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    
            fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
            #Note: If you install SuiteCRM on iRedMail server, you should use the TCP socket instead.
            #fastcgi_pass 127.0.0.1:9999
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    
            fastcgi_buffer_size 128k;
            fastcgi_buffers 256 16k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
        }
    
        # Don't log favicon
        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }
    
        # Don't log robots
        location = /robots.txt  {
            access_log off;
            log_not_found off;
        }
    
        # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc...
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }
    
        # A long browser cache lifetime can speed up repeat visits to your page
        location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
            access_log        off;
            log_not_found     off;
            expires           360d;
        }
    }
    
    # enforce HTTPS
    server {
        listen       80;
        listen       [::]:80;
        server_name  suitecrm.example.com;
        return 301   https://$host$request_uri;
    }
    

    완료되면 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 restart nginx
    

    8단계 - SuiteCRM 설치 및 구성

    브라우저에서 https://suitecrm.example.com 사이트를 열면 설정 마법사가 표시됩니다.

    I Accept 박스를 체크하고 Next 버튼을 클릭하여 진행합니다. 사전 설치 요구 사항을 확인하는 화면이 표시됩니다.

    모든 것이 정상이면 다음 버튼을 클릭하여 계속 진행합니다.

    3단계에서 설정한 데이터베이스 자격 증명을 입력합니다. 호스트 이름으로 localhost를 입력합니다. 또한 관리자 계정에 대한 세부 정보를 입력하고 인스턴스 URL로 https://suitecrm.example.com을 입력합니다.

    데모 데이터, SMTP 서버 설정, 브랜딩, 시스템 로케일, 보안 및 데이터베이스 설정과 같은 추가 설정을 구성할 수 있습니다.

    SMTP 설정을 활성화하려면 페이지의 SMTP 서버 사양 섹션을 확장하고 적절한 값을 입력합니다. Gmail 또는 Microsoft Exchange를 사용하는 경우 전용 버튼을 사용하여 구성할 수 있습니다. 자습서에서는 Amazon SES를 사용하고 있습니다.

    또한 시스템 로케일 설정을 지정하십시오.

    완료되면 페이지 하단의 다음 버튼을 클릭하여 계속 진행합니다. SuiteCRM 구성 완료에 대한 세부 정보가 표시됩니다.

    계속하려면 다음 버튼을 클릭하십시오. 로그인 페이지가 표시됩니다.

    관리자 계정 자격 증명을 입력하고 로그인을 클릭하여 SuiteCRM 대시보드를 엽니다.

    SuiteCRM을 사용하여 비즈니스 및 고객 데이터를 관리할 수 있습니다.

    9단계 - Cron 작업 설정

    SuiteCRM이 제대로 작동하려면 cron 작업이 필요합니다. nginx 사용자 crontab 파일을 편집합니다.

    $ sudo crontab -e -u nginx
    

    파일 끝에 다음 줄을 추가합니다.

    *    *    *    *    *     cd /var/www/suitecrm; php -f cron.php > /dev/null 2>&1
    

    파일을 저장하고 닫습니다.

    결론

    이것으로 Ubuntu 22.04에서 Lets Encrypt SSL과 함께 Nginx 서버를 사용하여 SuiteCRM을 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.