Openshift构建前端项目并配置nginx读取环境变量
一、 简介
Nginx代理后台接口地址,是将后台接口配置在配置文件nginx.conf文件中,但是nginx.conf文件无法直接使用“$”读取linux的环境变量,本次需求为在openshift中将前端代码需要的后代接口以环境变量的形式启动服务POD。
本次使用的方法是envsubst方式,以docker使用环境变量启动nginx和openshift制作S2I镜像为基础扩展,使用方法时,需先构建nodejs+nginx的S2I镜像
docker启动nginx使用环境变量可参考链接:
https://blog.csdn.net/weixin_44707404/article/details/106360770.
openshift制作nodejs+nginx的S2I镜像参考链接:
https://blog.csdn.net/weixin_44707404/article/details/106361290.
二、 准备docker-entrypoint.sh文件
vim docker-entrypoint.sh
#!/usr/bin/env sh
set -eu
envsubst '${JAVA_API_LOGIN_IP} ${JAVA_API_LOGIN_PORT} ${JAVA_SMS_IP} ${JAVA_SMS_PORT} ${HASURA_NGECC_IP} ${HASURA_NGECC_PORT} ${HASURA_XUNJIAN_IP} ${HASURA_XUNJIAN_PORT} ${HASURA_CACHE_IP} ${HASURA_CACHE_PORT} ${HASURA_MAIN_IP} ${HASURA_MAIN_PORT}' < /usr/local/nginx/nginx.conf.template > /usr/local/nginx/conf/nginx.conf
exec "$@"
修改权限为777:chmod 777 docker-entrypoint.sh
chmod 777 docker-entrypoint.sh
三、 准备nginx.conf.template文件
将nginx.conf文件拷贝为下来,名字为nginx.conf.template,并修改其中server模块内容(调用后台接口部分)为以下内容,并修改权限为777
cp nginx.conf nginx.conf.template
chmod 777 nginx.conf.template
vim nginx.conf.template
server {
listen 8080;
server_name localhost;
location / {
root /opt/app-root/src/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~/api/ {
proxy_pass http://${JAVA_API_LOGIN_IP}:${JAVA_API_LOGIN_PORT}/;
}
location ^~/sms/ {
proxy_pass http://${JAVA_SMS_IP}:${JAVA_SMS_PORT}/;
}
location ^~/ngecc/ {
proxy_pass http://${HASURA_NGECC_IP}:${HASURA_NGECC_PORT}/;
}
location ^~/xunjian/ {
proxy_pass http://${HASURA_XUNJIAN_IP}:${HASURA_XUNJIAN_PORT}/;
}
location ^~/cache/ {
proxy_pass http://${HASURA_CACHE_IP}:${HASURA_CACHE_PORT}/;
}
location ^~/main/ {
proxy_pass http://${HASURA_MAIN_IP}:${HASURA_MAIN_PORT}/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
四、 新增run_nginx文件
在s2i/bin目录下新增run_nginx文件
将run文件拷贝为run_nginx文件,并修改文件内容如下:
cp run run_nginx
vim run_nginx
#!/bin/bash -e
sh /docker-entrypoint.sh
bash -c "/usr/local/nginx/sbin/nginx -g 'daemon off;'"
五、 修改run文件
修改s2i/bin目录下run文件内容,文件内容为运行run_nginx文件,内容如下:
vim run
#!/bin/bash -e
#运行容器启动nginx服务,需要以下面内容作为启动容器命令,否则nginx服务将无法启动,容器秒停
#bash -c "/usr/local/nginx/sbin/nginx -g 'daemon off;'"
bash -c "sh /usr/libexec/s2i/run_nginx"
六、 修改Dockerfile文件内容
Dockerfile文件是在nodejs+nginx的S2I镜像基础上增加以下内容
vim Dockerfile
………….省略部分
ENV NODEJS_VERSION=13.2 \
NGINX_VERSION=1.16.1 \
JAVA_API_LOGIN_IP=127.0.0.1 \
JAVA_API_LOGIN_PORT=8080 \
JAVA_SMS_IP=127.0.0.1 \
JAVA_SMS_PORT=8080 \
HASURA_NGECC_IP=127.0.0.1 \
HASURA_NGECC_PORT=8080 \
HASURA_XUNJIAN_IP=127.0.0.1 \
HASURA_XUNJIAN_PORT=8080 \
HASURA_CACHE_IP=127.0.0.1 \
HASURA_CACHE_PORT=8080 \
HASURA_MAIN_IP=127.0.0.1 \
HASURA_MAIN_PORT=8080
………….省略部分
COPY ./docker-entrypoint.sh /
COPY ./nginx.conf.template /usr/local/nginx/nginx.conf.template
USER 1001
#映射端口
EXPOSE 8080
七、 修改makefile文件
修改构建镜像的名称为nodejs-nginx-s2i-env
vim Makefile
IMAGE_NAME = nodejs-nginx-s2i-env
………….省略部分
八、 构建镜像
在Makefile文件目录下执行make,构建成功后,将镜像推送至openshft内部私有镜像仓库
make
docker tag nodejs-nginx-s2i-env:latest 172.30.30.187:5000/openshift/s2i-nodejs-nginx-env;docker tag nodejs-nginx-s2i-env:latest docker-registry.default.svc:5000/openshift/s2i-nodejs-nginx-env
docker push 172.30.30.187:5000/openshift/s2i-nodejs-nginx-env;docker push docker-registry.default.svc:5000/openshift/s2i-nodejs-nginx-env
九、使用环境变量