diff --git a/.gitea/workflows/deploy-dev.yml b/.gitea/workflows/deploy-dev.yml new file mode 100644 index 0000000..4a04b3e --- /dev/null +++ b/.gitea/workflows/deploy-dev.yml @@ -0,0 +1,111 @@ +name: Deploy Development (dev.ss-tool.crewsportswear.app) + +on: + push: + branches: + - dev + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + + steps: + # 1️⃣ Checkout code + - name: Checkout code + shell: sh + run: | + git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo + cd /workspace/repo + git checkout $GITHUB_REF_NAME + + # 2️⃣ Build image + - name: Build Docker image + shell: sh + run: | + cd /workspace/repo + docker build -t screenshot-tools:dev . + docker save screenshot-tools:dev | gzip > screenshot-tools-dev.tar.gz + + # 3️⃣ Setup SSH + - name: Setup SSH + shell: sh + env: + DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + mkdir -p ~/.ssh + chmod 700 ~/.ssh + echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts + + # 4️⃣ Upload artifacts + - name: Upload image and compose + shell: sh + env: + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + scp -i ~/.ssh/id_ed25519 \ + /workspace/repo/screenshot-tools-dev.tar.gz \ + /workspace/repo/docker-compose.traefik.yml \ + ${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/ + + # 5️⃣ Deploy on server + - name: Deploy on server + shell: sh + env: + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF' + set -e + + DEPLOY_DIR="/var/www/screenshot-tools-dev" + sudo mkdir -p "$DEPLOY_DIR" + sudo chown $USER:$USER "$DEPLOY_DIR" + + echo "📦 Loading Docker image" + docker load < /tmp/screenshot-tools-dev.tar.gz + docker tag screenshot-tools:dev screenshot-tools:latest + + echo "📋 Moving files to deployment directory" + mv /tmp/docker-compose.traefik.yml "$DEPLOY_DIR/" + cd "$DEPLOY_DIR" + + echo "🔧 Creating .env file if not exists" + if [ ! -f .env ]; then + cat > .env << 'ENVFILE' +PORT=5955 +HOST=0.0.0.0 +USE_SSL=false +OUTPUT_DIR=/var/www/html/images/ +BASE_URL=https://dev.ss-tool.crewsportswear.app/ +VIEWPORT_WIDTH=1366 +VIEWPORT_HEIGHT=1100 +WAIT_TIME=10000 +ENVFILE + fi + + echo "🐳 Stopping existing containers" + docker compose -f docker-compose.traefik.yml down || true + + echo "🚀 Starting new containers" + docker compose -f docker-compose.traefik.yml up -d + + echo "🧹 Cleanup" + rm -f /tmp/screenshot-tools-dev.tar.gz + + echo "✅ Development deployment completed successfully!" + docker compose -f docker-compose.traefik.yml ps + EOF + + # 6️⃣ Cleanup local artifacts + - name: Cleanup + shell: sh + run: | + rm -f /workspace/repo/screenshot-tools-dev.tar.gz + echo "✅ Cleanup completed" diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..039b2ef --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,111 @@ +name: Deploy Production (ss-tool.crewsportswear.app) + +on: + push: + branches: + - main + - master + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + + steps: + # 1️⃣ Checkout code + - name: Checkout code + shell: sh + run: | + git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo + cd /workspace/repo + git checkout $GITHUB_REF_NAME + + # 2️⃣ Build image + - name: Build Docker image + shell: sh + run: | + cd /workspace/repo + docker build -t screenshot-tools:latest . + docker save screenshot-tools:latest | gzip > screenshot-tools.tar.gz + + # 3️⃣ Setup SSH + - name: Setup SSH + shell: sh + env: + DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + mkdir -p ~/.ssh + chmod 700 ~/.ssh + echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts + + # 4️⃣ Upload artifacts + - name: Upload image and compose + shell: sh + env: + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + scp -i ~/.ssh/id_ed25519 \ + /workspace/repo/screenshot-tools.tar.gz \ + /workspace/repo/docker-compose.traefik.yml \ + ${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/ + + # 5️⃣ Deploy on server + - name: Deploy on server + shell: sh + env: + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF' + set -e + + DEPLOY_DIR="/var/www/screenshot-tools" + sudo mkdir -p "$DEPLOY_DIR" + sudo chown $USER:$USER "$DEPLOY_DIR" + + echo "📦 Loading Docker image" + docker load < /tmp/screenshot-tools.tar.gz + + echo "📋 Moving files to deployment directory" + mv /tmp/docker-compose.traefik.yml "$DEPLOY_DIR/" + cd "$DEPLOY_DIR" + + echo "🔧 Creating .env file if not exists" + if [ ! -f .env ]; then + cat > .env << 'ENVFILE' + PORT=5955 + HOST=0.0.0.0 + USE_SSL=false + OUTPUT_DIR=/var/www/html/images/ + BASE_URL=https://ss-tool.crewsportswear.app/ + VIEWPORT_WIDTH=1366 + VIEWPORT_HEIGHT=1100 + WAIT_TIME=10000 + ENVFILE + fi + + echo "🐳 Stopping existing containers" + docker compose -f docker-compose.traefik.yml down || true + + echo "🚀 Starting new containers" + docker compose -f docker-compose.traefik.yml up -d + + echo "🧹 Cleanup" + rm -f /tmp/screenshot-tools.tar.gz + + echo "✅ Deployment completed successfully!" + docker compose -f docker-compose.traefik.yml ps + EOF + + # 6️⃣ Cleanup local artifacts + - name: Cleanup + shell: sh + run: | + rm -f /workspace/repo/screenshot-tools.tar.gz + echo "✅ Cleanup completed" diff --git a/docker-compose.traefik.yml b/docker-compose.traefik.yml index 39d66a2..6d2924c 100644 --- a/docker-compose.traefik.yml +++ b/docker-compose.traefik.yml @@ -12,7 +12,7 @@ services: - HOST=0.0.0.0 - USE_SSL=false - OUTPUT_DIR=/var/www/html/images/ - - BASE_URL=https://screenshots.crewsportswear.app/ + - BASE_URL=https://ss-tool.crewsportswear.app/ - VIEWPORT_WIDTH=1366 - VIEWPORT_HEIGHT=1100 - WAIT_TIME=10000 @@ -25,7 +25,7 @@ services: - "traefik.enable=true" # HTTP Router - - "traefik.http.routers.screenshot-service.rule=Host(`screenshots.crewsportswear.app`)" + - "traefik.http.routers.screenshot-service.rule=Host(`ss-tool.crewsportswear.app`)" - "traefik.http.routers.screenshot-service.entrypoints=websecure" - "traefik.http.routers.screenshot-service.tls=true" - "traefik.http.routers.screenshot-service.tls.certresolver=letsencrypt" @@ -34,7 +34,7 @@ services: - "traefik.http.services.screenshot-service.loadbalancer.server.port=5955" # HTTP to HTTPS redirect - - "traefik.http.routers.screenshot-service-http.rule=Host(`screenshots.crewsportswear.app`)" + - "traefik.http.routers.screenshot-service-http.rule=Host(`ss-tool.crewsportswear.app`)" - "traefik.http.routers.screenshot-service-http.entrypoints=web" - "traefik.http.routers.screenshot-service-http.middlewares=https-redirect"