文章目录

  • 1. springboot应用
  • 本地启动
  • docker部署
  • 2. python 应用
  • 本地启动
  • dockerfile
  • docker 多环境启动



   作为一个开发人员,我们至少会接触到两种环境或三种,比如我们需要先在开发环境上开发测试功能,开发完毕后,同步到测试环境,测试环境通过后,再发布到线上环境,也就是正式环境或生产环境,我们怎样去区分多个环境和用好多个环境呢? 一般遵守下面2个原则:

  • 不同环境的配置是不相同的,比如测试环境使用的redis服务器是192.168.111.110, 正式环境用的是 192.168.123.110, 此处打个比方,并不是真实的ip。
  • 不同环境的代码应该隔离, 比如dev环境的代码放到git的dev分支上,pro环境的代码放到master分支上,这样做的好处是避免环境代码污染。

   现在比较流行的两大语言java和python, 下文将解释如何区分java和python多个环境。

1. springboot应用

   springboot应用,可以直接通过application.yml文件名的application后缀来区分开发、测试和生产的配置。

   在resource 文件夹下添加 application-dev.yml , application-uat.yml,application-prod.yml等,每个配置对应一个环境。

docker部署多个springcloud docker部署多个python项目_发布python应用

本地启动

   在Active Profiles里添加后缀即可。

docker部署多个springcloud docker部署多个python项目_docker 发布多个应用环境_02

docker部署

通过 -e 参数在run的时候指定profile:

SPRING_PROFILES_ACTIVE=prod

例如:
docker run --name my-shop -d -p 8001:8080 -e SPRING_DATASOURCE_PASSWORD=**** -e SPRING_DATA_ELASTICSEARCH_CLUSTER-NODES=116.62.146.90:9300 -e SPRING_PROFILES_ACTIVE=prod -e SPRING_RABBITMQ_HOST=172.17.0.6 116.62.146.90/my-shop/my-shop:0.0.8-SNAPSHOT
   注: 我们可以通过 -e 参数注入 yml配置文件里的任意属性,想当于覆盖配置, -e 后接的参数用 “_” 拼接。

2. python 应用

   将主配置settings文件复制出来多份,分别修改成pro,local等,settings.py可作为测试环境的配置,如下:

docker部署多个springcloud docker部署多个python项目_怎么区分不同环境_03

本地启动

在parameters里添加启动参数:

runserver 8006  --setting=my_site.settings

docker部署多个springcloud docker部署多个python项目_发布python应用_04


   那么python应用怎么区分线上环境呢?

dockerfile

FROM python:3.7
ADD . /usr/local/myapp/school_education_saas
WORKDIR /usr/local/myapp/school_education_saas
RUN pip install -i https://pypi.douban.com/simple --trust -host=pypi.douban.com -r requirements.txt
ENV PORT=8006 PROFILE=school_edu_prj.settings
EXPOSE $PORT
CMD sh start.sh

在runserver的时候通过变量来设置端口和配置文件, 命令脚本:

python manage.py makemigrations --merge
python manage.py makemigrations
python manage.py migrate
python manage.py runserver 0.0.0.0:$PORT --setting=$PROFILE

docker 多环境启动

   我们可以借助docker 容器的环境变量,在run的时候将port和settings注入到容器里,这样我们可以在本地把不同环境的配置文件配好,下面解释如何启动不同环境的实例。
  例如, dev环境, 我们使用8006端口,配置使用 settings.py文件,prod环境,我们使用8007端口,配置使用prosettings.py文件。
   dev 环境启动命令: docker run --name my_site --env PORT=8006 --env PROFILE=school_edu_prj.settings -d -p 8006:8006 my_site

   pro 环境启动命令: docker run --name my_site --env PORT=8007 --env PROFILE=school_edu_prj.prosettings -d -p 8007:8007 my_site