서버 이전 경험 공유기 – 2. Let’s Encrypt

서버 이전 경험 공유기 – 2. Let’s Encrypt

이번에 서버이전을 하면서 이것저것 알게된 지식 및 경험을 공유하고자 이 글을 작성합니다.

이전 글은 여기서 볼수 있습니다.

Let’s Encrypt

이 전 글에서 간단히 언급했지만, Let’s Encrypt 라는 https 보급 확산을 위한, 무료 인증서 발급 프로젝트 입니다.

사실 예전부터 개인 서버에 https 를 적용하고 싶었지만, 비용이 개인이 부담하기엔 적은 금액이 아니라서 도입을 망설이고 있었습니다.
이런 찰나에 이런 프로젝트가 있다는 사실을 알게 되어 제 서버에 도입을 하지 않을 수가 없었습니다.

설치

Let’s Encrypt 를 설치하기 위해서는 Certbot 이라는 클라이언트가 필요합니다.

Install Certbot

위의 사이트를 들어가면 certbot 을 설치하는 법이 자세히 나옵니다.

간단히 정리하면,

$ wget https://dl.eff.org/certbot-auto
$ chmod a+x ./certbot-auto
$ ./certbot-auto --help

wget 으로 다운로드 받은 뒤, 실행권한 주면 끝입니다. 간단합니다.

certbot-auto 는 현재(version 0.15.0) nginxapache를 지원하고 있습니다. 만약 nginxapache 를 직접(apt-get or yum) 설치했다면 plugin 을 이용해서 연동할 수 있을 것입니다.

–apache Use the Apache plugin for authentication & installation
–standalone Run a standalone webserver for authentication
–nginx Use the Nginx plugin for authentication & installation

하지만, 저는 docker 를 이용한 관계로 그렇게 하지 못하고 다른 방식으로 설치 진행했습니다.

GitHub – 9to6/docker-nginx: Docker for nginx

githubdockerfilereadme 를 참고 하시면 되겠습니다.

핵심은 certbot 설치 후,

$ ./certbot-auto certonly --standalone --email your@email.com -d example.com -d www.example.com

위 명령 실행입니다. example.com 대신 본인의 도메인을 입력하시면 됩니다.

처음으로 실행하셨다면, 본인 이메일 입력하는 란이 나오고,
이메일을 입력 한 뒤에는,
기꺼이 본인의 이메일을 EFF(Electronic Frontier Foundation) 에 제공하겠냐고 물어보는데 저는 그냥 제공해드렸습니다. ㅎㅎㅎㅎ

Let’s Encrypt3개월 마다 한번씩 갱신해야합니다.

매번 신경 쓰기 힘드므로 crontab 에 등록해줍니다.

아래 내용은 매일 새벽 1시에 renew 를 시도하고, 성공시 nginx-simple 이라는 docker container 내부의 nginx의 설정을 다시 reload 하라는 뜻 입니다.

$ sudo echo "0 1 * * * /home/user/certbot-auto renew --quiet --renew-hook \"/usr/bin/docker exec nginx-simple nginx -s reload\"" | sudo tee -a /var/spool/cron/crontabs/root

결론

https 설치가 무사히 완료되었습니다.
이제 appstore application 의 adhoc 버전 배포할 때 굳이 dropbox를 써야하는 번거로움도 사라지겠네요. (다만 요즘 앱개발 할 일이 전혀 없습니다…)

https 적용으로 보안성도 강화되었습니다.
SSL Server Test (Powered by Qualys SSL Labs) 기념으로 이곳에서 보안성 테스트도 해줬습니다.
점수가 괜찮은 듯 합니다.

만족스럽습니다. 여러분들도 https 적용하시고 https 의 빠른 보급에 작은 기여를 해주셨으면 합니다.

CentOS 7에 php7+Codeigniter(ciboard)+nginx 설치하기

  • ISO 파일 다운로드

http://ftp.daumkakao.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

  • MariaDB 설치

    • 어플 설치
      $ sudo yum install -y mariadb mariadb-server
    • MariaDB 실행
      $ sudo systemctl start mariadb
      
    • DB 초기 설정
      $ sudo mysql_secure_installation
      mysql_secure_installation prompts:
      Enter current password for root (enter for none):
      OK, successfully used password, moving on...
      
      Setting the root password ensures that nobody can log into the MariaDB
      root user without the proper authorisation.
      
      New password: password
      Re-enter new password: password
      Password updated successfully!
      Reloading privilege tables..
       ... Success!
      
    • mariaDB 서비스 등록
      $ sudo systemctl enable mariadb
    • db 인코딩 설정
        • client side
      $ sudo vi /etc/my.cnf.d/client.cnf
      [client]
      default-character-set=utf8
        • server side
      $ sudo vi /etc/my.cnf.d/server.cnf
      [mysqld]
      collation-server = utf8_unicode_ci
      init-connect='SET NAMES utf8'
      character-set-server = utf8
        • 재실행
      $ sudo systemctl restart mariadb
  • Nginx 설치

      • 저장소 설치
    $ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
    
      • nginx 설치
    $ sudo yum install nginx
      • nginx 실행 및 서비스 등록
    $ sudo systemctl start nginx
    $ sudo systemctl enable nginx
  • PHP 7 설치

    yum install -y epel-release
    rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    yum --enablerepo=remi update remi-release
    yum --enablerepo=remi-php70 install -y php php-fpm php-mysql php-gd php-common php-cli php-json php-opcache php-devel php-imagick
      • php 설정
    $ sudo vi /etc/php.ini
    
    cgi.fix_pathinfo=0
      •  php fpm 설정
    $ sudo vi /etc/php-fpm.d/www.conf
    listen = /var/run/php-fpm/php-fpm.sock
    
    listen.owner = nginx
    listen.group = nginx
    
    user = nginx
    group = nginx
    
  • Nginx 설정

    $  sudo vi /etc/nginx/nginx.conf
    server {
     listen 80 default_server;
     listen [::]:80 default_server;
     server_name server_domain_name_or_IP;
     root /usr/share/nginx/html;
     index index.php index.html;
    
     # Load configuration files for the default server block.
     include /etc/nginx/default.d/*.conf;
    
     location / {
       try_files $uri $uri/ /index.php?/$request_uri;
     }
    
     error_page 404 /404.html;
     location = /40x.html {
     }
    
     error_page 500 502 503 504 /50x.html;
     location = /50x.html {
     }
    
     location ~ .php$ {
       fastcgi_split_path_info ^(.+.php)(/.+)$;
       fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
     }
     location ~ /.ht {
       deny all;
     }
    }
      • Nginx 재실행
    $ sudo systemctl restart nginx

 

결과화면

설치 결과화면
결과화면