From 03939ef562eb8804471eb2bf7ddb7a7ce55ae07a Mon Sep 17 00:00:00 2001 From: Kevin Dang <77701718+kevinthedang@users.noreply.github.com> Date: Sat, 22 Feb 2025 14:06:14 -0800 Subject: [PATCH] Server Deployment Scripts (#162) --- .github/workflows/deploy.yml | 132 ++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 50 ------------- 2 files changed, 132 insertions(+), 50 deletions(-) create mode 100644 .github/workflows/deploy.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..796905e --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,132 @@ +name: Deploy +run-name: Deploy Application Latest +on: + push: + tags: + - 'v*' + +jobs: + Deploy-Application: + runs-on: self-hosted + environment: deploy + timeout-minutes: 5 + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + # Generate Secret File for Compose case + - name: Create Environment Variables + run: | + touch .env + echo CLIENT_TOKEN = ${{ secrets.CLIENT }} >> .env + echo OLLAMA_IP = ${{ secrets.OLLAMA_IP }} >> .env + echo OLLAMA_PORT = ${{ secrets.OLLAMA_PORT }} >> .env + echo DISCORD_IP = ${{ secrets.DISCORD_IP }} >> .env + echo SUBNET_ADDRESS = ${{ secrets.SUBNET_ADDRESS }} >> .env + echo REDIS_IP = ${{ secrets.REDIS_IP }} >> .env + echo REDIS_PORT = ${{ secrets.REDIS_PORT }} >> .env + + - name: Check if directory exists and delete it + run: | + if [ -d "${{ secrets.PATH }}" ]; then + echo "Directory exists, deleting old version..." + rm -rf ${{ secrets.PATH }} + else + echo "Directory does not exist." + fi + + - name: Clone Repo onto Server + run: | + git clone https://github.com/kevinthedang/discord-ollama.git ${{ secrets.PATH }} + cd ${{ secrets.PATH }} + + - name: Install nvm and Node.js lts/jod + run: | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + echo "NVM installed successfully." + nvm install lts/jod + nvm alias default lts/jod + node -v + npm -v + + - name: Build Application + run: | + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + npm install + + IMAGE="kevinthedang/discord-ollama" + REDIS="redis" + OLLAMA="ollama/ollama" + + if docker images | grep -q $IMAGE; then + IMAGE_ID=$(docker images -q $IMAGE) + CONTAINER_IDS=$(docker ps -q --filter "ancestor=$IMAGE_ID") + + if [ ! -z "$CONTAINER_IDS" ]; then + # Stop and remove the running containers + docker stop $CONTAINER_IDS + echo "Stopped and removed the containers using the image $IMAGE" + fi + docker rmi $IMAGE_ID + echo "Old $IMAGE Image Removed" + fi + + if docker images | grep -q $REDIS; then + IMAGE_ID=$(docker images -q $REDIS) + CONTAINER_IDS=$(docker ps -q --filter "ancestor=$IMAGE_ID") + + if [ ! -z "$CONTAINER_IDS" ]; then + # Stop and remove the running containers + docker stop $CONTAINER_IDS + echo "Stopped and removed the containers using the image $REDIS" + fi + docker rmi $IMAGE_ID + echo "Old $REDIS Image Removed" + fi + + if docker images | grep -q $OLLAMA; then + IMAGE_ID=$(docker images -q $OLLAMA) + CONTAINER_IDS=$(docker ps -q --filter "ancestor=$IMAGE_ID") + + if [ ! -z "$CONTAINER_IDS" ]; then + # Stop and remove the running containers + docker stop $CONTAINER_IDS + echo "Stopped and removed the containers using the image $OLLAMA" + fi + docker rmi $IMAGE_ID + echo "Old $OLLAMA Image Removed" + fi + + docker network prune -f + docker system prune -a -f + + npm run docker:build-latest + + - name: Start Application + run: | + docker network create --subnet=${{ secrets.SUBNET_ADDRESS }}/16 ollama-net || true + docker run --rm -d \ + -v ollama:/root/.ollama \ + -p ${{ secrets.OLLAMA_PORT }}:${{ secrets.OLLAMA_PORT }} \ + --name ollama \ + --network ollama-net \ + --ip ${{ secrets.OLLAMA_IP }} \ + ollama/ollama:latest + + docker run --rm -d \ + -v redis:/root/.redis \ + -p ${{ secrets.REDIS_PORT }}:${{ secrets.REDIS_PORT }} \ + --name redis \ + --network ollama-net \ + --ip ${{ secrets.REDIS_IP }} \ + redis:latest + + docker run --rm -d \ + -v discord:/src/app \ + --name discord \ + --network ollama-net \ + --ip ${{ secrets.DISCORD_IP }} \ + kevinthedang/discord-ollama diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index e044924..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Deploy -run-name: Release Docker Image -on: - push: - tags: - - 'v*' - -jobs: - Release-Docker-Image: - runs-on: ubuntu-latest - environment: release - timeout-minutes: 3 - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - - - name: Set up Node Environment lts/jod - uses: actions/setup-node@v4 - with: - node-version: lts/jod - cache: "npm" - - - name: Create Environment Variables - run: | - touch .env - echo CLIENT_TOKEN = NOT_REAL_TOKEN >> .env - echo OLLAMA_IP = ${{ secrets.OLLAMA_IP }} >> .env - echo OLLAMA_PORT = ${{ secrets.OLLAMA_PORT }} >> .env - echo REDIS_IP = ${{ secrets.REDIS_IP }} >> .env - echo REDIS_PORT = ${{ secrets.REDIS_PORT }} >> .env - - - name: Get Version from package.json - run: echo "VERSION=$(jq -r '.version' package.json)" >> $GITHUB_ENV - - - name: Build Image - run: | - npm run docker:build - - - name: Build Image as Latest - run: | - npm run docker:build-latest - - - name: Log into Docker - run: | - docker login --username ${{ vars.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} - - - name: Release Docker Image - run: | - docker push ${{ vars.DOCKER_USER }}/discord-ollama:${{ env.VERSION }} - docker push ${{ vars.DOCKER_USER }}/discord-ollama:latest \ No newline at end of file