stages: - deploy variables: APP_NAME: "logs.unturf.com" APP_DIR: "/opt/${APP_NAME}" VENV_DIR: "${APP_DIR}/venv" CADDYFILE_DIR: "/etc/caddy" CADDY_SNIPPETS_DIR: "/etc/caddy/caddy_snippets" deploy: stage: deploy tags: - master.unturf.com only: - main # Adjust if you want to deploy from other branches script: # Step 1: Define variables with substitutions - | # Variables with substitutions must be defined in the script section SERVICE_NAME="uwsgi-${APP_NAME//./-}.service" # Replace dots with dashes UWSGI_SOCKET="${APP_DIR}/uwsgi.sock" # Place socket in app directory # Step 2: Synchronize the code to the application directory - | if [ ! -d "${APP_DIR}" ]; then mkdir -p "${APP_DIR}" fi rsync -a --exclude=data/ --exclude=venv/ --delete "${CI_PROJECT_DIR}/" "${APP_DIR}/" # Step 3: Set up Python virtual environment and install dependencies - | if [ ! -d "${VENV_DIR}" ]; then python3 -m venv "${VENV_DIR}" fi source "${VENV_DIR}/bin/activate" pip install --upgrade pip pip install -r "${APP_DIR}/requirements.txt" # Step 4: Install uWSGI in virtual environment - | source "${VENV_DIR}/bin/activate" pip install uwsgi # Step 5: Create or update the systemd user service file for uWSGI - | mkdir -p ~/.config/systemd/user/ # Determine the correct module and callable for your application # Adjust 'app:app' based on your application's entry point # For example, if your main application file is 'app.py' and the Flask app is named 'app', use 'app:app' # If your application entry point is different, adjust accordingly # For example, if your main file is 'wsgi.py' and the callable is 'application', use 'wsgi:application' # Set the MODULE variable based on your application's entry point MODULE="app:uwsgi_app" # Adjust this based on your application cat > ~/.config/systemd/user/${SERVICE_NAME} < "${CADDY_SNIPPETS_DIR}/${APP_NAME}.caddy" < "${CADDYFILE_DIR}/Caddyfile" cat "${CADDY_SNIPPETS_DIR}"/*.caddy >> "${CADDYFILE_DIR}/Caddyfile" # Validate the Caddyfile caddy validate --config "${CADDYFILE_DIR}/Caddyfile" # Step 8: Reload Caddy service, gitlab-runner is in sudoers. # gitlab-runner ALL=(ALL) NOPASSWD: /bin/systemctl * caddy.service - sudo /bin/systemctl restart caddy.service # Deployment completed - echo "Deployment completed successfully."