ホームページ  >  記事  >  バックエンド開発  >  PHP プロジェクトのワンクリック展開を自動化する方法

PHP プロジェクトのワンクリック展開を自動化する方法

WBOY
WBOYオリジナル
2016-06-13 12:29:221047ブラウズ

PHP プロジェクトのワンクリック デプロイメントを自動化する方法

1. スキル要件

PHP のワンクリック デプロイメントを自動化するには、次のものが必要です。 PHP (一部)知識)、シェル(ある程度の知識)、git(少し理解)

2. 最終効果

パスワードを入力して押します入力して 5 ~ 20 秒待ちます (通常は 1 日に 1 回) 継続的配信、デプロイされるコードと SQL スクリプトの量は多くありません)

ログ ファイル、データベース実行によって生成されたバックアップとデータベースの実行結果は次のとおりです:

3. Part1-Git の実行方法

まず、VCS システムが必要です。ここではクライアント、ローカル、サーバーの両方を使用します。 (Git を使用したことがない場合は、この記事を読んでください。私は Git を使用するために使用しました)

ここでは Git pull のみを使用しており、svn など他のものは同じです。

Linux サーバーは Git クライアントをインストールします。スクリプトがあります:

<span style="color: #000000;">#Git related</span><span style="color: #0000ff;">yum</span> -y <span style="color: #0000ff;">install</span> curl-devel expat-devel gettext-devel openssl-devel zlib-<span style="color: #000000;">devel#Git</span><span style="color: #0000ff;">yum</span> -y <span style="color: #0000ff;">install</span> git-<span style="color: #000000;">coregit config </span>--global user.name <span style="color: #800000;">"</span><span style="color: #800000;">YourName</span><span style="color: #800000;">"</span><span style="color: #000000;">git config </span>--<span style="color: #000000;">global user.email YourMail</span><span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">Git installation completed.</span><span style="color: #800000;">"</span>


このコードの失敗率は非常に高く、私も Linux の初心者です。それでも失敗する場合は、手動で入力してみてください。 Linux の yum ソースに問題がある可能性があります。git ダウンロード アドレスがありません。

インストール後、次のように git --version を実行します:

[[email protected] tmp]# git --version

git version 1.8.2.1

はOKです。次に、サーバー上の適切な場所にコード ベースを git clone します。それでおしまい。

4. Part2 シェルの実行方法

いくつかの部分を含む基本的な作業は次のとおりです。 、コードのバックアップ、コードのデプロイ、プロジェクト構成情報の変更、データベースのバックアップ、データベース スクリプトの実行。

おおよそのコードを以下に示します。必要に応じて削除または追加することもできます。

<span style="color: #008080;"> 1</span> #!/bin/<span style="color: #000000;">bash</span><span style="color: #008080;"> 2</span> #--------------------------------------------------------------------------------------------------<span style="color: #008080;"> 3</span> <span style="color: #000000;">[email protected] dreamingodd</span><span style="color: #008080;"> 4</span> #@<span style="color: #800080;">20160226</span><span style="color: #008080;"> 5</span> <span style="color: #000000;">#My project name is ocdp.</span><span style="color: #008080;"> 6</span> #<span style="color: #800080;">1</span><span style="color: #000000;">.git pull</span><span style="color: #008080;"> 7</span> #<span style="color: #800080;">2</span><span style="color: #000000;">.backup PHP</span><span style="color: #008080;"> 8</span> #<span style="color: #800080;">3</span><span style="color: #000000;">.deploy PHP.</span><span style="color: #008080;"> 9</span> #<span style="color: #800080;">4</span>.change config <span style="color: #0000ff;">in</span><span style="color: #000000;"> PHP project.</span><span style="color: #008080;">10</span> #<span style="color: #800080;">5</span><span style="color: #000000;">.backup DB...</span><span style="color: #008080;">11</span> #<span style="color: #800080;">6</span><span style="color: #000000;">.deploy SQLs</span><span style="color: #008080;">12</span> #--------------------------------------------------------------------------------------------------<span style="color: #008080;">13</span> <span style="color: #008080;">14</span> sys_time=`<span style="color: #0000ff;">date</span> <span style="color: #800000;">"</span><span style="color: #800000;">+%Y%m%d_%H%M%S</span><span style="color: #800000;">"</span><span style="color: #000000;">`</span><span style="color: #008080;">15</span> <span style="color: #000000;">#Refresh git folder</span><span style="color: #008080;">16</span> <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">----1.git processing</span><span style="color: #800000;">"</span><span style="color: #008080;">17</span> #Let<span style="color: #800000;">'</span><span style="color: #800000;">s pretend your project is in /home/git/YourProjectName</span><span style="color: #008080;">18</span> <span style="color: #0000ff;">if</span> [ -d /home/<span style="color: #000000;">git ]</span><span style="color: #008080;">19</span> <span style="color: #0000ff;">then</span><span style="color: #008080;">20</span>     <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">Git folder exists.</span><span style="color: #800000;">"</span><span style="color: #008080;">21</span>     cd /home/git/<span style="color: #000000;">YourProjectName</span><span style="color: #008080;">22</span> <span style="color: #000000;">    git pull</span><span style="color: #008080;">23</span> <span style="color: #0000ff;">else</span><span style="color: #008080;">24</span>     <span style="color: #0000ff;">mkdir</span> /home/<span style="color: #000000;">git</span><span style="color: #008080;">25</span>     <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">created Git folder</span><span style="color: #800000;">"</span><span style="color: #008080;">26</span>     cd /home/<span style="color: #000000;">git</span><span style="color: #008080;">27</span>     git clone https:<span style="color: #008000;">//</span><span style="color: #008000;">github.com/YourGitName/YourProjectName</span><span style="color: #008080;">28</span> <span style="color: #0000ff;">fi</span><span style="color: #008080;">29</span> <span style="color: #008080;">30</span> <span style="color: #000000;">#Deploy YourProjectName</span><span style="color: #008080;">31</span> <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">----2.backing up PHP</span><span style="color: #800000;">"</span><span style="color: #008080;">32</span> cd /var/www/html/<span style="color: #008080;">33</span> <span style="color: #0000ff;">if</span> [ -d /var/www/html/<span style="color: #000000;">YourProjectName ]</span><span style="color: #008080;">34</span> <span style="color: #0000ff;">then</span><span style="color: #008080;">35</span>     <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">YourProjectName exists.</span><span style="color: #800000;">"</span><span style="color: #008080;">36</span>     <span style="color: #0000ff;">if</span> [ -d /home/<span style="color: #000000;">back ]</span><span style="color: #008080;">37</span>     <span style="color: #0000ff;">then</span><span style="color: #008080;">38</span>         <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">Backup folder exists.</span><span style="color: #800000;">"</span><span style="color: #008080;">39</span>     <span style="color: #0000ff;">else</span><span style="color: #008080;">40</span>         <span style="color: #0000ff;">mkdir</span> /home/<span style="color: #000000;">back</span><span style="color: #008080;">41</span>     <span style="color: #0000ff;">fi</span><span style="color: #008080;">42</span>     <span style="color: #0000ff;">mv</span> /var/www/html/YourProjectName /home/back/<span style="color: #000000;">YourProjectName_${sys_time}</span><span style="color: #008080;">43</span>     <span style="color: #0000ff;">mkdir</span> /var/www/html/<span style="color: #000000;">YourProjectName</span><span style="color: #008080;">44</span> <span style="color: #0000ff;">else</span><span style="color: #008080;">45</span>     #some config <span style="color: #0000ff;">file</span> creation <span style="color: #0000ff;">for</span> the first <span style="color: #0000ff;">time</span><span style="color: #000000;"> deployment.一些首次部署的config设置</span><span style="color: #008080;">46</span> <span style="color: #000000;">    #...</span><span style="color: #008080;">47</span>     <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">YourProjectName config files are created.</span><span style="color: #800000;">"</span><span style="color: #008080;">48</span> <span style="color: #0000ff;">fi</span><span style="color: #008080;">49</span> <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">----3.deploying PHP.</span><span style="color: #800000;">"</span><span style="color: #008080;">50</span> cd /var/www/<span style="color: #000000;">html</span><span style="color: #008080;">51</span> <span style="color: #0000ff;">cp</span> -r /home/git/YourProjectName ./<span style="color: #000000;">YourProjectName</span><span style="color: #008080;">52</span> <span style="color: #000000;">#config change.你的项目部署需要的config修改</span><span style="color: #008080;">53</span> <span style="color: #000000;">#...</span><span style="color: #008080;">54</span> <span style="color: #008080;">55</span> <span style="color: #000000;">#MySQL backup</span><span style="color: #008080;">56</span> <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">----5.backing up DB...</span><span style="color: #800000;">"</span><span style="color: #008080;">57</span> backupFile=/tmp/<span style="color: #000000;">DB_backup${sys_time}.sql</span><span style="color: #008080;">58</span> mysqldump -uroot -p${<span style="color: #0000ff;">pwd</span>} YourProjectName><span style="color: #000000;">${backupFile}</span><span style="color: #008080;">59</span> <span style="color: #008080;">60</span> <span style="color: #000000;">#MySQL script deployment</span><span style="color: #008080;">61</span> <span style="color: #0000ff;">echo</span> <span style="color: #800000;">"</span><span style="color: #800000;">----6.deploying SQLs</span><span style="color: #800000;">"</span><span style="color: #008080;">62</span> <span style="color: #0000ff;">if</span> [ -f /home/git/YourProjectName/sql/deployment<span style="color: #008000;">/*</span><span style="color: #008000;">.sql ]</span><span style="color: #008080;">63</span> <span style="color: #008000;">then</span><span style="color: #008080;">64</span> <span style="color: #008000;">    for FILE in /home/git/YourProjectName/sql/deployment/*.sql</span><span style="color: #008080;">65</span> <span style="color: #008000;">    do</span><span style="color: #008080;">66</span> <span style="color: #008000;">        sys_time=`date "+%Y%m%d_%H%M%S"`</span><span style="color: #008080;">67</span> <span style="color: #008000;">        mysql -uroot -p${pwd} -e "source $FILE" | tee /tmp/DB_log_${sys_time}.sql</span><span style="color: #008080;">68</span> <span style="color: #008000;">    done</span><span style="color: #008080;">69</span> <span style="color: #008000;">fi</span>

次に、このスクリプトを実行してテストします。シェル スクリプトの失敗のほとんどは、権限の問題によって発生します。

実際には、/tmp でログと SQL を参照できるようになりましたが、サーバーにログインする手順さえ省略したい変態です。 , だから私たちはまだApacheを勉強したいと思っています。

5. Part3-PHPのやり方

phpでシェルスクリプトを実行するには、次の手順が必要です。他の人からのアイデアについては、ここで話しましょう。特にこの記事を見てください。

シェルを実行するにはユーザー (EXECUTOR) が必要です。httpd.conf で Apache 実行ユーザーを EXECUTOR に変更し、EXECUTOR を追加します。 sudo ではパスワードなしで実行権限を与えます。

PHP のサンプルコードは以下のとおりです。

<span style="color: #008080;"> 1</span> <html><span style="color: #008080;"> 2</span> <head><span style="color: #008080;"> 3</span> <title>OCDP</title><span style="color: #008080;"> 4</span> <style type="text/css"><span style="color: #008080;"> 5</span> <span style="color: #008000;">#</span><span style="color: #008000;">container {</span><span style="color: #008080;"> 6</span>     margin: 0<span style="color: #000000;"> auto;</span><span style="color: #008080;"> 7</span>     border:<span style="color: #000000;"> 1px solid grey;</span><span style="color: #008080;"> 8</span>     width:<span style="color: #000000;"> 500px;</span><span style="color: #008080;"> 9</span>     padding:<span style="color: #000000;"> 15px;</span><span style="color: #008080;">10</span>     margin-top:<span style="color: #000000;"> 100px;</span><span style="color: #008080;">11</span> <span style="color: #000000;">}</span><span style="color: #008080;">12</span> <span style="color: #000000;">h3 {</span><span style="color: #008080;">13</span>     text-align:<span style="color: #000000;"> center;</span><span style="color: #008080;">14</span> <span style="color: #000000;">}</span><span style="color: #008080;">15</span> </style><span style="color: #008080;">16</span> </head><span style="color: #008080;">17</span> <body><span style="color: #008080;">18</span> <div id="container"><span style="color: #008080;">19</span> <h3>Auto-deploy Tool</h3><span style="color: #008080;">20</span> <?<span style="color: #000000;">php </span><span style="color: #008080;">21</span> <span style="color: #800080;">$pwd</span> = <span style="color: #800080;">$_POST</span>["pwd"<span style="color: #000000;">];</span><span style="color: #008080;">22</span> <span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$pwd</span><span style="color: #000000;">)) {</span><span style="color: #008080;">23</span> ?><span style="color: #008080;">24</span>     <form method="post" id="form"><span style="color: #008080;">25</span>         Input Password:<span style="color: #008080;">26</span>         <input type="password" id="pwd" name="pwd" value="<?php echo <span style="color: #800080;">$_POST</span>['pwd'];?>"><span style="color: #008080;">27</span>         <input type="submit" value="Deploy"><span style="color: #008080;">28</span>     </form><span style="color: #008080;">29</span> <?<span style="color: #000000;">php </span><span style="color: #008080;">30</span> } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {</span><span style="color: #008080;">31</span>     <span style="color: #800080;">$command</span> = "sudo /home/git/ocdp/sh/deploy.sh <span style="color: #800080;">$pwd</span>"<span style="color: #000000;">;</span><span style="color: #008080;">32</span>     <span style="color: #800080;">$logFileName</span> = "/tmp/deploy_".<span style="color: #008080;">date</span>('Ymd_His').".log"<span style="color: #000000;">;</span><span style="color: #008080;">33</span>     <span style="color: #800080;">$logFile</span> = <span style="color: #008080;">fopen</span>(<span style="color: #800080;">$logFileName</span>, 'w') or <span style="color: #0000ff;">die</span>('File: '.<span style="color: #800080;">$logFileName</span>.' open failed!'<span style="color: #000000;">);;</span><span style="color: #008080;">34</span>     <span style="color: #008080;">exec</span>(<span style="color: #800080;">$command</span>, <span style="color: #800080;">$outputArray</span>, <span style="color: #800080;">$returnVal</span><span style="color: #000000;">);</span><span style="color: #008080;">35</span>     <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$outputArray</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$line</span><span style="color: #000000;">) {</span><span style="color: #008080;">36</span>         <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$line</span>.'<br/>'<span style="color: #000000;">;</span><span style="color: #008080;">37</span>         <span style="color: #008080;">fwrite</span>(<span style="color: #800080;">$logFile</span>, <span style="color: #800080;">$line</span>.'\n'<span style="color: #000000;">);</span><span style="color: #008080;">38</span> <span style="color: #000000;">    }</span><span style="color: #008080;">39</span>     <span style="color: #008080;">fclose</span>(<span style="color: #800080;">$logFile</span><span style="color: #000000;">);</span><span style="color: #008080;">40</span>     <span style="color: #0000ff;">if</span> (<span style="color: #800080;">$returnVal</span><span style="color: #000000;">) {</span><span style="color: #008080;">41</span>         <span style="color: #0000ff;">echo</span> '<br/><span style="color:red;">执行失败!<br/>Details refer to /etc/httpd/logs/error_log</span>'<span style="color: #000000;">;</span><span style="color: #008080;">42</span>     } <span style="color: #0000ff;">else</span><span style="color: #000000;"> {</span><span style="color: #008080;">43</span>         <span style="color: #0000ff;">echo</span> '<br/><span style="color:green;">执行完毕!<br/>Logs save in '.<span style="color: #800080;">$logFileName</span>.'</span>'<span style="color: #000000;">;</span><span style="color: #008080;">44</span> <span style="color: #000000;">    }</span><span style="color: #008080;">45</span> <span style="color: #000000;">}</span><span style="color: #008080;">46</span> ?><span style="color: #008080;">47</span> </div><span style="color: #008080;">48</span> </body><span style="color: #008080;">49</span> </html>

パスワードは php で確認できますまたはシェル。ここで入力したのはデータベースのパスワードです。


6. まとめ

少し面倒ですが、完成後、4を展開すると1日5回、合計2分程度で徐々に達成感を感じることができます。

github プロジェクトのアドレス: https://github.com/dreamingodd/ocdp

上記が役に立った場合は、github にアクセスしてスターを付けてください。ありがとうございます。

dreamingoddのオリジナル記事、転載の場合は出典を明記してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。