diff --git a/.drone.yml b/.drone.yml index 31eec26..7b6f5b6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ kind: pipeline type: docker -name: default +name: bogazici-api trigger: branch: @@ -15,13 +15,13 @@ steps: branch: - develop commands: - - apt-get update && apt-get install -y git unzip curl libzip-dev default-mysql-client - - docker-php-ext-install pdo_mysql zip + - apt-get update && apt-get install -y git unzip curl libzip-dev libicu-dev default-mysql-client + - docker-php-ext-install pdo_mysql zip intl - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - cp .env.example .env || true - composer install --no-interaction --prefer-dist --optimize-autoloader - php artisan key:generate --force || true - - php artisan config:clear || true + - php artisan optimize:clear || true - php artisan test || true - name: deploy-test @@ -31,11 +31,12 @@ steps: - test settings: host: - from_secret: server_host + from_secret: SERVER_HOST username: - from_secret: server_user + from_secret: SERVER_USER key: - from_secret: server_ssh_key + from_secret: SERVER_SSH_KEY + port: 22 script: - cd /opt/projects/bogazici/corporate-api/test/api - bash scripts/deploy-test.sh @@ -47,11 +48,12 @@ steps: - main settings: host: - from_secret: server_host + from_secret: SERVER_HOST username: - from_secret: server_user + from_secret: SERVER_USER key: - from_secret: server_ssh_key + from_secret: SERVER_SSH_KEY + port: 22 script: - cd /opt/projects/bogazici/corporate-api/prod/api - bash scripts/deploy-prod.sh diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1ec5462..86fdf31 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -31,6 +31,7 @@ use App\Repositories\Eloquent\UserRepository; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; +use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; @@ -39,6 +40,8 @@ class AppServiceProvider extends ServiceProvider /** * @var array */ + + public array $bindings = [ CategoryRepositoryInterface::class => CategoryRepository::class, CourseRepositoryInterface::class => CourseRepository::class, @@ -68,6 +71,8 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { + URL::forceScheme('https'); + Str::macro('turkishSlug', function (string $text, string $separator = '-'): string { $map = [ 'ç' => 'c', diff --git a/docker-compose.test.yml b/docker-compose.test.yml index aadb2d2..db71680 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -1,3 +1,5 @@ +name: bogazici-api-test + services: bdc-api-test: build: diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index a559eb1..41c4df2 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -6,12 +6,15 @@ ENV_SOURCE="/opt/projects/bogazici/corporate-api/prod/.env.prod" BRANCH="main" CONTAINER="bdc-api-prod" COMPOSE_FILE="docker-compose.prod.yml" +COMPOSE_PROJECT="bogazici-api-prod" UPLOADS_DIR="/opt/projects/bogazici/corporate-api/prod/uploads" echo "🚀 [API] Production deploy başlatılıyor..." cd "$PROJECT_DIR" +git config --global --add safe.directory "$PROJECT_DIR" || true + sudo chown -R "$USER":www-data storage bootstrap/cache 2>/dev/null || true sudo find storage -type d -exec chmod 2775 {} \; 2>/dev/null || true sudo find storage -type f -exec chmod 664 {} \; 2>/dev/null || true @@ -40,18 +43,16 @@ sudo chown -R "$USER":www-data "$UPLOADS_DIR" 2>/dev/null || true sudo find "$UPLOADS_DIR" -type d -exec chmod 2775 {} \; 2>/dev/null || true sudo find "$UPLOADS_DIR" -type f -exec chmod 664 {} \; 2>/dev/null || true -docker stop "$CONTAINER" 2>/dev/null || true -docker rm "$CONTAINER" 2>/dev/null || true -docker compose -f "$COMPOSE_FILE" down --remove-orphans 2>/dev/null || true -docker compose -f "$COMPOSE_FILE" up -d --build +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" down --remove-orphans || true +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" up -d --build -sleep 3 -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan migrate --force || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan optimize:clear || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan config:cache || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan route:cache || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan view:cache || true +sleep 5 + +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan optimize:clear +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan config:cache +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan route:cache +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan view:cache docker image prune -f 2>/dev/null || true diff --git a/scripts/deploy-test.sh b/scripts/deploy-test.sh index 7d6a3aa..c0428db 100755 --- a/scripts/deploy-test.sh +++ b/scripts/deploy-test.sh @@ -6,17 +6,19 @@ ENV_SOURCE="/opt/projects/bogazici/corporate-api/test/.env.test" BRANCH="test" CONTAINER="bdc-api-test" COMPOSE_FILE="docker-compose.test.yml" +COMPOSE_PROJECT="bogazici-api-test" UPLOADS_DIR="/opt/projects/bogazici/corporate-api/test/uploads" echo "🚀 [API] Test deploy başlatılıyor..." cd "$PROJECT_DIR" -sudo chown -R "$USER":www-data storage bootstrap/cache 2>/dev/null || true -sudo find storage -type d -exec chmod 2775 {} \; 2>/dev/null || true -sudo find storage -type f -exec chmod 664 {} \; 2>/dev/null || true -sudo find bootstrap/cache -type d -exec chmod 2775 {} \; 2>/dev/null || true -sudo find bootstrap/cache -type f -exec chmod 664 {} \; 2>/dev/null || true +git config --global --add safe.directory "$PROJECT_DIR" || true + +find storage -type d -exec chmod 2775 {} \; 2>/dev/null || true +find storage -type f -exec chmod 664 {} \; 2>/dev/null || true +find bootstrap/cache -type d -exec chmod 2775 {} \; 2>/dev/null || true +find bootstrap/cache -type f -exec chmod 664 {} \; 2>/dev/null || true git fetch origin git checkout "$BRANCH" @@ -35,23 +37,20 @@ if ! grep -q '^APP_KEY=base64:' .env; then exit 1 fi -sudo mkdir -p "$UPLOADS_DIR"/{images,videos,hero-slides,settings,pages,courses,announcements,categories} -sudo chown -R "$USER":www-data "$UPLOADS_DIR" 2>/dev/null || true -sudo find "$UPLOADS_DIR" -type d -exec chmod 2775 {} \; 2>/dev/null || true -sudo find "$UPLOADS_DIR" -type f -exec chmod 664 {} \; 2>/dev/null || true +mkdir -p "$UPLOADS_DIR"/{images,videos,hero-slides,settings,pages,courses,announcements,categories} +find "$UPLOADS_DIR" -type d -exec chmod 2775 {} \; 2>/dev/null || true +find "$UPLOADS_DIR" -type f -exec chmod 664 {} \; 2>/dev/null || true -docker stop "$CONTAINER" 2>/dev/null || true -docker rm "$CONTAINER" 2>/dev/null || true -docker compose -f "$COMPOSE_FILE" down --remove-orphans 2>/dev/null || true -docker compose -f "$COMPOSE_FILE" up -d --build +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" down --remove-orphans || true +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" up -d --build -sleep 3 -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan migrate --force || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan optimize:clear || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan config:cache || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan route:cache || true -docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan view:cache || true +sleep 5 + +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan optimize:clear +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan config:cache +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan route:cache +docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan view:cache docker image prune -f 2>/dev/null || true