분류 설치

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

컨텐츠 정보

본문

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

관련자료

댓글 9개 / 1페이지

Lael님의 댓글

와! 너무 잘 응용해주셔서 감사하네요.
저도 오랜만에 코드를 조금 더 업데이트 해야겠습니다.
감사합니다!
Total 32 / 1 Page
RSS
Keep Network의 ECDSA & Beacon nodes 구글 클라우드에 설치하기 댓글 2

설치 Keep Network의 test Keep token으로 ECDSA 및 Beacon nodes를 구글 클라우드에서 직접 구축할 수 있습니다.다른…

중국 황금방패 뚫는 VPN 3대장 직접 설치하기 댓글 6

설치 중국에서 해외 사이트에 접속할 때 황금방패로 막혀있는 경우가 많습니다.보통 유료로 VPN에 가입해서 사용하거나, 무료 VPN 서비스를 사용할텐데…

윈도우10에 우분투 설치하는 방법

설치 윈도우10에는 WSL(Windows Subsystem For Linux)이 있어서 우분투 센토스 등을 설치할 수 있습니다.방금 설치해보니 정말 …

Docker compose로 워드프레스 편하게 설치하는 방법 댓글 2

설치 들어가며Wordpress(워드프레스)는 현재 전세계에서 가장 많이 쓰이는 CMS입니다.php, mysql, 웹서버로 구성됩니다.SSL 인증서 설…

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

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

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

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

최근글


새댓글