diff --git a/.env.development b/.env.development new file mode 100644 index 0000000000000000000000000000000000000000..ec8a1f535f75b3bf780ea795124c60940b9f2e7d --- /dev/null +++ b/.env.development @@ -0,0 +1 @@ +VITE_APP_API_URL=http://localhost:8080 \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000000000000000000000000000000000000..4f7a45a51fe6a01d024e88de7c6bdeae3bda7c61 --- /dev/null +++ b/.env.production @@ -0,0 +1 @@ +VITE_APP_API_URL=http://backend:8080 \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 15f8cb88f85dce50bd57b63701defaf3edcbc4d6..90070224797236dfe126967705c3ab18fd9c8edb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,8 @@ image: node:alpine # Much smaller than other variants, faster and more resource effective +variables: + DOCKER_TLS_CERTDIR: "" + cache: key: "${CI_COMMIT_REF_SLUG}" # Branch-specific cache keys to have separate caches across branches. paths: @@ -11,24 +14,16 @@ stages: - build - test - lint + - docker_build_and_push + - deploy_docker install_dependencies: stage: install script: - npm ci - cache: - key: ${CI_COMMIT_REF_SLUG} - paths: - - node_modules/ - policy: push build_project: stage: build - cache: - key: "${CI_COMMIT_REF_SLUG}" - paths: - - node_modules/ - policy: pull script: - npm ci - npm run build @@ -40,7 +35,7 @@ vitest_unit-tests: cache: key: ${CI_COMMIT_REF_SLUG} paths: - - node_modules/ + - node_modules/ policy: pull script: - npm ci @@ -53,18 +48,37 @@ eslint_run-lint: cache: key: ${CI_COMMIT_REF_SLUG} paths: - - node_modules/ + - node_modules/ policy: pull script: - npm ci - npm run lint dependencies: - install_dependencies - allow_failure: true - - - - + allow_failure: true +docker_build_and_push: + stage: docker_build_and_push + image: docker:latest + services: + - docker:dind + tags: + - dind + script: + - docker login -u $DOCKER_USER -p $DOCKER_PAT registry.gitlab.com + - docker build -t registry.gitlab.com/$DOCKER_USER/sparesti-registry:frontend . + - docker push registry.gitlab.com/$DOCKER_USER/sparesti-registry:frontend + when: manual - +deploy_docker: + stage: deploy_docker + image: ubuntu:latest + dependencies: + - docker_build_and_push + before_script: + - apt-get -yq update + - apt-get -yqq install ssh + - apt-get install sshpass + script: + - sshpass -p sParest1en ssh -v -o StrictHostKeyChecking=no root@128.199.53.153 "docker rm -f frontend || true; docker pull registry.gitlab.com/$DOCKER_USER/sparesti-registry:frontend && docker run -d -p 81:80 --name frontend registry.gitlab.com/$DOCKER_USER/sparesti-registry:frontend" + when: manual \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..25e704e6b5e39ddf6e9bad10be34a476701dd47f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# Step 1: Build your Vue application +FROM node:16.10.0-alpine3.13 as build-stage +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# Step 2: Setup the server with Nginx +FROM nginx:stable-alpine as production-stage +COPY --from=build-stage /app/dist /usr/share/nginx/html +COPY web/nginx.conf /etc/nginx/nginx.conf +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index d80fae0b5000eaab01e06674f5084b3da957048d..3e11f067af7be7944457f7bc96e765d8abdf0dea 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,8 @@ <script setup lang="ts"> import { RouterView } from 'vue-router' import ErrorBoundaryCatcher from '@/components/Exceptions/ErrorBoundaryCatcher.vue'; +let apiUrl = import.meta.env.VITE_APP_API_URL; +console.log("apiUrl: ", apiUrl); </script> <template> diff --git a/src/api/core/OpenAPI.ts b/src/api/core/OpenAPI.ts index 213c15d4a7b840e8d13a35f74c2618c13b7c9398..b33daf25d0e3518d35dc91aac288e991b8a7c160 100644 --- a/src/api/core/OpenAPI.ts +++ b/src/api/core/OpenAPI.ts @@ -20,7 +20,7 @@ export type OpenAPIConfig = { }; export const OpenAPI: OpenAPIConfig = { - BASE: 'http://localhost:8080', + BASE: import.meta.env.VITE_APP_API_URL, VERSION: '3.0', WITH_CREDENTIALS: false, CREDENTIALS: 'include', diff --git a/vite.config.ts b/vite.config.ts index 36c61875691ce720ebf98971095b49d1f25f43a2..82dea2695f1eca5f72c9a8f00421521e7e245da4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,6 +6,9 @@ import vueJsx from '@vitejs/plugin-vue-jsx' // https://vitejs.dev/config/ export default defineConfig({ + server: { + port: 80, + }, plugins: [ vue(), vueJsx(), diff --git a/web/nginx-selfsigned.crt b/web/nginx-selfsigned.crt new file mode 100644 index 0000000000000000000000000000000000000000..31d6d00b731c68b0fdfa9b2fc8c6f6ec79e71ed7 --- /dev/null +++ b/web/nginx-selfsigned.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDYzCCAkugAwIBAgIUXKYKAuQxFdfKFhGqgi6mW6JWbxcwDQYJKoZIhvcNAQEL +BQAwQTELMAkGA1UEBhMCTk8xDzANBgNVBAgMBk5vcndheTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTI0MDUwMjIwMzA0OFoXDTI1MDUwMjIw +MzA0OFowQTELMAkGA1UEBhMCTk8xDzANBgNVBAgMBk5vcndheTEhMB8GA1UECgwY +SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA4IV2JIAiI9konh3CuNYgmnv9KDhYcjj+L/6YrFauiZjZs/2haW8c +pPLJP7NK/gzsuTqvewmh/3m8oIPxnwIJAPNq7Rf/UMeHHNRKt8KE/v+1hz6dAguy +Ua6XC8UjVLqjg8vsftecvYmn/Ypj35aN2omFNr7NpFCfpI/zhk8SKS24GleG4DQ7 +89GxjkJtbIHfuoCrs+0YxRPWCvDGM9a79UYXW0evvufh2xN6jM9BLsBvgc+vm231 +usO2KLI1g/o34iAW6IseLu9qaPhLo2YfyC4fXCpsCRaZLumHKMoo0zFP/DejRIXu +25sKJNSX3dyO2thbkKvaNJh29DO9WOtv9QIDAQABo1MwUTAdBgNVHQ4EFgQUKbhw +GAXog/z7Hkp3KOmSWxr8jm4wHwYDVR0jBBgwFoAUKbhwGAXog/z7Hkp3KOmSWxr8 +jm4wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxWd0Sdju0DEc +64W6TZq+4S7Rv/ZshcOPF4jWHgcLR2b9HP4cYPVMvuV5zNQi5wFp3A6oFR1JX6pd +gQ/J+t1EuFyfrn5ojoOm5f1oNeiMPmpfsSRSzwRTabUs9LHeyQzoBXipmhYdqEoH +SNv9aIQQ8e0in4uHFnvl1e8vrMb8Kl8ShcYmuYJ2FTIWERv482mrRB3pVMf+OFg0 +BtaQWgyU6CL1oysNH7X5t60uhjDc+D+gdSiaggzeP9tatMsJTeTam4GQbRkXuqLP +FcjSHq4amTzrXrxX+6hWsvT5i/qSUwlVkt608j5KKUrU8oHjjqMOu58tx1lQTqIs +dxpgMfpu7A== +-----END CERTIFICATE----- diff --git a/web/nginx-selfsigned.key b/web/nginx-selfsigned.key new file mode 100644 index 0000000000000000000000000000000000000000..c0192306417b2142ddafa7c260e1c10ac98ace19 --- /dev/null +++ b/web/nginx-selfsigned.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDghXYkgCIj2Sie +HcK41iCae/0oOFhyOP4v/pisVq6JmNmz/aFpbxyk8sk/s0r+DOy5Oq97CaH/ebyg +g/GfAgkA82rtF/9Qx4cc1Eq3woT+/7WHPp0CC7JRrpcLxSNUuqODy+x+15y9iaf9 +imPflo3aiYU2vs2kUJ+kj/OGTxIpLbgaV4bgNDvz0bGOQm1sgd+6gKuz7RjFE9YK +8MYz1rv1RhdbR6++5+HbE3qMz0EuwG+Bz6+bbfW6w7YosjWD+jfiIBboix4u72po ++EujZh/ILh9cKmwJFpku6YcoyijTMU/8N6NEhe7bmwok1Jfd3I7a2FuQq9o0mHb0 +M71Y62/1AgMBAAECggEASqCh2dULQ/4g7Zl3yUdHNAIlbfJ4l5LRDnPiHFp9jjfT +mOujdK+dhkg602UNdq8mGhVjEZLsmUXGCFaC//bFtl6yeldBIoEHrHH12emamkW1 +eVw7BNyNa3AMPbnLmhSlWB/2nlydeTShtXkD5GQfB3YxZLZ8FPNFdQXyDIEIyM2N +m6yKx9LLBXf3bcppr4L/ELY+j6XsxYNcL7U6D772qSxJ06riAEMd4A+oYUeP/7Y9 +233soqxaioUUQAH/C6wedHSzgZEx+6+9wFG3M395kRB9PcTNI0w1+hGyqgwz28lJ +CzronzBlAsSb33zJ0IgTXFGZM1qj4nsJT7RoM5AuSwKBgQD07PTVOsvBIojuDuwG +lUxD2tvnrSqEXy8YLyJnsTF8jHRFjYJl7AFkrnIFeE31A1ffQTybY+4eewiCEUuC +7gcnlRvkm6sPd1SUXJjDAGP9qKW2rlWolBhmoozvBztxQGhmkMoGazV/sp1ScUAF +gKgLRlvV1FOeK/Zo9c19VMPrbwKBgQDqrFK5NcrhlfdRSc8W3Pu/NyC6iDPqw6lK +rqTnqBrQ4VHJh+iJXAD7dZq8Yty/mbpHwdfnNJdEFHh+8eFFPjZ+x9i7a22Xn6nQ +lrxkXJUS52MOslrp8ZVuT1NXuicwVlMrnNiQSmvX6+oaEJD3WGrfyx88FJ2solyv +WhkKWdt42wKBgBYKxTXzZqbo/r295gvpn8VzitrcwLjNACYDB+uhDL0SvtwLkjKt +/Koc8PIBE7L7LAtRiazKX4GqvOdHuy37UfWD+9ClGc34hUoc0zqpbFZFuTQpmFfl +jBSgiGJymizlCQBCA4x0VYo6fuIOgx57p6PsHxOtWiEf/7sOdAHVgRRNAoGBAI/s +CXvfOsLpF1m6O5CZDKgz5hWgLL8BKpVL0ITmezO5zFAd0wZS76NIeBKrSxkS7cTO +ZFw+y7qMF247Z93wjrloVUp0Uy0XVa1AlN+0TBTg5caAqfMqH2wcqE94MkqZ1r47 +njG4ArXU0KkVmeKoTjtcNpbBSgYzOUatqgfIHirbAoGAC2tUjjLJfM1S7TDU/XmO +SnEaGegsI48DpyNM/5W8QPWsVkGPq8pV4K4/Ogz2GfbEuHBaV9hjtf9LpHjQN9dp +NuTWZd31mQL/fbauXnLO5qmCCGgxnZ8HQ6VX7ns2IavpzwCPxa7lWhQsay/VpYMQ +UstmKmv675SAHtiyFp/AUJ8= +-----END PRIVATE KEY----- diff --git a/web/nginx.conf b/web/nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..f6b768301ef88d330ae4c88f208a92acc071dafb --- /dev/null +++ b/web/nginx.conf @@ -0,0 +1,22 @@ +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + + server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + } + } +} \ No newline at end of file