From 4a60373e2db3bd9c092875f47e1235d1ee370b05 Mon Sep 17 00:00:00 2001 From: Jet Li Date: Thu, 12 Dec 2024 05:39:39 +0000 Subject: [PATCH] Initial check-in for all existing scripts, launch.sh, init_devbox.sh, etc. --- devbox/devbox.local/.acr_token | 1 + devbox/devbox.local/.dev.env | 19 ++ devbox/devbox.local/Dockerfile | 96 ++++++++ devbox/devbox.local/README.md | 72 ++++++ devbox/devbox.local/acr_login.sh | 5 + devbox/devbox.local/authorized_keys | 1 + devbox/devbox.local/build-devbox.jenkinsfile | 66 ++++++ devbox/devbox.local/destroy.sh | 20 ++ .../docker-compose.dev.arm64.new.yaml | 221 ++++++++++++++++++ .../docker-compose.dev.arm64.yaml | 221 ++++++++++++++++++ devbox/devbox.local/docker-compose.dev.yaml | 85 +++++++ devbox/devbox.local/entrypoint.sh | 11 + devbox/devbox.local/entrypoint_restore.sh | 18 ++ devbox/devbox.local/gitea_data_backup.tar.gz | Bin 0 -> 46922 bytes devbox/devbox.local/image-1.png | Bin 0 -> 7588 bytes devbox/devbox.local/image.png | Bin 0 -> 15286 bytes devbox/devbox.local/init_devbox.sh | 78 +++++++ devbox/devbox.local/launch.sh | 45 ++++ devbox/devbox.local/requirements.txt | 29 +++ devbox/devbox.local/restore.sh | 28 +++ devbox/devbox.local/start_all_svc.sh | 6 + devbox/devbox.local/start_backend.sh | 11 + devbox/devbox.local/start_frontend.sh | 13 ++ devbox/devbox.local/start_frontend_cn.sh | 13 ++ devbox/devbox.local/stop.sh | 11 + devbox/devbox.local/stop_all_svc.sh | 6 + devbox/devbox.remote/.dev.env | 24 ++ devbox/devbox.remote/Dockerfile | 76 ++++++ devbox/devbox.remote/gitea_data_backup.tar.gz | Bin 0 -> 46922 bytes devbox/devbox.remote/init_devbox.sh | 33 +++ devbox/devbox.remote/init_open_box.sh | 10 + devbox/devbox.remote/requirements.txt | 25 ++ devbox/devbox.remote/start.sh | 6 + devbox/devbox.remote/start_backend_for_dev.sh | 8 + .../devbox.remote/start_frontend_for_dev.sh | 12 + devbox/devbox.remote/stop_backend.sh | 7 + 36 files changed, 1277 insertions(+) create mode 100644 devbox/devbox.local/.acr_token create mode 100644 devbox/devbox.local/.dev.env create mode 100644 devbox/devbox.local/Dockerfile create mode 100644 devbox/devbox.local/README.md create mode 100644 devbox/devbox.local/acr_login.sh create mode 100644 devbox/devbox.local/authorized_keys create mode 100644 devbox/devbox.local/build-devbox.jenkinsfile create mode 100644 devbox/devbox.local/destroy.sh create mode 100644 devbox/devbox.local/docker-compose.dev.arm64.new.yaml create mode 100644 devbox/devbox.local/docker-compose.dev.arm64.yaml create mode 100644 devbox/devbox.local/docker-compose.dev.yaml create mode 100644 devbox/devbox.local/entrypoint.sh create mode 100644 devbox/devbox.local/entrypoint_restore.sh create mode 100644 devbox/devbox.local/gitea_data_backup.tar.gz create mode 100644 devbox/devbox.local/image-1.png create mode 100644 devbox/devbox.local/image.png create mode 100644 devbox/devbox.local/init_devbox.sh create mode 100644 devbox/devbox.local/launch.sh create mode 100644 devbox/devbox.local/requirements.txt create mode 100644 devbox/devbox.local/restore.sh create mode 100644 devbox/devbox.local/start_all_svc.sh create mode 100644 devbox/devbox.local/start_backend.sh create mode 100644 devbox/devbox.local/start_frontend.sh create mode 100644 devbox/devbox.local/start_frontend_cn.sh create mode 100644 devbox/devbox.local/stop.sh create mode 100644 devbox/devbox.local/stop_all_svc.sh create mode 100644 devbox/devbox.remote/.dev.env create mode 100644 devbox/devbox.remote/Dockerfile create mode 100644 devbox/devbox.remote/gitea_data_backup.tar.gz create mode 100644 devbox/devbox.remote/init_devbox.sh create mode 100644 devbox/devbox.remote/init_open_box.sh create mode 100644 devbox/devbox.remote/requirements.txt create mode 100644 devbox/devbox.remote/start.sh create mode 100644 devbox/devbox.remote/start_backend_for_dev.sh create mode 100644 devbox/devbox.remote/start_frontend_for_dev.sh create mode 100644 devbox/devbox.remote/stop_backend.sh diff --git a/devbox/devbox.local/.acr_token b/devbox/devbox.local/.acr_token new file mode 100644 index 0000000..79dd16e --- /dev/null +++ b/devbox/devbox.local/.acr_token @@ -0,0 +1 @@ +eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlBWRTc6SVM2RzpRUEVJOkpFRTc6TkgzVDpTNEhaOk5IRko6U1BTSzpWQks0OjRCSEI6V01DTjpSSUdXIn0.eyJqdGkiOiI1MDIzMjVjOS1jZDE4LTRjMGMtOWRjOS1hMmI1ZjQ3OWU5NDYiLCJzdWIiOiJqZXRsaUBmcmVlbGVhcHMuY29tIiwibmJmIjoxNzMwMDgxODE4LCJleHAiOjE3MzAwOTM1MTgsImlhdCI6MTczMDA4MTgxOCwiaXNzIjoiQXp1cmUgQ29udGFpbmVyIFJlZ2lzdHJ5IiwiYXVkIjoiZnJlZWxlYXBzLmF6dXJlY3IuaW8iLCJ2ZXJzaW9uIjoiMS4wIiwicmlkIjoiYjYyOGFhNDNmYTFlNDQzMzlmN2YxYTA0OWViZWM1ZmQiLCJncmFudF90eXBlIjoicmVmcmVzaF90b2tlbiIsImFwcGlkIjoiMDRiMDc3OTUtOGRkYi00NjFhLWJiZWUtMDJmOWUxYmY3YjQ2IiwidGVuYW50IjoiY2YxNTFlZTgtNWMyYy00ZmU3LWExYzQtODA5YmE0M2M5ZjI0IiwicGVybWlzc2lvbnMiOnsiYWN0aW9ucyI6WyJyZWFkIiwid3JpdGUiLCJkZWxldGUiLCJtZXRhZGF0YS9yZWFkIiwibWV0YWRhdGEvd3JpdGUiLCJkZWxldGVkL3JlYWQiLCJkZWxldGVkL3Jlc3RvcmUvYWN0aW9uIl19LCJyb2xlcyI6W119.ZAzPIEeoHI00IdmvT1EiPjU-6C3HbRqeTK2iEm6Qh6rZ-iKIqWXmbVP4ncxkjyctGD2TAaaZYatvoYKsgiM7uIfONFldXjWMNVsO1tNeWMI9Wm0n7QEIylh1GBQ0Zj-dKlxd8arrs6Yab-k4x5nIcu4pphXOh8_fF4uV0KcHsznjyFZPDJEOyHhLX5KsQslYjL8DihSc1y_dtlBVbpJhCrde-bwr8KN7xf7Jx0FDFk4MZtjHA-JtvOyJ00oLz0NifhbXYLzXL1imAALFV6P1dXIh1wADwn3_oR7HDC3oLmyp7358qqjdNPUg29HkJbkhvL7JvN0TK6kTIJ-YRVotUQ diff --git a/devbox/devbox.local/.dev.env b/devbox/devbox.local/.dev.env new file mode 100644 index 0000000..db814fd --- /dev/null +++ b/devbox/devbox.local/.dev.env @@ -0,0 +1,19 @@ +export MONGODB_NAME=freeleaps2 +export MONGODB_URI=mongodb://localhost:27017/ +export SITE_ACCESS_PORT=80 +export FREELEAPS_ENV=dev +export STRIPE_API_KEY=sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd +export STRIPE_WEBHOOK_SECRET= +export SITE_URL_ROOT=http://localhost/ +export RABBITMQ_HOST=localhost +export RABBITMQ_PORT=5672 +export FONTAWESOME_AUTH_TOKEN=58624E90-2685-43C6-BF0F-0BFECCE11CD2 +export FREELEAPS_FREEDEV_ACR_PULL_TOKEN='MG/kAjmmUoVi3EUPruatrqh104pq3d6gtgwMI/FaWT+ACRCZuqtp' +export FREELEAPS_DEVSVC_ENDPOINT=http://localhost:8007/api/devsvc +export FREELEAPS_CONTENT_ENDPOINT=http://localhost:8013/api/content/ +export FREELEAPS_CENTRAL_STORAGE_ENDPOINT=http://localhost:8005/api/central_storage/ +export FREELEAPS_AUTHENTICATION_ENDPOINT=https://localhost:8004/api/auth/ +export JWT_SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 +export FREELEAPS_AUTHENTICATION_ENDPOINT=http://localhost:8004/api/auth/ +export EMAIL_FROM=freeleaps@freeleaps.com + diff --git a/devbox/devbox.local/Dockerfile b/devbox/devbox.local/Dockerfile new file mode 100644 index 0000000..0555416 --- /dev/null +++ b/devbox/devbox.local/Dockerfile @@ -0,0 +1,96 @@ + +FROM ubuntu:22.04 + +ARG USER_NAME="freedev" + +ENV DEBIAN_FRONTEND=noninteractive + +# upgrade and install basic tools +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + sudo \ + openssh-server \ + jq \ + vim \ + git \ + python3.10 \ + python3-pip \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + nginx \ + && apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + mkdir /var/run/sshd + +# install Node.js and npm +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \ + apt-get install -y --no-install-recommends nodejs && \ + rm -rf /var/lib/apt/lists/* + +# install Docker +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ + apt-get update && \ + apt-get install -y --no-install-recommends docker-ce docker-ce-cli containerd.io && \ + apt-get install docker-compose-plugin && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# install Docker Compose +RUN curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \ + chmod +x /usr/local/bin/docker-compose + +# config SSH +RUN sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 60/' /etc/ssh/sshd_config && \ + sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 5/' /etc/ssh/sshd_config && \ + sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config + +# expose SSH port +EXPOSE 22 + +# copy entrypoint.sh +COPY entrypoint.sh entrypoint_restore.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/entrypoint_restore.sh + + +# set python3 as default python +RUN ln -s /usr/bin/python3 /usr/bin/python + +# copy devbox files +RUN mkdir -p /opt/devbox/ /mnt/docker_data/ /mnt/freeleaps/ + +COPY requirements.txt /opt/devbox/requirements.txt +COPY acr_login.sh start_all_svc.sh stop_all_svc.sh init_devbox.sh start_backend.sh start_frontend.sh start_frontend_cn.sh gitea_data_backup.tar.gz .dev.env docker-compose.dev.yaml docker-compose.dev.arm64.yaml /opt/devbox/ + +RUN chmod +x /opt/devbox/*.sh && \ + pip3 install --no-cache-dir --upgrade pip && \ + pip3 install --no-cache-dir -r /opt/devbox/requirements.txt + +RUN useradd -m -s /bin/bash ${USER_NAME} && \ + echo "${USER_NAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \ + usermod -aG docker ${USER_NAME} && \ + usermod --password $(echo "${USER_NAME}" | openssl passwd -1 -stdin) ${USER_NAME} && \ + ln -s /opt/devbox /home/${USER_NAME}/devbox && \ + ln -s /mnt/freeleaps /home/${USER_NAME}/freeleaps && \ + chown -R "${USER_NAME}":"${USER_NAME}" /opt/devbox /mnt/freeleaps /home/${USER_NAME}/devbox /home/${USER_NAME}/freeleaps + +# install Azure CLI +RUN curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null && \ + echo "deb [arch=$(dpkg --print-architecture)] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/azure-cli.list && \ + apt-get update && \ + apt-get install -y azure-cli + +# Copy SSH authorized keys and set permissions +RUN mkdir -p /home/${USER_NAME}/.ssh +COPY authorized_keys /home/${USER_NAME}/.ssh/authorized_keys +RUN chown -R "${USER_NAME}":"${USER_NAME}" /home/${USER_NAME}/.ssh && \ + chmod 700 /home/${USER_NAME}/.ssh && \ + chmod 600 /home/${USER_NAME}/.ssh/authorized_keys + +RUN npm install -g @apollo/client @popperjs/core @vue/apollo-composable axios bootstrap buffer echarts graphql graphql-tag pdfjs-dist pinia vue vue-echarts vue-i18n vue-router vuex @rushstack/eslint-patch @vitejs/plugin-vue @vue/eslint-config-prettier eslint eslint-plugin-vue fast-glob prettier sass sass-loader vite vite-plugin-svg-icons webpack || true + +# start +CMD ["/usr/local/bin/entrypoint.sh"] \ No newline at end of file diff --git a/devbox/devbox.local/README.md b/devbox/devbox.local/README.md new file mode 100644 index 0000000..e028ae5 --- /dev/null +++ b/devbox/devbox.local/README.md @@ -0,0 +1,72 @@ +For Apple Chip: +- Choose +![latest:multi](image.png) + +- Your local devbox will look like: +![devbox_v3:latest-multi](image-1.png) + +In order to use the latest:multi, update the launch.sh (the repo you got from: https://freeleaps.com:3443/freeleaps/freeleaps-pub.git) to use latest:multi instead of latest when pulling image + +Issues you may run into aside from following instructions from doc: https://netorgft10898514.sharepoint.com/:w:/r/sites/CoreEngineering/_layouts/15/Doc.aspx?sourcedoc=%7BC6FE820D-FD5B-40CC-AD47-BB8691B3BC39%7D&file=Freeleaps%20Local%20DevBox%20Usage.docx&action=default&mobileredirect=true + +acr_login - you may need to re-run this on your devbox_local docker. +And acr_login may not work on Mac: +``` +freedev@ca42ea8db43f:~/devbox$ ./acr_login.sh +rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2 + /usr/bin/az: line 3: 725 Trace/breakpoint trap AZ_INSTALLER=DEB "$bin_dir"/../../opt/az/bin/python3 -Im azure.cli "$@" +rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2 + /usr/bin/az: line 3: 729 Trace/breakpoint trap AZ_INSTALLER=DEB "$bin_dir"/../../opt/az/bin/python3 -Im azure.cli "$@" +Error: Cannot perform an interactive login from a non TTY device +``` +Then, you need to: +``` +az ad sp create-for-rbac --name --role contributor --scopes /subscriptions/ +``` +and: +``` +export AZURE_CLIENT_ID= +export AZURE_SECRET= +export AZURE_TENANT_ID= + +az login --service-principal --username "$AZURE_CLIENT_ID" --password "$AZURE_SECRET" --tenant "$AZURE_TENANT_ID" +``` + +QEMU Emulation doesn't work for me +``` +docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +``` + +Best practice: +Opening 2 VS Code IDE, one for devbox, one for freeleaps code +Devbox for starting backend/frontend +Freeleaps for coding + +Once you started all required containers inside devbox_local, you shall see something like: +``` +root@ca42ea8db43f:/# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +3b10657107cb mongo:4.4 "docker-entrypoint.s…" 51 minutes ago Up 51 minutes 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp freeleaps2-mongodb +d8327a3717d1 freeleaps.azurecr.io/rabbitmq:3.13 "docker-entrypoint.s…" 59 minutes ago Up 58 minutes 4369/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp freeleaps2-rabbitmq +b0f82d5d1772 freeleaps.azurecr.io/gitea:1.20.4 "/usr/bin/entrypoint…" 59 minutes ago Up 59 minutes 22/tcp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp +``` + +Explanation on the set up v.s. local docker +freeleaps2-backend and freeleaps2-frontend are managed differently than the dependency containers (like gitea, mongo, and rabbitmq). + +Key Differences in the Setup + 1. Dependency Containers (gitea, mongo, rabbitmq): + • These services are started and managed using Docker Compose within the devbox_v3 container. They operate independently and need to be running in the background to support the backend application. + 2. Backend and Frontend Code Execution: + • The init_devbox.sh script clones the code for freeleaps2-backend and freeleaps2-frontend into the local directory within the devbox_v3 container. + • Rather than running in isolated containers, the backend (uvicorn) and frontend are directly executed as processes within the devbox_v3 container itself. + 3. Direct Execution Inside devbox_v3: + • By running the backend and frontend code directly inside devbox_v3, you avoid the need for additional containers for each of these services. It simplifies local development by consolidating everything into a single container environment. + 4. Docker Compose for Dependencies Only: + • docker-compose.dev.yaml is used to manage only the core dependencies (like gitea, mongodb, rabbitmq), which are treated as separate containers. Future dependencies will be added there. + freeleaps2-backend and freeleaps2-frontend don’t spin up as containers. Instead, they run as processes within devbox_v3, using the shared environment provided by that container. + +Benefits + + • Simplified Container Management: By keeping freeleaps2-backend and freeleaps2-frontend as processes in devbox_v3, we avoid - container-to-container communication and reduce the complexity of managing multiple Docker containers. + • Ease of Development: Such backend and frontend files in a unified environment will be just Freeleaps App, this allows for quicker iteration without rebuilding separate containers. \ No newline at end of file diff --git a/devbox/devbox.local/acr_login.sh b/devbox/devbox.local/acr_login.sh new file mode 100644 index 0000000..7890936 --- /dev/null +++ b/devbox/devbox.local/acr_login.sh @@ -0,0 +1,5 @@ +#!/bin/bash +az login --use-device-code +FREELEAPS_ACR_TOKEN=$(az acr login --name freeleaps --expose-token --output tsv --query accessToken) +docker login freeleaps.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $FREELEAPS_ACR_TOKEN +echo $FREELEAPS_ACR_TOKEN > .acr_token \ No newline at end of file diff --git a/devbox/devbox.local/authorized_keys b/devbox/devbox.local/authorized_keys new file mode 100644 index 0000000..b8933f3 --- /dev/null +++ b/devbox/devbox.local/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDisvXsJbsD8WT/EyFGcwIyo+H3spAn0/lnwnWz8pxbbSYam2bjjZQ+qs4gf2IqFQDsMHcoJ7DRZmGgIKEDg8vP3OlbpeLCTYSotM5eHTX7xpF3Gk659obFNYNAK/zFCT8vGqKz1v6vx/QwH5Nu+v7YB67acDS5rwOiaw4epZL/3X0zB4S51siFS4hFcjsCPCz1vK5I1TsI1bDl3A+spp0qPJ2jE8iYs7hn0nwPRYGEHLiPYBYSKCR4ztQc4YqJ9Gj0+vI0YV4g5zK0EJJVCqPcg4kh0SbBFeVa8UGI5SyyDIIsGA421rlZTLNbjYFv3DjC7zQbP8iqdz1RGRwVr2Qfh50fth1tlyJOosJ4iVX9VnMyS7+BGbtW4wXgS9pOtyZyoD/ARh8qo5lbmwFfbl1r/5LRk/xYltiJ6DJc8QXuIr3uJUGaXJdoM54qh+9payujshN51JSijF6volfdSggEuUJ7ZV8ynN6RXZ1cGBtIAohoCmaoSC/PfreESKPryu0= freedev@a37e35dcdf07 \ No newline at end of file diff --git a/devbox/devbox.local/build-devbox.jenkinsfile b/devbox/devbox.local/build-devbox.jenkinsfile new file mode 100644 index 0000000..555b838 --- /dev/null +++ b/devbox/devbox.local/build-devbox.jenkinsfile @@ -0,0 +1,66 @@ +pipeline { + agent { + label 'jenkins-agent' + } + + environment { + REGISTRY = 'freeleaps.azurecr.io' + IMAGE_NAME = 'devbox_v3' + LINUX_ARM64_IMAGE_TAG = 'latest-linux-arm64' + LINUX_AMD64_IMAGE_TAG = 'latest-linux-amd64' + } + stages { + stage('Checkout Repository') { + steps { + checkout([ + $class: 'GitSCM', + branches: [[name: '*/main']], + doGenerateSubmoduleConfigurations: false, + extensions: [], + userRemoteConfigs: [[ + credentialsId: "git_freeleaps_int", + url: "https://dev.azure.com/freeleaps/freeleaps-int/_git/freeleaps-int" + ]] + ]) + } + } + stage('Docker Login') { + steps { + withCredentials([usernamePassword(credentialsId: 'acr_devops_user', + usernameVariable: 'DOCKER_USERNAME', + passwordVariable: 'DOCKER_PASSWORD')]) { + sh "docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} ${REGISTRY}" + } + } + } + stage('Set up Docker Buildx') { + steps { + sh ''' + # Create and use a new buildx builder + docker buildx rm mybuilder || true + docker buildx create --name mybuilder --use + docker buildx inspect --bootstrap + ''' + } + } + stage('Build Multi-Architecture Docker Image') { + steps { + dir("${env.WORKSPACE}/devops/devbox.local/") { + sh "pwd" + // Build multi-architecture image for amd64 and arm64 + sh "docker buildx build --build-arg ARCH=amd64 --platform linux/amd64 -t ${REGISTRY}/${IMAGE_NAME}:${LINUX_AMD64_IMAGE_TAG} --push ." + sh "docker buildx build --build-arg ARCH=arm64 --platform linux/arm64 -t ${REGISTRY}/${IMAGE_NAME}:${LINUX_ARM64_IMAGE_TAG} --push ." + + } + } + } + } + post { + success { + echo 'Docker image built and pushed successfully.' + } + failure { + echo 'Pipeline failed. Please check the logs for details.' + } + } +} \ No newline at end of file diff --git a/devbox/devbox.local/destroy.sh b/devbox/devbox.local/destroy.sh new file mode 100644 index 0000000..76ea71e --- /dev/null +++ b/devbox/devbox.local/destroy.sh @@ -0,0 +1,20 @@ +#!/bin/bash +export CONTAINER_NAME="devbox_local" + +if docker ps -a --format '{{.Names}}' | grep -q ^${CONTAINER_NAME}$; then + echo "Docker container '${CONTAINER_NAME}' exists." + if docker ps --format '{{.Names}}' | grep -q ^${CONTAINER_NAME}$; then + echo "Container '${CONTAINER_NAME}' is running. Stopping it..." + docker stop ${CONTAINER_NAME} + + echo "Container '${CONTAINER_NAME}' has been stopped." + else + echo "Container '${CONTAINER_NAME}' is not running." + fi + + echo "Removing container '${CONTAINER_NAME}'..." + docker rm ${CONTAINER_NAME} + echo "Container '${CONTAINER_NAME}' has been removed." +else + echo "Docker container '${CONTAINER_NAME}' does not exist." +fi \ No newline at end of file diff --git a/devbox/devbox.local/docker-compose.dev.arm64.new.yaml b/devbox/devbox.local/docker-compose.dev.arm64.new.yaml new file mode 100644 index 0000000..4fa8f74 --- /dev/null +++ b/devbox/devbox.local/docker-compose.dev.arm64.new.yaml @@ -0,0 +1,221 @@ +services: + gitea: + # For apple chip, add: platform: linux/amd64 + container_name: freeleaps2-gitea + platform: linux/arm64 + image: freeleaps.azurecr.io/gitea:latest-linux-arm64 + restart: always + ports: + - "3000:3000" + environment: + - DISABLE_REGISTRATION=true + - REQUIRE_SIGNIN_VIEW=true + volumes: + - freeleaps2-gitea-data:/data + networks: + - devbox_freeleaps2-network + + mongodb: + # For apple chip, add: platform: linux/amd64 + # For apple chip, you may want to downgrade to public mongo:4.4 for log support + container_name: freeleaps2-mongodb + platform: linux/arm64 + image: freeleaps.azurecr.io/mongo:latest-linux-arm64 + restart: always + ports: + - "27017:27017" + volumes: + - freeleaps2-mongodb-data:/data/db + networks: + - devbox_freeleaps2-network + + rabbitmq: + # For apple chip, add: platform: linux/amd64 + platform: linux/arm64 + container_name: freeleaps2-rabbitmq + image: freeleaps.azurecr.io/rabbitmq:latest-linux-arm64 + restart: always + ports: + - "5672:5672" + - "15672:15672" + volumes: + - freeleaps2-rabbitmq-data:/var/lib/rabbitmq + networks: + - devbox_freeleaps2-network + + devsvc: + container_name: devsvc + image: freeleaps.azurecr.io/devsvc:1.0.0 + restart: always + environment: + - APP_NAME=devsvc + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8007 + - MONGODB_NAME=freeleaps2 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - GITEA_TOKEN=6786dc398b77d2a9c454b1943019425049deb667 + - GITEA_URL=http://freeleaps2-gitea:3000 + - CODE_DEPOT_HTTP_PORT=3443 + - CODE_DEPOT_SSH_PORT=22 + - CODE_DEPOT_DOMAIN_NAME=localhost + - RABBITMQ_HOST=freeleaps2-rabbitmq + - RABBITMQ_PORT=5672 + - LOG_BASE_PATH=/app/log/devsvc + - BACKEND_LOG_FILE_NAME=devsvc.log + - APPLICATION_ACTIVITY_LOG=devsvc-application.log + ports: + - 8007:8007 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8007 --host=0.0.0.0 + volumes: + - type: bind + source: /var/lib/docker/app/devsvc/log + target: /app/log/devsvc + networks: + - devbox_freeleaps2-network + + central_storage: + container_name: central_storage + image: freeleaps.azurecr.io/central_storage:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=central_storage + - MONGODB_NAME=freeleaps2 + - MONGODB_PORT=27017 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8005 + - AZURE_STORAGE_DOCUMENT_API_KEY=xbiFtFeQ6v5dozgVM99fZ9huUomL7QcLu6s0y8zYHtIXZ8XdneKDMcg4liQr/9oNlVoRFcZhWjLY+ASt9cjICQ== + - AZURE_STORAGE_DOCUMENT_API_ENDPOINT=https://freeleaps1document.blob.core.windows.net/ + - LOG_BASE_PATH=/app/log/central_storage + - BACKEND_LOG_FILE_NAME=central_storage.log + - APPLICATION_ACTIVITY_LOG=central_storage-application.log + ports: + - 8005:8005 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8005 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/central_storage/log + target: /app/log/central_storage + + authentication: + container_name: authentication + image: freeleaps.azurecr.io/authentication:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=authentication + - MONGODB_NAME=freeleaps2 + - MONGODB_PORT=27017 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8004 + - LOG_BASE_PATH=/app/log/authentication + - BACKEND_LOG_FILE_NAME=authentication.log + - APPLICATION_ACTIVITY_LOG=authentication-application.log + - NOTIFICATION_WEBAPI_URL_BASE=http://notification:8003/api/notification/ + - DEVSVC_WEBAPI_URL_BASE=http://devsvc:8007/api/devsvc + - JWT_SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 + - JWT_ALGORITHM=HS256 + ports: + - 8004:8004 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8004 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/authentication/log + target: /app/log/authentication + + content: + container_name: content + image: freeleaps.azurecr.io/content:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=content + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8013 + - MONGODB_NAME=freeleaps2 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET=3gK8Q~PJbyWmiNqaGgho2ZqCY~OXzABSyN8wWasK + - CENTRAL_STORAGE_WEBAPI_URL_BASE=http://central_storage:8005/api/central_storage/ + - LOG_BASE_PATH=/app/log/content + - BACKEND_LOG_FILE_NAME=content.log + - APPLICATION_ACTIVITY_LOG=content-application.log + ports: + - 8013:8013 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8013 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/content/log + target: /app/log/content + + notification: + container_name: notification + image: freeleaps.azurecr.io/notification:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=notification + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8003 + - RABBITMQ_HOST=freeleaps2-rabbitmq + - RABBITMQ_PORT=5672 + - SYSTEM_USER_ID=117f191e810c19729de860aa + - SMS_FROM=+16898887156 + - EMAIL_FROM=freeleaps@freeleaps.com + - SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 + - SENDGRID_API_KEY=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 + - TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 + - TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e + - LOG_BASE_PATH=/app/log/notification + - BACKEND_LOG_FILE_NAME=notification.log + - APPLICATION_ACTIVITY_LOG=notification-application.log + ports: + - 8003:8003 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8003 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/notification/log + target: /app/log/notification + +volumes: + freeleaps2-mongodb-data: + freeleaps2-gitea-data: + freeleaps2-rabbitmq-data: + + +networks: + devbox_freeleaps2-network: + external: true \ No newline at end of file diff --git a/devbox/devbox.local/docker-compose.dev.arm64.yaml b/devbox/devbox.local/docker-compose.dev.arm64.yaml new file mode 100644 index 0000000..4fa8f74 --- /dev/null +++ b/devbox/devbox.local/docker-compose.dev.arm64.yaml @@ -0,0 +1,221 @@ +services: + gitea: + # For apple chip, add: platform: linux/amd64 + container_name: freeleaps2-gitea + platform: linux/arm64 + image: freeleaps.azurecr.io/gitea:latest-linux-arm64 + restart: always + ports: + - "3000:3000" + environment: + - DISABLE_REGISTRATION=true + - REQUIRE_SIGNIN_VIEW=true + volumes: + - freeleaps2-gitea-data:/data + networks: + - devbox_freeleaps2-network + + mongodb: + # For apple chip, add: platform: linux/amd64 + # For apple chip, you may want to downgrade to public mongo:4.4 for log support + container_name: freeleaps2-mongodb + platform: linux/arm64 + image: freeleaps.azurecr.io/mongo:latest-linux-arm64 + restart: always + ports: + - "27017:27017" + volumes: + - freeleaps2-mongodb-data:/data/db + networks: + - devbox_freeleaps2-network + + rabbitmq: + # For apple chip, add: platform: linux/amd64 + platform: linux/arm64 + container_name: freeleaps2-rabbitmq + image: freeleaps.azurecr.io/rabbitmq:latest-linux-arm64 + restart: always + ports: + - "5672:5672" + - "15672:15672" + volumes: + - freeleaps2-rabbitmq-data:/var/lib/rabbitmq + networks: + - devbox_freeleaps2-network + + devsvc: + container_name: devsvc + image: freeleaps.azurecr.io/devsvc:1.0.0 + restart: always + environment: + - APP_NAME=devsvc + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8007 + - MONGODB_NAME=freeleaps2 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - GITEA_TOKEN=6786dc398b77d2a9c454b1943019425049deb667 + - GITEA_URL=http://freeleaps2-gitea:3000 + - CODE_DEPOT_HTTP_PORT=3443 + - CODE_DEPOT_SSH_PORT=22 + - CODE_DEPOT_DOMAIN_NAME=localhost + - RABBITMQ_HOST=freeleaps2-rabbitmq + - RABBITMQ_PORT=5672 + - LOG_BASE_PATH=/app/log/devsvc + - BACKEND_LOG_FILE_NAME=devsvc.log + - APPLICATION_ACTIVITY_LOG=devsvc-application.log + ports: + - 8007:8007 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8007 --host=0.0.0.0 + volumes: + - type: bind + source: /var/lib/docker/app/devsvc/log + target: /app/log/devsvc + networks: + - devbox_freeleaps2-network + + central_storage: + container_name: central_storage + image: freeleaps.azurecr.io/central_storage:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=central_storage + - MONGODB_NAME=freeleaps2 + - MONGODB_PORT=27017 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8005 + - AZURE_STORAGE_DOCUMENT_API_KEY=xbiFtFeQ6v5dozgVM99fZ9huUomL7QcLu6s0y8zYHtIXZ8XdneKDMcg4liQr/9oNlVoRFcZhWjLY+ASt9cjICQ== + - AZURE_STORAGE_DOCUMENT_API_ENDPOINT=https://freeleaps1document.blob.core.windows.net/ + - LOG_BASE_PATH=/app/log/central_storage + - BACKEND_LOG_FILE_NAME=central_storage.log + - APPLICATION_ACTIVITY_LOG=central_storage-application.log + ports: + - 8005:8005 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8005 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/central_storage/log + target: /app/log/central_storage + + authentication: + container_name: authentication + image: freeleaps.azurecr.io/authentication:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=authentication + - MONGODB_NAME=freeleaps2 + - MONGODB_PORT=27017 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8004 + - LOG_BASE_PATH=/app/log/authentication + - BACKEND_LOG_FILE_NAME=authentication.log + - APPLICATION_ACTIVITY_LOG=authentication-application.log + - NOTIFICATION_WEBAPI_URL_BASE=http://notification:8003/api/notification/ + - DEVSVC_WEBAPI_URL_BASE=http://devsvc:8007/api/devsvc + - JWT_SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 + - JWT_ALGORITHM=HS256 + ports: + - 8004:8004 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8004 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/authentication/log + target: /app/log/authentication + + content: + container_name: content + image: freeleaps.azurecr.io/content:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=content + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8013 + - MONGODB_NAME=freeleaps2 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET=3gK8Q~PJbyWmiNqaGgho2ZqCY~OXzABSyN8wWasK + - CENTRAL_STORAGE_WEBAPI_URL_BASE=http://central_storage:8005/api/central_storage/ + - LOG_BASE_PATH=/app/log/content + - BACKEND_LOG_FILE_NAME=content.log + - APPLICATION_ACTIVITY_LOG=content-application.log + ports: + - 8013:8013 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8013 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/content/log + target: /app/log/content + + notification: + container_name: notification + image: freeleaps.azurecr.io/notification:latest-linux-arm64 + # profiles: [ prod, alpha, dev ] + platform: linux/arm64 + restart: always + environment: + - APP_NAME=notification + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8003 + - RABBITMQ_HOST=freeleaps2-rabbitmq + - RABBITMQ_PORT=5672 + - SYSTEM_USER_ID=117f191e810c19729de860aa + - SMS_FROM=+16898887156 + - EMAIL_FROM=freeleaps@freeleaps.com + - SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 + - SENDGRID_API_KEY=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 + - TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 + - TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e + - LOG_BASE_PATH=/app/log/notification + - BACKEND_LOG_FILE_NAME=notification.log + - APPLICATION_ACTIVITY_LOG=notification-application.log + ports: + - 8003:8003 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8003 --host=0.0.0.0 + networks: + - devbox_freeleaps2-network + volumes: + - type: bind + source: /var/lib/docker/app/notification/log + target: /app/log/notification + +volumes: + freeleaps2-mongodb-data: + freeleaps2-gitea-data: + freeleaps2-rabbitmq-data: + + +networks: + devbox_freeleaps2-network: + external: true \ No newline at end of file diff --git a/devbox/devbox.local/docker-compose.dev.yaml b/devbox/devbox.local/docker-compose.dev.yaml new file mode 100644 index 0000000..692b16c --- /dev/null +++ b/devbox/devbox.local/docker-compose.dev.yaml @@ -0,0 +1,85 @@ +services: + gitea: + # For apple chip, add: platform: linux/amd64 + container_name: freeleaps2-gitea + image: freeleaps.azurecr.io/gitea:1.20.4 + restart: always + ports: + - "3000:3000" + environment: + - DISABLE_REGISTRATION=true + - REQUIRE_SIGNIN_VIEW=true + volumes: + - freeleaps2-gitea-data:/data + networks: + - freeleaps2-network + + mongodb: + # For apple chip, add: platform: linux/amd64 + # For apple chip, you may want to downgrade to public mongo:4.4 for log support + container_name: freeleaps2-mongodb + image: freeleaps.azurecr.io/mongo:latest + restart: always + ports: + - "27017:27017" + volumes: + - freeleaps2-mongodb-data:/data/db + networks: + - freeleaps2-network + + rabbitmq: + # For apple chip, add: platform: linux/amd64 + container_name: freeleaps2-rabbitmq + image: freeleaps.azurecr.io/rabbitmq:3.13 + restart: always + ports: + - "5672:5672" + - "15672:15672" + volumes: + - freeleaps2-rabbitmq-data:/var/lib/rabbitmq + networks: + - freeleaps2-network + + devsvc: + container_name: devsvc + image: freeleaps.azurecr.io/devsvc:1.0.0 + restart: always + environment: + - APP_NAME=devsvc + - SERVICE_API_ACCESS_HOST=localhost + - SERVICE_API_ACCESS_PORT=8007 + - MONGODB_NAME=freeleaps2 + - MONGODB_URI=mongodb://freeleaps2-mongodb:27017/ + - GITEA_TOKEN=6786dc398b77d2a9c454b1943019425049deb667 + - GITEA_URL=http://freeleaps2-gitea:3000 + - CODE_DEPOT_HTTP_PORT=3443 + - CODE_DEPOT_SSH_PORT=22 + - CODE_DEPOT_DOMAIN_NAME=localhost + - RABBITMQ_HOST=freeleaps2-rabbitmq + - RABBITMQ_PORT=5672 + - LOG_BASE_PATH=/app/log/devsvc + - BACKEND_LOG_FILE_NAME=devsvc.log + - APPLICATION_ACTIVITY_LOG=devsvc-application.log + ports: + - 8007:8007 + command: + - /bin/sh + - -c + - | + uvicorn webapi.main:app --reload --port=8007 --host=0.0.0.0 + volumes: + - type: bind + source: /var/lib/docker/app/devsvc/log + target: /app/log/devsvc + networks: + - freeleaps2-network + +volumes: + freeleaps2-mongodb-data: + freeleaps2-gitea-data: + freeleaps2-rabbitmq-data: + + +networks: + freeleaps2-network: + driver: bridge diff --git a/devbox/devbox.local/entrypoint.sh b/devbox/devbox.local/entrypoint.sh new file mode 100644 index 0000000..1953621 --- /dev/null +++ b/devbox/devbox.local/entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# start SSH Daemon +/usr/sbin/sshd -D & + +sleep 20 +rm -rf /var/run/docker.pid || true + +# start Docker Daemon +/usr/bin/dockerd --pidfile="" --storage-driver vfs & + +tail -f /dev/null \ No newline at end of file diff --git a/devbox/devbox.local/entrypoint_restore.sh b/devbox/devbox.local/entrypoint_restore.sh new file mode 100644 index 0000000..0a1051c --- /dev/null +++ b/devbox/devbox.local/entrypoint_restore.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# start SSH Daemon +if ! pgrep -x "sshd" > /dev/null +then + echo "Starting sshd..." + /usr/sbin/sshd -D & +fi + +sleep 60 + +# start Docker Daemon +if ! pgrep -x "dockerd" > /dev/null +then + rm -rf /var/run/docker.pid || true + echo "Starting Docker Daemon..." + /usr/bin/dockerd --pidfile="" --storage-driver vfs & + disown -a +fi diff --git a/devbox/devbox.local/gitea_data_backup.tar.gz b/devbox/devbox.local/gitea_data_backup.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..550787f1b0cb5fc5e3a94bf4ec29914d0d8ba3e9 GIT binary patch literal 46922 zcmbrl1yq~Q*9KUp6f1>7Db^PE;tr)P4#C~sgS(_HR=l_diWheYTHK)!oB+io1h+s) zwqM)dUv~F=yL*z$ZM;>nTHJwMT2ouvUtYU05*K$w(3x*ulqtEc4K< z5A61Y^+nZ$oXkUfa3jbo_VL3@tURKOTiCR3Jas!ds72}-xMP+r4aaz;aFx-jYaClOE?$kTVx?O5k7!((Q4~LK8y5Zz+fXiC?`-vxDPb2xUPo+9UYut zMlm>;7}W9+s0;HHV}+tV0`+6WFv6&2l;h#@&-Ovg6U+%Jd6sQcly6ABs;BLYf&mw= zYBa6PK9NVhhINrqi~50M#TLo2AZNRiogf2Au^rB;_KG{gSz>sLYQ4u79>IbGPhV99 zs_7dHMU;>a4Xv4WP~zM_nm(Q{%jKQV^l?V+3xgo08C6iTbx!Gi&if& z#-7I~hC6swY}f|76kM%)7fSyO%2$~l@F62P5cz@^=kKYy#F<#l#&Ug4*ZOUCU#dxt zK~!rov1dvcf@PXLkaXYKL4)-N84QfS5sN?S+9`r9^_if+)W(wWQMN4cl;UcMxLg8- z^9Q17nVxjR9`XxU&V1#LiLk8_Lik=<*5jbF6iS|*c~1IFU~;^4-#Ob=esq=$(5Q6B2>YTp#Rn#7x;tm- z&z=3s@G) z)>0VzbJCbZP0d}6CC&u6+mY}_{Nec+PNBd`9WEReeX3;ZG)^g!<|hP^r%xahsXawn zvkIih_@OvgbEU0#kdsxbIMIjemv@k~g=JYpBr<+ocncLCtzV~)`|Rp}xYNLNmlDms z#Sm%AJcjgZ=X+M>*%>ND7M$@@<~VQg*yrog?>IFl6LFE9?{s}XjMVS{#_NA{mrJ{6 zfP;oJu(EV77)#gx!c>)|6_059XXp<3z{A3UoALa(voz?(sYswUIIm1nGHR*M~X$yj?p z_HNBOc;6i}c5Rs!7MWm_vQ3b@&aug?3xUFB0TUHdFj99-JBCeffkt|={_Gflh=tw7 zQkw`xc+s4 zL=Uj$x*}%=1NcC5WcE`&*bG3$>ndLYvUz`vn(%_QgRF{Z{_k{!+&$P`UF!kk5lI=x z=3LkHaHaV`&Y5ZI;6-bJ)cKE8pj&t@x%vf4cB%!fYW;W&QPsM2E(Pb4;4Tk{>zJ6)v@3{EkEIV=FdYG=yQx`B=^;{>-X|rT(pD|A7b@%}|!FOB(C4 zke@mSQ!E!77v$Gl9g_34lTrla`%&2aXFf zZdaE!>a5QUm~QY^r?g3ukiyoL9{TT>W?+;;P=ApA)|-+YV>Jcxg{8hM6TlgWqX(3Q z!N)YCvW}H5msi_67yM$!P6W|IehlIrM*Em00%83>njeUS{F&W@*`DXeRa>Mik(SRl zU8@F`s6!wszjqH!T*NVbDC$3#U+W-Qn1-YF&O;D@0>iwh8CLIbY`cPqwRMNrwk2c{{PRDTof37Wg%A9WcPX^kz`ThbJ^Q~+L_VEE7k z&(O{0xBr^MFc`?ORVgk}T9eC-6vi*%em}t6{Zm&fhC++~DZYVs{mZAbm21pj&YZgfH$PJ;qK%#i2KLJ6cU`)9xRAn@=2t1L|&W&XMX$3+&g9wAY@g7yTj5 zOFq#=AtBmUBbxPcY56)yz=RTlz=j!D9Arj{QDa>O5zbWIedp4{rt`)Zo2~@MtF31} ziNR-z&P)wV<@EOyi_s&&FO$ZHiqHFfa`P6_O4aSVeA%=j61k@s#>AmtrjJ*5dykJB zwUwXhF@0`GngLRljZ-1u^mDe(yjjiZdKa4VfSB*t^0}q)XPtU2CvW&hb|iZ|-c4%=?LchpBT7772)f_Kv*E1H7i)jzZuBJ_q@m2%3i5su`IuUvXJS~H z_-#C6aeB8FD1lLM^%g^EY&d^wIRE~Zsa*D_e4;TenptgwmUb1KJR8C&n&&Y*BP(aF z8Lx!~#VC)iuv=f=_`R4l>)dE&b9O`RMAuZt8tLiNEtIcop1AQB*HJIp^L9|4=KgUz|s9gpWko zM$C+THe9N)u7#yfnVO;W%L|v-D!Bt=*_oEiXNqt~q4#TpHnVbd3KJ_H91P}Md(hC2 zD`b!_Dt1?^Smu@C@kUan4@`9Ca0qIz_Ipa}d0bG4!yl}UaAw)5MAbU?oS6)ikc~F; zGoMP`u}xjGQ>V_;hj83UpO5v0+jQPqRUS8mXEUu~(jqNUpai(xV!;Iwt?&poOD-yqEp$@XTScW; zUoRc~%>ljvo~MBn;T7Z&r87hBwU2+=*=L99(DrQ#NW{%DB%_-5-|YV^DgPnrmG_f~ zAmmM@+kvp$i9%SCMndiC`{#2&dT=C)WqsM|dKQ7)-sWwNQ~fS3FkJcG7V zgQ@dSd@jVE%U0&ayijn7)|_Iy)^)n>Jo(com`12!!5v>BISN;$(Y5u&Q+l|Pl2*&B zlEuoaA0+l)bg6G{NpseN;@m8%KV7Vn7jmv0Mw{ zDcnBmU9|?MOjgTsyuPka->ax$lCl(A+ye)*_d@)lOlA)rlIu)E^vDSa>ew#Aw-)0k z%URU3!ep}|qZ2IiFT3dJwT7QH`9%?lDVplrlB|uZ8AJ_y5%lUI0U<_UK8RN)!T8jLfV!`~oAwmo3D{}un7?8^Ov>a2D-OJ&;L zy7?*2ayJ&sjk@jKcdPV$wjX;GjoJ zej%Ti*i|{PrWsnT2zOzpzGl~nY%Uo%NoP)j3GoLQ+>!m)6?>EjC;WgkPPRQ6WO?V0j}h<80O)_aUe7nym?2P{cX zPXhX}{Go``Zy3PtP#yX!@jz=R-9j&17t(ZUJ97#)NC!|voJWK#TuFzIuJXCkCZ7@| z53EN9b@zn6PfHE(&zB{xV}DXU3ljgj_Uno05)Bl;McN7ptpr=vNjGc zu)QYF5Xl!tBP7)290W8HlI}--?2awM`;lU{d#>bjw$WXcR_UBu{xe@bRA(H7(LX-e zFDgAfkn(gV_#>rFVYc>?#ng?783m9h-$VdhSxdO}?HgIf83PJukk< zEp3)I;YY#Ico4U&qyHx&5~-bwH(kMT@R)$F<94Cx(yNXM&))IsREG+fBu$EGlfyoK zf<*%=F3ndfqwPtI>XKhkww<_*UJZrzl=3x*^5y~n z#oTg7+@A8y@&t||$_xdY>JE06mYPh7_3ekgo(=8aF!k3+@gdBse><34x3F)YCmzm^ zg+gLL|7MrExXHFk&C9pH|BF|-d!JzDFEE(&mw&m@tskFMi`?e3Frch|-+Jq#N;)A8 zdi3Mw8gq&HhwSL4|7!Q&tPAfySl53rt^Z(le*aG${eREqKp5&jJ^%IWKZfc`sBJXE z$|E&1bw3M$alO)HHg$gan8thyi)n{3NzN4R=%nY-GYA{MyIHDlf1%ZF? zQpJ}MfVpEPks*~ixW-3kii&N?`-LNUe%z5Vds>>QU9mnBJO-tK^M`mfHu^AJykVtX zXZvhdV%nj^_}MJ@O`19CA%i}{l)-WFLSvRNb0_F9xk8;~{x_c~;fNE|SL>Nj(9yzK zn{wZG9e|*@7;y2cLtX2uH72%gftn=)95CI{@%ym|nS3N{5!U48=RvY;5V?@rqXT=Q!uc`Hdf=U71v8DOrVZBi+MLO zm7e7<;|#oSSEQxw7pLv)zQTFuz&Biwp0`8nz36%%dJ)UHqhKi%zcft4z2iZo`AzUb zq{*>>3hXni&_|$4ME4xG|4QOMZ@^J*I7`4`#Cm)o_Fq;PzD5|o2;6sVMHrdm2v z-HM#%WDqMO$A{XS&FdG`+0^**b~M?G99O#eyc$=XGd2-5oHWNH<4`eahL(*a&*+#s zbFX_o2@l>o^k`hh(;M-+-;5IxTw^oFnzyvdn$5da4J~rl^IRw7t&6_Lz1>S*n{PWb zYN%@D4H6G(dLGE0yn?E4D0hh7&Cz@=4zb#d&edH!C1G*Yn;U);BYZI3RbEr5%MmKAn!}h?T-Il&K7y!>2*SkPw^({G5>E zF@oG7x*}qDen23GH7&vzp>bIhz*`3z6v|;MZnu8-@Z&~l0jpKO%Oz6%eiiv=is%=P z8!T}6+(iW*<(pcay(nR`)0#DZ@4_t8c}~|TpWx5RRxIy+*e>B6?54aXW%=sTPRXZz zZLIt2t)7Yy)@sm-9AKO(NUgXmnG5jF3AsCkmol4ZRw%^gyqW0KhEzU<9;d(&Sq#X* zUEA}H&Ns(UO{kWK{^rrgw%YHZ^70Q0!d6I!yZg166YVj^m2DCS9q~_%rn)#7r}R2a zY+m+eSh(*bbH`|Uya+H%rT8JLtz5BS2<4|=eU!{H({>|7FA8$_`&H%CEdgNp5>RVOpD|HyeQ zqccCLJREVC^z3I?QT7}8&lWA@zBQ@F>}yS-sz0*F!a|TT54fH;CfSRoDriz>C)^~n zZ?V|f&0McvIC$oV{TD~#l4$G`2eDAr1wP4D*yHqu42>{t76q`}p%A@ayU`uAmL zjm;UKEts3Nk%`3ZsXsVYMRNj{&vJqg;JGRAq8{fjMZcMjSQr=lUC@9ho63bjxiw{a+~>kJrO;tT+3!7i-DT1Gq28v zirFj-s&7VJTc%_xKHhGcBQ;_rkv|BE^8GQG18kAh6+HDb`Qd5<>#U6P9Ze$d@uQcw zsq#9foGT06RHz8z%6+}-Y^f~&#Ai4`(0ki?zQ*S{?P@?)cRys*D^KR7#jP z=GeL|U(QqebiRpXomcgyI&NC??LZ?|^Gr9n482%AU#1^Rycg5uhdLhl0cp~&oI5)k zTmtxz+=0;8;#5x8*Z*znKc4!R?&ZyY*B<<@eq8)_ZTo*W{J%a!LQ>{1u@Z*Sb<;@hjLr&q z5Kc{Mj@}8z2;StXk*8*LX2rkX58Nvoo}ZuZ=`_0m7vl81EmCGSXx3x~iy1JQN8G

$mR%qvd*C#3U-Nob>b_yR%5L&yQ|~$vWbryd3ru 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Ð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 literal 0 HcmV?d00001 diff --git a/devbox/devbox.local/init_devbox.sh b/devbox/devbox.local/init_devbox.sh new file mode 100644 index 0000000..7a794f3 --- /dev/null +++ b/devbox/devbox.local/init_devbox.sh @@ -0,0 +1,78 @@ +#!/bin/bash +sudo tar -xzvf gitea_data_backup.tar.gz + +# Get the architecture using the `arch` command +ARCH=$(arch 2>/dev/null) + +# Check the architecture and set PLATFORM accordingly +if [ "$ARCH" = "aarch64" ]; then + DOCKER_COMPOSE_FILE="docker-compose.dev.arm64.yaml" +elif [ "$ARCH" = "x86_64" ]; then + DOCKER_COMPOSE_FILE="docker-compose.dev.yaml" +else + DOCKER_COMPOSE_FILE="docker-compose.dev.yaml" +fi + +pushd ~/freeleaps/ + +if [ ! -d ~/freeleaps/freeleaps2-backend ]; then + echo "Git cloning freeleaps2-backend" + git clone --depth 5 https://freeleaps@dev.azure.com/freeleaps/freeleaps2-backend/_git/freeleaps2-backend +else + pushd ~/freeleaps/freeleaps2-backend + echo "Git pulling freeleaps2-backend" + git pull + popd +fi + + +if [ ! -d ~/freeleaps/freeleaps2-frontend ]; then + echo "Git cloning freeleaps2-frontend" + git clone --depth 5 https://freeleaps@dev.azure.com/freeleaps/freeleaps2-frontend/_git/freeleaps2-frontend +else + pushd ~/freeleaps/freeleaps2-frontend + echo "Git pulling freeleaps2-frontend" + git pull + popd +fi + +popd + +source ~/devbox/.dev.env + +if [ ! -f ~/.docker/config.json ]; then + echo "Docker config not found, creating..." + if [ ! -f ~/.acr_token ]; then + echo "ACR token file not found, run acr_login.sh first" + ./acr_login.sh + else + FREELEAPS_ACR_TOKEN=$(cat ~/.acr_token) + docker login freeleaps.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $FREELEAPS_ACR_TOKEN + fi +fi + +docker compose -f ./${DOCKER_COMPOSE_FILE} up -d mongodb + +pip install -r ~/freeleaps/freeleaps2-backend/requirements.txt +pushd ~/freeleaps/freeleaps2-backend/tools +./initialize_collections_devbox.sh +popd + +docker volume create devbox_freeleaps2-gitea-data +GITEA_DATA=$(docker volume inspect devbox_freeleaps2-gitea-data | jq -r '.[0].Mountpoint') + +if [[ -d "${GITEA_DATA}/gitea" ]]; then + echo "Gitea data exist, skipping..." +else + echo "Gitea data not exist, copying..." + sudo rm -rf ${GITEA_DATA}/git + sudo rm -rf ${GITEA_DATA}/gitea + sudo rm -rf ${GITEA_DATA}/ssh + sudo mv data/git ${GITEA_DATA}/ + sudo mv data/gitea ${GITEA_DATA}/ + sudo mv data/ssh ${GITEA_DATA}/ + sudo chown -R freedev:freedev ${GITEA_DATA} + echo "Gitea data copying is done" +fi + +docker compose -f ./${DOCKER_COMPOSE_FILE} up -d diff --git a/devbox/devbox.local/launch.sh b/devbox/devbox.local/launch.sh new file mode 100644 index 0000000..73745e9 --- /dev/null +++ b/devbox/devbox.local/launch.sh @@ -0,0 +1,45 @@ +#!/bin/bash +export CONTAINER_NAME="devbox_local" + +if [ ! -d "./freeleaps" ]; then + echo "Error: ./freeleaps directory does not exist." + return 1 +fi + +if [ ! -f "./.acr_token" ]; then + echo "Error: .acr_token file does not exist or is empty. Please run acr_login.sh first." + return 1 +fi + +# Try to get the architecture using the `arch` command +ARCH=$(arch 2>/dev/null) + +# Check if the architecture is 'arm64' +if [ "$ARCH" = "arm64" ]; then + TAG="latest-linux-arm64" + ACR_TOKEN="acr_token" +else + TAG="latest-linux-amd64" + ACR_TOKEN=".acr_token" +fi + +if ! docker pull freeleaps.azurecr.io/devbox_v3:${TAG}; then + echo "Error: Failed to pull the latest devbox_v3 image." + return 1 +fi + +if docker ps --format '{{.Names}}' | grep -q ^${CONTAINER_NAME}$; then + echo "Container '${CONTAINER_NAME}' is already running." + return 0 +fi + +if ! docker run --privileged -d -p 22222:22 \ + -v ./freeleaps:/mnt/freeleaps \ + -v ./${ACR_TOKEN}:/home/freedev/devbox/.acr_token \ + -v ./var/lib/docker/app/devsvc/log:/var/lib/docker/app/devsvc/log \ + --name ${CONTAINER_NAME} freeleaps.azurecr.io/devbox_v3:${TAG}; then + echo "Error: Failed to start the ${CONTAINER_NAME} container." + return 1 +fi + +echo "${CONTAINER_NAME} container started successfully." \ No newline at end of file diff --git a/devbox/devbox.local/requirements.txt b/devbox/devbox.local/requirements.txt new file mode 100644 index 0000000..cad2256 --- /dev/null +++ b/devbox/devbox.local/requirements.txt @@ -0,0 +1,29 @@ +fastapi==0.100.1 +fastapi-mail==1.4.1 +loguru~=0.6.0 +uvicorn==0.23.2 +pydantic==2.1.1 +pydantic-settings +python-multipart +python-jose[cryptography] +passlib[bcrypt] +beanie==1.21.0 +frozendict==2.3.8 +fastapi-jwt==0.2.0 +requests==2.31.0 +pymongo==4.3.3 +jieba==0.42.1 +APScheduler==3.10.4 +python-dateutil==2.8.2 +stripe==8.1.0 +strawberry-graphql==0.236.0 +websockets==12.0 +pika==1.3.2 +aio-pika +twilio +openai +pillow +azure-storage-blob[aio] +azure-identity +azure-core[aio] +sendgrid \ No newline at end of file diff --git a/devbox/devbox.local/restore.sh b/devbox/devbox.local/restore.sh new file mode 100644 index 0000000..b62a09a --- /dev/null +++ b/devbox/devbox.local/restore.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +export CONTAINER_NAME="devbox_local" + +if ! docker ps -a --format '{{.Names}}' | grep -q ^${CONTAINER_NAME}$; then + echo "Container '${CONTAINER_NAME}' does not exist." + exit 1 +fi + +container_state=$(docker inspect --format '{{.State.Status}}' ${CONTAINER_NAME}) + +if [ "$container_state" = "running" ]; then + echo "Container '${CONTAINER_NAME}' is already running." +elif [ "$container_state" = "exited" ]; then + echo "Container '${CONTAINER_NAME}' is stopped. Starting it..." + + if ! docker start ${CONTAINER_NAME}; then + echo "Error: Failed to start the ${CONTAINER_NAME} container." + exit 1 + fi + + docker exec ${CONTAINER_NAME} /usr/local/bin/entrypoint_restore.sh + + echo "Container '${CONTAINER_NAME}' started successfully." +else + echo "Container '${CONTAINER_NAME}' is in an unknown state: $container_state" + exit 1 +fi \ No newline at end of file diff --git a/devbox/devbox.local/start_all_svc.sh b/devbox/devbox.local/start_all_svc.sh new file mode 100644 index 0000000..f0aa1e5 --- /dev/null +++ b/devbox/devbox.local/start_all_svc.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +pushd ~/devbox +source .dev.env +docker compose -f ./docker-compose.dev.yaml up -d +popd \ No newline at end of file diff --git a/devbox/devbox.local/start_backend.sh b/devbox/devbox.local/start_backend.sh new file mode 100644 index 0000000..c030ca2 --- /dev/null +++ b/devbox/devbox.local/start_backend.sh @@ -0,0 +1,11 @@ +#!/bin/bash +BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + +source $BASE_DIR/.dev.env + +pushd ~/freeleaps/freeleaps2-backend +source $BASE_DIR/.dev.env +docker compose -f ~/devbox/docker-compose.dev.yaml up -d +pkill -f "uvicorn webapi.main:app" || true +./start_webapi.sh +popd \ No newline at end of file diff --git a/devbox/devbox.local/start_frontend.sh b/devbox/devbox.local/start_frontend.sh new file mode 100644 index 0000000..e7712d5 --- /dev/null +++ b/devbox/devbox.local/start_frontend.sh @@ -0,0 +1,13 @@ +#!/bin/bash +pushd ~/freeleaps/freeleaps2-frontend/frontend +export VITE_API_URL='http://127.0.0.1:8002' +export VITE_WEBSOCKET_URL='http://127.0.0.1:8002' +source ~/devbox/.dev.env +npm config set "@fortawesome:registry" https://npm.fontawesome.com/ +npm config set "//npm.fontawesome.com/:_authToken" 58624E90-2685-43C6-BF0F-0BFECCE11CD2 +npm config set registry +npm update +npm install +npm run build +npm run dev +popd \ No newline at end of file diff --git a/devbox/devbox.local/start_frontend_cn.sh b/devbox/devbox.local/start_frontend_cn.sh new file mode 100644 index 0000000..cf9a621 --- /dev/null +++ b/devbox/devbox.local/start_frontend_cn.sh @@ -0,0 +1,13 @@ +#!/bin/bash +pushd ~/freeleaps/freeleaps2-frontend/frontend +export VITE_API_URL='http://127.0.0.1:8002' +export VITE_WEBSOCKET_URL='http://127.0.0.1:8002' +source ~/devbox/.dev.env +npm config set "@fortawesome:registry" https://npm.fontawesome.com/ +npm config set "//npm.fontawesome.com/:_authToken" 58624E90-2685-43C6-BF0F-0BFECCE11CD2 +npm config set registry https://registry.npmmirror.com +npm update +npm install +npm run build +npm run dev +popd \ No newline at end of file diff --git a/devbox/devbox.local/stop.sh b/devbox/devbox.local/stop.sh new file mode 100644 index 0000000..f85b871 --- /dev/null +++ b/devbox/devbox.local/stop.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +export CONTAINER_NAME="devbox_local" + +if docker ps -a --format '{{.Names}}' | grep -q ^${CONTAINER_NAME}$; then + echo "Docker container '${CONTAINER_NAME}' exists. Stopping it..." + docker stop ${CONTAINER_NAME} + echo "Docker container '${CONTAINER_NAME}' has been stopped." +else + echo "Docker container '${CONTAINER_NAME}' does not exist." +fi \ No newline at end of file diff --git a/devbox/devbox.local/stop_all_svc.sh b/devbox/devbox.local/stop_all_svc.sh new file mode 100644 index 0000000..67bd95b --- /dev/null +++ b/devbox/devbox.local/stop_all_svc.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +pushd ~/devbox +source .dev.env +docker compose -f ./docker-compose.dev.yaml down +popd \ No newline at end of file diff --git a/devbox/devbox.remote/.dev.env b/devbox/devbox.remote/.dev.env new file mode 100644 index 0000000..781760d --- /dev/null +++ b/devbox/devbox.remote/.dev.env @@ -0,0 +1,24 @@ +export MONGODB_NAME=freeleaps2 +export MONGODB_URI=mongodb://localhost:27017/ +export EMAIL_FROM=support@freeleaps.com +export GITEA_TOKEN=6786dc398b77d2a9c454b1943019425049deb667 +export GITEA_URL=http://freeleaps2-gitea:3000 +export GITEA_DOMAIN_NAME=localhost +export GITEA_HTTP_PORT=3000 +export SITE_ACCESS_PORT=80 +export FREELEAPS_ENV=dev +export STRIPE_API_KEY=sk_test_51Ogsw5B0IyqaSJBrwczlr820jnmvA1qQQGoLZ2XxOsIzikpmXo4pRLjw4XVMTEBR8DdVTYySiAv1XX53Zv5xqynF00GfMqttFd +export STRIPE_WEBHOOK_SECRET= +export SITE_URL_ROOT=http://localhost/ +export AZURE_TRANSLATION_API_KEY=eaf4c14eb06b4cd790e90111dc6e9f57 +export AZURE_TRANSLATION_API_LOCATION=global +export AZURE_OPENAI_API_KEY=3550d2ce7c494ebd8b54c5528ac8a613 +export AZURE_STORAGE_DOCUMENT_API_KEY=xbiFtFeQ6v5dozgVM99fZ9huUomL7QcLu6s0y8zYHtIXZ8XdneKDMcg4liQr/9oNlVoRFcZhWjLY+ASt9cjICQ== +export JWT_SECRET_KEY=ea84edf152976b2fcec12b78aa8e45bc26a5cf0ef61bf16f5c317ae33b3fd8b0 +export RABBITMQ_HOST=localhost +export RABBITMQ_PORT=5672 +export TWILIO_ACCOUNT_SID=ACf8c9283a6acda060258eadb29be58bc8 +export TWILIO_AUTH_TOKEN=ef160748cc22c8b7195b49df4b8eca7e +export FONTAWESOME_AUTH_TOKEN=58624E90-2685-43C6-BF0F-0BFECCE11CD2 +export FREELEAPS_WWW_AS_AZURE_CLIENT_SECRET=3gK8Q~PJbyWmiNqaGgho2ZqCY~OXzABSyN8wWasK +export SENDGRID_API_KEY='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' \ No newline at end of file diff --git a/devbox/devbox.remote/Dockerfile b/devbox/devbox.remote/Dockerfile new file mode 100644 index 0000000..e397546 --- /dev/null +++ b/devbox/devbox.remote/Dockerfile @@ -0,0 +1,76 @@ + +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# upgrade and install basic tools +RUN apt-get update && \ + apt-get install -y \ + sudo \ + openssh-server \ + jq \ + vim \ + git \ + python3.10 \ + python3-pip \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + && apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + mkdir /var/run/sshd + +# install Node.js and npm +RUN curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \ + apt-get install -y nodejs && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# install Docker +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ + apt-get update && \ + apt-get install -y docker-ce docker-ce-cli containerd.io && \ + rm -rf /var/lib/apt/lists/* + +# install Docker Compose +RUN curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \ + chmod +x /usr/local/bin/docker-compose + +# config SSH +RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config && \ + sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && \ + sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config && \ + sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 60/' /etc/ssh/sshd_config && \ + sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 5/' /etc/ssh/sshd_config + +# expose SSH port +EXPOSE 22 + +# copy start.sh +COPY start.sh /usr/local/bin/start.sh +RUN chmod +x /usr/local/bin/start.sh + +# set python3 as default python +RUN ln -s /usr/bin/python3 /usr/bin/python + +# copy devbox files +RUN mkdir -p /opt/devbox/ /mnt/docker_data/ + +COPY requirements.txt /opt/devbox/requirements.txt +COPY init_open_box.sh init_devbox.sh start_backend_for_dev.sh start_frontend_for_dev.sh gitea_data_backup.tar.gz .dev.env /opt/devbox/ + +RUN chmod +x /opt/devbox/*.sh +RUN pip3 install -r /opt/devbox/requirements.txt + +# configure Docker data root +RUN echo '{"data-root": "/mnt/docker_data/docker"}' > /etc/docker/daemon.json + +RUN useradd -u 1001 -m -s /bin/bash freedev && \ + echo "freedev ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \ + usermod -aG docker freedev; + +# start +CMD ["/usr/local/bin/start.sh"] \ No newline at end of file diff --git a/devbox/devbox.remote/gitea_data_backup.tar.gz b/devbox/devbox.remote/gitea_data_backup.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..550787f1b0cb5fc5e3a94bf4ec29914d0d8ba3e9 GIT binary patch literal 46922 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

    $mR%qvd*C#3U-Nob>b_yR%5L&yQ|~$vWbryd3ru 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Ð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