{"id":1955,"date":"2025-08-23T08:36:37","date_gmt":"2025-08-23T08:36:37","guid":{"rendered":"https:\/\/linuxjk.cn\/?page_id=1955"},"modified":"2026-03-31T00:09:55","modified_gmt":"2026-03-30T16:09:55","slug":"ansible%e5%89%a7%e6%9c%ac%e7%95%99%e5%ad%98-dockerfile","status":"publish","type":"page","link":"https:\/\/linuxjk.cn\/?page_id=1955","title":{"rendered":"ansible\u5267\u672c\/Dockerfile"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1955\" class=\"elementor elementor-1955\">\n\t\t\t\t<div class=\"elementor-element elementor-element-09738e7 e-flex e-con-boxed e-con e-parent\" data-id=\"09738e7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-83f2d25 elementor-widget elementor-widget-heading\" data-id=\"83f2d25\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#ans%E5%89%A7%E6%9C%AC\" >ans\u5267\u672c<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2zabbix_agent%E6%89%B9%E9%87%8F%E5%AE%89%E8%A3%85\" >\u81ea\u52a8\u90e8\u7f72zabbix_agent(\u6279\u91cf\u5b89\u88c5)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2nfs%EF%BC%88%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%83%A8%E7%BD%B2%EF%BC%8B%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8C%82%E8%BD%BD%EF%BC%89\" >\u81ea\u52a8\u90e8\u7f72nfs\uff08\u670d\u52a1\u7aef\u90e8\u7f72\uff0b\u5ba2\u6237\u7aef\u6302\u8f7d\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#LNMP%E6%89%B9%E9%87%8F%E9%83%A8%E7%BD%B2\" >LNMP\u6279\u91cf\u90e8\u7f72<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#LNMP%E6%89%B9%E9%87%8F%E5%8A%A0%E6%9C%BA%E5%99%A8\" >LNMP\u6279\u91cf\u52a0\u673a\u5668<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E4%BB%8Eweb1%E5%AF%BC%E5%87%BA%E7%AB%99%E7%82%B9%E7%9B%AE%E5%BD%95%EF%BC%9A\" >\u4eceweb1\u5bfc\u51fa\u7ad9\u70b9\u76ee\u5f55\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E5%A2%9E%E5%8A%A0n%E5%8F%B0web%E6%9C%8D%E5%8A%A1%E5%99%A8\" >\u589e\u52a0n\u53f0web\u670d\u52a1\u5668<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#Dockerfile%E7%94%9F%E6%88%90%E9%95%9C%E5%83%8F\" >Dockerfile\u751f\u6210\u955c\u50cf<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E5%8F%AF%E9%81%93%E4%BA%91%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AEnginxphp\" >\u53ef\u9053\u4e91\u90e8\u7f72\u914d\u7f6enginx+php<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#%E5%A4%9A%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85tengine\" >\u591a\u9636\u6bb5\u63d0\u4ea4\u7f16\u8bd1\u5b89\u88c5tengine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#dockerfiles%E5%8F%8A%E4%BB%A3%E7%A0%81%E9%9B%86%E5%90%88\" >dockerfiles\u53ca\u4ee3\u7801\u96c6\u5408<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/linuxjk.cn\/?page_id=1955\/#dockercompose%E5%8F%8A%E4%BB%A3%E7%A0%81%E9%9B%86%E5%90%88\" >dockercompose\u53ca\u4ee3\u7801\u96c6\u5408<\/a><\/li><\/ul><\/nav><\/div>\n<h1 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"ans%E5%89%A7%E6%9C%AC\"><\/span>ans\u5267\u672c<span class=\"ez-toc-section-end\"><\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f91cf57 elementor-widget elementor-widget-heading\" data-id=\"f91cf57\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2zabbix_agent%E6%89%B9%E9%87%8F%E5%AE%89%E8%A3%85\"><\/span>\u81ea\u52a8\u90e8\u7f72zabbix_agent(\u6279\u91cf\u5b89\u88c5)<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b137f3b elementor-widget elementor-widget-shortcode\" data-id=\"b137f3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">install-zabbix-agent.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/install-zabbix-agent.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">---\n- name: Install Zabbix Agent on All Hosts\n  hosts: all\n  become: yes\n  vars:\n    zabbix_server: &quot;192.168.99.146&quot;\n    zabbix_agent_package: &quot;zabbix-agent&quot;\n    zabbix_agent_service: &quot;zabbix-agent&quot;\n    zabbix_agent_config: &quot;\/etc\/zabbix\/zabbix_agentd.conf&quot;\n    \n  tasks:\n    - name: Display target host info\n      debug:\n        msg:\n          - &quot;Host: {{ inventory_hostname }}&quot;\n          - &quot;System: {{ system_type | default(&#039;unknown&#039;) }}&quot;\n          - &quot;Installing: zabbix-agent (v1)&quot;\n          - &quot;Server: {{ zabbix_server }}&quot;\n\n    - name: Check if zabbix-agent2 is running\n      shell: systemctl is-active zabbix-agent2\n      register: agent2_status\n      failed_when: false\n      changed_when: false\n\n    - name: Stop and disable zabbix-agent2 if running\n      systemd:\n        name: zabbix-agent2\n        state: stopped\n        enabled: no\n      when: agent2_status.stdout == &quot;active&quot;\n      ignore_errors: yes\n\n    - name: Remove existing zabbix-agent2 (RHEL\/CentOS\/Anolis)\n      package:\n        name: zabbix-agent2\n        state: absent\n      when: \n        - ansible_os_family in [&quot;RedHat&quot;] or system_type in [&quot;anolis8&quot;, &quot;anolis7&quot;, &quot;centos7&quot;, &quot;centos8&quot;]\n        - agent2_status.stdout == &quot;active&quot;\n      ignore_errors: yes\n\n    - name: Remove existing zabbix-agent2 (Ubuntu)\n      package:\n        name: zabbix-agent2\n        state: absent\n      when: \n        - ansible_os_family == &quot;Debian&quot; or system_type in [&quot;ubuntu18&quot;, &quot;ubuntu22&quot;]\n        - agent2_status.stdout == &quot;active&quot;\n      ignore_errors: yes\n\n    - name: Clean up agent2 config files\n      file:\n        path: &quot;{{ item }}&quot;\n        state: absent\n      loop:\n        - \/etc\/zabbix\/zabbix_agent2.conf\n        - \/etc\/zabbix\/zabbix_agent2.conf.backup\n        - \/run\/zabbix\/zabbix_agent2.pid\n      ignore_errors: yes\n\n    # \u4f7f\u7528curl\u76f4\u63a5\u4e0b\u8f7d\uff0c\u907f\u514dSSL\u9a8c\u8bc1\u95ee\u9898\n    - name: Download Zabbix repository RPM (CentOS 7)\n      get_url:\n        url: &quot;https:\/\/repo.zabbix.com\/zabbix\/6.4\/rhel\/7\/x86_64\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm&quot;\n        dest: &quot;\/tmp\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm&quot;\n        validate_certs: no\n        mode: &#039;0644&#039;\n        timeout: 60\n      when: system_type == &quot;centos7&quot;\n      register: download_result\n      ignore_errors: yes\n\n    # \u5982\u679c\u4e0b\u8f7d\u5931\u8d25\uff0c\u5c1d\u8bd5\u4f7f\u7528wget\n    - name: Download via wget if get_url failed (CentOS 7)\n      shell: |\n        cd \/tmp\n        wget --no-check-certificate https:\/\/repo.zabbix.com\/zabbix\/6.4\/rhel\/7\/x86_64\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm\n      when: \n        - system_type == &quot;centos7&quot;\n        - download_result.failed is defined and download_result.failed\n      ignore_errors: yes\n\n    # \u5982\u679cwget\u4e5f\u5931\u8d25\uff0c\u5c1d\u8bd5curl\n    - name: Download via curl if wget failed (CentOS 7)\n      shell: |\n        cd \/tmp\n        curl -k -O https:\/\/repo.zabbix.com\/zabbix\/6.4\/rhel\/7\/x86_64\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm\n      when: system_type == &quot;centos7&quot;\n      ignore_errors: yes\n    # \u68c0\u67e5 RPM \u5305\u662f\u5426\u5b58\u5728\n    - name: Check if RPM package exists (CentOS 7)\n      stat:\n        path: &quot;\/tmp\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm&quot;\n      when: system_type == &quot;centos7&quot;\n      register: rpm_file_check\n\n    # \u4f7f\u7528 shell \u76f4\u63a5\u5b89\u88c5 Zabbix Agent RPM \u5305 (CentOS 7)\n    - name: Install Zabbix Agent from RPM (CentOS 7)\n      shell: |\n        rpm -ivh \/tmp\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm --force --nodeps\n      when: \n        - system_type == &quot;centos7&quot;\n        - rpm_file_check.stat.exists\n      ignore_errors: no\n\n    # \u5982\u679c RPM \u5b89\u88c5\u5931\u8d25\uff0c\u663e\u793a\u9519\u8bef\u4fe1\u606f\n    - name: Show error if RPM not found (CentOS 7)\n      debug:\n        msg: &quot;\u9519\u8bef: \u65e0\u6cd5\u627e\u5230\u6216\u4e0b\u8f7d Zabbix Agent RPM \u5305&quot;\n      when: \n        - system_type == &quot;centos7&quot;\n        - not rpm_file_check.stat.exists\n\n    # \u6e05\u7406\u4e34\u65f6\u6587\u4ef6 (CentOS 7)\n    - name: Clean up RPM file (CentOS 7)\n      file:\n        path: &quot;\/tmp\/zabbix-agent-6.4.4-release1.el7.x86_64.rpm&quot;\n        state: absent\n      when: system_type == &quot;centos7&quot;\n      ignore_errors: yes\n\n    # \u5bfc\u5165GPG\u5bc6\u94a5\n    - name: Import Zabbix GPG keys (CentOS 7)\n      shell: |\n        rpm --import https:\/\/repo.zabbix.com\/RPM-GPG-KEY-ZABBIX-A14FE591 || true\n        rpm --import https:\/\/repo.zabbix.com\/RPM-GPG-KEY-ZABBIX || true\n      when: system_type == &quot;centos7&quot;\n      ignore_errors: yes\n\n    # \u5176\u4ed6\u7cfb\u7edf\u7684\u4ed3\u5e93\u914d\u7f6e\u4fdd\u6301\u4e0d\u53d8\n    # \u6dfb\u52a0Zabbix\u4ed3\u5e93 (\u5982\u679c\u8fd8\u6ca1\u6709)\n    - name: Add Zabbix repository (CentOS 8\/Anolis 8)\n      dnf:\n        name: &quot;https:\/\/repo.zabbix.com\/zabbix\/6.4\/rhel\/8\/x86_64\/zabbix-release-6.4-1.el8.noarch.rpm&quot;\n        state: present\n        disable_gpg_check: yes\n      when: system_type in [&quot;centos8&quot;, &quot;anolis8&quot;]\n      ignore_errors: yes\n\n    - name: Add Zabbix repository (Ubuntu 18)\n      apt:\n        deb: &quot;https:\/\/repo.zabbix.com\/zabbix\/6.4\/ubuntu\/pool\/main\/z\/zabbix-release\/zabbix-release_6.4-1+ubuntu18.04_all.deb&quot;\n        state: present\n      when: system_type == &quot;ubuntu18&quot;\n      ignore_errors: yes\n\n    - name: Add Zabbix repository (Ubuntu 22)\n      apt:\n        deb: &quot;https:\/\/repo.zabbix.com\/zabbix\/6.4\/ubuntu\/pool\/main\/z\/zabbix-release\/zabbix-release_6.4-1+ubuntu22.04_all.deb&quot;\n        state: present\n      when: system_type == &quot;ubuntu22&quot;\n      ignore_errors: yes\n\n    - name: Update package cache (Ubuntu)\n      apt:\n        update_cache: yes\n      when: ansible_os_family == &quot;Debian&quot;\n      ignore_errors: yes\n\n    - name: Install Zabbix Agent (CentOS 8\/Anolis 8)\n      dnf:\n        name: &quot;{{ zabbix_agent_package }}&quot;\n        state: present\n      when: system_type in [&quot;centos8&quot;, &quot;anolis8&quot;]\n\n    - name: Install Zabbix Agent (Ubuntu)\n      apt:\n        name: &quot;{{ zabbix_agent_package }}&quot;\n        state: present\n      when: ansible_os_family == &quot;Debian&quot; or system_type in [&quot;ubuntu18&quot;, &quot;ubuntu22&quot;]\n\n    - name: Backup original config if exists\n      copy:\n        src: &quot;{{ zabbix_agent_config }}&quot;\n        dest: &quot;{{ zabbix_agent_config }}.backup-{{ ansible_date_time.epoch }}&quot;\n        remote_src: yes\n        backup: no\n      ignore_errors: yes\n\n    - name: Ensure Zabbix directories exist\n      file:\n        path: &quot;{{ item }}&quot;\n        state: directory\n        owner: zabbix\n        group: zabbix\n        mode: &#039;0755&#039;\n      loop:\n        - \/var\/log\/zabbix\n        - \/run\/zabbix\n        - \/etc\/zabbix\/zabbix_agentd.d\n      ignore_errors: yes\n\n    - name: Configure Zabbix Agent\n      template:\n        src: zabbix_agentd.conf.j2\n        dest: &quot;{{ zabbix_agent_config }}&quot;\n        owner: root\n        group: root\n        mode: &#039;0644&#039;\n        backup: yes\n      notify: restart zabbix-agent\n\n    - name: Start and enable Zabbix Agent\n      systemd:\n        name: &quot;{{ zabbix_agent_service }}&quot;\n        state: started\n        enabled: yes\n        daemon_reload: yes\n\n    - name: Wait for agent to start\n      wait_for:\n        port: 10050\n        host: &quot;{{ ansible_default_ipv4.address | default(&#039;127.0.0.1&#039;) }}&quot;\n        delay: 2\n        timeout: 30\n      ignore_errors: yes\n\n    - name: Configure firewall for RHEL\/CentOS (if firewalld is running)\n      firewalld:\n        port: &quot;10050\/tcp&quot;\n        permanent: yes\n        state: enabled\n        immediate: yes\n      when: \n        - ansible_os_family in [&quot;RedHat&quot;] or system_type in [&quot;anolis8&quot;, &quot;anolis7&quot;, &quot;centos7&quot;, &quot;centos8&quot;]\n      ignore_errors: yes\n\n    - name: Configure firewall for Ubuntu (if ufw is active)\n      ufw:\n        rule: allow\n        port: &#039;10050&#039;\n        proto: tcp\n      when: ansible_os_family == &quot;Debian&quot; or system_type in [&quot;ubuntu18&quot;, &quot;ubuntu22&quot;]\n      ignore_errors: yes\n\n    - name: Test agent connectivity\n      shell: |\n        # \u6d4b\u8bd5agent\u662f\u5426\u54cd\u5e94\n        if command -v zabbix_agentd &gt;\/dev\/null; then\n          zabbix_agentd -t agent.ping 2&gt;\/dev\/null || echo &quot;Test failed&quot;\n        fi\n        \n        # \u68c0\u67e5\u7aef\u53e3\u76d1\u542c\n        if ss -tlnp | grep -q &quot;:10050&quot;; then\n          echo &quot;Port 10050 listening OK&quot;\n        else\n          echo &quot;Port 10050 NOT listening&quot;\n        fi\n        \n        # \u68c0\u67e5\u670d\u52a1\u72b6\u6001\n        systemctl is-active zabbix-agent || echo &quot;Service not active&quot;\n      register: connectivity_test\n      changed_when: false\n      failed_when: false\n\n    - name: Display test results\n      debug:\n        msg: \n          - &quot;Host: {{ inventory_hostname }}&quot;\n          - &quot;Connectivity test: {{ connectivity_test.stdout_lines }}&quot;\n\n    # \u6e05\u7406\u4e34\u65f6\u6587\u4ef6\n    - name: Clean up temporary files\n      file:\n        path: &quot;\/tmp\/zabbix-release-6.4.4-1.el7.noarch.rpm&quot;\n        state: absent\n      when: system_type == &quot;centos7&quot;\n      ignore_errors: yes\n        \n  handlers:\n    - name: restart zabbix-agent\n      systemd:\n        name: &quot;{{ zabbix_agent_service }}&quot;\n        state: restarted\n        daemon_reload: yes\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29d0226 elementor-widget elementor-widget-heading\" data-id=\"29d0226\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2nfs%EF%BC%88%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%83%A8%E7%BD%B2%EF%BC%8B%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8C%82%E8%BD%BD%EF%BC%89\"><\/span>\u81ea\u52a8\u90e8\u7f72nfs\uff08\u670d\u52a1\u7aef\u90e8\u7f72\uff0b\u5ba2\u6237\u7aef\u6302\u8f7d\uff09<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d680f7 elementor-widget elementor-widget-shortcode\" data-id=\"8d680f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">13.nfs_srv_cli_v2.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/13.nfs_srv_cli_v2.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">---\n- hosts: nfs\n  tasks: \n    - name: 1. yum\u5b89\u88c5nfs-utils,rpcbind\n      yum:\n        name: \n          - nfs-utils\n          - rpcbind\n        state: present\n      tags: &quot;01&quot;  \n    - name: 2. template\u5bfc\u5165\u914d\u7f6e\u6587\u4ef6\uff08\u6587\u4ef6\u4e2d\u6709\u53d8\u91cf\uff09\n      template: \n        src: \/server\/scripts\/ansible\/exports.j2\n        dest: \/etc\/exports\n        backup: yes\n      tags: &quot;02&quot;  \n      notify: \n        - \u91cd\u542f\u670d\u52a1\n      #- name: 2. lineinfile\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\n      #lineinfile:\n      #  path: \/etc\/exports\n      #  regexp: &quot;^\/nfs\/ans\/&quot;\n      #  line: |\n          # ansible-nfs     \n          #    \/nfs\/ans\/    172.16.1.0\/24 (rw,all_squash,anonuid=2999,anongid=2999)\n    - name: 3. \u5148\u521b\u5efawww group\n      group:\n         name: &quot;{{ nfs_user }}&quot;\n         gid: &quot;{{ nfs_user_uid }}&quot;\n         state: present\n      tags: &quot;03&quot;  \n    - name: 3.5  \u5c06user\u6dfb\u52a0www,uid 1999\n      user:\n         name: &quot;{{ nfs_user }}&quot;\n         uid: &quot;{{ nfs_user_uid }}&quot;\n         group: &quot;{{ nfs_user }}&quot;\n         create_home: no\n         shell: \/sbin\/nologin\n         comment: &quot;Ansible created service account&quot;\n         state: present\n      tags: &quot;04&quot;  \n    - name: 4. file\u521b\u5efa\u5171\u4eab\u76ee\u5f55\u5e76\u6539\u6240\u6709\u8005\n      file:\n        path: &quot;{{ nfs_dir }}&quot;\n        owner: &quot;{{ nfs_user }}&quot;\n        group: &quot;{{ nfs_user }}&quot;\n        state: directory\n      tags: &quot;05&quot;  \n    - name: 5. systemd\u542f\u52a8\u670d\u52a1rpcbind,nfs(\u6ce8\u610f\u987a\u5e8f\uff0c\u4e00\u6b21\u53ea\u80fd\u7ba1\u4e00\u4e2a)\n      systemd:\n        name: &quot;{{ item }}&quot;\n        enabled: yes\n        state: started\n      loop: \n        - rpcbind\n        - nfs \n      tags: &quot;06&quot;  \n  handlers:     #\u8bbe\u7f6e\u8e29\u96f7\u540e\u64cd\u4f5c.\n    - name: \u91cd\u542f\u670d\u52a1\n      systemd:\n      name: nfs\n      state: reloaded\n      tags: &quot;07&quot;  \n- hosts: web\n  tasks:\n    - name: 1. \u5b89\u88c5nfs-utils\n      yum:\n        name: nfs-utils\n        state: present\n      tags: &quot;01&quot;  \n    - name: 2. \u521b\u5efa\u6302\u8f7d\u70b9\n      file:\n        path: &quot;{{ web_upload }}&quot;\n        state: directory\n      tags: &quot;09&quot;  \n    - name: 3. \u5148\u521b\u5efawww group\n      group:\n         name: &quot;{{ web_user }}&quot;\n         gid: &quot;{{ web_user_uid }}&quot;\n         state: present\n      tags: &quot;10&quot;  \n    - name: 3.5  \u5c06user\u6dfb\u52a0www,uid 1999\n      user:\n         name: &quot;{{ web_user }}&quot;\n         uid: &quot;{{ web_user_uid }}&quot;\n         group: &quot;{{ web_user }}&quot;\n         create_home: no\n         shell: \/sbin\/nologin\n         comment: &quot;Ansible created service account&quot;\n         state: present\n      tags: &quot;11&quot;  \n    - name: 3.\u6302\u8f7d\u4e0e\u6c38\u4e45\u6302\u8f7d\n      mount:\n        src: &quot;{{ nfs_server_ip }}:{{ nfs_dir }}&quot;\n        path: &quot;{{ web_upload }}&quot; \n        fstype: nfs\n        state: mounted\n      tags: \n        -  &quot;01&quot;  \n        -  &quot;a1&quot;  \n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-133d4dc elementor-widget elementor-widget-heading\" data-id=\"133d4dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"LNMP%E6%89%B9%E9%87%8F%E9%83%A8%E7%BD%B2\"><\/span>LNMP\u6279\u91cf\u90e8\u7f72<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d98edd elementor-widget elementor-widget-shortcode\" data-id=\"9d98edd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">web_install.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/web_install.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\"># ansible\/playbook.yml\n- hosts: webservers\n  # \u6dfb\u52a0\u96c6\u5408\u58f0\u660e\n  collections:\n    - community.mysql\n  tasks:\n\n    - name: \u5b89\u88c5LNMP\u73af\u5883\n      dnf:\n        name: [nginx, mariadb-server, php, php-fpm, php-mysqlnd]\n        state: latest\n        \n\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7efc00 elementor-widget elementor-widget-shortcode\" data-id=\"f7efc00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">web_create.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/web_create.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">- name: \u90e8\u7f72\u9ad8\u53ef\u7528 WordPress \u96c6\u7fa4\n  hosts: webservers\n  become: yes\n  vars:\n    # WordPress \u914d\u7f6e\n    wp_db_name: &quot;wordpress&quot;\n    wp_db_user: &quot;wpuser&quot;\n    wp_db_password: &quot;wppass&quot;\n    wp_db_host: &quot;web1&quot;\n    \n    # PHP \u914d\u7f6e\n    php_modules:\n      - php-fpm\n      - php-mysqlnd\n      - php-curl\n      - php-gd\n      - php-mbstring\n      - php-xml\n      - php-zip\n\n    wordpress_url: &quot;https:\/\/wordpress.org\/latest.tar.gz&quot;\n\n  tasks:\n    # ================== \u521d\u59cb\u5316\u9636\u6bb5 ==================\n    - name: \u521d\u59cb\u5316\u672c\u5730\u5b58\u50a8\n      file:\n        path: \/var\/www\/html\n        state: directory\n        mode: &#039;0755&#039;\n        owner: nginx\n        group: nginx\n\n    # ================== \u8f6f\u4ef6\u90e8\u7f72\u9636\u6bb5 ==================\n    - name: \u5b89\u88c5 PHP \u6269\u5c55\n      yum:\n        name: &quot;{{ php_modules }}&quot;\n        state: present\n        update_cache: yes\n      notify: restart php-fpm\n\n    - name: \u521b\u5efaNginx\u914d\u7f6e\u76ee\u5f55\n      file:\n        path: &quot;\/etc\/nginx\/conf.d&quot;\n        state: directory\n        mode: &#039;0755&#039;\n\n    # ================== WordPress\u90e8\u7f72\u9636\u6bb5 ==================\n    - name: \u4e0b\u8f7d WordPress \u5230\u76ee\u6807\u670d\u52a1\u5668\n      get_url:\n        url: &quot;{{ wordpress_url }}&quot;\n        dest: \/tmp\/wordpress.tar.gz\n        timeout: 30\n        validate_certs: no\n\n    - name: \u6e05\u7a7a\u76ee\u6807\u76ee\u5f55\uff08\u9996\u6b21\u90e8\u7f72\uff09\n      file:\n        path: \/var\/www\/html\n        state: directory\n        owner: nginx\n        group: nginx\n        mode: &#039;0755&#039;\n      when: ansible_local.initial_deploy | default(true)\n\n    - name: \u89e3\u538b WordPress \u6587\u4ef6\n      unarchive:\n        src: \/tmp\/wordpress.tar.gz\n        dest: \/var\/www\/html\n        remote_src: yes\n        extra_opts: \n          - --strip-components=1\n          - --no-same-owner\n        owner: nginx\n        group: nginx\n\n    # ================== \u914d\u7f6e\u9636\u6bb5 ==================\n    - name: \u90e8\u7f72 Nginx \u914d\u7f6e\n      template:\n        src: wordpress.conf.j2\n        dest: \/etc\/nginx\/conf.d\/wordpress.conf\n      notify: reload nginx\n\n    - name: \u52a8\u6001\u751f\u6210wp-config.php\n      template:\n        src: wp-config.php.j2\n        dest: \/var\/www\/html\/wp-config.php\n        mode: &#039;0644&#039;\n      register: wp_config\n      notify: \n        - restart php-fpm\n        - reload nginx\n\n    # ================== \u6743\u9650\u7ba1\u7406\u9636\u6bb5 ==================\n    #    - name: \u9012\u5f52\u8bbe\u7f6e\u76ee\u5f55\u6743\u9650\n    #    file:\n    #     path: \/var\/www\/html\n    #    state: directory\n    #    owner: nginx\n    #        group: nginx\n    #    mode: &#039;0755&#039;\n    #    recurse: yes\n    #\n    #- name: \u9012\u5f52\u8bbe\u7f6e\u6587\u4ef6\u6743\u9650\n    #  shell: |\n    #    find \/var\/www\/html -type f -exec chmod 644 {} \\;\n    #    find \/var\/www\/html -type f -exec chown nginx:nginx {} \\;\n    #  args:\n    #    warn: false  # \u7981\u7528 Shell \u8b66\u544a\n    #    changed_when: false  # \u5f3a\u5236\u6807\u8bb0\u4e3a changed\n    # ================== \u6570\u636e\u5e93\u521d\u59cb\u5316 ==================\n    - name: \u521b\u5efa WordPress \u6570\u636e\u5e93\uff08\u4ec5\u4e3b\u5e93\uff09\n      mysql_db:\n        name: &quot;{{ wp_db_name }}&quot;\n        state: present\n        login_unix_socket: \/var\/lib\/mysql\/mysql.sock\n        login_user: root\n        login_password: &quot;123456Ok&quot;\n      when: inventory_hostname == &quot;web1&quot;\n\n    - name: \u521b\u5efa\u6570\u636e\u5e93\u7528\u6237\u5e76\u6388\u6743\uff08\u4ec5\u4e3b\u5e93\uff09\n      mysql_user:\n        name: &quot;{{ wp_db_user }}&quot;\n        host: &quot;%&quot;\n        password: &quot;{{ wp_db_password }}&quot;\n        priv: &quot;{{ wp_db_name }}.*:ALL&quot;\n        state: present\n        login_unix_socket: \/var\/lib\/mysql\/mysql.sock\n        login_user: root\n        login_password: &quot;123456Ok&quot;\n      when: inventory_hostname == &quot;web1&quot;\n\n  handlers:\n    - name: restart php-fpm\n      service:\n        name: php-fpm\n        state: restarted\n        \n    - name: reload nginx\n      service:\n        name: nginx\n        state: reloaded\n\n    - name: clean wordpress package\n      file:\n        path: \/tmp\/wordpress.tar.gz\n        state: absent\n      listen: &quot;cleanup tasks&quot;\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58cb115 elementor-widget elementor-widget-shortcode\" data-id=\"58cb115\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">wordpress.conf.j2<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/wordpress.conf.j2\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">server {\n    listen 80;\n    server_name {{ ansible_host }};  # \u8bf7\u66ff\u6362\u4e3a\u5b9e\u9645\u57df\u540d\n    root \/var\/www\/html;\n    index index.php index.html index.htm;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$args;\n    }\n\n    location ~ \\.php$ {\n        try_files $uri =404;\n        fastcgi_pass unix:\/var\/run\/php-fpm\/www.sock;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ \/\\.ht {\n        deny all;\n    }\n\n    error_log \/var\/log\/nginx\/wordpress_error.log;\n    access_log \/var\/log\/nginx\/wordpress_access.log;\n}\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e132490 elementor-widget elementor-widget-shortcode\" data-id=\"e132490\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">wp-config_php.j2<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/wp-config_php.j2\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">&lt;?php\ndefine(&#039;DB_NAME&#039;, &#039;{{ wp_db_name }}&#039;);\ndefine(&#039;DB_USER&#039;, &#039;{{ wp_db_user }}&#039;);\ndefine(&#039;DB_PASSWORD&#039;, &#039;{{ wp_db_password }}&#039;);\ndefine(&#039;DB_HOST&#039;, &#039;{{ wp_db_host }}&#039;);\ndefine(&#039;DB_CHARSET&#039;, &#039;utf8&#039;);\ndefine(&#039;DB_COLLATE&#039;, &#039;&#039;);\n\n\/\/ \u6d4b\u8bd5\u73af\u5883\u5b89\u5168\u5bc6\u94a5\uff08\u660e\u6587\uff09\ndefine(&#039;AUTH_KEY&#039;,         &#039;test-auth-key-1234567890&#039;);\ndefine(&#039;SECURE_AUTH_KEY&#039;,  &#039;test-secure-auth-key-1234567890&#039;);\ndefine(&#039;LOGGED_IN_KEY&#039;,    &#039;test-logged-in-key-1234567890&#039;);\ndefine(&#039;NONCE_KEY&#039;,        &#039;test-nonce-key-1234567890&#039;);\ndefine(&#039;AUTH_SALT&#039;,        &#039;test-auth-salt-1234567890&#039;);\ndefine(&#039;SECURE_AUTH_SALT&#039;, &#039;test-secure-auth-salt-1234567890&#039;);\ndefine(&#039;LOGGED_IN_SALT&#039;,   &#039;test-logged-in-salt-1234567890&#039;);\ndefine(&#039;NONCE_SALT&#039;,       &#039;test-nonce-salt-1234567890&#039;);\n\n$table_prefix = &#039;wp_&#039;;\ndefine(&#039;WP_DEBUG&#039;, true);  \/\/ \u6d4b\u8bd5\u73af\u5883\u5f00\u542f\u8c03\u8bd5\u6a21\u5f0f\n\nif ( !defined(&#039;ABSPATH&#039;) )\n    define(&#039;ABSPATH&#039;, dirname(__FILE__) . &#039;\/&#039;);\nrequire_once(ABSPATH . &#039;wp-settings.php&#039;);\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d185225 elementor-widget elementor-widget-heading\" data-id=\"d185225\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"LNMP%E6%89%B9%E9%87%8F%E5%8A%A0%E6%9C%BA%E5%99%A8\"><\/span>LNMP\u6279\u91cf\u52a0\u673a\u5668<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef25aa8 elementor-widget elementor-widget-shortcode\" data-id=\"ef25aa8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">add_machine.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/add_machine.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">---\r\n- hosts: web1\r\n  include_tasks: \r\n    - web_src_old\/tasks\/total_web1.yml\r\n- hosts: web2\r\n  roles: \r\n    - web_dest_new\r\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e4cc16 elementor-widget elementor-widget-heading\" data-id=\"1e4cc16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E4%BB%8Eweb1%E5%AF%BC%E5%87%BA%E7%AB%99%E7%82%B9%E7%9B%AE%E5%BD%95%EF%BC%9A\"><\/span>\u4eceweb1\u5bfc\u51fa\u7ad9\u70b9\u76ee\u5f55\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e610a96 elementor-widget elementor-widget-shortcode\" data-id=\"e610a96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">total_web1.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/total_web1.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">---\r\n- hosts: web01\r\n  tasks: \r\n    - name: 1.\u4f20\u8f93\u7ad9\u70b9\u76ee\u5f55\u4ee3\u7801\r\n      shell: scp -rp \/app\/code\/blog\/* root@web02:\/app\/code\/blog\/  &amp;&gt;\/dev\/null<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6a96ef elementor-widget elementor-widget-heading\" data-id=\"d6a96ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E5%A2%9E%E5%8A%A0n%E5%8F%B0web%E6%9C%8D%E5%8A%A1%E5%99%A8\"><\/span>\u589e\u52a0n\u53f0web\u670d\u52a1\u5668<span class=\"ez-toc-section-end\"><\/span><\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5bf8adf elementor-widget elementor-widget-shortcode\" data-id=\"5bf8adf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">total_add_web2.yml<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/total_add_web2.yml\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-yaml\">---\r\n- name: \u9488\u5bf9 web2 \u6267\u884c\u4efb\u52a1\r\n  hosts: web2\r\n  vars:\r\n    packages:\r\n      - nginx      \r\n      - php\r\n      - php-bcmath\r\n      - php-cli\r\n      - php-common\r\n      - php-devel\r\n      - php-embedded\r\n      - php-fpm\r\n      - php-gd\r\n      - php-intl\r\n      - php-mbstring\r\n      - php-mysqlnd\r\n      - php-opcache\r\n      - php-pdo\r\n      - php-process\r\n      - php-xml\r\n      - php-json\r\n  tasks:\r\n    - name: \u5f53\u524d\u6267\u884c\u5267\u672c\u7684\u673a\u5668\r\n      debug:\r\n      msg: &quot;\u8fd9\u662f\u5728 {{ inventory_hostname }} \u673a\u5668\u4e0a\u6267\u884c\u7684\u4efb\u52a1&quot;\r\n    - name: 1. \u5b89\u88c5nginx\uff0cphp\r\n      yum: \r\n        name: &quot;{{ packages }}&quot;\r\n        state: present\r\n        # yum\u6a21\u5757\u672c\u8eab\u5c31\u652f\u6301\u76f4\u63a5\u4f20\u9012\u4e00\u4e2a\u5305\u5217\u8868\uff0c\u8fd9\u6837\u53ef\u4ee5\u907f\u514d\u5faa\u73af\uff0c\u5e76\u4e14\u53ea\u9700\u8981\u4e00\u4e2a\u4efb\u52a1\u5373\u53ef\u5b89\u88c5\u6240\u6709\u5305\r\n        # \uff08\u63a8\u8350\uff0c\u56e0\u4e3a\u8fd9\u6837\u53ea\u9700\u8981\u4e00\u6b21yum\u4e8b\u52a1\uff09\uff1a\r\n        # \u8fd9\u91cc\u4f7f\u7528\u5217\u8868\u65b9\u5f0f\u5b89\u88c5\u7684\u597d\u5904\u662f\uff0cyum\u4f1a\u4e00\u6b21\u6027\u5b89\u88c5\u6240\u6709\u5305\uff0c\u53ea\u9700\u8981\u4e00\u4e2a\u4e8b\u52a1\uff0c\u6bd4\u5faa\u73af\u5b89\u88c5\u6bcf\u4e2a\u5305\u66f4\u9ad8\u6548\u3002\r\n    - name: 2.1\u521b\u5efawww\u7528\u6237\u7ec4\r\n      group:\r\n        name: www\r\n        gid: 1999\r\n        state: present\r\n    - name: 2.2\u521b\u5efawww\u7528\u6237\r\n      user:\r\n        name: www\r\n        group: www\r\n        create_home: no\r\n        shell: \/sbin\/nologin\r\n        state: present\r\n    - name: 3.\u4fee\u6539nginx\u7ad9\u70b9\u76ee\u5f55\u914d\u7f6e\u6587\u4ef6\/conf.d\/blog.linuxjk.cn.conf #\uff08\u76f4\u63a5copy\uff0c\u4e0eweb1\u4fdd\u6301\u4e00\u81f4\u5373\u53ef\uff09\r\n      copy:\r\n        src: files\/blog.linuxjk.cn.conf\r\n        dest: \/etc\/nginx\/conf.d\/blog.linuxjk.cn.conf\r\n    - name: 4.1\u4fee\u6539nginx\u7528\u6237\u4e3awww\uff0c\u4e0enfs\u7edf\u4e00\r\n      lineinfile: \r\n        path: \/etc\/nginx\/nginx.conf\r\n        regexp: &#039;^user&#039;\r\n        line: &quot;user www;&quot;\r\n\r\n    - name: 5.1\u68c0\u67e5nginx\u914d\u7f6e\u662f\u5426\u6b63\u786e\r\n      shell: nginx -t  &amp;&gt;\/dev\/null\r\n      register: check_nginx    \r\n    \r\n    - name: 4.2 \u4fee\u6539php\u7528\u6237\u4e3awww\uff0c\u4e0enfs\u7edf\u4e00,\u4fee\u6539php\u76d1\u542csocket\u6587\u4ef6\u7684\u6240\u5c5e\u4e3b\u6240\u5c5e\u7ec4\u4e3awww\uff0c\u6743\u96500660\r\n      lineinfile:\r\n        path: \/etc\/php-fpm.d\/www.conf\r\n    # \u4f7f\u7528 {{ item.olduser }} \u6765\u6b63\u786e\u5f15\u7528\u53d8\u91cf\r\n        regexp: &quot;{{ item.olduser }}&quot;\r\n        line: &quot;{{ item.newuser }}&quot;\r\n    # \u786e\u4fdd\u4fee\u6539\u540e\u914d\u7f6e\u6587\u4ef6\u8bed\u6cd5\u6b63\u786e\r\n        backrefs: yes\r\n      loop:\r\n        - { olduser: &#039;^;?\\s*user\\s*=&#039;, newuser: &#039;user = www&#039; }\r\n        - { olduser: &#039;^;?\\s*group\\s*=&#039;, newuser: &#039;group = www&#039; }\r\n        - { olduser: &#039;^;?\\s*listen.owner\\s*=&#039;, newuser: &#039;listen.owner = www&#039; }\r\n        - { olduser: &#039;^;?\\s*listen.group\\s*=&#039;, newuser: &#039;listen.group = www&#039; }\r\n        - { olduser: &#039;^;?\\s*listen.mode\\s*=&#039;, newuser: &#039;listen.mode = 0660&#039; }\r\n    - name: 4.3 \u4fee\u6539php.ini(\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f,\u9ed8\u8ba42M)\r\n      lineinfile:\r\n        path: \/etc\/php.ini\r\n        regexp: &quot;{{ item.oldsize }}&quot;\r\n        line: &quot;{{ item.newsize }}&quot;\r\n        backrefs: yes\r\n      loop:\r\n        - { oldsize: &#039;^;?\\s*upload_max_filesize\\s*=.*&#039;, newsize: &#039;upload_max_filesize = 500M&#039;}\r\n        - { oldsize: &#039;^;?\\s*post_max_size\\s*=.*&#039;, newsize: &#039;post_max_size = 512M&#039;} \r\n        - { oldsize: &#039;^;?\\s*memory_limit\\s*=.*&#039;, newsize: &#039;memory_limit = 256M&#039;}\r\n        - { oldsize: &#039;^;?\\s*max_execution_time\\s*=.*&#039;, newsize: &#039;max_execution_time = 300&#039;}\r\n\r\n    - name: 5.2\u68c0\u67e5php\u914d\u7f6e\u662f\u5426\u6b63\u786e\r\n      shell: php-fpm -t &amp;&gt;\/dev\/null\r\n      register: check_php\r\n\r\n    - name: 6.1\u8bbe\u7f6e\u5f00\u673a\u81ea\u542f\u52a8\u5e76\u542f\u52a8nginx\u670d\u52a1\r\n      systemd: \r\n        name: nginx\r\n        enabled: yes\r\n        state: started\r\n      when: check_nginx.rc == 0\r\n    - name: \u63d0\u793anginx\u914d\u7f6e\u9519\u8bef\r\n      debug: \r\n        msg: |\r\n          nginx\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c\u8bf7\u68c0\u67e5\u914d\u7f6e\r\n      when: check_nginx.rc != 0\r\n    - name: 6.2\u8bbe\u7f6e\u5f00\u673a\u81ea\u542f\u52a8\u5e76\u542f\u52a8php\u670d\u52a1    \r\n      systemd: \r\n        name: php-fpm\r\n        enabled: yes\r\n        state: started     \r\n      when:  check_php.rc == 0 \r\n    - name: \u63d0\u793aphp\u914d\u7f6e\u9519\u8bef  \r\n      debug: \r\n        msg: |\r\n          php\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c\u8bf7\u68c0\u67e5\u914d\u7f6e\r\n      when: check_php.rc != 0 \r\n\r\n    - name: 8.\u521b\u5efa\u4e34\u65f6\u76ee\u5f55\u5b58\u653e\u7f51\u9875\u76ee\u5f55\u6587\u4ef6\r\n      file: \r\n        path: \/tmp\/test\/\r\n        state: directory\r\n    - name: 8.\u5c06upload\u76ee\u5f55\u4e0b\u7684\u5185\u5bb9\u8f6c\u79fb\u51fa\u53bb\r\n      shell: mv \/app\/code\/blog\/wp-content\/uploads\/* \/tmp\/test  &amp;&gt;\/dev\/null\r\n      ignore_errors: yes  # \u6dfb\u52a0\u9519\u8bef\u5ffd\u7565\r\n    - name: 9. web2 \u6302\u8f7d nfs\u5e76\u8bbe\u7f6e\u6c38\u4e45\u6302\u8f7d\r\n      mount: \r\n        src: 172.16.1.31:\/ans_www\/web1\r\n        path: \/app\/code\/blog\/wp-content\/uploads\r\n        fstype: nfs\r\n        state: mounted\r\n      register: mount_nfs\r\n    - name: 10. \u663e\u793a\u6302\u8f7d\u7ed3\u679c(\u6210\u529f)\r\n      debug: \r\n        msg: mount is successful\r\n      when:  not mount_nfs.failed\r\n    - name: 10. \u663e\u793a\u6302\u8f7d\u7ed3\u679c(\u5931\u8d25)\r\n      debug: \r\n        msg: mount is failed\r\n      when:   mount_nfs.failed\r\n    - name: 11. \u8c03\u6574\u7ad9\u70b9\u76ee\u5f55\uff0cnginx\u5de5\u4f5c\u76ee\u5f55\u6743\u9650\r\n      file: \r\n        path: &quot;{{ item }}&quot;\r\n        owner: www\r\n        group: www\r\n      loop: \r\n        - \/app\/code\/blog\/\r\n        - \/var\/log\/nginx\/\r\n        - \/var\/lib\/nginx\/\r\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-94daa37 e-flex e-con-boxed e-con e-parent\" data-id=\"94daa37\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5324c02 elementor-widget elementor-widget-heading\" data-id=\"5324c02\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Dockerfile%E7%94%9F%E6%88%90%E9%95%9C%E5%83%8F\"><\/span>Dockerfile\u751f\u6210\u955c\u50cf<span class=\"ez-toc-section-end\"><\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e3ce5e elementor-widget elementor-widget-heading\" data-id=\"9e3ce5e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E5%8F%AF%E9%81%93%E4%BA%91%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AEnginxphp\"><\/span>\u53ef\u9053\u4e91\u90e8\u7f72\u914d\u7f6enginx+php<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ec0d86 elementor-widget elementor-widget-shortcode\" data-id=\"9ec0d86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">entry.sh<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/entry.sh\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-bash\">#!\/bin\/bash\n#desc:docker\u5bb9\u5668\u7684\u5165\u53e3\u811a\u672c\n\nphp-fpm7.4\nnginx -g &quot;daemon off;&quot;\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3069e34 elementor-widget elementor-widget-shortcode\" data-id=\"3069e34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">Dockerfile<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/nginx_php_kodbox_Dockerfile\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-bash\">FROM debian:bullseye\nLABEL author=linuxjk.cn\n\nENV PHP_PACKAGES=&quot;php7.4-bcmath php7.4-bz2 php7.4-cgi  \\\nphp7.4-cli php7.4-common php7.4-curl php7.4-dba  \\\nphp7.4-dev php7.4-enchant php7.4-fpm php7.4-gd  \\\nphp7.4-gmp php7.4-imap php7.4-interbase php7.4-intl  \\\nphp7.4-json php7.4-ldap php7.4-mbstring php7.4-mysql \\\nphp7.4-odbc php7.4-opcache php7.4-pgsql php7.4-phpdbg php7.4-pspell php7.4-readline php7.4-snmp  \\\nphp7.4-soap php7.4-sybase php7.4-tidy php7.4-xml  \\\nphp7.4-xmlrpc php7.4-xsl php7.4-zip php7.4-redis&quot;\nENV CODE_DIR=&quot;\/app\/code\/kodbox\/&quot;\nENV USER=&quot;www-data&quot;\n\n\nADD sources.list \/etc\/apt\/sources.list\n\nRUN    set -aux \\\n    &amp;&amp; umask 0022 \\\n&amp;&amp; apt update -o Acquire::https::Verify-Peer=false \\\n&amp;&amp; sed -i &#039;s\/https\/http\/g&#039; \/etc\/apt\/sources.list \\\n&amp;&amp; apt install -y ca-certificates \\\n&amp;&amp; sed -i &#039;s\/http\/https\/g&#039; \/etc\/apt\/sources.list \\\n&amp;&amp; apt update \\\n&amp;&amp; apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring unzip \\\n&amp;&amp; ln -sf \/usr\/share\/zoneinfo\/Asia\/Shanghai \/etc\/localtime \\\n    &amp;&amp; apt update \\\n    &amp;&amp; apt install -y nginx \\\n    &amp;&amp; apt install  -y ${PHP_PACKAGES} \\\n    &amp;&amp; sed -i  &#039;s#\/run\/php\/php7.4-fpm.sock#127.0.0.1:9000#g&#039; \/etc\/php\/7.4\/fpm\/pool.d\/www.conf \\\n    &amp;&amp; sed -i &#039;s#\/run\/php\/php7.4-fpm.pid#\/run\/php7.4-fpm.pid#g&#039;   \/etc\/php\/7.4\/fpm\/php-fpm.conf \\\n    &amp;&amp; sed -i &#039;\/^user\/s#nginx#www-data#g&#039; \/etc\/nginx\/nginx.conf \\\n    &amp;&amp; mkdir -p ${CODE_DIR} \\\n    &amp;&amp; chown ${USER}:${USER} ${CODE_DIR} \\\n    &amp;&amp; ln -sf \/dev\/stdout \/var\/log\/nginx\/kodbox.access.log \\\n    &amp;&amp; ln -sf \/dev\/stderr \/var\/log\/nginx\/kodbox.error.log \\\n    &amp;&amp; ln -sf \/dev\/stderr \/var\/log\/php7.4-fpm.log \n\nADD nginx.conf \/etc\/nginx\/nginx.conf\nADD kodbox.linuxjk.cn.conf \/etc\/nginx\/conf.d\/kodbox.linuxjk.cn.conf\nADD info.php ${CODE_DIR}\nADD kodbox.tar.gz ${CODE_DIR}\n\nRUN set -aux \\\n    &amp;&amp; umask 0022 \\\n    &amp;&amp;  chown -R ${USER}:${USER}  ${CODE_DIR} \\\n    &amp;&amp; chmod 755 \/app \/app\/code\/ \/app\/code\/kodbox \\\n    &amp;&amp; apt clean \\\n    &amp;&amp; rm -rf \/var\/cache \\\n    &amp;&amp; rm -rf \/usr\/share\/doc\n\nEXPOSE 80 443\nWORKDIR ${CODE_DIR}\n\nCOPY  entry.sh \/entry.sh\nCMD [&quot;\/entry.sh&quot;]\n\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed6a0ee elementor-widget elementor-widget-heading\" data-id=\"ed6a0ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"%E5%A4%9A%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85tengine\"><\/span>\u591a\u9636\u6bb5\u63d0\u4ea4\u7f16\u8bd1\u5b89\u88c5tengine<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21b4711 elementor-widget elementor-widget-shortcode\" data-id=\"21b4711\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n    <div class=\"wp-code-block\">\n        <div class=\"code-header\">\n            <div class=\"code-title\">Dockerfile<\/div>\n            <div class=\"code-buttons\">\n                <a href=\"https:\/\/linuxjk.oss-cn-shanghai.aliyuncs.com\/wp-content\/uploads\/ansible_playbooks\/tengine_code_Dockerfile\" class=\"download-btn\" download>\n                    \u4e0b\u8f7d\n                <\/a>\n                <div class=\"right-buttons\">\n                    <button type=\"button\" class=\"copy-btn\">\u590d\u5236<\/button>\n                    <button type=\"button\" class=\"fold-btn\">\u25bc<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n        <pre><code class=\"language-bash\">#######################\n#1. pull ubuntu image\n#######################\nFROM ubuntu:20.04 AS temp\nLABEL maintainer=&quot;Tengine docker admin  &lt;zhangpeng@linuxjk.cn&gt;&quot;  author=&quot;linuxjk.cn&quot;\nENV  Web_User=&quot;nginx&quot;\nENV  Web_Server=&quot;tengine&quot;\nENV  Web_Version=&quot;3.0.0&quot;\nENV  Server_Dir=&quot;\/app\/tools\/tengine-3.0.0&quot;\nENV  Server_Dir_Soft=&quot;\/app\/tools\/tengine&quot;\n#######################\n#####ENV vars###########\n#######################\n#######################\n#2. \u7f16\u8bd1\u5b89\u88c5     ######\n#######################\nRUN  set -eux \\\n   &amp;&amp; sed -ri &#039;s#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g&#039;   \/etc\/apt\/sources.list \\\n   &amp;&amp; apt-get update \\\n   &amp;&amp; apt-get install  -y wget libssl-dev make gcc pcre2-utils   libpcre3-dev zlib1g-dev\nRUN  set -eux \\\n   &amp;&amp; wget -P \/tmp\/ http:\/\/tengine.taobao.org\/download\/${Web_Server}-${Web_Version}.tar.gz \\\n   &amp;&amp; cd \/tmp \\\n   &amp;&amp; tar xf ${Web_Server}-${Web_Version}.tar.gz \\\n   &amp;&amp; cd ${Web_Server}-${Web_Version} \\\n   &amp;&amp; .\/configure --prefix=${Server_Dir} \\\n         --user=${Web_User} \\\n         --group=${Web_User} \\\n         --with-http_ssl_module \\\n         --with-http_v2_module   \\\n         --with-http_realip_module \\\n         --with-http_stub_status_module \\\n         --with-http_mp4_module \\\n         --with-stream \\\n         --with-stream_ssl_module   \\\n         --with-stream_realip_module   \\\n         --add-module=modules\/ngx_http_upstream_check_module\/ \\\n         --add-module=modules\/ngx_http_upstream_session_sticky_module\n#\u7f16\u8bd1\nRUN  set -eux \\\n   &amp;&amp;    cd \/tmp\/ \\\n   &amp;&amp; cd ${Web_Server}-${Web_Version} \\\n   &amp;&amp;  make -j `nproc` \\\n   &amp;&amp;  make install\n#\u540e\u7eed\u64cd\u4f5c\nRUN  set -eux \\\n   &amp;&amp;  groupadd  ${Web_User} \\\n   &amp;&amp; useradd   -g ${Web_User}  ${Web_User} \\\n   &amp;&amp;  ln -s ${Server_Dir}   ${Server_Dir_Soft} \\\n   &amp;&amp;  ln -s ${Server_Dir_Soft}\/sbin\/nginx \/sbin\/\n\n###################################\n######\u521b\u5efa\u65b0\u7684\u955c\u50cf#################\n######\u628a\u4e0a\u9762\u7ed3\u679c\u4f20\u9012\u5230\u65b0\u7684\u955c\u50cf#####\n###################################\nFROM ubuntu:20.04\nCOPY --from=temp \/app\/ \/app\/\nADD bunengsi.tar.gz   \/app\/tools\/tengine\/html\/\nRUN   set -eux \\\n     &amp;&amp; sed -ri &#039;s#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g&#039;   \/etc\/apt\/sources.list \\\n     &amp;&amp; apt-get update \\\n     &amp;&amp; apt-get install  -y libssl-dev pcre2-utils   libpcre3-dev zlib1g-dev \\\n     &amp;&amp;  ln -s \/app\/tools\/tengine\/sbin\/nginx \/sbin\/ \\\n     &amp;&amp; groupadd nginx \\\n     &amp;&amp; useradd  -g nginx nginx \\\n     &amp;&amp;  rm -fr \/var\/cache\/* \\\n     &amp;&amp; apt clean \\\n     &amp;&amp;  ln -sf \/dev\/stdout \/app\/tools\/tengine\/logs\/access.log \\\n     &amp;&amp;  ln -sf \/dev\/stderr \/app\/tools\/tengine\/logs\/error.log\nEXPOSE 80 443\nCMD [&quot;nginx&quot;,&quot;-g&quot;,&quot;daemon off;&quot;]\n<\/code><\/pre>\n    <\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0d461f elementor-widget elementor-widget-heading\" data-id=\"b0d461f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"dockerfiles%E5%8F%8A%E4%BB%A3%E7%A0%81%E9%9B%86%E5%90%88\"><\/span><a href=\"https:\/\/alawang.linuxjk.cn\/ob\/day054-dockerfiles%E9%9B%86%E5%90%88\/dockerfiles_all_in_one\/\">dockerfiles\u53ca\u4ee3\u7801\u96c6\u5408<\/a><span class=\"ez-toc-section-end\"><\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-81c0179 elementor-widget elementor-widget-heading\" data-id=\"81c0179\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"dockercompose%E5%8F%8A%E4%BB%A3%E7%A0%81%E9%9B%86%E5%90%88\"><\/span><a href=\"https:\/\/alawang.linuxjk.cn\/ob\/day055-dockercompose%E9%9B%86%E5%90%88\/docker_compose_all\/\">dockercompose\u53ca\u4ee3\u7801\u96c6\u5408<\/a><span class=\"ez-toc-section-end\"><\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>ans\u5267\u672c \u81ea\u52a8\u90e8\u7f72zabbix_agent(\u6279\u91cf\u5b89\u88c5) \u81ea\u52a8\u90e8\u7f72nfs\uff08\u670d\u52a1\u7aef\u90e8\u7f72\uff0b\u5ba2\u6237\u7aef\u6302\u8f7d\uff09 LNMP\u6279 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1955","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/pages\/1955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1955"}],"version-history":[{"count":48,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/pages\/1955\/revisions"}],"predecessor-version":[{"id":2978,"href":"https:\/\/linuxjk.cn\/index.php?rest_route=\/wp\/v2\/pages\/1955\/revisions\/2978"}],"wp:attachment":[{"href":"https:\/\/linuxjk.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}