웹사이트 검색

Ubuntu 22.04에 Rainloop 웹메일을 설치하는 방법


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

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 18.04(Bionic Beaver)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Nginx 설치
  4. 3단계 - PHP 설치 및 구성
  5. 4단계 - MySQL 설치
  6. 5단계 - MySQL 구성
  7. 6단계 - Rainloop 설치
  8. 7단계 - SSL 설치
  9. 8단계 - Nginx 구성
  10. 9단계 - Rainloop 구성 및 액세스
  11. 결론

Rainloop는 PHP로 작성된 오픈 소스 웹 기반 이메일 클라이언트입니다. 빠르고 가벼우며 SMTP 및 IMAP 프로토콜을 지원합니다.

이 가이드는 Ubuntu 22.04 서버에 Rainloop 클라이언트를 설치하는 방법을 알려줍니다.

전제 조건

  • A server running Ubuntu 22.04.

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

  • A non-root user with sudo privileges.

  • Make sure everything is updated.

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

    $ sudo apt install wget curl nano unzip -y
    

1단계 - 방화벽 구성

Rainloop를 설치하기 전에 첫 번째 단계는 방화벽을 구성하는 것입니다. 방화벽의 상태를 확인하십시오.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Rainloop가 작동하려면 HTTP 및 HTTP 포트가 필요합니다.

$ sudo ufw allow http
$ sudo ufw allow https

사용하는 메일 계정의 포트를 엽니다.

$ sudo ufw allow 587/tcp
$ sudo ufw allow 993/tcp
$ sudo ufw allow 465/tcp

상태를 다시 확인하여 확인하십시오.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
587/tcp                    ALLOW       Anywhere
993/tcp                    ALLOW       Anywhere
465/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
587/tcp (v6)               ALLOW       Anywhere (v6)
993/tcp (v6)               ALLOW       Anywhere (v6)
465/tcp (v6)               ALLOW       Anywhere (v6)

2단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 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.22.0

3단계 - PHP 설치 및 구성

Ubuntu 22.04는 기본적으로 PHP 8.1과 함께 제공됩니다. 그러나 Rainloop가 작동하려면 PHP 8.0을 설치해야 합니다. 첫 번째 단계는 Ondrejs PHP 저장소를 추가하는 것입니다.

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

Rainloop에 필요한 PHP 및 필수 확장을 설치합니다.

 $ sudo dnf install php8.0-fpm php8.0-curl php8.0-mbstring php8.0-mysql php8.0-xml php8.0-cli

설치를 확인하십시오.

$ php --version
PHP 8.0.20 (cli) (built: Jun 25 2022 08:12:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.20, Copyright (c), by Zend Technologies

PHP 서비스의 상태를 확인하십시오.

$ sudo systemctl status php8.0-fpm
? php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-04 01:52:55 UTC; 1min 22s ago
       Docs: man:php-fpm8.0(8)
    Process: 12463 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.0/fpm/pool.d/www.conf 80 (code=exited, status=0/SUCCESS)
   Main PID: 12460 (php-fpm8.0)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2241)
     Memory: 8.7M
        CPU: 89ms
     CGroup: /system.slice/php8.0-fpm.service
             ??12460 "php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)

편집을 위해 php.ini 파일을 엽니다.

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

다음 변수의 값을 변경하여 메일 첨부 파일 크기를 25MB로 설정합니다.

upload_max_filesize = 25M
post_max_size = 25M

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

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

$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf

파일에서 user=apachegroup=apache 줄을 찾아 다음과 같이 변경합니다.

...
; 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
...

또한 listen.owner = www-datalisten.group = www-data 줄을 찾아 다음과 같이 변경합니다.

...
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
...

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

PHP-FPM 서비스를 다시 시작하십시오.

$ sudo systemctl restart php8.0-fpm

4단계 - MySQL 설치

Ubuntu 22.04는 최신 버전의 MySQL과 함께 제공됩니다. 단일 명령으로 설치할 수 있습니다.

$ sudo apt install mysql-server

MySQL의 버전을 확인하십시오.

$ mysql --version
mysql  Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

이 단계는 MySQL 버전 8.0.28 이상에 필요합니다. MySQL 쉘을 입력하십시오.

$ sudo mysql

다음 명령을 실행하여 루트 사용자의 비밀번호를 설정하십시오. 숫자, 대문자, 소문자 및 특수 문자가 혼합되어 있는지 확인하십시오.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

쉘을 종료합니다.

mysql> exit

MySQL 보안 설치 스크립트를 실행합니다.

$ sudo mysql_secure_installation

먼저 루트 암호를 묻는 메시지가 표시됩니다. 그것을 입력하십시오. 다음으로 Validate Password Component를 설치하라는 메시지가 표시됩니다. MySQL에서 사용되는 암호의 강도를 확인합니다. Y를 눌러 설치합니다.

다음으로 암호 유효성 검사 정책 수준을 설정하라는 메시지가 표시됩니다. 2개가 가장 강력하므로 2개를 선택합니다.

그런 다음 N을 눌러 루트 암호 변경을 거부합니다. 또한 Y를 눌러 익명 사용자를 제거하고 원격 루트 로그인을 허용하지 않으며 테스트 데이터베이스를 제거하고 권한 테이블을 다시 로드합니다.

5단계 - MySQL 구성

MySQL 셸에 로그인합니다. 프롬프트가 표시되면 루트 비밀번호를 입력하십시오.

$ sudo mysql -u root -p

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

mysql> CREATE DATABASE rainloop;

데이터베이스에 액세스할 SQL 사용자를 생성합니다. yourpassword를 원하는 암호로 바꾸십시오.

mysql> CREATE USER 'rainuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

데이터베이스에 대한 rainuser 액세스 권한을 부여합니다.

mysql> GRANT ALL ON rainloop.* TO 'rainuser'@'localhost';

권한 테이블을 다시 로드하십시오.

mysql> FLUSH PRIVILEGES;

쉘을 종료합니다.

mysql> exit

6단계 - Rainloop 설치

Rainloop용 공개 디렉토리를 생성합니다.

$ sudo mkdir /var/www/html/rainloop -p

최신 버전의 Rainloop를 다운로드하십시오.

$ wget http://www.rainloop.net/repository/webmail/rainloop-community-latest.zip

공개 디렉토리에 다운로드한 파일의 압축을 풉니다.

$ sudo unzip rainloop-community-latest.zip -d /var/www/html/rainloop

디렉토리 소유권을 Nginx로 변경합니다.

$ sudo chown -R nginx:nginx /var/www/html/rainloop

Rainloop에 필요한 읽기 및 쓰기 권한을 설정합니다.

$ sudo find /var/www/html/rainloop -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/rainloop -type f -exec chmod 644 {} \;

7단계 - SSL 설치

Lets Encrypt에서 제공하는 무료 SSL 인증서를 생성하려면 Certbot을 설치해야 합니다.

Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

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

Rainloop용 SSL 인증서를 생성합니다.

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

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

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

편집을 위해 /etc/letsencrypt/renewal/rainloop.example.com.conf 파일을 엽니다.

$ sudo nano /etc/letsencrypt/renewal/rainloop.example.com.conf

하단에 다음 코드를 붙여넣습니다.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

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

Certbot의 독립 실행형 옵션을 사용하여 SSL 인증서를 생성했습니다. 갱신 중에 Nginx를 종료해야 함을 의미하는 인증서를 생성하기 위해 웹 서버를 실행합니다. pre_hook 및 post_hook 명령은 갱신 전후에 실행되어 Nginx 서버를 자동으로 종료하고 다시 시작하므로 수동 개입이 필요하지 않습니다.

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 시험 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

8단계 - 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용 Rainloop 구성 파일을 생성하고 편집을 위해 엽니다.

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

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

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name rainloop.example.com;
    root /var/www/html/rainloop;

    index index.php;
    client_max_body_size 25M;

    access_log  /var/log/nginx/rainloop.access.log;
    error_log   /var/log/nginx/rainloop.error.log;

    ssl_certificate      /etc/letsencrypt/live/rainloop.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/rainloop.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/rainloop.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_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_keep_conn on;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

    location ^~ /data {
        deny all;
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  rainloop.example.com;
    return 301   https://$host$request_uri;
}

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

Nginx 구성 구문을 확인합니다.

$ sudo nginx -t

Nginx 서비스를 다시 시작합니다.

$ sudo systemctl restart nginx

9단계 - Rainloop 구성 및 액세스

URL https://rainloop.example.com/?admin을 통해 Rainloops 관리자 페이지를 열면 다음과 같은 로그인 화면이 나타납니다.

다음 자격 증명을 입력하고 Enter 키를 눌러 로그인합니다.

Username: admin
Password: 12345

Rainloop 관리자 대시보드는 기본 암호를 변경하라는 경고와 함께 열립니다.

대시보드의 링크를 사용하여 기본 비밀번호를 변경하십시오.

새 비밀번호를 입력하고 비밀번호 업데이트 버튼을 클릭하여 계속 진행합니다.

Rainloop는 MySQL을 사용하여 연락처 정보를 저장합니다. 연락처 페이지를 열고 드롭다운 메뉴에서 MySQL을 선택합니다.

앞에서 만든 데이터베이스 자격 증명을 입력합니다.

테스트 버튼을 눌러 연결을 확인하고 테이블을 설치합니다. 버튼이 녹색으로 바뀌면 연결이 성공한 것입니다.

메일 계정을 추가하여 Rainloop 사용을 시작할 수 있습니다.

결론

Ubuntu 22.04 서버에 Rainloop를 성공적으로 설치했습니다. 질문이 있으시면 아래 의견에 게시하십시오.