Как развернуть докеризованное приложение на сервере с помощью CircleCI
Пытаюсь докеризировать свое приложение Django REST API, которое использует базу данных postgres, а также интегрировать CI/CD. Я потратил весь день на просмотр видео, чтение руководств и т.д. и все еще немного запутался, но чувствую, что уже близок.
Файл docker-compose.yml
работает с использованием docker-compose up
:
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
server:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
Я также могу push
свой код на github и CircleCI запустит мои автоматизированные тесты:
version: 2.1
orbs:
python: circleci/python@1.2
workflows:
main:
jobs:
- build-and-test
- deploy
jobs:
build-and-test:
docker:
- image: cimg/python:3.8
- image: circleci/postgres:9.6.2-alpine
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: example
POSTGRES_DB: example
steps:
- checkout
- python/install-packages:
pkg-manager: pip
- run: sudo chown -R circleci:circleci /usr/local/bin
- restore_cache:
key: deps9-{{ .Branch }}-{{ checksum "requirements.txt" }}
- run:
name: Install Dependencies
command: |
pip install --user -r requirements.txt
- save_cache:
key: deps9-{{ .Branch }}-{{ checksum "requirements.txt" }}
paths:
- ".venv"
- "/usr/local/bin"
- "/usr/local/lib/python3.6/site-packages"
- run:
name: Run tests
command: python manage.py test
- store_test_results:
path: test-results
- store_artifacts:
path: test-results
destination: tr1
deploy:
docker:
- image: circleci/python:3.7.3
working_directory: ~/app
steps:
- checkout
- run:
name: Deploy
command: |
echo "Beep Beep"
Теперь мне нужно переместить/вытащить мои докеризированные приложения на сервер Linode, и я не уверен, как это сделать. Должен ли я пытаться использовать rsync
так же, как я вручную проталкивал свой код? Что я должен толкать? Я полагаю, что поскольку CircleCI инициализирует push/pull, я должен подталкивать образы на сервер и запускать docker-compose
там?
И последнее, все учебники, которые я вижу, помещают свои переменные env в файл docker-compose.yml - это безопасно? Это кажется очень небезопасным...
Я давно так не терялся, так что за советы буду благодарен!