Ubuntu 22.04에 Rainloop 웹메일을 설치하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 18.04(Bionic Beaver)
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Nginx 설치
- 3단계 - PHP 설치 및 구성
- 4단계 - MySQL 설치
- 5단계 - MySQL 구성
- 6단계 - Rainloop 설치
- 7단계 - SSL 설치
- 8단계 - Nginx 구성
- 9단계 - Rainloop 구성 및 액세스
- 결론
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=apache
및 group=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-data
및 listen.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를 성공적으로 설치했습니다. 질문이 있으시면 아래 의견에 게시하십시오.