1.背景: 機械win10、フレームワークコードによってフロントエンドフレームワークコードジャンゴVUE FBIの後端部。
2.目的:TO ドッキングウィンドウコンテナcentos7システムサーバーの使用上のプロジェクトを展開。
3.オプション1:のみを使用し、ベースdockerfile徐々にビルド展開。
オプション2: 使用アプリケーションコン構成するために必要なすべてのサービス、キーの配置操作;
4.次のようにファイル構造が調製:プロジェクトコードDjangoの後端部を、フロントエンドビルドのコード2。
まず、スクリプトファイルの準備
プロジェクトの下のディレクトリtest_platformジャンゴ1. [:
- 修正する/Test_platform/settings.py必要DEBUG = Falseの情報漏洩を防ぐために、閉じられたデバッグであるためには、正式な環境を。
- DATABASES修正する必要/Test_platform/settings.py 「ホスト」:「DB」、コンテナ、同じネットワーク、船名を介して各アクセスのデータベースDBの名前と、
- DATABASES変更する必要/Test_platform/settings.py 「試験」:「名前」データベースDBの起動時に試験容器に指定したデータベース名を,;
- 新しい静的フォルダ====>で/test_platform/settings.py最後の行のSTATIC_ROOT = os.path.join(BASE_DIR、「静的」) ===>実行コマンドのpython manage.py collectstaticコレクトバックエンドの静的ファイルへ管理者、rest_framework、DRF-yasg === > 次のnginxのはdist / /静的に移行し、これらの3つのフォルダ。
2.nginxディレクトリのフロントエンドエンジニアリング:
- webstorm VUE修正フレームフロントエンドコードpulic / index.htmlを:増加
< メタHTTP-当量= "コンテンツセキュリティポリシー" コンテンツ= "IMG SRC- '自己'データ:; スタイル-srcの'自己' '危険なインライン' at.alicdn.com fonts.googleapis.com; フォント-SRC '自己' '危険なインライン' at.alicdn.com fonts.gstatic.comデータ:; デフォルト-srcの'自己' 120.26.53.205:*;」># 120.26.53.205为云服务器地址
- webstorm VUEフレームフロントエンドのコードを変更するのsrc / API / api.js:
// ましょうホスト= 'http://127.0.0.1:8000'; ホストをしましょう= 'http://120.26.53.205:8000';
- 修正後は、プロジェクトのルートディレクトリpackage.jsonに、「ビルド」をクリックしてください:左に「VUE-CLI-サービスビルド」の操作ボタン、またはパッケージにコマンドラインNPMの実行bulidを使用し、完了後にdistのフォルダを生成するためのパッケージ、次のnginxのディレクトリにこのフォルダをコピーします。
dockerfile展開二つ、
ジャンゴ下dockerfile:
FROM python:3-alpine LABEL maintainer='[email protected]' LABEL description='Deploying Django project' WORKDIR /usr/src/app COPY ./test_platform ./test_platform/ COPY ./gunicorn_config.py ./configs/ COPY ./docker-entrypoint.sh /entrypoint.sh WORKDIR test_platform/ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \ apk upgrade && \ apk add --allow-untrusted build-base mariadb-connector-c-dev curl iputils && \ apk update && apk upgrade && \ pip install --no-cache-dir -i https://pypi.douban.com/simple -r requirements.txt && \ pip install -i https://pypi.douban.com/simple gunicorn && \ apk add ca-certificates bash && \ rm -rf /var/cache/apk/* && \ chmod 777 /entrypoint.sh VOLUME /usr/src/app/logs/ VOLUME /usr/src/app/test_platform/ EXPOSE 8000 # CMD ["/usr/local/bin/gunicorn", "-c", "/usr/src/app/configs/gunicorn_config.py", "test_platform.wsgi"] ENTRYPOINT ["/entrypoint.sh"]
nginx下dockerfile:
FROM alpine-base:latest LABEL maintainer='[email protected]' LABEL description='Install nginx' ENV TERM dumb RUN apk add --update \ supervisor nginx && \ rm -rf /var/cache/apk/* && \ mkdir /tmp/nginx && \ mkdir -p /var/www/html && \ chown -R nginx:nginx /var/www/html COPY dist/ /var/www/html/ COPY configs/default.conf /etc/nginx/conf.d/ COPY configs/nginx.conf /etc/nginx/nginx.conf COPY configs/supervisord.conf /etc/supervisord.conf VOLUME /var/log/nginx/ EXPOSE 80 8000 443 CMD ["supervisord"]
通过命令行逐步部署:
-
创建django_app_net网络:docker network create django_app_net
-
启动mariadb容器:docker run --name db -v mysql_db:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test -d --network django_app_net mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-
构建nginx镜像: cd ./nginx docker build -t qqhub/test-nginx .
- 构建django_app镜像:cd ./django_app_docker docker build -t qqhub/test-django .
-
启动django_app容器:docker run --name django_app -v logs:/usr/src/app/logs/ -v django_code:/usr/src/app/test_platform/ --restart=always -d --network django_app_net qqhub/test-django
-
启动nginx容器: docker run --name web -v logs:/var/log/nginx/ -p 8866:80 -p 8000:8000 --restart=always -d --network django_app_net qqhub/test-nginx
- 向数据库导入数据:cd ./datas docker exec -i docker-platform_db_1 sh -c 'exec mysql -uroot -p"123456" -A test' < 01_tb_projects.sql
至此,部署完成,docker ps -a 查看一下各容器状态。如果碰到问题,尝试删除对应的容器、数据卷、镜像,重新构建并启动。
三、Compose方式部署
Compose 使用的三个步骤:
-
使用 Dockerfile 定义应用程序的环境。
-
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
-
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
# 指定版本信息 version: '3' # 指定服务(启动的容器) services: # 服务名: 项目根目录小写_当前指定的服务名_服务个数的序号 # deploydjango_db_1 db: # 指定镜像的名称 # 如果本地有这个镜像, 会直接使用, 如果没有, 会去Docker hub中pull到本地 image: mariadb # 覆盖默认的CMD, 指定在运行容器时,(docker run), 需要运行的命令或者参数 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 指定目录映射 volumes: - mysql_db:/var/lib/mysql - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime # 指定容器重启的策略 restart: always # 指定环境变量 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: test # ports: # - "13306:3306" django_app: # 指定容器的启动依赖,只有当db容器启动之后, 再启动 django_app 容器 depends_on: - db # 指定Dockerfile所在的路径 build: ./django # 指定构建的镜像名 image: qqhub/test-django restart: always volumes: - logs:/usr/src/app/logs/ - django_code:/usr/src/app/test_platform/ - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime web: depends_on: - django_app build: ./nginx image: qqhub/test-nginx restart: always # 端口映射 ports: - "8866:80" - "8000:8000" volumes: - logs:/var/log/nginx/ - web:/var/www/html/ - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime # 指定容器使用的数据卷 volumes: # deploydjango_mysql_d # 数据卷名为: 项目根目录小写_指定的数据卷名 mysql_db: django_code: logs: web:
进入docker-compose所在目录,执行命令:docker-compose up -d,即可等待部署完成。然后进入数据库容器,导入sql语句。
四、检验部署是否成功
浏览器访问120.26.53.205:8866,查看前端页面,访问120.26.53.205:8000/docs/,查看后端接口。均展示无误,使用正常,即部署成功。