우분투 서버
설치 분류

도커에 설치된 그누보드에 SMTP 메일서버 설치하기

컨텐츠 정보

  • 10,513 조회
  • 6 댓글
  • 0 추천
  • 목록

본문

3232235777_UeYfdbGO_bfd9b8880ea94ff303e4b03f82dfbab1e6f312c9.png



1. 들어가며


Docker Compose를 이용하여 그누보드 설치하기


위와 같은 방법으로 SSL 인증서까지 갱신되는 완전한 그누보드 셋팅이 되었습니다.


하지만 인증메일 등 그누보드에서 쓸 수 있는 메일 기능은 쓸 수 없습니다. 


메일서버나 SMTP 설정이 되어있지 않기 때문입니다.


저는 SMTP를 이용하여 구글 계정으로 그누보드 인증메일을 보내고 있습니다.


도커에서 메일서버를 직접 운영할 수 있지만, 설정도 복잡하고 관리하기가 어렵습니다.


따라서 구글SMTP 서버를 이용하여 편하게 그누보드 발송용 메일 기능을 쓰는게 좋다고 생각합니다.


또한 방화벽도 열지 않아도 됩니다.


그 방법을 알려드리겠습니다.



2. Docker-SMTP


먼저 그누보드 인증용 구글 계정을 새로 생성하여 전용으로 쓰는 것이 좋다고 생각합니다. (저는 귀찮아서 그냥 메인 계정으로..)


그리고 구글계정의 앱 비밀번호를 먼저 생성해야 됩니다.


https://www.wsgvet.com/bbs/board.php?bo_table=home&wr_id=594


위 링크에서 2. 구글 앱 비밀번호 생성하기를 참조하세요.


먼저 기존에 돌고 있던 docker를 정지합니다.



sudo docker-compose down


그리고 



sudo nano docker-compose.yml


위와 같이 도커 컴포즈 파일 수정에 들어갑니다.



  smtp:
    image: namshi/smtp

    container_name: smtp_relay
    restart: always
    environment:

      - GMAIL_USER=yourgmail@gmail.com
      - GMAIL_PASSWORD=yourapppasswordd
    networks:
      - app-network


docker-compose.yml 파일에 위 내용을 그냥 추가해주면 끝입니다.


제 설정을 따라 오셨다면, 전체 내용을 알려드리겠습니다.



version: '3'


services:


  db:
    image: mariadb:latest
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - MYSQL_DATABASE=gnuboard
    volumes:
      - ./dbdata:/var/lib/mysql
    networks:
      - app-network


  smtp:
    image: namshi/smtp

    container_name: smtp_relay
    restart: always
    environment:

      - GMAIL_USER=yourgmail@gmail.com
      - GMAIL_PASSWORD=yourapppasswordd
    networks:
      - app-network


  gnuboard:
    depends_on:
      - db
      - smtp
    image: gnuboard-fpm-alpine:1.0.0
    container_name: gnuboard
    restart: unless-stopped
    env_file: .env
    volumes:
      - ./gnuboard:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/php.ini
    networks:
      - app-network


  webserver:
    depends_on:
      - gnuboard
    image: nginx:alpine

    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./gnuboard:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - ./certbot-etc:/etc/letsencrypt
    networks:
      - app-network


  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certbot-etc:/etc/letsencrypt
      - ./gnuboard:/var/www/html
    command: renew


  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    ports:
      - "8081:80"
    environment:
      - PMA_HOST=db
    restart: always
    depends_on:
      - db
    networks:
      - app-network


volumes:
  certbot-etc:
  gnuboard:
  dbdata:
  nginx-conf:


networks:
  app-network:
    driver: bridge


위와 같이 최종 셋팅이 되었습니다.



sudo docker-compose up -d


위 명령어로 실행합니다.


기타 옵션 사항은


https://github.com/namshi/docker-smtp


위 링크에 보면 자세히 설명되어 있습니다.


구글 릴레이 설정, 아마존 SES 릴레이 설정 모두 가능합니다.


아마존 SES 릴레이를 사용하려면



- GMAIL_USER=yourgmail@gmail.com
- GMAIL_PASSWORD=yourapppasswordd


위 내용을



- SES_USER=
- SES_PASSWORD=
- SES_REGION=


위 내용으로 교체하면 됩니다.



3. 그누보드 설정하기


위 셋팅으로 도커에서는 설정이 끝났습니다.


이제 그누보드의 config.php를 엽니다.


제 가이드를 따라오셨다면


/home/sammy/gnuboard/gnuboard/config.php 에 있을 것입니다.



nano /home/sammy/gnuboard/gnuboard/config.php


위 명령어를 내린 후


173번째 줄을 보면



// SMTP
// lib/mailer.lib.php 에서 사용
define('G5_SMTP',      'smtp');
define('G5_SMTP_PORT', '25');


위와 같이 IP 대신 smtp 컨테이너를 넣어주면 됩니다.


컨트롤 + O, 엔터, 컨트롤 +  X로 저장합니다.


이제 그누보드의 메일 테스트를 해보면 메일이 발송되는 것을 볼 수 있습니다.


참고로 서버의 방화벽에서 25번 포트는 막혀도 됩니다.


SMTP를 이용하기 때문에 서버의 postfix를 사용하지 않고 php만 사용하기 때문입니다.



-- 2020년 8월 12일 오후 4시 28분 업데이트


smtp 컨테이너의 위치를 수정하고, port open을 막았습니다.


--2020년 8월 14일 오후 2시 15분 업데이트


config.php에 IP 대신 smtp 컨테이너 추가

관련자료

댓글 6 / 1 페이지

히라미님의 댓글

글 올리셨내요 ㅎㅎ
아 또 하나 알려드리면 도커 컨테이너 가 재시작되면 컨테이너 아이피도 바뀔거에요.

webserver:
    depends_on:
      - gnuboard
      - smtp

이렇게 추가해서

define('G5_SMTP',      'smtp');
define('G5_SMTP_PORT', '25');

이런식으로 하는방법 추천드려요!

히라미님의 댓글의 댓글

혹시 바뀐걸로 테스트 해보셨나요?
다시보니까

gnuboard:
    depends_on:
      - db
      - smtp

그누보드쪽에 smtp 로하는방식이 맞는것같내요..

우성군님의 댓글의 댓글

바빠서 안해봤어요 ㅠㅠ

그누보드 쪽으로 바꿀게요!

-----

테스트 해보니 잘 됩니다.

smtp를 db 밑으로 옮겼어요 ㅎㅎ

감사합니다.
전체 34 / 1 페이지
RSS

최근글


새댓글


알림 0