Compare commits

..

26 Commits

Author SHA1 Message Date
5fb91c8701 Merge pull request 'test' (#13) from test into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #13
2026-03-27 21:42:34 +03:00
38e1058e05 Merge pull request 'drone yml update' (#12) from develop into test
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2026-03-27 21:36:01 +03:00
Bulut Kuru
acd3298c61 drone yml update 2026-03-27 21:35:37 +03:00
13fc0a25d0 Merge pull request 'test' (#11) from test into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #11
2026-03-27 20:58:35 +03:00
486d1b55c5 Merge pull request 'develop' (#10) from develop into test
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
Reviewed-on: #10
2026-03-27 20:56:42 +03:00
Bulut Kuru
733607493a deploy sh6
All checks were successful
continuous-integration/drone/pr Build is passing
2026-03-27 20:54:05 +03:00
Bulut Kuru
8bd35c425d deploy sh5
Some checks reported errors
continuous-integration/drone/push Build was killed
2026-03-27 20:53:18 +03:00
Bulut Kuru
5ad61853b4 Simplify Drone pipeline for test and prod only
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-27 20:51:20 +03:00
1fd5cab540 Merge pull request 'deploy sh4' (#9) from develop into test
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #9
2026-03-27 14:58:46 +03:00
Bulut Kuru
272010d738 deploy sh4
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2026-03-27 14:55:05 +03:00
9099622ceb Merge pull request 'test' (#8) from test into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #8
2026-03-27 14:43:03 +03:00
72da6a7600 Merge pull request 'deploy sh3' (#7) from develop into test
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
Reviewed-on: #7
2026-03-27 14:41:37 +03:00
Bulut Kuru
9e88de9902 deploy sh3
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-03-27 14:40:18 +03:00
87fbf98858 Merge pull request 'deploy sh2' (#6) from develop into test
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #6
2026-03-27 14:37:50 +03:00
Bulut Kuru
fa14e752ac deploy sh2
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-03-27 14:36:01 +03:00
4f01c1bec8 Merge pull request 'test' (#5) from test into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #5
2026-03-27 14:29:17 +03:00
a24c2f18d8 Merge pull request 'develop' (#4) from develop into test
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
Reviewed-on: #4
2026-03-27 14:25:43 +03:00
Bulut Kuru
fea885f6cf Fix Drone test deploy without sudo
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2026-03-27 14:23:49 +03:00
Bulut Kuru
268bf371df Fix Drone test deploy without sudo 2026-03-27 14:23:27 +03:00
49f9f69b1e Merge pull request 'deploy sh1' (#3) from develop into test
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #3
2026-03-27 14:13:08 +03:00
Bulut Kuru
e51d6b0cb0 deploy sh1
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2026-03-27 14:11:35 +03:00
c7e251cc1c Merge pull request 'develop' (#2) from develop into test
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
Reviewed-on: #2
2026-03-27 13:39:44 +03:00
Bulut Kuru
cb5c24648d deploy sh
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2026-03-27 13:36:55 +03:00
bulut
f008e2d9d1 trust proxies 1
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-27 12:00:58 +03:00
bulut
b25c5d2cfb update ssl force
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-27 11:40:00 +03:00
bulut
79d0b2e54f Add Drone CI pipeline
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-27 11:28:18 +03:00
6 changed files with 88 additions and 65 deletions

View File

@@ -1,29 +1,15 @@
kind: pipeline kind: pipeline
type: docker type: docker
name: default name: bogazici-api
trigger: trigger:
event:
- push
branch: branch:
- develop
- test - test
- main - main
steps: steps:
- name: laravel-check
image: php:8.4-cli
when:
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
- 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 test || true
- name: deploy-test - name: deploy-test
image: appleboy/drone-ssh image: appleboy/drone-ssh
when: when:
@@ -31,11 +17,12 @@ steps:
- test - test
settings: settings:
host: host:
from_secret: server_host from_secret: SERVER_HOST
username: username:
from_secret: server_user from_secret: SERVER_USER
key: key:
from_secret: server_ssh_key from_secret: SERVER_SSH_KEY
port: 22
script: script:
- cd /opt/projects/bogazici/corporate-api/test/api - cd /opt/projects/bogazici/corporate-api/test/api
- bash scripts/deploy-test.sh - bash scripts/deploy-test.sh
@@ -47,11 +34,12 @@ steps:
- main - main
settings: settings:
host: host:
from_secret: server_host from_secret: SERVER_HOST
username: username:
from_secret: server_user from_secret: SERVER_USER
key: key:
from_secret: server_ssh_key from_secret: SERVER_SSH_KEY
port: 22
script: script:
- cd /opt/projects/bogazici/corporate-api/prod/api - cd /opt/projects/bogazici/corporate-api/prod/api
- bash scripts/deploy-prod.sh - bash scripts/deploy-prod.sh

View File

@@ -31,6 +31,7 @@ use App\Repositories\Eloquent\UserRepository;
use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str; use Illuminate\Support\Str;
@@ -39,6 +40,8 @@ class AppServiceProvider extends ServiceProvider
/** /**
* @var array<class-string, class-string> * @var array<class-string, class-string>
*/ */
public array $bindings = [ public array $bindings = [
CategoryRepositoryInterface::class => CategoryRepository::class, CategoryRepositoryInterface::class => CategoryRepository::class,
CourseRepositoryInterface::class => CourseRepository::class, CourseRepositoryInterface::class => CourseRepository::class,
@@ -68,6 +71,8 @@ class AppServiceProvider extends ServiceProvider
*/ */
public function boot(): void public function boot(): void
{ {
URL::forceScheme('https');
Str::macro('turkishSlug', function (string $text, string $separator = '-'): string { Str::macro('turkishSlug', function (string $text, string $separator = '-'): string {
$map = [ $map = [
'ç' => 'c', 'ç' => 'c',

View File

@@ -1,9 +1,10 @@
name: bogazici-api-prod
services: services:
bdc-api-prod: bdc-api-prod:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: bdc-api-prod
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- ./:/var/www/html - ./:/var/www/html

View File

@@ -1,9 +1,10 @@
name: bogazici-api-test
services: services:
bdc-api-test: bdc-api-test:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: bdc-api-test
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- ./:/var/www/html - ./:/var/www/html

View File

@@ -6,17 +6,19 @@ ENV_SOURCE="/opt/projects/bogazici/corporate-api/prod/.env.prod"
BRANCH="main" BRANCH="main"
CONTAINER="bdc-api-prod" CONTAINER="bdc-api-prod"
COMPOSE_FILE="docker-compose.prod.yml" COMPOSE_FILE="docker-compose.prod.yml"
COMPOSE_PROJECT="bogazici-api-prod"
UPLOADS_DIR="/opt/projects/bogazici/corporate-api/prod/uploads" UPLOADS_DIR="/opt/projects/bogazici/corporate-api/prod/uploads"
echo "🚀 [API] Production deploy başlatılıyor..." echo "🚀 [API] Production deploy başlatılıyor..."
cd "$PROJECT_DIR" cd "$PROJECT_DIR"
sudo chown -R "$USER":www-data storage bootstrap/cache 2>/dev/null || true git config --global --add safe.directory "$PROJECT_DIR" || 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 find storage -type d -exec chmod 2775 {} \; 2>/dev/null || true
sudo find bootstrap/cache -type d -exec chmod 2775 {} \; 2>/dev/null || true find storage -type f -exec chmod 664 {} \; 2>/dev/null || true
sudo find bootstrap/cache -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 fetch origin
git checkout "$BRANCH" git checkout "$BRANCH"
@@ -35,23 +37,35 @@ if ! grep -q '^APP_KEY=base64:' .env; then
exit 1 exit 1
fi 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
docker stop "$CONTAINER" 2>/dev/null || true mkdir -p "$UPLOADS_DIR"
docker rm "$CONTAINER" 2>/dev/null || true chmod 2775 "$UPLOADS_DIR" 2>/dev/null || true
docker compose -f "$COMPOSE_FILE" down --remove-orphans 2>/dev/null || true
docker compose -f "$COMPOSE_FILE" up -d --build
sleep 3 docker rm -f bogazici-api-prod-bdc-api-prod-1 2>/dev/null || true
docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev || true docker rm -f bdc-api-prod 2>/dev/null || 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 -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" down --remove-orphans || true
docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan config:cache || true docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" up -d --build
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 echo "⏳ Container hazır olması bekleniyor..."
for i in {1..30}; do
if docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" ps --status running | grep -q "$CONTAINER"; then
echo "✅ Container ayakta"
break
fi
if [ "$i" -eq 30 ]; then
echo "❌ HATA: Container zamanında ayağa kalkmadı"
docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" logs --tail=100
exit 1
fi
sleep 1
done
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 docker image prune -f 2>/dev/null || true

View File

@@ -6,17 +6,19 @@ ENV_SOURCE="/opt/projects/bogazici/corporate-api/test/.env.test"
BRANCH="test" BRANCH="test"
CONTAINER="bdc-api-test" CONTAINER="bdc-api-test"
COMPOSE_FILE="docker-compose.test.yml" COMPOSE_FILE="docker-compose.test.yml"
COMPOSE_PROJECT="bogazici-api-test"
UPLOADS_DIR="/opt/projects/bogazici/corporate-api/test/uploads" UPLOADS_DIR="/opt/projects/bogazici/corporate-api/test/uploads"
echo "🚀 [API] Test deploy başlatılıyor..." echo "🚀 [API] Test deploy başlatılıyor..."
cd "$PROJECT_DIR" cd "$PROJECT_DIR"
sudo chown -R "$USER":www-data storage bootstrap/cache 2>/dev/null || true git config --global --add safe.directory "$PROJECT_DIR" || 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 find storage -type d -exec chmod 2775 {} \; 2>/dev/null || true
sudo find bootstrap/cache -type d -exec chmod 2775 {} \; 2>/dev/null || true find storage -type f -exec chmod 664 {} \; 2>/dev/null || true
sudo find bootstrap/cache -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 fetch origin
git checkout "$BRANCH" git checkout "$BRANCH"
@@ -35,23 +37,35 @@ if ! grep -q '^APP_KEY=base64:' .env; then
exit 1 exit 1
fi fi
sudo mkdir -p "$UPLOADS_DIR"/{images,videos,hero-slides,settings,pages,courses,announcements,categories} mkdir -p "$UPLOADS_DIR"
sudo chown -R "$USER":www-data "$UPLOADS_DIR" 2>/dev/null || true chmod 2775 "$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 -f bogazici-api-test-bdc-api-test-1 2>/dev/null || true
docker rm "$CONTAINER" 2>/dev/null || true docker rm -f bdc-api-test 2>/dev/null || true
docker compose -f "$COMPOSE_FILE" down --remove-orphans 2>/dev/null || true
docker compose -f "$COMPOSE_FILE" up -d --build
sleep 3 docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" down --remove-orphans || true
docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" composer install --no-interaction --prefer-dist --optimize-autoloader || true docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" up -d --build
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 echo "⏳ Container hazır olması bekleniyor..."
docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan route:cache || true for i in {1..30}; do
docker compose -f "$COMPOSE_FILE" exec -T "$CONTAINER" php artisan view:cache || true if docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" ps --status running | grep -q "$CONTAINER"; then
echo "✅ Container ayakta"
break
fi
if [ "$i" -eq 30 ]; then
echo "❌ HATA: Container zamanında ayağa kalkmadı"
docker compose -p "$COMPOSE_PROJECT" -f "$COMPOSE_FILE" logs --tail=100
exit 1
fi
sleep 1
done
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 docker image prune -f 2>/dev/null || true