Skip to content

4. 프로그램 세팅 가이드

Namju Kim edited this page May 29, 2024 · 1 revision

1. 도커 환경 세팅

Windows

WSL2 설치

  1. Enable WSL2

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  2. Download and install the Linux kernel update package WSL2 Linux kernel update package for x64 machines

  3. Set WSL2 as the default version

    wsl --set-default-version 2

Docker Desktop 설치

  1. Chocolatey 설치

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  2. Docker Desktop 설치

     choco install docker-desktop

    실행이 되지 않는다면 재부팅 후 실행한다.

2. MariaDB 설치

  1. Doker 내부에 MariaDB 이미지를 내려받아 실행한다.

    docker run --detach --name mariadb --env MARIADB_ROOT_PASSWORD=root -p 3306:3306 mariadb:latest

    명령어 설명

    • --detach : 컨테이너를 백그라운드에서 실행한다.
    • --name : 컨테이너의 이름을 지정한다. (mariadb)
    • --env : 환경변수를 설정한다. (마리아 DB의 root 비밀번호를 설정한다.)
    • -p : 포트를 연결한다. (마리아 DB의 포트는 3306이다.)
  2. MariaDB 컨테이너 세팅

    James용 계정 및 데이터베이스를 생성하기 위해 컨테이너의 bash를 실행한다.

    MariaDB의 설정의 경우 컨테이너의 bash를 실행하여 진행한다.

    컨테이너 -> Exec 선택 (예시사진 참고)

    빠른 설치를 위해 APT 서버를 카카오로 변경하고, VimMySQL Client를 설치한다.

    sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
    apt update && apt upgrade -y
    apt install vim mysql-client -y
  3. MariaDB 계정 및 데이터베이스 생성

    계속해서 MariaDB 컨테이너 내부에서 mysql 명령어를 사용하여 계정과 데이터베이스를 생성한다.

    Maria DB 로그인

    mysql -u root -p

    계정 생성 및 데이터베이스 생성, 권한 부여

    CREATE USER 'test'@'%' IDENTIFIED BY 'test';
    create database test;
    grant all privileges on test.* to 'test'@'%';
    flush privileges;

    Apache James 3.8에서 기본 계정은 test이며, 비밀번호는 test이다.

    아래 table 생성의 경우 연관매핑이 필요하기 때문에, James 실행 후(테이블 생성 후) 아래 코드를 실행시키는것을 권장

    유저 권한을 저장할 테이블 생성

    use test;
    
    create table IF NOT EXISTS User_roles
    (
       roles          tinyint check (roles between 0 and 1),
       User_USER_NAME varchar(255) not null,
       FOREIGN KEY (User_USER_NAME) REFERENCES JAMES_USER(USER_NAME)
    );
    
    CREATE TABLE IF NOT EXISTS Contact
    (
       id               BIGINT NOT NULL auto_increment PRIMARY KEY,
       nickname         VARCHAR(255),
       friend_user_name VARCHAR(255),
       owner_user_name  VARCHAR(255),
       FOREIGN KEY (friend_user_name) REFERENCES JAMES_USER(USER_NAME),
       FOREIGN KEY (owner_user_name) REFERENCES JAMES_USER(USER_NAME)
    );

3. Apache James 설치

James 3.8.1(JPA) 버전을 사용하여 사용하여 DB에 저장하는 방법을 사용한다.

  1. Apache James Docker 이미지를 내려받아 실행한다.

    터미널에서 다음 명령어를 실행한다.

    docker pull apache/james:jpa-3.8.1
    docker run --detach --name james-jpa -p 143:143 -p 25:25 -p 4000:4000 -p 465:465 -p 587:587 -p 80:80 -p 8000:8000 -p 993:993 apache/james:jpa-3.8.1

    KeyStore 파일의 부재로 인해 서버가 바로 실행되지 않을 것이다.

    따라서 KeyStore 파일을 생성하고 추가해야 한다.

  2. OpenSSL 키 생성

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
    openssl pkcs12 -export -out keystore.pkcs12 -inkey key.pem -in cert.pem

    Apache James의 기본 인증키 비밀번호는 'james72laBalle'이다.

    openssl 이 설치되어 있지 않다면 openssl 이 설치되어 있지 않다면 chocolatey를 사용하여 설치한다.
    choco install openssl

    키 생성 후James 컨테이너에 KeyStore 파일을 복사한다.

    docker cp keystore.pkcs12 james-jpa:/root/conf/keystore
  3. James database.properties 수정

    Apache James는 Docker 환경에서 실행될 때 host.docker.internal을 사용하여 호스트의 IP를 참조한다.

    database.driverClassName=org.mariadb.jdbc.Driver
    database.url=jdbc:mariadb://host.docker.internal:3306/test
    database.username=test
    database.password=test
    openjpa.streaming=true
  4. Users Repository 수정

    Springboot Security에서 사용하는 PasswordEncoder를 사용하기 위해 UsersRepository.xml을 수정한다.

    <usersrepository name="LocalUsers">
       <algorithm>NONE</algorithm>
       <enableVirtualHosting>false</enableVirtualHosting>
       <enableForwarding>false</enableForwarding>
    </usersrepository>
  5. STMP Server 수정

    Apache James가 Docker 환경에서 실행되며 IP가 172.17.X.X로 할당되므로 authorizedAddresses를 수정한다.

    <!-- <authorizedAddresses>127.0.0.0/8</authorizedAddresses> -->
    <authorizedAddresses>127.0.0.0/8, 172.17.0.0/16</authorizedAddresses>
  6. IAMP 설정

    IMAP 로그인에 필요한 평문 로그인 방식을 허용 한다

    <auth>
       <plainAuthEnabled>true</plainAuthEnabled>
    </auth>
  7. Mail Container 수정

    내가 보낸 메일을 받은메일함에 저장하기 위해 mailcontainer.xml을 수정한다.

    아래 설정의 경우 Sent 폴더에 저장하며, 프로세스를 계속하기 위해 false 를 설정한다.

    <mailet match="SenderIsLocal" class="ToSenderFolder">
    <folder>Sent</folder>
    <consume>false</consume>
    </mailet>

여기까지 진행했다면, James서버가 정상적으로 실행될 것이다. 재실행 시켜보자

기본 예제들로 사용하고 싶다면

Project/james-config 에서 다운받아 업로드를 진행한다.

아래 명령어를 통해 일괄 업로드를 진행한다.

docker cp james-database.properties james-jpa:/root/conf/james-database.properties
docker cp usersrepository.xml james-jpa:/root/conf/usersrepository.xml
docker cp smtpserver.xml james-jpa:/root/conf/smtpserver.xml
docker cp mailetcontainer.xml james-jpa:/root/conf/mailetcontainer.xml
docker cp imapserver.xml james-jpa:/root/conf/imapserver.xml

Spring Boot Web Application 실행

git clone https://github.com/cmsong111/Spring-webmail.git && cd Spring-webmail

application.properties 수정

위 방법대로 설치를 진행했다면 수정할 필요가 없으며 다른 방법으로 설치했다면 다음과 같이 수정한다.

적절히 수정하여 사용한다.

Clone this wiki locally