当前位置: 首页 > news >正文

Docker-Compose一键部署项目

Docker-Compose一键部署项目

目录

  • Docker-Compose一键部署项目
    • 介绍
    • 部署Django项目
      • 项目目录结构
    • docker-compose.yml
    • nginx的default.conf文件
    • 后端Dockerfile文件
    • mysql.env
    • 一键部署
    • DNS域名解析引起的跨域问题

介绍

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过使用 YAML 文件来配置应用程序的服务,从而简化了容器的管理和部署

部署Django项目

项目目录结构

-Terminal_API # 项目根目录

​ -dist # 前端Vue整合

​ -docker_compose_files # 容器的配置文件

​ -mysql

​ -nginx

​ -default.conf # nginx的默认配置文件

​ -terminal # 项目

​ -Dockerfile # 后端Dockerfile文件

​ -.gitignore # git的忽略文件

​ -docker-compose.yml # docker-compose的配置文件

​ -mysql.env # mysql的配置文件

docker-compose.yml

version: "3"services:nginx:image: nginx  # 指定容器container_name: terminal_nginx  # 为将要生成的容器取名ports:# 绑定端口,左边宿主机右边容器- "8080:8080"- "8000:8000"restart: always # 容器的重启策略,确保容器在停止或崩溃时总是重启volumes:# 挂载,类似-v- ./dist:/var/www/html- ./docker_compose_files/nginx:/etc/nginx/conf.ddepends_on:- djangonetworks:- webdjango:build:context: ./terminal  # 指定Dockerfile所在目录dockerfile: Dockerfilecontainer_name: terminal_django
#    command: python manage_pro.py makemigrations && python manage_pro.py migrate && uwsgi ./luffy.inirestart: alwaysports:- "8001:8001"volumes:- ./terminal:/appenvironment:- TZ=Asia/Shanghaidepends_on:- mysqlnetworks:- webmysql:image: mysql:latestcontainer_name: terminal_mysqlrestart: alwaysports:- "3308:3306"env_file:- ./mysql.envvolumes:- ./docker_compose_files/mysql/data:/var/lib/mysql- ./docker_compose_files/mysql/logs:/var/log/mysql- ./docker_compose_files/mysql/conf:/etc/mysql/conf.dnetworks:- webnetworks:web:

nginx的default.conf文件

server {listen 8080;server_name  127.0.0.1;charset utf-8;location / {root /var/www/html;index index.html;try_files $uri $uri/ /index.html; # 解决单页面应用刷新404问题}
}server {listen 8000;server_name  127.0.0.1;add_header 'Access-Control-Allow-Origin' '*';location / {if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Max-Age' 1728000;return 204;}proxy_pass http://terminal_django:8001;# 其他proxy_set_header指令...}
}

后端Dockerfile文件

# 使用官方Python镜像作为基础镜像
FROM python:3.10# 设置工作目录
WORKDIR /app## 将当前目录下的代码复制到容器的/app目录下
COPY .. /app# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 暴露端口
EXPOSE 8001# 运行Django应用
CMD ["python", "manage.py", "runserver", "0.0.0.0:8001"]

mysql.env

MYSQL_ROOT_PASSWORD=7997
MYSQL_DATABASE=terminal
TZ=Asia/Shanghai

一般来说部署的数据库HOST要换成容器名,也可以是服务名

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'terminal','HOST': 'mysql','PORT': '3306','USER': 'root','PASSWORD': '7997',}
}

一键部署

必须在docker-compose.yml所在目录下运行docker-compose up指令

image-20240628102750196

如果上线的是服务器,需要去把安全组打开

DNS域名解析引起的跨域问题

域名解析本身不会引起跨域问题,但是如果前端axios访问的地址写成你网站的域名,那么就可能会引起跨域问题,这取决于网站后端的策略,如果要访问不同的容器端口,那么前端axios最好全部换成服务器IP

// 推荐
const BASE_URL = 'http://111.231.28.207:8001/'// 不推荐
const BASE_URL = 'http://www.abv.com:8001/'
址写成你网站的域名,那么就可能会引起跨域问题,这取决于网站后端的策略,如果要访问不同的容器端口,那么前端axios最好全部换成服务器IP```js
// 推荐
const BASE_URL = 'http://111.231.28.207:8001/'// 不推荐
const BASE_URL = 'http://www.abv.com:8001/'
http://www.lryc.cn/news/385555.html

相关文章:

  • 【C++】相机标定源码笔记-线激光点云处理工具类
  • 解决Transformer根本缺陷,所有大模型都能获得巨大改进
  • 如何排查Java应用的死锁
  • JS面试题1
  • Linux网络 - 再谈、详谈UDP和TCP协议
  • el-form重置后input无法输入问题
  • Java网络编程(JavaWeb的基础)
  • 鸿蒙Harmony开发实战案例:使用OpenGL绘制3D图形
  • DM达梦数据库存储过程
  • 【python】OpenCV—Color Correction
  • Java基础知识整理笔记
  • 知识图谱——Neo4j数据库实战
  • 第十一次Javaweb作业
  • 人工智能AI风口已开:如何赋予UI设计与视频剪辑新生命
  • 计算机专业课面试常见问题-编程语言篇
  • CSS|05 继承性与优先级
  • KVM性能优化之内存优化(宿主机)
  • 【Linux杂货铺】Linux学习之路:期末总结篇1
  • GPT-5的到来:智能飞跃与未来畅想
  • gin中间件
  • swagger常用注解
  • 【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric
  • 命令模式(Command Pattern)
  • 掌握Symfony的模板继承:构建强大且灵活的Web界面
  • uboot基本使用网络命令和从服务器端下载linux内核启动
  • 解决ArcGIS导出的svg格式的图片插入Word后的字体问题
  • 如何确保 Puppet 配置在复杂网络环境中的可靠分发和同步?
  • 2024最新!将mysql的数据导入到Solr
  • Python数据分析第二课:conda的基础命令
  • LayoutInflater加载流程