From f657241ae065d9f95273817bc0115069896b408e Mon Sep 17 00:00:00 2001 From: Bram Kelchtermans Date: Fri, 7 Jun 2024 21:54:31 +0200 Subject: [PATCH] react-dev-server --- Dockers/react-dev-server/.dockerignore | 1 + Dockers/react-dev-server/.gitignore | 2 + Dockers/react-dev-server/Dockerfile | 24 +++++++ Dockers/react-dev-server/docker-compose.yml | 14 +++++ Dockers/react-dev-server/entrypoint.sh | 70 +++++++++++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 Dockers/react-dev-server/.dockerignore create mode 100644 Dockers/react-dev-server/.gitignore create mode 100644 Dockers/react-dev-server/Dockerfile create mode 100644 Dockers/react-dev-server/docker-compose.yml create mode 100644 Dockers/react-dev-server/entrypoint.sh diff --git a/Dockers/react-dev-server/.dockerignore b/Dockers/react-dev-server/.dockerignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/Dockers/react-dev-server/.dockerignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Dockers/react-dev-server/.gitignore b/Dockers/react-dev-server/.gitignore new file mode 100644 index 0000000..e119533 --- /dev/null +++ b/Dockers/react-dev-server/.gitignore @@ -0,0 +1,2 @@ +id_rsa +id_rsa.pub \ No newline at end of file diff --git a/Dockers/react-dev-server/Dockerfile b/Dockers/react-dev-server/Dockerfile new file mode 100644 index 0000000..bf6d4ba --- /dev/null +++ b/Dockers/react-dev-server/Dockerfile @@ -0,0 +1,24 @@ +# Use an official Node.js runtime as a parent image +FROM node:20 + +# Set the working directory +WORKDIR /workspace + +# Install PM2 globally +RUN npm install -g pm2 + +# Install git, openssh-client, and openssh-server +RUN apt-get update && apt-get install -y git openssh-client openssh-server + +# Create a directory for the SSH keys +RUN mkdir -p /root/.ssh + +# Copy the entrypoint script into the container +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +# Expose ports +EXPOSE 3000 + +# Set the entrypoint +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/Dockers/react-dev-server/docker-compose.yml b/Dockers/react-dev-server/docker-compose.yml new file mode 100644 index 0000000..af7ebfd --- /dev/null +++ b/Dockers/react-dev-server/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.8' + +services: + react-app: + build: + context: . + dockerfile: Dockerfile + ports: + - "3000:3000" + volumes: + - ./id_rsa:/root/.ssh/id_rsa + environment: + REPO_URL: "ssh://git@gitea.bramkelchtermans.be:2222/Bram/comedy-kit-frontend.git" + command: ["/usr/local/bin/entrypoint.sh"] diff --git a/Dockers/react-dev-server/entrypoint.sh b/Dockers/react-dev-server/entrypoint.sh new file mode 100644 index 0000000..62640d3 --- /dev/null +++ b/Dockers/react-dev-server/entrypoint.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -e + +# Check if the required environment variables are set +if [ -z "$REPO_URL" ]; then + echo "Error: REPO_URL environment variable must be set." + exit 1 +fi + + +if [ -z "$SSH_PORT" ]; then + $SSH_PORT=22 +fi + + +# Check if the SSH key exists +if [ ! -f /root/.ssh/id_rsa ]; then + echo "Error: SSH private key not found at /root/.ssh/id_rsa" + exit 1 +fi + +# Ensure the SSH key has the correct permissions +chmod 600 /root/.ssh/id_rsa + +# Extract the domain from the REPO_URL +DOMAIN=$(echo $REPO_URL | awk -F'[@:]' '{print $2}') + +# Check if the repository directory already exists +if [ ! -d "/workspace/.git" ]; then + # Add the SSH configuration for the domain + echo "Host gitea.bramkelchtermans.be + HostName gitea.bramkelchtermans.be + IdentityFile /root/.ssh/id_rsa + StrictHostKeyChecking no + " >> /root/.ssh/config + # Clone the repository if it doesn't exist + git clone $REPO_URL /workspace +fi + +# Add the public SSH key to authorized_keys +if [ -f /root/.ssh/hostkey.pub ]; then + cat /root/.ssh/hostkey.pub >> /root/.ssh/authorized_keys +fi + +# Configure SSH server +echo "Port 2222" >> /etc/ssh/sshd_config +echo 'AllowTcpForwarding yes' >> /etc/ssh/sshd_config +echo 'AllowAgentForwarding yes' >> /etc/ssh/sshd_config +echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config + +# Start the SSH service +service ssh start + +# Change to the repository directory +cd /workspace + +# Install dependencies +yarn install + +# Copy the environment file to the repository's environments directory +if [ -f /environment/.dev.env ]; then + mkdir -p /workspace/environments + cp /environment/.dev.env /workspace/environments/.dev.env +else + echo "Error: Environment file not found at /environment/.dev.env" + exit 1 +fi + +# Start the application with pm2 +exec pm2-runtime "yarn start:dev"