LetsEncrypt SSL DNS 자동화 및 레고

아직 letsencrypt 얘기 못 들었으면여전히 HTTP를 통해 모든 트래픽을 제공하는 경우 HTTPS를 통해 모든 컨텐츠를 중지하고 이동해야 합니다.솔직히 SSL을 사용하지 않을 이유가 없어야 합니다.CPU/서버는 비용이 저렴하며 일부 도구는 단순화할 수 있습니다.nginx를 사용하여 SSL을 설정하는 과정을 소개합니다. docker를 사용할 것입니다.

종속성/툴
아래의 공구를 익히는 것이 좋겠지만, 꼭 필요한 것은 아니다.
Docker
  • nginx
  • SSL

  • SSL
    LetsEncrypt 전 세계에 무료 SSL/TLS 인증서를 제공합니다. 당신이 누군지 검증할 수만 있다면.그들은 몇 가지 도구를 가지고 당신을 검증합니다. 가장 간단한 것은 웹 서버를 실행하고 DNS 항목을 추가하는 것입니다.Certbot 가장 유명한 SSL 인증서 생성 도구
    개인적으로 나는 Lego을 더 좋아한다. 이것은 Go로 작성된letsencrypt이다.어느 정도에 저는 Go를 언어로 좋아하기 때문에 개발자의 선택을 좋아하지만 어댑터 인증서와SAN을 쉽게 사용할 수 있습니다.
    와일드카드 DNS 인증을 얻기 위해 SSL을 쉽게 생성할 수 있지만 사용하기는 훨씬 간단합니다.비록 더 합법적인 DNS 공급자가 필요하지만, 공개된 API가 있다.레고에는 지원되는 소프트웨어가 길게 늘어서 있다DNS Providers.나는 아마존 53번 노선을 사용한 적이 있어 나중에 GCP 노선으로 바꿀 수도 있지만 솔직히 말하면 어느 것이든 괜찮다.
    SAN은 매우 멋지고 특이한 점은 여러 개의 영역을 지원하는 인증서를 만들었다는 것이다.
    너는 어느 곳에서든 그것을 운행할 수 있지만, 나의 경우, 나는 /etc/letsencrypt에 그것을 설치했다.
    첫 번째 단계는 처음으로 증서를 얻는 것이다.
    cd /etc/letsencrypt
    AWS_ACCESS_KEY_ID=SECRET  AWS_SECRET_ACCESS_KEY="SECRET"  lego --dns route53 --domains="*.foobar.org" --domains="foobar.org"   --email valid@email run
    
    보시다시피, 나는 어댑터와 하나를 만들었습니다. foobar.org이것은 좀 짜증나지만.복아.org는 기본 영역을 포함하지 않습니다.만약 네가 어댑터를 가지고 싶지 않다면, 너는 너의 모든 도메인 이름을 열거할 수 있다.예.
    cd /etc/letsencrypt
    AWS_ACCESS_KEY_ID=SECRET  AWS_SECRET_ACCESS_KEY="SECRET"  lego --dns route53 --domains="www.foobar.org" --domains="foobar.org" --domains="mail.foobar.org" --domains="ftp.foobar.org" --email valid@email run
    
    일단 당신이 증서를 받게 되면, 당신은 정기적으로 갱신을 확보하기만 하면 됩니다.이를 위해 간단한 bash 스크립트를 만들었습니다.
    #!/usr/bin/env bash
    cd /etc/letsencrypt/
    DOMAINS="domain1 domain2 foobar.org"
    AWS_KEY=<CHANGEME>
    AWS_SECRET=<CHANGEME>
    
    for domain in $DOMAINS;
    do
            AWS_ACCESS_KEY_ID=$AWS_KEY  AWS_SECRET_ACCESS_KEY="$AWS_SECRET"  lego --dns route53 --domains="*.$domain" --domains="$domain"   --email [email protected] renew
    done
    
    AWS를 사용하는 것은 그들의 DNS 공급자에게 약간의 비용이 있지만, 내가 가지고 있는 3개의 도메인 이름에 대해 나는 나의 계산서가 매달 3달러를 초과하지 않을 것이라고 생각한다.이것은 나에게 매우 가치가 있다.

    Ghost 웹 사이트
    version: "3.7"
    services:
      www:
        image: ghost:4.0.1
        ports:
          - "8890:2368"
        restart: always
        env_file: .env
        volumes:
          - ./content:/var/lib/ghost/content/
      mysql:
        container_name: shared_mysql
        image: mysql:5.7.29
        restart: always
        env_file: .env
        volumes:
          - ./data:/var/lib/mysql
    
    이때 HTTP 트래픽에 서비스를 제공하는 포트 8890을 로컬에 공개했습니다.
    하나 필요해.MySQL 및 ghost 인스턴스에서 참조하는 env 파일입니다.
    ## Database Ghost config
    database__client=mysql
    database__connection__host=shared_mysql
    database__connection__user=root
    database__connection__password=testing
    database__connection__database=ghost
    
    ##MySQL config
    MYSQL_ROOT_PASSWORD=testing
    MYSQL_DATABASE=gbfest
    
    
    ## Domain config
    #url=http://0.0.0.0:8890
    url=https://www.foobar.org
    
    ## Email settings Production 
    ## FILL THESE IN as appropriate
    #mail__from=donotreply@domain
    #mail__transport=SMTP
    #mail__options__port=587
    #mail__options__host=
    #mail_options_service=SMTP
    #mail__options__auth__user=
    #mail__options__auth__pass=
    
    
    이때 우리는 docker-compose up -d로 사이트를 열 수 있지만 브라운니 포인트를 얻기 위해 시스템d 파일을 사용할 것이다.

    Systemd 시작 스크립트/etc/systemd/system에 다음 파일을 생성합니다.docker user라는 로컬 사용자가 있다고 가정합니다. 이상적인 경우, 이것은 케이스 /bin/nologin 가 있고, docker 그룹의 일부분입니다.
    귀신.서비스 파일:
    [Unit]
    Description = Ghost Website
    After=docker.service
    Requires=docker.service
    
    [Service]
    Type=simple
    WorkingDirectory=/home/docker_user/ghost
    ExecStart=/usr/bin/docker-compose up
    ExecStop=/usr/bin/docker-compose stop
    ExecReload =/usr/bin/docker-compose restart
    User=docker_user
    Group=docker
    Restart=always
    RestartSec=3
    
    
    [Install]
    WantedBy=multi-user.target
    
    이 때, 우리는 시스템d를 사용하여 시작/정지/사용을 할 수 있습니다.
    systemctl enable ghost.service
    systemctl status ghost
    
    다시 말하면, 만약 네가 컴퓨터를 다시 시작한다면, 너의 사이트는 여전히 나타날 것이다.

    유령에 대한 마지막 노트
    이때 우리는 http://localhost:8890의 데이터를 듣고 있었다. 우리는 인터넷에 노출되지 않았다. 착한 인터넷 사마리아인처럼 방화벽 규칙이 있어 나쁜 사람이 들어오지 못하도록 했다.하지만 우리 사이트를 보고 싶은 사람들이 우리 사이트를 방문하도록 해야 한다.

    Nginx SSL 캡슐화
    없으면 웹 서버에서 포트 80 및 443을 열어야 합니다.우리는 80에 데이터 서비스를 제공하지 않지만, 만약 80에 사람이 나타난다면, 우리는 그들을 다시 정해야 한다. 이를 위해 우리는 80이 필요하다./etc/nginx/sites-available에서 우리는 아래의 유령을 창설할 것이다.형태
    server {
        # SSL configuration
        #
        listen 443 ssl;
        listen [::]:443 ssl;
    
            access_log /var/log/nginx/ghost_access.log;
            error_log /var/log/nginx/ghost_error.log;
    
            ssl_certificate /etc/letsencrypt/.lego/certificates/_.foobar.org.crt;
            ssl_certificate_key /etc/letsencrypt/.lego/certificates/_.foobar.org.key;
    
            client_max_body_size 50M;
    
    
            root /var/www/html/ghost;
            index index.html index.htm;
    
            server_name www.foobar.org;
            large_client_header_buffers 4 32k;
    
            location / {
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                proxy_pass http://0.0.0.0:8890;
                include proxy_params;
            }
    
            location ~ /(data|conf|bin|inc)/ {
                deny all;
            }
    
            location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
            }
    
            # Block access to "hidden" files and directories whose names begin with a
            # period. This includes directories used by version control systems such
            # as Subversion or Git to store control files.
            location ~ (^|/)\. {
                return 403;
            }
    
    
    }
    
    server {
        listen 80;
        listen [::]:80;
        return 301 https://$host$request_uri;
    
        server_name www.foobar.org;
    }
    
    최종적으로 확정하기 전에, 우리는 이 사이트를 활성화해야 한다.
    cd /etc/nginx/sites-enabled
    ln -s ../sites-available/ghost.conf 01_ghost.conf
    nginx -t ## Validates config
    systemclt restart nginx
    
    기본적으로 포트 80을 443으로 리디렉션하고 SSL을 둘러싼 모든 트래픽과 www.foobar.org 서비스 트래픽을 패키지화하는 에이전트를 만듭니다.이것은 우리가 IP를 통해 서버에 연결하면 유효한 사이트가 아니라 기본 페이지를 얻을 수 있다는 것을 의미한다.

    백업 정책
    이 때, 데이터베이스에 대해 정기적으로 SQL 저장을 하고 ghost 사이트의 내용을 백업해야 합니다.ghost lab은 모든 내용을 내보냅니다. 중대한 작업을 하기 전에 이 내용을 정기적으로 사용해야 합니다.

    마지막 노트
    나는 개인적으로 구글로 나의 모든 사진 내용을 저장하는 것을 좋아한다.GS를 지원하기 위해 다른 플러그인을 사용해서 ghost docker 이미지의 복사본을 유지하고 있으며, 곧 S3를 추가할 계획입니다.원본 코드 here 를 찾을 수도 있고, 도커 이미지 here 를 찾을 수도 있습니다.라벨은 공식 유령 나루터 컨테이너와 일치한다.

    좋은 웹페이지 즐겨찾기