Add CI/CD
This commit is contained in:
parent
894364ff90
commit
e6475bca37
84
.drone.yml
Normal file
84
.drone.yml
Normal file
@ -0,0 +1,84 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: build
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
steps:
|
||||
- name: tag-commit-hash
|
||||
image: alpine
|
||||
commands:
|
||||
- echo '${DRONE_COMMIT:0:8}' > .tags
|
||||
- name: tag-dev
|
||||
image: alpine
|
||||
when:
|
||||
branch:
|
||||
- dev
|
||||
commands:
|
||||
- sed -i '$s/$/,dev/' .tags
|
||||
- name: tag-latest
|
||||
image: alpine
|
||||
when:
|
||||
branch:
|
||||
- senpai
|
||||
commands:
|
||||
- sed -i '$s/$/,latest/' .tags
|
||||
- name: build-image
|
||||
image: plugins/docker
|
||||
settings:
|
||||
repo: c0ntroller/c0ntroller.de
|
||||
username:
|
||||
from_secret: docker_user
|
||||
password:
|
||||
from_secret: docker_token
|
||||
---
|
||||
kind: pipeline
|
||||
type: ssh
|
||||
name: deploy
|
||||
depends_on:
|
||||
- build
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
- dev
|
||||
event:
|
||||
- push
|
||||
server:
|
||||
host:
|
||||
from_secret: ssh_host
|
||||
user:
|
||||
from_secret: ssh_user
|
||||
ssh_key:
|
||||
from_secret: ssh_key
|
||||
steps:
|
||||
- name: deploy-dev
|
||||
when:
|
||||
branch:
|
||||
- dev
|
||||
environment:
|
||||
DOCKER_USER:
|
||||
from_secret: docker_user
|
||||
DOCKER_PASS:
|
||||
from_secret: docker_token
|
||||
IMAGE: c0ntroller/c0ntroller.de:dev
|
||||
commands:
|
||||
- docker login -u $${DOCKER_USER} -p $${DOCKER_PASS}
|
||||
- docker-compose -p website-dev -f docker-compose.dev.yml rm -s -v -f
|
||||
- docker rmi $${IMAGE}
|
||||
- docker pull $${IMAGE}
|
||||
- docker-compose -p website-dev -f docker-compose.dev.yml up --no-build -d
|
||||
- name: deploy-stable
|
||||
when:
|
||||
branch:
|
||||
- main
|
||||
environment:
|
||||
DOCKER_USER:
|
||||
from_secret: docker_user
|
||||
DOCKER_PASS:
|
||||
from_secret: docker_token
|
||||
commands:
|
||||
- docker login -u $${DOCKER_USER} -p $${DOCKER_PASS}
|
||||
- docker-compose -p website -f docker-compose.stable.yml rm -s -v -f
|
||||
- docker rmi $${IMAGE}
|
||||
- docker pull $${IMAGE}
|
||||
- docker-compose -p website -f docker-compose.stable.yml up --no-build -d
|
39
Dockerfile
Normal file
39
Dockerfile
Normal file
@ -0,0 +1,39 @@
|
||||
# From https://nextjs.org/docs/deployment
|
||||
|
||||
# Rebuild the source code only when needed
|
||||
FROM node:alpine AS builder
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# Production image, copy all the files and run next
|
||||
FROM node:alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV production
|
||||
|
||||
RUN addgroup -g 1001 -S nodejs
|
||||
RUN adduser -S nextjs -u 1001
|
||||
|
||||
# You only need to copy next.config.js if you are NOT using the default configuration
|
||||
# COPY --from=builder /app/next.config.js ./
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
COPY --from=builder /app/package.json ./package.json
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT 3000
|
||||
|
||||
# Next.js collects completely anonymous telemetry data about general usage.
|
||||
# Learn more here: https://nextjs.org/telemetry
|
||||
# Uncomment the following line in case you want to disable telemetry.
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
CMD ["node_modules/.bin/next", "start"]
|
25
docker-compose.dev.yml
Normal file
25
docker-compose.dev.yml
Normal file
@ -0,0 +1,25 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
server:
|
||||
image: c0ntroller/c0ntroller.de:dev
|
||||
restart: always
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=traefik"
|
||||
- "traefik.http.routers.website-dev.entrypoints=web"
|
||||
- "traefik.http.routers.website-dev.rule=Host(`dev.c0ntroller.de`)"
|
||||
- "traefik.http.routers.website-dev.middlewares=http-to-https@file"
|
||||
- "traefik.http.routers.website-dev-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.website-dev-secure.rule=Host(`dev.c0ntroller.de`)"
|
||||
- "traefik.http.routers.website-dev-secure.middlewares=secHeaders@file"
|
||||
- "traefik.http.routers.website-dev-secure.tls=true"
|
||||
- "traefik.http.routers.website-dev-secure.tls.certresolver=le"
|
||||
- "traefik.http.routers.website-dev-secure.service=website-dev"
|
||||
- "traefik.http.services.website-dev.loadbalancer.server.port=3000"
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
25
docker-compose.stable.yml
Normal file
25
docker-compose.stable.yml
Normal file
@ -0,0 +1,25 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
server:
|
||||
image: c0ntroller/c0ntroller.de:stable
|
||||
restart: always
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=traefik"
|
||||
- "traefik.http.routers.website-stable.entrypoints=web"
|
||||
- "traefik.http.routers.website-stable.rule=Host(`c0ntroller.de`)"
|
||||
- "traefik.http.routers.website-stable.middlewares=http-to-https@file"
|
||||
- "traefik.http.routers.website-stable-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.website-stable-secure.rule=Host(`c0ntroller.de`)"
|
||||
- "traefik.http.routers.website-stable-secure.middlewares=secHeaders@file"
|
||||
- "traefik.http.routers.website-stable-secure.tls=true"
|
||||
- "traefik.http.routers.website-stable-secure.tls.certresolver=le"
|
||||
- "traefik.http.routers.website-stable-secure.service=website-stable"
|
||||
- "traefik.http.services.website-stable.loadbalancer.server.port=3000"
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
Loading…
Reference in New Issue
Block a user