Memisahkan Environment Vuejs

20 Januari 2020 • 2 menit untuk membaca artikel ini

Aku ada sebuah project yang dibuat menggunakan VueJs. Project ini akan dideploy dalam tiga environment:

  • Develop
  • Staging
  • Production

Untuk memudahkan itu, akan aku gunakan docker. Idenya sederhana, yaitu build docker image dengan tag sesuai environmentnya:

  • sianu/myapp:v1-develop
  • sianu/myapp:v1-staging
  • sianu/myapp:v1-production

Kenapa harus dipisah?. Hal itu disebabkan oleh API yang dipisah juga. Untuk setiap environment akan hit API yang berbeda:

  • Develop akan hit develop.sianu.com/api
  • Staging akan hit staging.sianu.com/api
  • Production akan hit production.sianu.com/api

Jika tidak dipisah, akan repot ngatur .env vuejs. Untungnya, vuejs memberi fasilitasi untuk hal begini. Si vue ini enak ngatur .env-nya. Jadi cukup bikin tiga file environment untuk app sianu:

  • .env.develop
  • .env.staging
  • .env.production

Masing-masing .env disii URI api yang sesuai. Dengan begitu, kita tinggal pass parameter ke command npm run build. Jadi untuk build masing-masing env adalah:

Build vue js dalm environment develop:

npm run build -- --mode develop

Build vue js dalm environment staging:

npm run build -- --mode staging

Build vue js dalm environment production:

npm run build -- --mode production

Setelah itu, aku siapkan Dockerfile untuk setiap environment:

  • Dockerfile-develop
  • Dockerfile-staging
  • Dockerfile-production

Isi dari Dockerfile-develop

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build -- --mode develop

FROM nginx:stable-alpine as production-stage
RUN apk --update --no-cache add curl
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost/ || exit 1
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Isi dari Dockerfile-staging

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build -- --mode staging

FROM nginx:stable-alpine as production-stage
RUN apk --update --no-cache add curl
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost/ || exit 1
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Isi dari Dockerfile-production

FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build -- --mode production

FROM nginx:stable-alpine as production-stage
RUN apk --update --no-cache add curl
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost/ || exit 1
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Untuk build docker image masing-masing environment:

Build docker image dengan environment develop:

docker build -t registry.private.com/sianu/myapp:v1-develop -f Dockerfile-develop .

Build docker image dengan environment staging:

docker build -t registry.private.com/sianu/myapp:v1-staging -f Dockerfile-staging .

Build docker image dengan environment production:

docker build -t registry.private.com/sianu/myapp:v1-production -f Dockerfile-production .

Selesai, sekarang aku punya tiga docker image app vuejs dengan environment yg berbeda-beda.

Cool~

Techvuejsdockerlinux

Sumarsono

System Administrator
Kembali ke atas

Log GNU Screen>>

<<Wireless Card RTL8723DE in Manjaro Linux