CICD Django GitLab

djangoアプリをdocker-composeで構築して、Gitlab-CI/CDでデプロイする手順

2023年11月21日

一般的なdjangoアプリをGitlab-CI/CDでデプロイする手順

目的:

  • 一般的なdjangoアプリをGitlab-CI/CDでデプロイすること

環境:

  • デプロイ元サーバ(Ubuntu、Gitlab-CICD構築済)
  • デプロイ先のホスト(Ubuntu、docker-compose環境構築済)

djangoアプリを構築する

割愛

Ubuntu上で直接django-appを起動可能であること


$ pwd
/home/admin/django-app

$ python3 -m venv venv
$ source venv/bin/activate
$ cd venv
$ pip3 install django
$ pip3 list | grep django
※installされていること
$ cd ../
$ ls -la
合計 168
drwxrwxr-x  5 admin admin   4096 10月 30 10:59 .
drwxr-x--- 63 admin admin   4096 10月 30 10:12 ..
drwxrwxr-x  3 admin admin   4096  5月 31 15:03 .idea
-rw-r--r--  1 admin admin 131072 10月 30 10:59 db.sqlite3
drwxrwxr-x  3 admin admin   4096  2月  6  2023 django_app
-rw-r--r--  1 admin admin    103  7月  5 11:57 django_app.nginx
-rw-r--r--  1 admin admin    664  2月  1  2023 django_app_params
-rwxrwxr-x  1 admin admin    666  2月  6  2023 manage.py
-rwxrwxr-x  1 admin admin    351  7月 14 15:53 os.sched_setaffinity.py
drwxrwxr-x  5 admin admin   4096  2月  1  2023 venv

$ python3 manage.py runserver
※正常に起動すること

Gitlabでdjangoアプリのプロジェクト作成

事前にGitlabのGUI上で、djangoアプリ用の空プロジェクトを作成しておく

作業端末にクローンして、初期コミット


$ git clone http://192.168.1.1:2080/root/django-app.git
$ cd django-app/
$ vi .gitignore
----
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
----

$ git status
$ git add .
$ git commit -m "Initial commit"
$ git push origin master

djangoアプリをdocker-composeで起動可能にする

developブランチを作成する


$ git checkout -b develop

Dockerfileを作成する


FROM python:3.8
RUN pip3 install django
WORKDIR /app
COPY . .
※ホストOSのworkディレクトリ配下のファイルをすべて、コンテナ内の/app配下にコピーする
CMD ["python3","manage.py","runserver","0.0.0.0:8000"]

docker-compose.ymlを作成する


version: '3.7'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    image: djangoapp
    ports:
      - "8000:8000"
    volumes:
      - .:/app

デプロイ元で、docker-composeから起動可能であることを確認する


$ docker-compose up -d

Gitlabに更新分をpushしておく

Gitlab-CI/CDの設定を行う

左メニュー > Settings > CI/CD へ移動

GitlabのGUI設定

Runnerを有効化
  • Available specific runners > Enable for this projectをクリック
Variables
  • Add Variableをクリックすると設定画面が開く
  • Key:SSH_PRIVATE_KEY ※gitlab-ci.ymlのscript内の環境変数名と一致させる
  • Value:デプロイ元の~/.ssh/id_rsaの内容をペースト
  • Flags:Protect variableのチェックを外す
  • Update variable
.gitlab-ci.ymlを作成する

variables:
  GROUPNAME: "localhost"
  SYSTEM_NAME: "django-app"
  DEPLOY_HOST: "9.7"
  ADMINUSER: "admin"

stages:
  - build-container

build-container:
  stage: build-container
  tags:
    - build-production-container
  script:
    - set -x
    - apk add bash rsync
    - 'command -v ssh-agent >/dev/null || ( apt update -y && apt install openssh-client -y )'
    - eval $(ssh-agent -s )
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - ssh -o StrictHostKeyChecking=no ${ADMINUSER}@${DEPLOY_HOST} "if [ ! -d ./${SYSTEM_NAME} ]; then mkdir ${SYSTEM_NAME}; fi"
    - rsync -av --delete -e "ssh -o 'StrictHostKeyChecking no'" ./* ${ADMINUSER}@${DEPLOY_HOST}:${SYSTEM_NAME}
    - ssh -o StrictHostKeyChecking=no ${ADMINUSER}@${DEPLOY_HOST} "cd ${SYSTEM_NAME}/; docker-compose -p django-app -f docker-compose.yml up -d"

以下の処理は除外している

  • requirements.txtからのパッケージのインストール
  • dockerリジトリへdockerイメージのpush&pull
  • unittest
  • ビルドステージ(直接、up -dでまとめてビルド)

正常性確認

Gitlabへ更新した内容をプッシュする

CI/CDが実行されて、デプロイサーバ上でdjangoアプリが起動すること

CATEGORIES & TAGS

CICD, Django, GitLab,

Author:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

カテゴリー

むるし

フリーランスのインフラ系エンジニア。
備忘録で色々書いていきます。
お問い合わせは↓
mo-gyu@murci.net
LPIC303 Security
%d人のブロガーが「いいね」をつけました。