HackMD 설치와 HTTPS화까지

부담없이 사용할 수 있는 자신용의 메모라든가, 몇 명이서 공유할 수 있는 메모 원해~라고 생각하면 조도 좋은 느낌에 HackMD 이 있었으므로 시험해 보겠습니다.

docker에 딱 좋은 가 있었으므로 이것을 사용하게 합니다.
HackMD를 소스로부터 넣으면, 빌드에 메모리 2GB를 요구되므로 t2.medium당으로 하지 않으면 안 되는 것도 무료 프레임 유저에게는 난점이군요.
HTTPS화는 Let's Encrypt 를 사용하게 합니다.

환경
Amazon Linux AMI 2017.09.1
SG에서 HTTP, HTTPS, SSH만 열어 둡니다.
・HTTPSL화까지 하고 싶은 경우, 도메인은 준비해 두어 주세요

설치


# gitとdocker
sudo yum update -y && sudo yum install -y git docker

# docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker hackmd image를 받고 컨테이너 시작


git clone https://github.com/hackmdio/docker-hackmd.git
cd docker-hackmd && git pull

# dockerの起動
sudo service docker start
sudo docker-compose up

# sudo: docker-compose: コマンドが見つかりません が出た場合
# 一時的にrootのPATHに/usr/local/binを追加して実行
sudo su
PATH=`echo $PATH`:/usr/local/bin
docker-compose up

# 10分くらい待ちます

일단 움직이고 있는지 확인


curl -X GET http://localhost:3000

HTML 같은 것이 돌아오고 있는 것을 확인할 수 있으면 OK입니다.

Nginx 설치 및 설정 (먼저 HTTP에서)


sudo yum install -y nginx
sudo vim /etc/nginx/nginx.conf

/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    index   index.html index.htm;

    server {
        listen       80 default_server;
        server_name  サーバのIPアドレス;

        location / {
            proxy_pass http://localhost:3000;
        }
    }
}
# 再起動
sudo service nginx restart

브라우저에서 액세스할 수 있는지 확인





여기까지도 전혀 사용할 수 있으므로, 도메인 설정하지 않는 경우는 완료입니다.

Route53 설정


  • AWS 콘솔에서 Route53 선택
  • Hosted zones 선택
  • Create Hosted Zone에서 라우팅 만들기
  • 도메인과 주석을 입력하여 Create
  • 여기에 나오는 네임서버를 도메인을 구입한 사이트로 설정
  • Create Record Set에서 인스턴스 IP와 연결

  • 이것으로 설정 완료. 브라우저에서 액세스할 수 있는지 확인.
    네임서버 설정은 가끔 반영에 시간이 걸리는 것 같습니다만, 지금까지 괴롭힌 느낌이라고 대체로 1분도 걸리지 않고 완료하고 있습니다.

    HTTPS화하지 않으면 여기까지 완료입니다.

    인증서 받기



    @ MashMorgan 님의 게시물 참고
    # Let's Encryptのクライアント入れる
    sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
    sudo chmod 700 /usr/bin/certbot-auto
    
    # 証明書取得(domainとmail-addressは各自置き換えて下さい)
    sudo certbot-auto certonly -d {domain} --email {mail-address} --debug
    
    
    # 上のコマンドを投げるといくつか質問るので答えていきます
    
    ##### 1. インストール確認 > y
    総ダウンロード容量: 32 M
    インストール容量: 61 M
    Is this ok [y/d/N]: y
    
    # インストールのログ
    
    完了しました!
    Creating virtual environment...
    Installing Python packages...
    Installation succeeded.
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Failed to find executable apachectl in expanded PATH: /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
    
    
    ##### Apacheがいないと怒られる > 1のNginx
    How would you like to authenticate with the ACME CA?
    -------------------------------------------------------------------------------
    1: Nginx Web Server plugin - Alpha (nginx)
    2: Spin up a temporary webserver (standalone)
    3: Place files in webroot directory (webroot)
    -------------------------------------------------------------------------------
    Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
    
    Plugins selected: Authenticator nginx, Installer None
    
    
    ##### 利用規約的なものに同意 > A
    -------------------------------------------------------------------------------
    Please read the Terms of Service at
    https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
    agree in order to register with the ACME server at
    https://acme-v01.api.letsencrypt.org/directory
    -------------------------------------------------------------------------------
    (A)gree/(C)ancel: A
    
    
    ##### メールアドレスを共有?するか聞かれる > お好みで
    -------------------------------------------------------------------------------
    Would you be willing to share your email address with the Electronic Frontier
    Foundation, a founding partner of the Let's Encrypt project and the non-profit
    organization that develops Certbot? We'd like to send you email about EFF and
    our work to encrypt the web, protect its users and defend digital rights.
    -------------------------------------------------------------------------------
    (Y)es/(N)o: N
    
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for mathemac.net
    Waiting for verification...
    Cleaning up challenges
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
       /etc/letsencrypt/live/mathemac.net/fullchain.pem
       Your key file has been saved at:
       /etc/letsencrypt/live/mathemac.net/privkey.pem
       Your cert will expire on 2018-06-15. To obtain a new or tweaked
       version of this certificate in the future, simply run certbot-auto
       again. To non-interactively renew *all* of your certificates, run
       "certbot-auto renew"
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
     - If you like Certbot, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    
    # ここまでで完了
    

    HTTPS 설정



    검색된 인증서를 Nginx로 설정
    # 設定ファイル編集
    sudo vim /etc/nginx/nginx.conf
    

    /etc/nginx/nginx.conf
    # serverディレクティブ以下のみ変更
        server {
            listen       443 ssl;
            server_name  ドメイン;
    
            ssl_certificate     /etc/letsencrypt/live/ドメイン/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem;
    
            ssl_session_cache shared:le_nginx_SSL:1m;
            ssl_session_timeout 1440m;
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
    
            location / {
                proxy_pass http://localhost:3000;
            }
        }
    
    # 再起動
    sudo service nginx restart
    

    이제 HTTPS에 액세스할 수 있습니다.

    덤 Basic 인증



    Basic 인증도 약한 약하다고 합니다만, 최악 엿보인 곳에서 곤란한 내용을 쓸 예정도 없기 때문에 이것 정도로 우선.
    Takafumi Yamano 님의 블로그 참고
    # htpasswdコマンドインストール
    sudo yum install -y httpd-tools
    
    # パスワードファイル置き場
    sudo mkdir /etc/nginx/httpasswd
    
    # htpasswdファイル作成(パスワード入力を求められるので入力)
    sudo htpasswd -c /etc/nginx/httpasswd/.htpasswd username
    New password: 
    Re-type new password: 
    Adding password for user username
    
    # Nginxの設定ファイル編集
    sudo vim /etc/nginx/nginx.conf
    

    /etc/nginx/nginx.conf
    # locationディレクティブ以下のみ変更
            location / {
                auth_basic "Restricted";
                auth_basic_user_file /etc/nginx/httpasswd/.htpasswd;
    
                proxy_pass http://localhost:3000;
            }
    
    # 再起動
    sudo service nginx restart
    

    이제 Basic 인증이 걸렸으므로 로그인합니다.

    마지막으로



    Nginx의 보안 설정이나 Let'sEncrypt의 자동 업데이트는 나중에 작성하거나 다른 기사를 작성합니다.
    HackMD라고 작성한 페이지의 정보를 볼 수 있는 기능은 없습니까, 이력 이외로. 최악의 포스그레의 컨테이너 들여다보면 확인할 수 있을 것 같습니다만,

    좋은 웹페이지 즐겨찾기