우분투 서버
설치 분류

그누보드 이미지 및 동영상 캐시 서버 구축 방법

컨텐츠 정보

본문

3232235777_6cAnykfz_71dc5c356a51e01b2087e3fd947c0b05b38c0889.png




그누보드의 /data 폴더에 있는 이미지 및 동영상을 캐시 서버에서 트래픽을 나눌 수 있는 방법입니다.


이미지나 동영상이 많아서 트래픽이 많이 나온다면, 본 서버에서는 CPU 및 DB가 좋은 서버(국내)를 쓰고,


이미지 캐시 서버는 용량 및 트래픽이 높은 서버(해외 또는 국내 저렴한 서버)를 선택하면 비용 절약 및 속도에 도움이 될 것입니다.


현재 제 홈페이지의 이미지도 모두 cdn.wsgvet.com 에서 불러오고 있습니다.



준비사항



1. 본서버(실제 파일이 있는 서버, Origin Server)가 Nginx 또는 Apache로 구성되어 있을 것


https://www.wsgvet.com/ubuntu/126


위 링크처럼 편하게 그누보드를 Nginx에 올릴 수 있습니다.


Apache는 substitute 모듈을 활성화하면 됩니다.


밑에 설정 방법을 알려드리겠습니다.



2. 이미지 캐시서버 도메인의 IP를 캐시서버로 가리킬 것


클라우드플레어 같은 DNS셋팅에서 이미지캐시 서버의 도메인과 IP를 연결시켜야 합니다.


cdn.example.com 같은 서브도메인도 되고,  example2.com 처럼 완전히 다른 도메인이어도 상관없습니다.



3. 이미지 캐시서버는 Ubuntu 20.04 LTS 또는 CentOS 8 로 설정하기


다른 운영체제는 구현하지 않았습니다.



4. 80, 443 포트 방화벽을 열 것


Nginx가 80, 443 포트만 사용하므로 열어야 합니다.


80포트는 SSL 인증서 갱신에 반드시 필요합니다.


다른 포트는 닫아도 됩니다.



5. 이미지 캐시서버의 사용자(User)가 sudo 권한을 가질 것


아마 거의 가지고 있을 것입니다.



설치경로


/home/docker-cdn-webserver


위 경로에 설치됩니다.



스케쥴러


crontab에 3가지가 있습니다.


1. SSL 인증서 갱신 매일 검증 : 인증서 유효기간이 1달 남으면 자동으로 재발급 받고 Nginx를 재기동합니다.


2. Docker 이미지 최신화 : Certbot, Nginx, PHP의 Docker 최신버전이 나오면 자동으로 다운 받고 재기동합니다.


3. 캐시버서가 받은 이미지 및 동영상 파일 삭제 : #으로 비활성화 해뒀습니다. 일정기간이 지난 후 삭제하고 싶다면 #을 제거하고, 옵션을 수정할 수 있습니다. 상세설정 방법은 제일 밑에 참고사항의 Lael님 블로그에 있습니다.



설치방법


1. Ubuntu 20.04 LTS



sudo apt update -y && sudo apt upgrade -y && sudo apt install curl git cron -y && sudo apt autoremove -y


위 명령어로 패키지를 최신화하고, curl, git, cron 필수패키지를 설치합니다.


 


curl -o dc https://raw.githubusercontent.com/woosungchoi/docker-cdn-webserver/master/dc && bash dc setup && rm -f dc


위 명령어로 설치 스크립트를 다운받고 실행합니다.



2. CentOS 8



sudo yum -y update && sudo yum install -y curl git crontabs


위 명령어로 패키지를 최신화하고, curl, git, cron 필수패키지를 설치합니다.



curl -o dcc https://raw.githubusercontent.com/woosungchoi/docker-cdn-webserver/master/dcc && bash dcc setup && rm -f dcc


위 명령어로 설치 스크립트를 다운받고 실행합니다.


---


공통 설치진행방법


1. Enter your Origin domain :


위 내용은 본서버(실제 파일이 있는 서버, Origin Server)의 도메인을 물어보는 것입니다.


서브도메인은 빼고 넣어주세요. (예 : mydomain.com)



2. Enter your CDN domain : 


캐시서버의 도메인을 넣어주세요. (예 : cdn.mydomain.com)



3. Enter your Email address for SSL certificate :


Certbot의 인증서 등록을 위한 Email을 넣어주세요.



3가지를 입력했다면 자동으로 설치됩니다. 대략 5분이면 설치된 패키지가 나오면서 끝날 것입니다.


이미지 캐시서버는 끝났습니다. 참 쉽죠? 



---


본서버 설정방법


본서버(실제 파일이 있는 서버, Origin Server) 설정만 수정하면 됩니다.


(1) Nginx 웹서버 설정방법


https://www.wsgvet.com/ubuntu/126


위와 같은 방법으로 Nginx에 그누보드를 올린 것을 예시로 들어보겠습니다.


./gnuboard/nginx/conf.d/gnuboard.conf


위 파일을 열어보면



server {
        listen 80;
        listen [::]:80;


        server_name www.mydomain.com mydomain.com;


        # Useful for Let's Encrypt
        location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }


        location / {
                rewrite ^ https://$host$request_uri? ;
        }
}


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.mydomain.com mydomain.com;


        # www로 들어왔을 때 www를 제거해주는 역할입니다.
        if ($host != 'mydomain.com' ) {
                rewrite ^/(.*)$  https://mydomain.com/$1;
        }


        root /var/www/web/gnuboard;


        include /etc/nginx/conf.d/basic;
        include /etc/nginx/conf.d/gnuboard-rewrite;
}


대략 위와 같이 나와있을 것입니다.



sub_filter_once off;
    sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';
    sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';


위 내용을 넣으면 됩니다.


mydomain.com은 본서버의 도메인이고, cdn.mydomain.com은 이미지 캐시서버의 도메인입니다.




server {
        listen 80;
        listen [::]:80;


        server_name www.mydomain.com mydomain.com;


        # Useful for Let's Encrypt
        location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }


        location / {
                rewrite ^ https://$host$request_uri? ;
        }
}


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.mydomain.com mydomain.com;


        # www로 들어왔을 때 www를 제거해주는 역할입니다.
        if ($host != 'mydomain.com' ) {
                rewrite ^/(.*)$  https://mydomain.com/$1;
        }


        root /var/www/web/gnuboard;


        sub_filter_once off;
            sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';
            sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';


        include /etc/nginx/conf.d/basic;
        include /etc/nginx/conf.d/gnuboard-rewrite;
}


대략 위와 같이 될 것입니다.



sudo docker exec nginx nginx -s reload


위 명령어를 내려주면 본서버의 Nginx가 재시작됩니다.


---



sudo systemctl nginx reload


Nginx를 서버에 직접 설치했다면  위와 같이 nginx를 재기동 해주면 됩니다.


이제 끝났습니다. 본서버의 썸네일, 이미지, 동영상 파일이 모두 CDN 도메인으로 대치되었을 것입니다.



(2) Apache 웹서버 설정방법



sudo a2enmod substitute


위 명령어로 substitute 모듈을 활성화한 후



sudo systemctl restart apache2


위 명령어로 아파치 웹서버를 재시작해줍니다.


/etc/apache2/sites-enabled/


위 폴더에 있는 자신의 아파치 설정파일에서



<Location "/">
	AddOutputFilterByType SUBSTITUTE text/html
	Substitute "s|https://mydomain.com/data/file/|https://cdn.mydomain.com/data/file/|i"
	Substitute "s|https://mydomain.com/data/editor/|https://cdn.mydomain.com/data/editor/|i"
</Location>


위 내용을 적당히 넣어주면 됩니다.


mydomain.com은 본서버의 도메인이고, cdn.mydomain.com은 이미지 캐시서버의 도메인입니다.



sudo systemctl reload apache2


그리고 위 명령어로 아파치를 재기동하면 됩니다.


이제 끝났습니다. 본서버의 썸네일, 이미지, 동영상 파일이 모두 CDN 도메인으로 대치되었을 것입니다.


감사합니다.



참고사항


이미지 캐시 서버 구축하기 (나만의 CloudFlare 구축하기)


깃허브 소스 : https://github.com/woosungchoi/docker-cdn-webserver


깃허브 소스 : https://github.com/woosungchoi/my-image-cdn


아파치 substitute 모듈 설명 : https://httpd.apache.org/docs/2.4/mod/mod_substitute.html

관련자료

댓글 11개 / 2페이지

우성짱님의 댓글의 댓글

네 ㅎㅎ 파일들을 직접 업로드하는 형태입니다. ㅎㅎ

저는 미리 다 옮겨놓았어요 ㅎㅎ 움짤이 많아서요

잘 된다니 다행입니다!
Total 34 / 2 Page
RSS
그누보드 이미지 및 동영상 캐시 서버 구축 방법 댓글 11

설치 그누보드의 /data 폴더에 있는 이미지 및 동영상을 캐시 서버에서 트래픽을 나눌 수 있는 방법입니다.이미지나 동영상이 많아서 트래픽이 많이…

Docker compose로 그누보드 편하게 설치하는 방법 댓글 15

설치 들어가며그누보드는 이 홈페이지가 돌아가고 있는 국산CMS입니다.현재 5.4버전이 개발 중이며 사용자도 많습니다.그누보드는 php, mysql, …

Docker compose로 라이믹스 편하게 설치하는 방법 댓글 21

설치 들어가며Rhymix(라이믹스)는 XE에서 포크되어 오픈소스로 개발되고 있는 국산 CMS입니다.php, mysql, 웹서버로 구성됩니다.요새는 S…

Docker compose로 Ghost CMS 편하게 설치하는 방법

설치 들어가며ghost는 Node js로 돌아가는 멋진 블로그 CMS입니다. (링크)하지만 설치할때 손이 많이 가고 번거롭죠.우리에겐 도커가 있습니다…

Docker compose로 멀티 사이트 운영하기 댓글 23

설치 1. 들어가며기존에 올렸던 내용은 그누보드나 워드프레스를 선택해서 운영하는 방법입니다.하지만 도커로 하나의 사이트만 운영하는 것은 뭔가 아쉽죠…

Docker를 Web에서 관리하는 Portainer 설치방법 댓글 2

설치 1. Portainer는 무엇일까요?portainer는 docker를 Web UI 형태로 관리할 수 있게 해주는 툴입니다.도커를 SSH에서 관리…

최근글


새댓글


알림 0