文章目录
- 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等,每个配置对应一个环境。
本地启动
在Active Profiles里添加后缀即可。
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可作为测试环境的配置,如下:
本地启动
在parameters里添加启动参数:
runserver 8006 --setting=my_site.settings
那么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