Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add canary builds for testing purposes #23

Merged
merged 1 commit into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules
.git
.gitignore
*.md
dist
17 changes: 14 additions & 3 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
#!/bin/bash

VERSION=$(node -p "require('./package.json').version")
# Determine the type of build based on the first script argument
BUILD_TYPE=${1:-production}

docker build --platform linux/amd64 --pull --rm -f 'Dockerfile' -t "dokploy/dokploy:${VERSION}" .
if [ "$BUILD_TYPE" == "canary" ]; then
TAG="canary"
else
VERSION=$(node -p "require('./package.json').version")
TAG="$VERSION"
fi

docker tag "dokploy/dokploy:${VERSION}" "dokploy/dokploy:latest"
docker build --platform linux/amd64 --pull --rm -f 'Dockerfile' -t "dokploy/dokploy:${TAG}" .

if [ "$BUILD_TYPE" != "canary" ]; then
# Tag the production build as latest
docker tag "dokploy/dokploy:${TAG}" "dokploy/dokploy:latest"
fi
90 changes: 90 additions & 0 deletions docker/canary.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/bin/bash

if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" >&2
exit 1
fi

# check if is Mac OS
if [ "$(uname)" = "Darwin" ]; then
echo "This script must be run on Linux" >&2
exit 1
fi


# check if is running inside a container
if [ -f /.dockerenv ]; then
echo "This script must be run on Linux" >&2
exit 1
fi

# check if something is running on port 80
if ss -tulnp | grep ':80 ' >/dev/null; then
echo "Error: something is already running on port 80" >&2
exit 1
fi

# check if something is running on port 443
if ss -tulnp | grep ':443 ' >/dev/null; then
echo "Error: something is already running on port 443" >&2
exit 1
fi






command_exists() {
command -v "$@" > /dev/null 2>&1
}

if command_exists docker; then
echo "Docker already installed"
else
curl -sSL https://get.docker.com | sh
fi

docker swarm leave --force 2>/dev/null
docker swarm init --advertise-addr 127.0.0.1 --listen-addr 0.0.0.0;

echo "Swarm initialized"

docker network rm -f dokploy-network 2>/dev/null
docker network create --driver overlay --attachable dokploy-network

echo "Network created"

mkdir -p /etc/dokploy

chmod -R 777 /etc/dokploy

docker pull dokploy/dokploy:canary

# Installation
docker service create \
--name dokploy \
--replicas 1 \
--network dokploy-network \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/etc/dokploy,target=/etc/dokploy \
--publish published=3000,target=3000,mode=host \
--update-parallelism 1 \
--update-order stop-first \
-e RELEASE_TAG=canary \
dokploy/dokploy:canary


public_ip=$(hostname -I | awk '{print $1}')

GREEN="\033[0;32m"
YELLOW="\033[1;33m"
BLUE="\033[0;34m"
NC="\033[0m" # No Color


echo ""
printf "${GREEN}Congratulations, Dokploy is installed!${NC}\n"
printf "${BLUE}Wait 15 seconds for the server to start${NC}\n"
printf "${YELLOW}Please go to http://${public_ip}:3000${NC}\n\n"
echo ""
15 changes: 12 additions & 3 deletions docker/push.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
#!/bin/bash

VERSION=$(node -p "require('./package.json').version")
# Determine the type of build based on the first script argument
BUILD_TYPE=${1:-production}

docker push "dokploy/dokploy:${VERSION}"
docker push "dokploy/dokploy:latest"
if [ "$BUILD_TYPE" == "canary" ]; then
TAG="canary"
echo PUSHING CANARY
docker push "dokploy/dokploy:${TAG}"
else
echo "PUSHING PRODUCTION"
VERSION=$(node -p "require('./package.json').version")
docker push "dokploy/dokploy:${VERSION}"
docker push "dokploy/dokploy:latest"
fi
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
"db:clean": "dotenv tsx ./server/db/reset.ts",
"docker:build": "./docker/build.sh",
"docker:push": "./docker/push.sh",
"docker:build:canary": "./docker/build.sh canary",
"docker:push:canary": "./docker/push.sh canary",
"version": "echo $(node -p \"require('./package.json').version\")"
},
"dependencies": {
Expand Down Expand Up @@ -130,6 +132,6 @@
},
"engines": {
"node": "^18.18.0",
"pnpm": "^8.15.4"
}
"pnpm": ">=8.15.4"
}
}
2 changes: 1 addition & 1 deletion server/api/services/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const updateIsAvailable = async () => {
};

export const getDokployImage = () => {
return "dokploy/dokploy:latest";
return `dokploy/dokploy:${process.env.RELEASE_TAG || "latest"}`;
};

export const pullLatestRelease = async () => {
Expand Down
Loading