git - Bagaimana anda menguruskan fail pada pelayan?
淡淡烟草味
淡淡烟草味 2017-05-02 09:27:07
0
4
620

Terdapat beribu-ribu fail dalam laman web Adalah mustahil untuk memuat naik semula keseluruhan laman web menggunakan FTP setiap kali berpuluh-puluh fail ditukar Namun, ia bukanlah satu tugas yang mudah untuk mengingati fail yang telah diubah setiap kali. Selain itu, fail yang diubah suai ini bertaburan dalam banyak folder yang berbeza, menjadikannya lebih menyusahkan untuk mencarinya satu persatu dan memuat naiknya.

Jadi, bagaimanakah anda hanya memuat naik fail yang diubah suai dengan tepat dan mudah setiap kali?

PS. Pendekatan semasa saya ialah memasang git pada persekitaran pembangunan tempatan, memasang git pada pelayan jauh, dan kemudian tolak ke sini dan tarik ke sana. Tetapi anda masih perlu telnet atau ssh ke hujung jauh untuk menarik Adakah terdapat kaedah yang lebih automatik Selepas tekan di sini, pelayan akan mengemas kini secara automatik? Nak dengar cadangan semua.

淡淡烟草味
淡淡烟草味

membalas semua(4)
仅有的幸福

Kaedah paling mudah ialah memuat naik menggunakan git, yang disertakan dengan cangkuk, yang boleh merealisasikan penggunaan automatik.
Saya telah melakukan perkara yang sama seperti orang yang dipersoalkan sebelum ini, tetapi mudah untuk berbilang orang untuk mengacaukan projek itu.

世界只因有你

Terima kasih kepada @Cocbin atas peringatan, berdasarkan yang saya teliti prinsip cangkuk Git, dan kemudian melakukan perkara berikut berdasarkan projek saya:

Pertama sekali, kerana saya menggunakan projek di tapak web github, saya tidak perlu menyediakan sendiri cangkuk rumit, tetapi hanya gunakan webhook yang disertakan dengan github. Webhook akan mencetuskan URL panggil balik yang anda tetapkan apabila anda menolak ke GitHub, dan kemudian anda boleh melakukan operasi tarik dalam URL ini.

Selain itu, pada pelayan anda, jangan gunakan kekunci ssh pembangun sendiri untuk menarik sebaliknya, janakan kunci deployment dan letakkannya dalam github . Ke bawah, ini melengkapkan penggunaan automatik.

Saya juga melihat Hudson dan Jenkins, kedua-duanya adalah alat yang sangat baik Jika anda melakukan projek Java, anda harus menggunakan Jenkins, kerana selepas Hudson diperoleh oleh Oracle, ia beransur-ansur tidak lagi terbuka. Tetapi kerana projek saya dalam PHP, saya tidak mampu untuk memasang satu lagi set Java 8 untuk ini, jadi saya tidak menganggapnya, sebenarnya ada juga Jenkins khas untuk PHP, tetapi ia masih terasa terlalu berat saya. Mungkin saya akan menunggu sehingga projek itu lebih besar pada masa hadapan.

Di atas adalah beberapa pengalaman, semoga dapat membantu pelajar yang mengalami masalah yang sama.

----------Ini adalah garis pemisah yang cantik -------------------------

Tambahan:

Proses operasi sebenar jauh lebih rumit daripada yang dibayangkan Berikut ialah kodnya:

        $sReqData = file_get_contents('php://input');
        try {
            $payload = json_decode($sReqData);
        } catch (Exception $e) {
            exit(0);
        }

        if ($payload->ref === 'refs/heads/master') {
            exec('cd /var/www/your_repo; git pull;');
        }

Pada masa ini, apabila terdapat muat naik push, github akan memanggil semula, tetapi masalahnya ialah nama pengguna apache digunakan semasa panggilan balik, bukan nama pengguna yang anda gunakan semasa sshing masuk, jadi anda akan mendapati bahawa nama pengguna apache adalah berbeza untuk itu Direktori tidak mempunyai kebenaran operasi:
error: cannot open .git/FETCH_HEAD: Permission denied
Jadi anda perlu menambah ssh_user pada kumpulan apache dahulu:

usermod -a -G apache ssh_user

Kemudian ubah suai kebenaran:

chmod -R g+w /var/www
chown -R ssh_user:apache /var/www
chmod -R g+s /var/www

Sebab mengapa ia diletakkan dalam direktori ini adalah kerana direktori lalai untuk pengguna apache ialah /var/www Sudah tentu, anda boleh menukarnya ke direktori lain, yang mungkin lebih selamat.

Kemudian:

sudo -u apache git pull

Ia akan menjana fail known_hosts dalam folder .ssh apache Kemudian jika anda menggunakan ssh, anda juga perlu menambah dua fail id_rsa dan id_rsa.pub dalam kekunci deploy yang dijana di atas folder .ssh. Kemudian laksanakan arahan berikut beberapa kali untuk memastikan tiada ralat dilaporkan lagi. Kemudian anda boleh cuba menolak versi baharu daripada klien untuk melihat sama ada penggunaan automatik boleh berjaya.

================ Versi domestik =====================

Oleh kerana pelayan Github tiada di China, ia sering menyebabkan masalah tidak dapat menolak/menarik, jadi pertimbangkan untuk berhijrah ke git.oschina.net di China. Proses migrasi tidak akan diterangkan secara terperinci. Terdapat beberapa perkara yang perlu anda perhatikan:

  1. Kod tentang webhooks:

        $sReqData = $_POST['hook'];
        try {
            $payload = json_decode($sReqData);
            if ($payload->password === '这里是你的密码' && $payload->hook_name === 'push_hooks') {
                exec('cd /var/www/your_repo; git pull;');
            }
        } catch (Exception $e) {
            exit(0);
        }
  1. Langkah penting perlu dilaksanakan saya terperangkap di sini dan tidak dapat mencari sebab untuk masa yang lama:

sudo -u apache git pull
習慣沉默

Semua orang tahu git ialah kawalan versi

黄舟

Biar saya bercakap tentang kaedah yang telah saya gunakan:
1. Pertama, anda mesti mempunyai perkhidmatan kawalan versi dan perkhidmatan rsync
2 Pindahkan kod versi stabil yang perlu digunakan daripada pelayan versi folder sementara
3 Nyatakan direktori pelayan rsync ke folder sementara
4 Gunakan perintah rsync untuk menyegerakkan direktori pelayan ke direktori penggunaan anda
5 folder sementara (tambah jumlah), lakukan beberapa operasi kemas kini pada fail folder sementara (jika perlu), rsync menyegerakkan fail folder sementara ke direktori penempatan (bertambah)

Selepas menyelesaikan proses di atas, anda hanya perlu menjalankan shell dalam item 5 di atas setiap kali anda menyerahkan kod.
Walaupun ia agak menyusahkan, ia lebih berkesan Jika anda tidak menyukainya, jangan semburkannya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan