웹메일 설치 · 7 min read · Sep 08, 2025

우분투 22.04에 Rainloop 웹메일 설치하기

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

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

전제 조건

  • 우분투 22.04가 실행되는 서버.
  • 서버를 가리키는 도메인 이름. 본 튜토리얼에서는 rainloop.example.com 도메인을 사용할 것입니다.
  • sudo 권한이 있는 비루트 사용자.
  • 모든 것이 업데이트되었는지 확인하십시오. $ sudo apt update && sudo apt upgrade
  • 기본 유틸리티 패키지를 설치합니다. 일부는 이미 설치되어 있을 수 있습니다. $ 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 및 HTTPS 포트가 필요합니다.

$ 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 설치

우분투 22.04에는 이전 버전의 Nginx가 포함되어 있습니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginx의 서명 키를 가져옵니다.

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

Nginx의 안정적인 버전 저장소를 추가합니다.

$ 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 설치 및 구성

우분투 22.04에는 기본적으로 PHP 8.1이 포함되어 있습니다. 그러나 Rainloop가 작동하려면 PHP 8.0을 설치해야 합니다. 첫 번째 단계는 Ondrej의 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 설치

우분투 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

먼저 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 입력하십시오. 다음으로 비밀번호 유효성 검사 구성 요소를 설치할 것인지 묻는 메시지가 표시됩니다. MySQL에서 사용되는 비밀번호의 강도를 확인합니다. Y를 눌러 설치합니다.

다음으로 비밀번호 유효성 검사 정책의 수준을 설정하라는 메시지가 표시됩니다. 가장 강력한 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 설치

Let’s Encrypt에서 제공하는 무료 SSL 인증서를 생성하기 위해 Certbot을 설치해야 합니다.

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

우분투 22.04에는 기본적으로 Snapd가 설치되어 있습니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

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

$ 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 [email protected] -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_hookpost_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를 입력합니다.

Rainloop 구성 파일을 Nginx용으로 생성하고 편집을 위해 엽니다.

$ 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를 통해 Rainloop의 관리자 페이지를 엽니다. 그러면 다음 로그인 화면이 표시됩니다.

Rainloop 관리자 로그인

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

사용자 이름: admin
비밀번호: 12345

Rainloop 관리자 대시보드가 열리며 기본 비밀번호를 변경하라는 경고가 표시됩니다.

Rainloop 관리자 비밀번호 경고

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

Rainloop 비밀번호 변경 화면

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

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

Rainloop 연락처 페이지

이전에 생성한 데이터베이스 자격 증명을 입력합니다.

Rainloop MySQL 세부정보

테스트 버튼을 눌러 연결을 확인하고 테이블을 설치합니다. 버튼이 초록색으로 변하면 연결이 성공적이라는 의미입니다.

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

결론

우분투 22.04 서버에 Rainloop를 성공적으로 설치했습니다. 질문이 있으면 아래 댓글에 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.