Advertisement
  1. Code
  2. PHP

Menyebarkan Aplikasi Laravel Menggunakan Capistrano

Scroll to top
Read Time: 7 min

() translation by (you can also view the original English article)

Jadi Anda baru saja membangun aplikasi web yang mewah dan Anda berencana untuk memasangnya secara online. Ini bisa dilakukan dengan banyak cara. Dalam artikel ini saya ingin membahas satu pendekatan untuk menerapkan sistem backend Anda ke server produksi Anda. Kami akan melalui langkah-langkah berikut dengan contoh aplikasi Laravel, tetapi ini dapat diterapkan ke bahasa atau teknologi lain

Memperbarui

Artikel ini telah diperbarui ke Capistrano 3. Lebih lanjut tentang versi baru dapat ditemukan di situs web capistrano.

Masa lalu

Mungkin Anda telah menaruh beberapa situs web online di masa lalu. Mungkin Anda telah menggunakan klien FTP dan mengunggah bit dan byte dengan tangan. Atau mungkin Anda selalu masuk ke server Anda melalui ssh dan menarik perubahan secara manual.

Gagasan

Tujuan kami adalah untuk menyederhanakan proses ini semaksimal mungkin. Idenya adalah menggunakan repositori kode Anda sebagai sumber untuk setiap penyebaran. Alat penyebaran, dalam kapitrano kasus kami, akan secara otomatis masuk ke server Anda dan membangun sistem Anda langsung dari repositori Anda.

Pengerahan perangkat lunak adalah semua kegiatan yang membuat sistem perangkat lunak tersedia untuk digunakan. - Wikipedia

Apa yang Anda Butuhkan ...

... di Server Jarak Jauh Anda

Server jauh Anda perlu menyediakan akses ssh. Ini juga harus menginstal semua dependensi yang diperlukan untuk proyek Anda seperti GIT, PHP, MySQL, Komposer, ... Selain itu, Anda tidak memerlukan perangkat lunak tambahan pada server produksi Anda.

... di Mesin Lokal Anda

Untuk menginstal dan menggunakan capistrano, Anda memerlukan setidaknya Ruby 1.9 (jika Anda tidak menginstal Ruby, saya sarankan menginstalnya menggunakan rbenv). Untuk menginstal capistrano, Anda cukup menjalankan:

1
2
$ gem install capistrano

Jadi mengapa capistrano, Anda mungkin bertanya. Seperti biasa, ada banyak cara untuk menyelesaikan tugas, tetapi dalam kasus saya, capistrano sepertinya selalu menjadi pendekatan yang paling mudah dan fleksibel. Anda dapat mengkonfigurasinya untuk semua kebutuhan Anda dan ada banyak plugin di luar sana yang menyederhanakan pekerjaan Anda lagi.

Capistrano adalah utilitas dan kerangka kerja untuk menjalankan perintah secara paralel pada beberapa mesin jarak jauh, melalui SSH. Ini menggunakan DSL sederhana (dipinjam sebagian dari Rake) yang memungkinkan Anda untuk menentukan tugas, yang dapat diterapkan pada mesin dalam peran tertentu. Ini juga mendukung koneksi tunneling melalui beberapa mesin gateway untuk memungkinkan operasi dilakukan di belakang VPN dan firewall.

Mempersiapkan

Sekarang kami memiliki semua yang kami butuhkan, jadi mari siapkan setelan penerapan kami. Tapi pertama-tama kita harus membuat folder di server jauh di mana semua file harus dikerahkan. Masuk ke server Anda dengan SSH dan buat folder. Tempat umum adalah / var / www /. Jadi mari kita lakukan ini:

1
2
$ sudo mkdir /var/www/my-app
3
$ sudo chown -R username:group /var/www/my-app

Itu dia. Tidak ada yang bisa dilakukan di server jauh, sehingga Anda dapat menutup koneksi ssh dan melanjutkan. Pergilah ke proyek Anda (atau folder lain, itu tidak masalah sekarang) dan jalankan:

1
2
$ cd my-project
3
$ cap install

Perintah ini akan membuat file-file dasar yang kita butuhkan. Setelah itu folder Anda akan terlihat seperti ini.

1
2
.
3
├── Capfile
4
├── config
5
│   ├── deploy
6
│   │   ├── production.rb
7
│   │   └── staging.rb
8
│   └── deploy.rb
9
└── lib
10
    └── capistrano
11
        └── tasks

Capfile seperti titik mount untuk capistrano tetapi untuk saat ini kita hanya perlu mengedit config / deploy.rb dan config / deploy / production.rb. File pertama bertanggung jawab untuk semua langkah membangun, file kedua mewakili "tahap". Anda dapat memiliki beberapa tahapan seperti produksi, pementasan, pengujian ... Di setiap file konfigurasi tahap, Anda dapat menentukan server Anda. Mari buka dua file tersebut di editor teks favorit Anda dan ganti konten dengan cuplikan berikut. Kami akan pergi melalui kode sesudahnya.

Kami akan mulai dengan konfigurasi / deploy / production.rb:

1
2
role :app, %w{username@123.456.789.123} # EDIT your ssh username and server ip address 

3
4
set :ssh_options, {
5
    auth_methods: %w(password),
6
    password: "" # EDIT your ssh password

7
}

Selanjutnya kita akan mengubah konfigurasi / deploy.rb:

1
2
set :application, "Your app name"  # EDIT your app name

3
set :repo_url,  "https://github.com/laravel/laravel.git" # EDIT your git repository

4
set :deploy_to, "/var/www/my-app" # EDIT folder where files should be deployed to

5
6
namespace :deploy do
7
    
8
    desc "Build"
9
    after :updated, :build do
10
        on roles(:app) do
11
            within release_path  do
12
                execute :composer, "install --no-dev --quiet" # install dependencies

13
                execute :chmod, "u+x artisan" # make artisan executable

14
            end
15
        end
16
    end
17
18
    desc "Restart"
19
    task :restart do
20
        on roles(:app) do
21
            within release_path  do
22
                execute :chmod, "-R 777 app/storage/cache"
23
                execute :chmod, "-R 777 app/storage/logs"
24
                execute :chmod, "-R 777 app/storage/meta"
25
                execute :chmod, "-R 777 app/storage/sessions"
26
                execute :chmod, "-R 777 app/storage/views"
27
            end
28
        end
29
    end
30
31
end

Anda sekarang harus meletakkan data Anda di setiap baris dengan komentar #EDIT (alamat ip, git repo, ssh user, kata sandi, dll). The: deploy_to variable seharusnya adalah folder yang baru kita buat. Server web Anda (Apache, Nginx, ...) harus mengarah ke / var / www / my-app / current / public.

Di ruang nama: gunakan blokir file deploy.rb yang Anda tentukan apa yang sebenarnya harus terjadi untuk setiap penerapan. Jadi ada dua tugas. Dalam tugas membangun kami menginstal semua dependensi PHP Anda, sama seperti Anda terbiasa selama pengembangan. Setelah itu kita membuat file pengrajin dieksekusi untuk menggunakannya untuk migrasi. Dalam tugas restart kami perbaiki izin untuk folder penyimpanan.

Semua tugas tersebut dijalankan dalam urutan berikut. Anda dapat menghubungkan setiap tugas jika perlu tetapi untuk saat ini kami tetap dengan konfigurasi sederhana kami.

1
2
deploy:starting    - start a deployment, make sure everything is ready
3
deploy:started     - started hook (for custom tasks)
4
deploy:updating    - update server(s) with a new release
5
deploy:updated     - updated hook
6
deploy:publishing  - publish the new release
7
deploy:published   - published hook
8
deploy:finishing   - finish the deployment, clean up everything
9
deploy:finished    - finished hook

Setiap penyebaran disimpan di / var / www / my-app / releases /. Tugas built-in menyebar: penerbitan menciptakan tautan simbolis dari penyebaran baru-baru ini ke folder saat ini. Dengan cara ini Anda dapat menyimpan rilis yang lebih lama dan beralih versi tanpa offline untuk kedua. Ketika tugas ini berjalan, versi terbaru Anda sedang online.

Anda dapat dengan mudah menambahkan tugas Anda sendiri jika proses pembuatan Anda memerlukan beberapa langkah tambahan. Untuk informasi lebih rinci, saya sarankan Anda membaca dokumentasi resmi.

Setelah langkah konfigurasi dasar ini, kami siap untuk penerapan pertama kami.

Api!

Jadi itulah saat yang Anda tunggu. Bagian tersulit dilakukan. Untuk saat ini setiap kali Anda ingin mengirim pembaruan aplikasi, Anda hanya perlu menjalankan perintah magis berikut. Capistrano akan membaca file config / deploy.rb config / deploy / production.rb Anda dan menjalankan setiap tugas. Jika tugas gagal, penyebaran akan berhenti dan versi lama masih online.

1
2
$ cap production deploy

Anda akan melihat banyak output teks dan setelah sedikit waktu (tergantung pada server Anda) semuanya harus lengkap. Itu mudah, bukan?

Catatan: Untuk saat ini kami hanya menyiapkan tahap produksi kami, tetapi Anda dapat mengganti production dengan tahap lain, misalnya server pengujian Anda dan jalankan $ cap staging deploy.

Pemikiran Lebih Lanjut

Keamanan

Mungkin Anda mungkin sedikit khawatir jika Anda harus memasukkan kata sandi plaintext Anda di file konfigurasi. Saya hanya memilih cara itu untuk membuat demonstrasi sesederhana mungkin, tetapi di dunia nyata Anda mungkin ingin menggunakan kunci SSH. Anda dapat mengimpor yang seperti ini:

1
2
set :ssh_options, {
3
    keys: %w("/path/to/your/key.pem"), # EDIT your ssh key

4
    auth_methods: %w(publickey)
5
}

Database

Untuk saat ini kami baru saja fokus pada penggelaran file yang sebenarnya ke rumah baru mereka tetapi dalam banyak skenario Anda mungkin juga melakukan sesuatu dengan database Anda. Laravel memiliki alat yang sempurna untuk itu: migrations.  Anda bisa menambahkan langkah baru di mana Anda menjalankan  migrations ini. Setelah itu tugas membangun kami mungkin terlihat seperti ini:

1
2
desc "Build"
3
after :updated, :build do
4
    on roles(:app) do
5
        within release_path  do
6
            execute :composer, "install --no-dev --quiet" # install dependencies

7
            execute :chmod, "u+x artisan" # make artisan executable

8
            execute :php, "artisan migrate" # run migrations

9
        end
10
    end
11
end

Anda juga harus menambahkan tugas ini di blok transaction dari tugas update. Sekarang setiap kali Anda menyebarkan, database akan diperbarui ke migrasi terbaru Anda.

Rollback

Terkadang Anda menerapkan versi aplikasi yang tidak berfungsi dan Anda perlu membatalkan perubahan ini. Capistrano memiliki fitur built-in untuk itu yang disebut "rollback". jalankan saja:

1
2
$ cap production deploy:rollback

Conclusion

Anda baru saja belajar cara yang sangat sederhana untuk menerapkan aplikasi Anda ke server (s) produksi Anda dengan Capistrano. Setelah pekerjaan konfigurasi selesai, hanya dibutuhkan satu perintah untuk menerapkan versi terbaru Anda dalam hitungan detik. Tetapi seperti yang disebutkan sebelumnya, ini bukan satu-satunya cara untuk melakukan ini.

Anda juga harus memeriksa grunt pelari tugas yang cocok untuk membangun dan menyebarkan aplikasi JavaScript. Pendekatan berbeda yang lengkap membutuhkan docker pelabuhan yang bertindak seperti VM ringan. Idenya di sini adalah untuk menyebarkan seluruh lingkungan Anda sebagai mesin virtual. Periksa mereka!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.