7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. PHP

Setting Up Mirror lokal untuk komposer paket dengan Satis

Read Time: 12 mins

Indonesian (Bahasa Indonesia) translation by Kang Abbad (you can also view the original English article)

Instalasi semua Perpustakaan PHP dengan komposer adalah cara yang bagus untuk menghemat waktu. Tetapi proyek yang lebih besar diuji dan dijalankan pada setiap commit untuk sistem kontrol (SVC) versi perangkat lunak Anda secara otomatis akan mengambil waktu lama untuk menginstal semua paket-paket yang diperlukan dari Internet. Anda ingin menjalankan tes Anda secepat mungkin melalui sistem integrasi berkesinambungan (CI) Anda sehingga Anda memiliki umpan balik yang cepat dan reaksi cepat kegagalan. Dalam tutorial ini kami akan membuat mirror lokal ke proxy Semua paket yang dibutuhkan dalam proyek Anda composer.json file. Ini akan membuat kami CI bekerja lebih cepat, menginstal paket-paket melalui jaringan lokal atau bahkan host di mesin yang sama, dan memastikan bahwa kami memiliki versi tertentu dari paket yang selalu tersedia.


Apa itu Satis?

Satis adalah nama dari aplikasi kita akan menggunakan cermin repositori berbagai proyek kami. Itu duduk sebagai proxy antara Internet dan komposer Anda. Solusi kami akan membuat mirror lokal dari beberapa paket dan menginstruksikan komposer kami menggunakannya daripada sumber-sumber yang ditemukan di Internet.

Berikut adalah gambar yang mengatakan lebih dari seribu kata.

ArchitectureArchitectureArchitecture

Proyek kami akan menggunakan komposer seperti biasa. Itu akan dikonfigurasi untuk menggunakan server Satis lokal sebagai sumber utama. Jika paket yang ada, itu akan dipasang dari sana. Jika tidak, kami akan membiarkan komposer menggunakan default packagist.org untuk mengambil paket.


Mendapatkan Satis

Satis tersedia melalui komposer, jadi instalasi sangat sederhana. Dalam arsip kode sumber yang terpasang, Anda akan menemukan Satis diinstal dalam folder sumber Satis. Pertama kita akan menginstal komposer sendiri.

Kemudian kita akan menginstal Satis.


Mengkonfigurasi Satis

Satis dikonfigurasi oleh file JSON sangat mirip dengan komposer. Anda dapat menggunakan nama apapun yang Anda inginkan untuk file dan tentukan untuk penggunaan kemudian. Kami akan menggunakan "cermin-packages.conf".

Mari kita menganalisis file konfigurasi ini.

  • nama - mewakili string yang akan ditampilkan pada antarmuka web cermin kami.
  • homepage - adalah alamat web di mana paket kami akan disimpan. Ini tidak memberitahu server web kami menggunakan alamat dan port, inilah melainkan hanya informasi konfigurasi bekerja. Kami akan mengatur akses ke ini pada alamat dan port kemudian.
  • repositori - daftar repositori yang diperintahkan oleh preferensi. Dalam contoh kita, repositori pertama adalah sebuah garpu Github penebangan monolog Perpustakaan. Ini memiliki beberapa modifikasi dan kami ingin menggunakan garpu yang spesifik ketika menginstal monolog. Jenis repositori ini adalah "vcs". Repositori kedua adalah jenis "komposer". URL-nya adalah situs packagist.org standar.
  • memerlukan - daftar paket-paket yang kami ingin cermin. Hal ini dapat mewakili paket tertentu dengan versi tertentu atau cabang atau versi apapun untuk hal itu. Menggunakan sintaks yang sama sebagai "memerlukan" atau "memerlukan-dev" di composer.json Anda.
  • memerlukan-dependensi - adalah pilihan akhir dalam contoh. Ini akan memberitahu Satis cermin tidak hanya paket kami ditentukan dalam bagian "memerlukan" tetapi juga semua dependensi mereka.

Untuk dengan cepat mencoba pengaturan kami kita perlu memberitahu Satis membuat mirror pertama. Menjalankan perintah ini di folder mana Anda menginstal Satis.

Sementara proses ini berlangsung, Anda akan melihat bagaimana Satis cermin setiap versi menemukan paket diperlukan. Bersabarlah mungkin diperlukan beberapa saat untuk membangun paket-paket.

Satis memerlukan bahwa date.timezone akan ditentukan di php.ini file, jadi pastikan itu dan diatur untuk zona waktu Anda. Jika kesalahan akan muncul.

Kemudian kita dapat menjalankan PHP server misalnya di konsol kami menunjuk ke repositori baru saja dibuat. PHP 5.4 atau yang lebih baru diperlukan.

Dan kita dapat menelusuri paket cermin dan bahkan mencari orang-orang tertentu dengan menunjuk peramban web kami http://localhost:4680:

MirrorWebpageMirrorWebpageMirrorWebpage

Mari kita meng-Host di Apache

Jika Anda memiliki Apache berjalan di tangan, menciptakan dengan virtual host untuk Satis akan cukup sederhana.

Kita hanya menggunakan .conf file seperti ini, dimasukkan ke dalam folder conf.d Apache, biasanya /etc/apache2/conf.d. Ini menciptakan dengan virtual host pada 4680 port dan menunjuk ke folder kami. Tentu Anda dapat menggunakan port apa pun yang Anda inginkan.


Memperbarui mirror kami

Satis tidak dapat secara otomatis memperbarui cermin kecuali kita menceritakannya. Jadi cara termudah, pada setiap sistem mirip UNIX berbasis, adalah untuk hanya menambahkan tugas cron untuk sistem Anda. Itu akan sangat mudah, dan hanya script sederhana untuk menjalankan perintah update kami.

Kelemahan dari solusi ini adalah bahwa hal itu statis. Kita harus secara manual update cermin packages.conf setiap kali kita menambahkan paket lain untuk composer.json proyek kami. Jika Anda adalah bagian dari sebuah tim di perusahaan dengan proyek besar dan integrasi berkesinambungan server, Anda tidak dapat mengandalkan pada orang-orang yang mengingat untuk menambahkan paket pada server. Mereka mungkin tidak bahkan memiliki izin untuk mengakses infrastruktur CI.


Dinamis memperbarui konfigurasi Satis

Ini adalah waktu untuk latihan PHP TDD. Jika Anda hanya ingin kode siap dan berjalan, memeriksa kode sumber yang melekat pada tutorial ini.

Seperti biasa kita mulai dengan tes degeneratif, hanya cukup untuk memastikan bahwa kami memiliki kerja kerangka pengujian. Anda mungkin memperhatikan bahwa saya memiliki cukup aneh mencari require_once garis, ini adalah karena saya ingin menghindari keharusan untuk menginstal ulang PHPUnit dan olok-olok untuk setiap proyek yang kecil. Jadi saya memiliki mereka dalam folder penjual di akar NetTuts saya. Anda hanya harus menginstalnya dengan komposer dan drop baris require_once sama sekali.

Yang terlihat tentang benar. Semua bidang kecuali "memerlukan" bersifat statis. Kita perlu untuk menghasilkan hanya paket. Repositori menunjuk klon git pribadi kami dan packagist yang diperlukan. Mengelola orang-orang yang lebih pekerjaan sysadmin daripada seorang pengembang perangkat lunak.

Tentu saja ini gagal dengan:

Memperbaiki yang sangat mudah.

Aku hanya menambahkan metode yang kosong dengan nama yang diperlukan, sebagai pribadi, kelas uji kami. Keren, tapi sekarang kita memiliki kesalahan lain.

Jadi, null tidak sesuai kami string yang berisi semua konfigurasi default itu.

OK, yang bekerja. Semua tes lewat.

Tapi kami memperkenalkan duplikasi mengerikan. Teks yang statis di dua tempat, tertulis huruf demi huruf di dua tempat yang berbeda. Mari kita memperbaikinya:

Ahhh! Itu lebih baik.

Yah. Yang juga lolos. Tetapi juga menyoroti beberapa duplikasi dan tugas tidak berguna.

Kami inlined $expected variabel. $actual juga bisa inlined, tapi aku seperti itu lebih baik dengan cara ini. Itu membuat fokus pada apa yang diuji.

Sekarang kita memiliki masalah lain. Saya ingin menulis tes berikutnya akan terlihat seperti ini:

Tetapi setelah menulis implementasi sederhana, kita akan melihat memerlukan json_decode() dan json_encode(). Dan tentu saja fungsi memformat tali dan pencocokan string akan sulit di terbaik. Kita harus mengambil langkah mundur.

Kami mengubah metode penegasan kami untuk membandingkan string JSON dan kami juga recoded variabel $actual kami. ParseComposerConf() juga dimodifikasi untuk menggunakan metode ini. Anda akan melihat dalam sekejap bagaimana hal ini membantu kita. Tes berikutnya kami menjadi lebih spesifik JSON.

Dan membuat tes ini lulus, bersama dengan seluruh tes, cukup mudah, sekali lagi.

Kami mengambil input JSON string, men-decode, dan jika itu berisi bidang "memerlukan" kami menggunakan yang file konfigurasi Satis kami sebaliknya. Tapi kita ingin cermin semua versi dari sebuah paket, bukan hanya orang yang terakhir. Jadi mungkin kita ingin memodifikasi kami tes untuk memeriksa yang versi "*" di Satis, terlepas dari apa versi yang tepat berada di composer.json.

Yang jelas gagal dengan pesan keren:

Sekarang, kita perlu untuk benar-benar mengedit JSON kami sebelum re-encoding itu.

Untuk membuat tes lulus kita harus iterate atas setiap elemen array paket-paket yang diperlukan dan versi mereka untuk ' *'. Lihat metode toAllVersion() untuk rincian lebih lanjut. Dan untuk mempercepat tutorial ini sedikit, kami juga ekstrak beberapa metode swasta dalam langkah yang sama. Dengan cara ini, parseComoserConf() menjadi sangat deskriptif dan mudah dipahami. Kita juga bisa inline $config ke argumen addNewRequires(), tapi untuk alasan estetika aku meninggalkannya pada dua baris.

Tapi bagaimana dengan "memerlukan-dev" di composer.json?

Yang jelas gagal. Kami dapat membuat dengan hanya copy/paste kami jika kondisi di addNewRequires():

Yap, yang membuatnya pass, tetapi mereka diduplikasi jika pernyataan jahat melihat. Mari kita berurusan dengan mereka.

Kita bisa bahagia lagi, tes berwarna hijau dan kami kami refactored kode kita. Saya pikir hanya satu tes yang tersisa harus ditulis. Bagaimana jika kita memiliki keduanya "memerlukan" dan "memerlukan-dev" bagian dalam composer.json?

Gagal karena paket-paket yang ditetapkan oleh "memerlukan-dev" akan menimpa orang-orang dari "memerlukan" dan kita akan memiliki kesalahan:

Hanya menambahkan tanda plus untuk menggabungkan array, dan kami selesai.

Tes lewat. Logika kami sudah selesai. Semua kita yang tersisa untuk lakukan adalah untuk ekstrak metode ke file mereka sendiri dan kelas. Versi final tes dan kelas SatisUpdater dapat ditemukan di kode sumber yang terlampir.

Kita sekarang dapat memodifikasi script cron kami untuk memuat parser kami dan menjalankannya pada composer.json kami. Ini akan menjadi spesifik ke folder tertentu proyek-proyek Anda. Berikut adalah contoh Anda dapat beradaptasi dengan sistem Anda.


Membuat proyek Anda menggunakan cermin

Kami berbicara tentang banyak hal dalam artikel ini, tetapi kita tidak menyebutkan bagaimana kami akan menginstruksikan proyek kami untuk menggunakan cermin daripada Internet. Kau tahu, default adalah packagist.org? Kecuali jika kita melakukan sesuatu seperti ini:

Itu akan membuat Anda cermin choise pertama untuk komposer. Tetapi menambahkan hal itu ke dalam composer.json proyek Anda tidak akan menonaktifkan akses ke packagist.org. Jika sebuah paket tidak dapat ditemukan pada mirror lokal, akan di-download dari Internet. Jika Anda ingin memblokir fitur ini, Anda mungkin juga ingin menambahkan baris berikut ke bagian repositori di atas:


Akhir pikiran

Thats it. Mirror lokal, dengan otomatis beradaptasi dan memperbarui paket. Rekan-rekan Anda tidak perlu menunggu lama sementara mereka atau CI server menginstal semua persyaratan dari proyek Anda. Selamat bersenang-senang.

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
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.