diff --git a/.woodpecker.yml b/.woodpecker.yml index 1b343f0..d7d6c83 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -4,7 +4,7 @@ pipeline: commands: - echo -n "${CI_COMMIT_BRANCH//\//-}-${CI_COMMIT_SHA:0:8}, latest" > .tags when: - path: [ "frontend/**", "backend/**" ] + path: [ "frontend/**", "backend/**", "proxy/**" ] event: push @@ -45,4 +45,22 @@ pipeline: path: "frontend/**" event: push + # -------------------------------------- Frontend -------------------------------------- + build_proxy: + image: woodpeckerci/plugin-docker-buildx + settings: + repo: + from_secret: repository_proxy + username: + from_secret: registry_username + password: + from_secret: registry_password + registry: + from_secret: registry + dockerfile: Dockerfile.Proxy + platforms: linux/amd64 + when: + path: "proxy/**" + event: push + branches: main diff --git a/Dockerfile.Proxy b/Dockerfile.Proxy new file mode 100644 index 0000000..851dee8 --- /dev/null +++ b/Dockerfile.Proxy @@ -0,0 +1,24 @@ +# Base image +FROM nginx + +ENV DOMAIN=translator.dhbw.flokaiser.com +ENV EMAIL=inf20155@lehre.dhbw-stuttgart.de + +# Install necessary packages +RUN apt-get update && \ + apt-get install -y certbot python-certbot-nginx + +# Generate SSL certificates using Let's Encrypt +RUN certbot certonly --standalone --preferred-challenges http -d ${DOMAIN} -n -m ${EMAIL} --agree-tos --force-renewal && \ + ln -s /etc/letsencrypt/live/${DOMAIN}/fullchain.pem /etc/nginx/certs/cert.pem && \ + ln -s /etc/letsencrypt/live/${Domain}/privkey.pem /etc/nginx/certs/key.pem + +# Copy NGINX configuration file +COPY ./proxy/nginx.conf /etc/nginx/nginx.conf + +# Expose port 80 and 443 +EXPOSE 80 +EXPOSE 443 + +# Start NGINX +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/proxy/nginx.conf b/proxy/nginx.conf new file mode 100644 index 0000000..e19f6cb --- /dev/null +++ b/proxy/nginx.conf @@ -0,0 +1,42 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + # HTTPS server configuration + server { + listen 443 ssl; + server_name translator.dhbw.flokaiser.com; + + ssl_certificate /etc/nginx/certs/cert.pem; + ssl_certificate_key /etc/nginx/certs/key.pem; + + location / { + # Forward requests to port 80 + proxy_pass http://frontend:80/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + } + + location /api { + # Forward requests to port 80 + proxy_pass http://backend:80/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + } + } + + # HTTP server configuration + server { + listen 80; + server_name translator.dhbw.flokaiser.com; + + return 301 https://$server_name$request_uri; + } +} \ No newline at end of file