diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..28c5a44 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,39 @@ +--- +kind: pipeline +type: docker +name: build + +steps: + - name: docker + image: plugins/docker + settings: + registry: docker.cybre.town + repo: docker.cybre.town/adb/iid-homework + tags: "latest" + username: + from_secret: docker_username + password: + from_secret: docker_password + +--- +kind: pipeline +type: docker +name: deploy + +depends_on: + - build + +steps: + - name: pull and deploy + image: appleboy/drone-ssh:linux-amd64 + settings: + host: + from_secret: ssh_host + username: + from_secret: ssh_user_name + key: + from_secret: ssh_private_key + script: | + cd /media/docker/ + docker compose -f docker-compose.prod.yml -p iid-homework pull -q + docker compose -f docker-compose.prod.yml -p iid-homework up -d diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b6fc3f5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:alpine AS builder + +COPY ./ /home/node/app + +WORKDIR /home/node/app + +RUN npm ci && npm run build + + +FROM nginx:alpine + +COPY ./nginx.conf /etc/nginx/nginx.conf +COPY --from=builder home/node/app/dist /var/www/html + +EXPOSE 8080 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..4d64ce3 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,18 @@ +version: '3' + +networks: + web: + external: true + +services: + frontend: + image: docker.cybre.town/adb/iid-homework + labels: + - "traefik.enable=true" + - "traefik.http.routers.iid-homework.rule=Host(`iid-homework.deploy.cat`)" + - "traefik.http.routers.iid-homework.entrypoints=https" + - "traefik.http.services.iid-homework.loadbalancer.server.port=8080" + - "traefik.http.routers.iid-homework.tls.certresolver=mytlschallenge" + - "traefik.docker.network=web" + networks: + - web diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..360f5b5 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,35 @@ +worker_processes auto; +worker_cpu_affinity auto; + +error_log /var/log/nginx/error.log; +pid /var/run/nginx.pid; + +#daemon off; +events { + worker_connections 1024; +} + +http { +# rewrite_log on; + include mime.types; + default_type application/json; + access_log /var/log/nginx/access.log; + sendfile on; +# tcp_nopush on; + keepalive_timeout 3; +# tcp_nodelay on; + gzip on; + client_max_body_size 1m; + + server { + listen 8080 default_server; + server_name _; + + location / { + index index.html; + root /var/www/html; + try_files $uri $uri/ /index.html;s + absolute_redirect off; + } + } +}