add: Nginx в Docker (1)
This commit is contained in:
parent
c45661a2b8
commit
bef2817577
@ -4,6 +4,7 @@
|
|||||||
* [Расположение образов Docker](docker/docker-adjasting.md)
|
* [Расположение образов Docker](docker/docker-adjasting.md)
|
||||||
* [Установка GPG-ключа для репозиториев Docker](docker/docker-trusted-gpg.md)
|
* [Установка GPG-ключа для репозиториев Docker](docker/docker-trusted-gpg.md)
|
||||||
* [Контейнер MariaDB/MySQL](docker/docker-mariadb.md)
|
* [Контейнер MariaDB/MySQL](docker/docker-mariadb.md)
|
||||||
|
* [Nginx и letsencrypt в контейнерах](docker/docker-nginx-w-certbot.md) на примере Portainer
|
||||||
* [Контейнер MySQL под Windows 10](docker/docker-mysql-in-windows10.md)
|
* [Контейнер MySQL под Windows 10](docker/docker-mysql-in-windows10.md)
|
||||||
* [Развертывание VPN-сервера на базе MS SSTP](docker/docker-sstp-vpn.md)
|
* [Развертывание VPN-сервера на базе MS SSTP](docker/docker-sstp-vpn.md)
|
||||||
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker/docker-shadowsocks.md)
|
* [Развертывание прокси базе Shadowsocks (сервер и клиент)](docker/docker-shadowsocks.md)
|
||||||
|
134
docker/docker-nginx-w-certbot.md
Normal file
134
docker/docker-nginx-w-certbot.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# Веб-сервер Nginx с SSL-сертификатами Let's Encrypt в контейнерах Docker
|
||||||
|
|
||||||
|
Для удобного переноса сайтов или веб-приложений между серверами, а также для упрощения обновления и обслуживания
|
||||||
|
веб-сервера nginx, удобно держать его в контейнере Docker. В данной инструкции рассмотрено развертывание веб-сервера
|
||||||
|
Nginx с SSL-сертификатами Let's Encrypt в контейнерах Docker. В качестве примера используется контейнер Portainer --
|
||||||
|
отличный инструмент для управления Docker-контейнерами через веб-интерфейс.
|
||||||
|
|
||||||
|
Соглашения: пусть наш пользователь от имени которого мы работаем -- `web`. Таким образом, домашний каталог -- `/home/web`.
|
||||||
|
Каталог для хранения данных Docker-контейнеров (место куда монтируют тома контейнера) -- `/home/web/docker-data`.
|
||||||
|
|
||||||
|
И так, для начала создадим каталог для хранения данных Portainer (можно опустить если вам не нужен Portainer):
|
||||||
|
```bash
|
||||||
|
mkdir -p /home/web/docker-data/portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nginx в контейнере Docker
|
||||||
|
|
||||||
|
Теперь создадим каталог для хранения конфигурационных файлов Nginx. Сам Nginx будет сидеть в контейнере, но
|
||||||
|
конфигурационные файлы, которые он будет использовать, находятся на хосте в каталоге `/home/web/docker-data/nginx/conf.d`:
|
||||||
|
```bash
|
||||||
|
mkdir -p /home/web/docker-data/nginx/conf.d
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь создадим файл конфигурации Nginx, который будет использоваться для проксирования запросов к контейнеру Portainer:
|
||||||
|
```bash
|
||||||
|
nano /home/web/docker-data/nginx/conf.d/portainer.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставьте в файл следующее содержимое:
|
||||||
|
```nginx configuration
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name portainer.you.domain.name;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://portainer:9000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Что происходит в этом файле конфигурации:
|
||||||
|
- `listen 80;` -- слушаем порт 80 (обычный HTTP-трафик);
|
||||||
|
- `server_name portainer.you.domain.name;` -- имя хоста, по которому будет доступен Portainer (замените `you.domain.name`
|
||||||
|
на ваш домен);
|
||||||
|
- `proxy_pass http://portainer:9000;` -- проксируем запросы в контейнер Portainer, который будет доступен по хосту (имени
|
||||||
|
контейнера `portainer`) и порту 9000;
|
||||||
|
- `proxy_set_header Host $host;` -- передаем заголовок `Host` в запросе;
|
||||||
|
- `proxy_set_header X-Real-IP $remote_addr;` -- передаем заголовок `X-Real-IP` в запросе;
|
||||||
|
- `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;` -- передаем заголовок `X-Forwarded-For` в запросе;
|
||||||
|
|
||||||
|
Сохраните файл и выйдите из редактора (`Ctrl + X`, затем `Y` для подтверждения).
|
||||||
|
|
||||||
|
Теперь создадим файл `docker-compose.yml` для развертывания контейнеров Nginx и Portainer:
|
||||||
|
```bash
|
||||||
|
nano /home/web/docker-data/docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставьте в файл следующее содержимое:
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
portainer:
|
||||||
|
image: portainer/portainer-ce:latest
|
||||||
|
container_name: portainer
|
||||||
|
# Гасим порт 9000, чтобы он не светил на хост, а был доступен только во внутри-контейнерной сети
|
||||||
|
# ports:
|
||||||
|
# - "9000:9000"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- /home/web/docker-data/portainer:/data
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- web
|
||||||
|
# Можно закомментировать строку выше и раскомментировать строки ниже если зачем-то нужен закрепленный IP-адрес
|
||||||
|
# web:
|
||||||
|
# ipv4_address: 172.20.0.10
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:latest
|
||||||
|
container_name: nginx
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- /home/web/docker-data/nginx/conf.d:/etc/nginx/conf.d
|
||||||
|
- /etc/letsencrypt:/etc/letsencrypt
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- web
|
||||||
|
|
||||||
|
networks:
|
||||||
|
web:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 172.20.0.0/24 # Подсеть для пользовательской сети
|
||||||
|
```
|
||||||
|
|
||||||
|
Что у нас настроено в этом `docker-compose.yml`:
|
||||||
|
- `portainer` (у вас его может и не быть, или быть какой-то другой сервис, который вы будете производить):
|
||||||
|
- `image: portainer/portainer-ce:latest` -- используем образ Portainer Community Edition;
|
||||||
|
- `container_name: portainer` -- имя контейнера `portainer`;
|
||||||
|
- `volumes: ...` -- монтируем файлы или тома изнутри контейнера Portainer на хост. В данном случае монтируем: сокет --
|
||||||
|
чтобы изнутри контейнера Portainer можно было управлять Docker, в котором сам же и работает (вот так хитро) и каталог
|
||||||
|
`/home/web/docker-data/portainer` -- чтобы сохранять данные Portainer между перезапусками;
|
||||||
|
- `restart: always` -- автоматически перезапускаем контейнер при его остановке;
|
||||||
|
- `networks: ...` -- подключаем контейнер к пользовательской (внутри-контейнерной) сети `web`.
|
||||||
|
- `nginx`:
|
||||||
|
- `image: nginx:latest` -- используем образ Nginx;
|
||||||
|
- `container_name: nginx` -- имя контейнера `nginx`;
|
||||||
|
- `ports: ...` -- пробрасываем порты 80 и 443 на хост;
|
||||||
|
- `volumes: ...` -- монтируем каталог с конфигурационными файлами Nginx и каталог с SSL-сертификатами Let's Encrypt;
|
||||||
|
- `restart: always` -- автоматически перезапускаем контейнер при его остановке;
|
||||||
|
- `networks: ...` -- подключаем контейнер к пользовательской (внутри-контейнерной) сети `web`.
|
||||||
|
- `networks: ...`:
|
||||||
|
- `web`:
|
||||||
|
- `driver: bridge` -- используем драйвер сети `bridge` (по умолчанию);
|
||||||
|
- `ipam: ...` -- настраиваем IP-адреса для контейнеров внутри сети `web`. В данном случае используем подсеть
|
||||||
|
|
||||||
|
Сохраняем файл `docker-compose.yml` и выходим из редактора (`Ctrl + X`, затем `Y` для подтверждения).
|
||||||
|
|
||||||
|
Теперь развернем контейнеры Nginx и Portainer:
|
||||||
|
```bash
|
||||||
|
cd /home/web/docker-data
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
После того как контейнеры запустятся, можно зайти в веб-интерфейс Portainer по адресу `http://portainer.you.domain.name`.
|
||||||
|
|
||||||
|
## Let's Encrypt в контейнере Docker
|
Loading…
Reference in New Issue
Block a user