В каждом коммите будет полный набор рабочих файлов для конкретного шага.
- Установленный docker
- Установленный docker-compose
- Установленный python на хостовой машине (опционально, потребуется в 1 шаге для проверки)
- Открытые и незанятые порты 80 и 443
- Внешний IP
- DNS имя, настроенное на внешний IP
В папке simple-server
лежит файл с простым веб приложением, которое поднимается на 8000 порту.
Запустим python3 simple-server/main.py
и зайдём в браузере по локальному адресу http://127.0.0.1:8000
. Должно отобразиться сообщение Hello!
.
Или через curl: curl http://127.0.0.1:8000
Добавим в папку simple-server
Dockerfile. Соберём docker build -t simple-server simple-server
.
Запустим docker run -d --name simple-server -p 8000:8000 simple-server
, проверим в браузере по локальному адресу http://127.0.0.1:8000
. Видим то же сообщение Hello!
.
Удалим запущенный контейнер docker rm -f simple-server
.
Сделаем конфиг nginx по пути production/data/nginx.conf
и docker-compose файл по пути production/docker-compose.yml
.
Перейдём в папку production
и запустим контейнеры docker-compose up -d
, проверим в браузере по локальному адресу на 80 порту http://127.0.0.1
.
Отлично, у нас есть всё необходимое для перевода нашего приложение на работу по HTTPS.
В папку production
добавим скрипт init-letsencrypt.sh
. В нём требуется поменять значения domains
и email
на нужные. Добавляем в конфиг nginx нужные поля для получения сертификата. Обновляем docker-compose.yml
.
Делаем тестовый прогон скрипта ./init-letsencrypt.sh
, если всё прошло успешно, то меняем значение параметра staging
на 0
и запускаем опять.
Обновляем конфиг nginx: добавляем пути к сертификатам (не забудьте поправить <URL>
на ваш), слушаем на 443 порту, добавляем конфига letsencrypt, делаем редирект с http на https.
Пробрасываем 443 порт для nginx и добавляем команду перезапуска nginx для обновления сертификатов в docker-compose-yml
. Запускаем получившуюся конфигурацию docker-compose up -d
. Заходим в браузере по адресу http://<ваш_URL>
, должно перебросить на страницу https://<ваш_URL>
и отобразить Hello!
.
Обновляем конфиг nginx c учётом требований TeamCity и docker-compose.yml
.
Обратите внимание, что в конфиге nginx обязательно надо добавить server_name
. Не забудьте поменять все заглушки <URL>
на верное DNS имя.
Запускаем docker-compose up -d
. Заходим в браузере по DNS имени и настраиваем TeamCity.
Добавить агента, который находится "в любой точке мира": docker run -dt -e SERVER_URL="https://<URL>" --name teamcity-agent-instance jetbrains/teamcity-agent:2021.1
Допустим, у нас есть защищённая сеть предприятия, в которой находятся сервер TemCity и агент. У агента нет выхода в интернет, но мы хотим на нём собирать билды.
Тогда немного видоизменяем конфиг nginx и команду запуска агента: docker run -dt -e SERVER_URL="http://<LOCAL_IP>" --name teamcity-agent-instance jetbrains/teamcity-agent:2021.1