LetsEncrypt SSL DNS 자동화 및 레고
15153 단어 sslopensourcedockersecurity
종속성/툴
아래의 공구를 익히는 것이 좋겠지만, 꼭 필요한 것은 아니다.
Docker
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 를 찾을 수도 있습니다.라벨은 공식 유령 나루터 컨테이너와 일치한다.
Reference
이 문제에 관하여(LetsEncrypt SSL DNS 자동화 및 레고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/csgeek/letsencrypt-ssl-dns-automation-with-lego-3bb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)