Deployment Aplikasi Laravel di Server Testing & Production dengan gitlab-ci

Deployment Aplikasi Laravel di Server Testing & Production dengan gitlab-ci – Pertama kita siapkan terlebih dahulu project laravel kosongan.

composer create-project --prefer-dist laravel/laravel laravel-gitlab-ci

Masuk ke directory laravel-gitlab-ci

cd laravel-gitlab-ci

Kemudian buat database dengan nama laravel-gitlab-ci anda dan sesuaikan koneksi database pada file .env anda

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-gitlab-ci
DB_USERNAME=root
DB_PASSWORD=

Kemudian jalankan migration

php artisan migrate

Jika anda menggunakan mysql, di lokal ada kemungkinan error SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

Ubah sedikit di migration anda, pada file /database/migrations/2014_10_12_000000_create_users_table.php dari

$table->string('email')->unique();

menjadi

$table->string('email', 100)->unique();

Juga pada file 2014_10_12_100000_create_password_resets_table.php, menjadi

 $table->string('email', 100)->index();

Setelah migation berhasil jalankan

php artisan serve

Maka akan berjalan applikasi laravel baru dengan database berjalan pada port 8000, anda bisa akses di lokal dengan mengunjungi http://127.0.0.1:8000.

Kemudian kita tambahkan Auth user, fitur bawaan dari laravel dengan langkah berikut.

composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev

Ketika kita Reload browser, maka akan muncul Menu Login & Register di atas.

Setelah itu, buat project di gitlab anda

Kemudian jalankan :

git init
git remote add origin https://gitlab.com/agung3wi/laravel-gitlab-ci.git
git add .
git commit -m "Initial commit"
git push -u origin master

Setelah itu ssh ke server, lalu siapkan private key dan public key di server.

ssh-keygen -t rsa -f pttas
cat pttas.pub >> ~/.ssh/authorized_keys

Setelah itu kalian jalankan setting Environment Variable di gitlab. Masuk ke Setting => CI/CD. tambahkan berikut:

ROOT_DIR merupakan document Root, dimana letak project laravel di server agar dapat diakses public.

SERVER_HOSTNAME adalah Host dari server

SSH_PRIVATE_KEY didapat dengan

cat pttas

USERNAME_SERVER adalah username yang digunakan untuk koneksi ssh ke server.

Setelah itu tambahkan file .gitlab-ci.yml di root project dan isikan berikut:

dependency:
  image: composer
  stage: build
  script:
    - composer install
  artifacts:
    paths:
      - /builds/agung3wi/laravel-gitlab-ci

deploy-ke-server-testing:
  stage: deploy
  image: debian:latest
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y && apt-get install rsync -y  )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && ssh-keyscan -H "$SERVER_HOSTNAME" > ~/.ssh/known_hosts'
  script:
    - ssh $USERNAME_SERVER@$SERVER_HOSTNAME 'cd $ROOT_DIR && php artisan down'
    - rsync -avz /builds/agung3wi/laravel-gitlab-ci/ $USERNAME_SERVER@$SERVER_HOSTNAME:$ROOT_DIR/ --exclude=storage/*.key --exclude=.env --delete
    - ssh $USERNAME_SERVER@$SERVER_HOSTNAME 'cd $ROOT_DIR && php artisan up'

Lalu commit and push codingan anda. Selanjutnya jika anda melakukan perubahan dan membuat script migration, kemudian push ke repository akan automatis deploy

Baca juga Cara Installasi Jenkins menggunakan Docker