ローカル仮想マシンの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 の方に移植する。