Niedawno zmieniłem serwer wirtualny i musiałem wszystko skonfigurować od nowa. Wolę, aby strona była dostępna przez https i pozwalała na automatyczne uzyskiwanie i odnawianie certyfikatów Letsencrypt. Można to osiągnąć za pomocą dwóch obrazów dokowanych nginx-proxy i nginx-proxy-companion.
To jest poradnik jak skonfigurować stronę internetową na platformie Docker z serwerem proxy, który automatycznie odbiera certyfikaty SSL. Używany jest serwer wirtualny CentOS 7.
Zakładam, że serwer został już zakupiony, skonfigurowany, zalogowany przy użyciu klucza, zainstalowany Fail2ban itp.
Najpierw musisz zainstalować okno dokowane.
- Najpierw musisz zainstalować zależności
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Połącz repozytorium
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Następnie zainstaluj wersję społecznościową platformy Docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Dodaj okno dokowane do uruchamiania i uruchom
$ sudo systemctl enable docker $ sudo systemctl start docker
- Dodaj użytkownika do grupy doków, aby móc uruchamiać okno dokowane bez sudo
$ usermod -aG docker user
Następnym krokiem jest instalacja docker-compose. Narzędzie można zainstalować na kilka sposobów, ale wolę instalować za pomocą menedżera pip i virtualenv, aby nie zaśmiecać systemu niepotrzebnymi pakietami.
- Zainstaluj pipa
$ sudo yum install python-pip
- Zainstaluj virtualenv
$ pip install virtualenv
- Następnie musisz utworzyć folder z projektem i go zainicjować. Folder zawierający wszystko, czego potrzebujesz do zarządzania pakietami, będzie nosił nazwę ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Aby rozpocząć korzystanie ze środowiska wirtualnego, należy uruchomić następującą komendę w folderze projektu.
$ source ve/bin/activate
- Możesz zainstalować docker-compose.
pip install docker-compose
Aby kontenery mogły się widzieć stworzymy sieć. Domyślnie używany jest sterownik mostu.
$ docker network create network
Następnie musisz skonfigurować docker-compose, serwer proxy będzie w folderze proxy, strona testowa będzie w folderze testowym. Na przykład używam nazwy domeny example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Treść proxy/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx-proxy: container_name: nginx-proxy image: jwilder/nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-letsencrypt: container_name: nginx-proxy-letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html:
Zmienna środowiskowa NGINX_PROXY_CONTAINER konieczne jest, aby kontener letsencrypt widział kontener proxy. Foldery /etc/nginx/certs /etc/nginx/vhost.d i /usr/share/nginx/html muszą być współdzielone przez oba kontenery. Aby kontener letsencrypt działał poprawnie, aplikacja musi być dostępna zarówno na porcie 80, jak i 443.
Treść test/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx: container_name: nginx image: nginx:latest environment: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - [email protected]
Tutaj potrzebne są zmienne środowiskowe, aby serwer proxy poprawnie przetworzył żądanie do serwera i zażądał certyfikatu dla prawidłowej nazwy domeny.
Pozostaje tylko uruchomić docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Źródło: www.habr.com