웹사이트 검색

Ubuntu 14.04에서 Ansible을 사용하여 기본 PHP 애플리케이션을 배포하는 방법


소개

이 자습서에서는 Ansible을 사용하여 기본 PHP 애플리케이션을 프로비저닝하는 프로세스를 다룹니다. 이 튜토리얼의 목표는 대상 Droplet에서 단일 SSH 연결이나 수동 명령 실행 없이 기본 PHP 애플리케이션을 제공하는 새 웹 서버를 만드는 것입니다.

우리는 Laravel 프레임워크를 예제 PHP 애플리케이션으로 사용할 것이지만, 이 지침은 이미 자신만의 프레임워크와 애플리케이션이 있는 경우 다른 프레임워크와 애플리케이션을 지원하도록 쉽게 수정할 수 있습니다.

전제 조건

이 튜토리얼에서는 Ansible을 사용하여 Ubuntu 14.04 Droplet에 Nginx, PHP 및 기타 서비스를 설치하고 구성합니다. 이 튜토리얼은 기본 Ansible 지식을 기반으로 작성되었으므로 Ansible을 처음 사용하는 경우 이 기본 Ansible 튜토리얼을 먼저 읽을 수 있습니다.

이 자습서를 따르려면 다음이 필요합니다.

  • PHP 애플리케이션을 구성하고 배포하는 데 사용할 모든 크기의 Ubuntu 14.04 Droplet 1개. 이 머신의 IP 주소는 튜토리얼 전체에서 your_server_ip라고 합니다.\n
  • Ansible에 사용될 Ubuntu 14.04 Droplet 1개. 이것은 이 튜토리얼 전체에서 로그인하게 될 Droplet입니다.\n
  • 두 Droplet에 대해 구성된 루트가 아닌 Sudo 사용자.\n
  • Ansible Droplet이 PHP 배포 Droplet에 대한 로그인을 인증하기 위한 SSH 키입니다. Ansible Droplet에서 이 자습서를 따라 설정할 수 있습니다.\n

1단계 — Ansible 설치

첫 번째 단계는 Ansible을 설치하는 것입니다. 이것은 PPA(Personal Package Archive)를 설치하고 apt로 Ansible 패키지를 설치하여 쉽게 수행할 수 있습니다.

먼저 apt-add-repository 명령을 사용하여 PPA를 추가합니다.

  1. sudo apt-add-repository ppa:ansible/ansible

완료되면 apt 캐시를 업데이트합니다.

  1. sudo apt-get update

마지막으로 Ansible을 설치합니다.

  1. sudo apt-get install ansible

Ansible이 설치되면 작업할 새 디렉토리를 만들고 기본 구성을 설정합니다. 기본적으로 Ansible은 관리 중인 모든 서버를 포함하는 /etc/ansible/hosts에 있는 호스트 파일을 사용합니다. 이 파일은 일부 사용 사례에는 적합하지만 여기서는 우리가 원하는 것이 아닌 전역 파일입니다.

이 자습서에서는 로컬 호스트 파일을 만들어 대신 사용합니다. 작업 디렉토리 내에 새 Ansible 구성 파일을 생성하여 이를 수행할 수 있습니다. 이 파일을 사용하여 동일한 디렉토리 내에서 호스트 파일을 찾도록 Ansible에 지시할 수 있습니다.

새 디렉터리를 만듭니다(이 자습서의 나머지 부분에서 사용할 것임).

  1. mkdir ~/ansible-php

새 디렉터리로 이동합니다.

  1. cd ~/ansible-php/

ansible.cfg라는 새 파일을 만들고 nano 또는 즐겨 사용하는 텍스트 편집기를 사용하여 편집할 수 있도록 엽니다.

  1. nano ansible.cfg

다음을 ansible.cfg에 복사하여 [defaults] 그룹의 hosts 값으로 hostfile 구성 옵션을 추가합니다. 파일.

[defaults]
hostfile = hosts

ansible.cfg 파일을 저장하고 닫습니다. 다음으로 애플리케이션을 배포할 PHP Droplet의 IP 주소를 포함할 hosts 파일을 생성합니다.

  1. nano hosts

아래를 복사하여 php 섹션에 추가하고 your_server_ip를 서버 IP 주소와 sammy를 PHP Droplet의 전제 조건에서 만든 루트가 아닌 sudo 사용자로 바꿉니다.

[php]
your_server_ip ansible_ssh_user=sammy

hosts 파일을 저장하고 닫습니다. 새 php 그룹에서 ping 모듈을 호출하여 Ansible이 예상대로 호스트에 연결할 수 있는지 간단한 검사를 실행해 보겠습니다.

  1. ansible php -m ping

이전에 해당 호스트에 로그인한 적이 있는지에 따라 SSH 호스트 인증 확인을 받을 수 있습니다. 다음과 같은 성공적인 응답과 함께 ping이 반환되어야 합니다.

111.111.111.111 | success >> {
    "changed": false,
    "ping": "pong"
}

이제 Ansible이 설치 및 구성되었습니다. 웹 서버 설정으로 넘어갈 수 있습니다.

2단계 - 필수 패키지 설치

이 단계에서는 Ansible 및 apt를 사용하여 일부 필수 시스템 패키지를 설치합니다. 특히, git, nginx, sqlite3, mcrypt 및 몇 가지 php5를 설치합니다. -* 패키지.

원하는 패키지를 설치하기 위해 apt 모듈을 추가하기 전에 기본 플레이북을 만들어야 합니다. 튜토리얼을 진행하면서 이 플레이북을 기반으로 구축할 것입니다. php.yml이라는 새 플레이북을 만듭니다.

  1. nano php.yml

다음 구성을 붙여넣습니다. 처음 두 줄은 사용하려는 호스트 그룹(php)을 지정하고 기본적으로 sudo로 명령을 실행하는지 확인합니다. 나머지는 필요한 패키지와 함께 모듈에 추가됩니다. 자신의 애플리케이션에 맞게 이를 사용자 정의하거나 예제 Laravel 애플리케이션을 따라하는 경우 아래 구성을 사용할 수 있습니다.

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

php.yml 파일을 저장합니다. 마지막으로 ansible-playbook을 실행하여 Droplet에 패키지를 설치합니다. PHP Droplet의 sudo 사용자에게 암호가 필요한 경우 --ask-sudo-pass 옵션을 사용하는 것을 잊지 마십시오.

  1. ansible-playbook php.yml --ask-sudo-pass

3단계 - 시스템 구성 파일 수정

이 섹션에서는 PHP Droplet의 일부 시스템 구성 파일을 수정합니다. 변경할 가장 중요한 구성 옵션(이후 단계에서 다룰 Nginx 파일 제외)은 php5-fpmcgi.fix_pathinfo 옵션입니다. 가치는 보안 위험입니다.

먼저 이 파일에 추가할 모든 섹션을 설명한 다음 복사하여 붙여넣을 수 있도록 전체 php.yml 파일을 포함합니다.

lineinfile 모듈을 사용하여 파일 내의 구성 값이 예상한 것과 정확히 일치하는지 확인할 수 있습니다. 이 작업은 일반 정규식을 사용하여 수행할 수 있으므로 Ansible은 매개변수가 있을 가능성이 있는 대부분의 형식을 이해할 수 있습니다. 또한 php5-fpmnginx를 다시 시작해야 합니다. 변경 사항이 적용되는지 확인하므로 새 handlers 섹션에 두 개의 핸들러도 추가해야 합니다. 핸들러는 작업이 변경될 때만 실행되므로 이에 적합합니다. 또한 플레이북의 끝에서 실행되므로 여러 작업이 동일한 핸들러를 호출할 수 있으며 한 번만 실행됩니다.

위의 작업을 수행하는 섹션은 다음과 같습니다.

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

핸들러에서 사용한 것처럼 php5-fpmservice 모듈로 다시 시작되지 않도록 하는 Ansible 버전 1.9.1의 버그가 있습니다.

수정 사항이 릴리스될 때까지 restart php5-fpm 핸들러를 service 명령 사용에서 shell 사용으로 변경하여 이 문제를 해결할 수 있습니다. 다음과 같이 명령합니다.

    - name: restart php5-fpm
      shell: service php5-fpm restart

이것은 문제를 우회하고 php5-fpm을 올바르게 다시 시작합니다.

다음으로 php5-mcrypt 모듈이 활성화되어 있는지도 확인해야 합니다. 이것은 셸 작업과 함께 php5enmod 스크립트를 실행하고 20-mcrypt.ini 파일이 활성화되었을 때 올바른 위치에 있는지 확인하여 수행됩니다. 작업이 특정 파일을 생성한다고 Ansible에 알리고 있음에 유의하십시오. 해당 파일이 있으면 작업이 실행되지 않습니다.

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

이제 편집을 위해 php.yml을 다시 엽니다.

  1. nano php.yml

파일이 아래와 일치하도록 위의 작업 및 핸들러를 추가합니다.

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

마지막으로 플레이북을 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

이제 Droplet에 필요한 모든 패키지가 설치되었고 기본 구성이 설정되어 사용할 준비가 되었습니다.

4단계 - Git 리포지토리 복제

이 섹션에서는 Git을 사용하여 Laravel 프레임워크 리포지토리를 Droplet에 복제합니다. 3단계와 마찬가지로 플레이북에 추가할 모든 섹션을 설명한 다음 전체 php.yml 파일을 복사하여 붙여넣을 수 있도록 포함합니다.

Git 저장소를 복제하기 전에 /var/www가 존재하는지 확인해야 합니다. 파일 모듈로 작업을 생성하여 이를 수행할 수 있습니다.

- name: create /var/www/ directory
  file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

위에서 언급했듯이 저장소를 Droplet에 복제하려면 Git 모듈을 사용해야 합니다. 일반적으로 git clone 명령에 필요한 모든 것은 소스 리포지토리이기 때문에 프로세스가 간단합니다. 이 경우 대상도 정의하고 update=no를 설정하여 리포지토리가 이미 존재하는 경우 리포지토리를 업데이트하지 않도록 Ansible에 알립니다. Laravel을 사용하고 있기 때문에 사용할 git 저장소 URL은 https://github.com/laravel/laravel.git입니다.

그러나 권한이 올바른지 확인하려면 www-data 사용자로 작업을 실행해야 합니다. 이를 위해 sudo를 사용하여 특정 사용자로 명령을 실행하도록 Ansible에 지시할 수 있습니다. 최종 작업은 다음과 같습니다.

- name: Clone git repository
  git: >
    dest=/var/www/laravel
    repo=https://github.com/laravel/laravel.git
    update=no
  sudo: yes
  sudo_user: www-data

참고: SSH 기반 리포지토리의 경우 accept_hostkey=yes를 추가하여 SSH 호스트 확인이 작업을 중단하지 않도록 할 수 있습니다.

이전과 마찬가지로 편집을 위해 php.yml 파일을 엽니다.

  1. nano php.yml

위 작업을 플레이북에 추가합니다. 파일의 끝은 다음과 일치해야 합니다.

...

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  - name: create /var/www/ directory
    file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

플레이북을 저장하고 닫은 다음 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

5단계 — Composer로 애플리케이션 생성

이 단계에서는 Composer를 사용하여 PHP 애플리케이션과 해당 종속성을 설치합니다.

Composer에는 필요한 모든 종속성을 설치한 다음 post-create-project-cmd 섹션에 정의된 프로젝트 생성 단계를 실행하는 create-project 명령이 있습니다. >composer.json 파일. 이것은 처음 사용할 때 응용 프로그램을 올바르게 설정하는 가장 좋은 방법입니다.

다음 Ansible 작업을 사용하여 Composer를 /usr/local/bin/composer로 전역적으로 다운로드하고 설치할 수 있습니다. 그러면 Ansible을 포함하여 Droplet을 사용하는 모든 사람이 액세스할 수 있습니다.

- name: install composer
  shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
  args:
    creates: /usr/local/bin/composer

Composer가 설치되어 있으면 사용할 수 있는 Composer 모듈이 있습니다. 우리의 경우 Composer에게 프로젝트가 어디에 있는지 알려주고(working_dir 매개변수 사용) create-project 명령을 실행하려고 합니다. create-project 명령에서 이 플래그를 지원하지 않으므로 optimize_autoloader=no 매개변수도 추가해야 합니다. git 명령과 마찬가지로 권한이 유효한지 확인하기 위해 www-data 사용자로 실행하려고 합니다. 모두 합치면 다음과 같은 작업을 얻습니다.

- name: composer create-project
  composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
  sudo: yes
  sudo_user: www-data

참고: create-project 작업은 Composer에 빈 캐시가 있고 모든 것을 새로 다운로드해야 하므로 새로운 Droplet에서 상당한 시간이 걸릴 수 있습니다.

이제 편집을 위해 php.yml 파일을 엽니다.

  1. nano php.yml

위의 작업을 handlers 위의 tasks 섹션 끝에 추가하여 플레이북의 끝이 다음과 일치하도록 합니다.

...

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data

  - name: install composer
    shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    args:
      creates: /usr/local/bin/composer

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

마지막으로 플레이북을 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

지금 Ansible을 다시 실행하면 어떻게 될까요? composer create-project는 다시 실행되며 Laravel의 경우 새로운 APP_KEY를 의미합니다. 그래서 대신 우리가 원하는 것은 해당 작업이 새로운 복제 후에만 실행되도록 설정하는 것입니다. git clone 작업의 결과로 변수를 등록한 다음 composer create-project 작업 내에서 해당 결과를 확인하여 한 번만 실행되도록 할 수 있습니다. git clone 작업이 변경됨이면 composer create-project를 실행하고 그렇지 않으면 건너뜁니다.

참고: Ansible composer 모듈의 일부 버전에 버그가 있는 것으로 보이며, 무시하므로 Changed 대신 OK를 출력할 수 있습니다. 종속성이 설치되지 않은 경우에도 해당 스크립트가 실행되었습니다.

편집을 위해 php.yml 파일을 엽니다.

  1. nano php.yml

git clone 작업을 찾습니다. 다음과 같이 등록 옵션을 추가하여 작업 결과를 복제된 변수에 저장합니다.

- name: Clone git repository
  git: >
    dest=/var/www/laravel
    repo=https://github.com/laravel/laravel.git
    update=no
  sudo: yes
  sudo_user: www-data
  register: cloned

다음으로 composer create-project 작업을 찾습니다. when 옵션을 추가하여 cloned 변수가 변경되었는지 여부를 확인합니다.

- name: composer create-project
  composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
  sudo: yes
  sudo_user: www-data
  when: cloned|changed

플레이북을 저장하고 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

이제 Composer는 실행될 때마다 APP_KEY 변경을 중지합니다.

6단계 - 환경 변수 업데이트

이 단계에서는 애플리케이션의 환경 변수를 업데이트합니다.

Laravel은 APP_ENVlocal로, APP_DEBUGtrue<로 설정하는 기본 .env 파일과 함께 제공됩니다. /코드>. 각각 productionfalse로 교체하려고 합니다. 이것은 다음 작업과 함께 lineinfile 모듈을 사용하여 간단하게 수행할 수 있습니다.

- name: set APP_DEBUG=false
  lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

- name: set APP_ENV=production
  lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

편집을 위해 php.yml 파일을 엽니다.

  1. nano php.yml

이 작업을 플레이북에 추가합니다. 파일의 끝은 다음과 일치해야 합니다.

...

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data
    when: cloned|changed

  - name: set APP_DEBUG=false
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

  - name: set APP_ENV=production
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

플레이북을 저장하고 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

lineinfile 모듈은 모든 텍스트 파일을 빠르게 조정하는 데 매우 유용하며 이와 같은 환경 변수가 올바르게 설정되었는지 확인하는 데 유용합니다.

7단계 - Nginx 구성

이 섹션에서는 PHP 애플리케이션을 제공하도록 Nginx를 구성합니다.

지금 웹 브라우저에서 Droplet을 방문하면(예: http://your_server_ip/) Laravel 새 프로젝트 페이지 대신 Nginx 기본 페이지가 표시됩니다. /var/www/laravel/public 디렉토리에서 애플리케이션을 제공하도록 Nginx 웹 서버를 구성해야 하기 때문입니다. 이렇게 하려면 Nginx 기본 구성을 해당 디렉토리로 업데이트하고 php-fpm에 대한 지원을 추가해야 PHP 스크립트를 처리할 수 있습니다.

nginx.conf라는 새 파일을 만듭니다.

  1. nano nginx.conf

해당 파일 내에 이 서버 블록을 저장합니다. 이 Nginx 구성에 대한 자세한 내용은 이 튜토리얼의 4단계를 확인하세요. 아래 수정 사항은 Laravel 공용 디렉토리가 있는 위치를 지정하고 Nginx가 hosts 파일에서 정의한 호스트 이름을 inventory_hostname<과 함께 server_name으로 사용하는지 확인하는 것입니다. /코드> 변수.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/laravel/public;
    index index.php index.html index.htm;

    server_name {{ inventory_hostname }};

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/laravel/public;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

nginx.conf 파일을 저장하고 닫습니다.

이제 템플릿 모듈을 사용하여 새 구성 파일을 푸시할 수 있습니다. 템플릿 모듈은 복사 모듈과 모양과 소리가 매우 비슷하지만 큰 차이가 있습니다. 복사는 변경 없이 하나 이상의 파일을 복사하는 반면, 템플릿은 단일 파일을 복사하고 파일 내의 모든 변수를 해결합니다. 구성 파일 내에서 {{ inventory_hostname }}를 사용했기 때문에 template 모듈을 사용하여 hosts에서 사용한 IP 주소로 확인합니다. 파일. 이렇게 하면 Ansible이 사용하는 구성 파일을 하드 코딩할 필요가 없습니다.

그러나 작업을 작성할 때 평소와 같이 Droplet에서 일어날 일을 고려해야 합니다. Nginx 구성을 변경하고 있기 때문에 Nginx와 php-fpm을 다시 시작해야 합니다. 이것은 notify 옵션을 사용하여 수행됩니다.

- name: Configure nginx
  template: src=nginx.conf dest=/etc/nginx/sites-available/default
  notify:
    - restart php5-fpm
    - restart nginx

php.yml 파일을 엽니다.

  1. nano php.yml

작업 섹션 끝에 이 nginx 작업을 추가합니다. 전체 php.yml 파일은 이제 다음과 같아야 합니다.

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  - name: create /var/www/ directory
    file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data
    register: cloned

  - name: install composer
    shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    args:
      creates: /usr/local/bin/composer

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data
    when: cloned|changed

  - name: set APP_DEBUG=false
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

  - name: set APP_ENV=production
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

  - name: Configure nginx
    template: src=nginx.conf dest=/etc/nginx/sites-available/default
    notify:
      - restart php5-fpm
      - restart nginx

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

플레이북을 다시 저장하고 실행합니다.

  1. ansible-playbook php.yml --ask-sudo-pass

완료되면 브라우저로 돌아가서 새로 고칩니다. 이제 Laravel 새 프로젝트 페이지가 표시됩니다!

결론

이 튜토리얼에서는 공용 리포지토리를 사용하여 PHP 애플리케이션을 배포하는 방법을 다룹니다. Ansible의 작동 방식을 배우는 데는 완벽하지만 항상 오픈 리포지토리가 있는 완전 오픈 소스 프로젝트에서 작업하지는 않습니다. 즉, 개인 저장소를 사용하여 3단계에서 git clone을 인증해야 합니다. 이것은 SSH 키를 사용하여 매우 쉽게 수행할 수 있습니다.

예를 들어 SSH 배포 키를 생성하고 리포지토리에 설정하면 git clone 작업 전에 Ansible을 사용하여 서버에서 키를 복사하고 구성할 수 있습니다.

- name: create /var/www/.ssh/ directory
  file: dest=/var/www/.ssh/ state=directory owner=www-data group=www-data mode=0700

- name: copy private ssh key
  copy: src=deploykey_rsa dest=/var/www/.ssh/id_rsa owner=www-data group=www-data mode=0600

그러면 서버가 애플리케이션을 올바르게 인증하고 배포할 수 있습니다.

종속성을 관리하기 위해 Composer를 사용하여 Ubuntu 기반 Nginx 웹 서버에 기본 PHP 애플리케이션을 배포했습니다! PHP Droplet에 직접 로그인하고 단일 수동 명령을 실행할 필요 없이 모든 작업이 완료되었습니다.


판권 소유. © Linux-Console.net • 2019-2024