ログ日記

作業ログと日記とメモ

ローカル仮想マシンのDockerでも簡単にLet's Encryptを使いたい

今まではLet's Encryptで local.example.com とかのグローバルサドメインを設定して、それをrsyncで持ってきてローカル用に使ってた。
これを自動化する。

test.example.comドメインに対する test.local.example.com は空でいい。

version: '3'
services:
  proxy:
    image: steveltn/https-portal:1.4.2
    ports:
      - '80:80'
      - '443:443'
    restart: always
    environment:
      DOMAINS: >-
        test:example@test.example.com #production,
        test:example@test.local.example.com #production
    volumes:
      - '/srv/https-portal/certs:/var/lib/https-portal'
      - '/srv/https-portal/vhosts:/var/www/vhosts'

これをテストサーバーで立ち上げ。


ansibleのタスク

---
- name: copy ssh keys
  copy:
    src: "~/.ssh/{{ item }}"
    dest: "/root/.ssh/{{ item }}"
    mode: 0600
  with_items:
    - id_rsa
    - id_rsa.pub
  when: inventory_hostname == 'test.local.example.com'

- name: debug
  debug: "msg={{inventory_hostname}}"

- name: rsync certs from remote local
  synchronize:
    src: /srv/https-portal/certs/
    dest: /srv/https-portal/certs/
    mode: pull
    recursive: yes
  when: inventory_hostname == 'test.example.com'
  delegate_to: test.local.example.com

inventoryにipやポートを書いて

ansible-playbook -i local -u root -v playbook.yml
ansible-playbook -i remote -u root -v playbook.yml

既にsshの公開鍵があり local => remote の sshが通るなら上側は不要。
synchronize の pull を delegate して実行する。(ややこしい)


docker-compose up -d の前にこのplaybookを実行すれば、証明書が更新されている場合はダウンロードしてくる。(予定)


最初の docker-composeの

        test:example@test.example.com #production,

の行を削除して、ローカルでもproductionで立ち上げる。linkとかあるなら test.local.example.com の方に移植する。