본문 바로가기
Infra/프라이빗 클라우드 인프라

Open Stack - Heat (wordpress)

by shinebee* 2020. 7. 2.

1. Heat

  • 하나의 스택을 만든다 라고 한다.
  • 하나 이상의 리소스가 쌓여있는것을 stack이라고 한다.
  • 리소스는 openstack의 리소스와 거의 같다.
  • heat orchestration template(HOT)을 작성해야한다.
  • HOT은 YAML Syntax를 사용한다.
  • xml, 확장자가 .json인 파일 등은 사람이 작성하거나 읽기 좋은 형태는 아니다. 컴퓨터는 좋겠지만
  • yaml은 사람이 읽거나 작성하기 쉽게 하려고 만든 포맷
  • yaml은 괄호나 따옴표를 쓰지 않는다.

 

 

 

2. YAML

  • Scalar(word/String)
    • korea
    • I am sue
    • yaml에서는 라인 전체가 하나의 scalar이다.
    • 문장에서 따옴표를 붙일 필요가 없다.
  • Hash/Dictionary
    • scalar:  scalar
    • 어떤 scalar에 어떤 scalar를 넣는다.
    • 변수 느낌
    • age:  30
      gender:  man
    • 변수가 되는 scalar에는 : 가 붙어야하고 값에 해당하는 scalar는 앞을 띄어줘야한다.
  • Array/List/Sequence
    • -  scalar1
    • -  scalar2
    • -  scalar3
    •  
    • 순서를 정하고 싶을때는 -를 붙인다. 붙이고 한칸 띄어준다.
    • -  age: 30
  • Hirachy
    • a
           b
           c
      d
            e
                 f
            g
    • 위와같이 들여쓰기(일반적으로 두칸)를 사용해서 하위를 지정한다.
    • tap은 사용하면 안된다.
    • tap은 공백으로 인식하지 않는다.
    • 반드시 sapcebar 사용.
  • 부가설명
    • -  a:
              100
              200
              300
    •  
    • 리스트 안에 해쉬가 들어있고 multi vaule가 있다.
    • 리스트 안에 해쉬
    • a:
           -  100
           -  200
           -  300
    • a라고 하는 해쉬에 multi value가 들어있다 list로 되어있는.
    • 해쉬 안에 리스트
  • 확장자
    • .yaml
    • .yml

 

 

 

 

3. Stack을 사용하여 wordpress 구축

  1. 필요한것
    • template file
    • environmet file
  2.  template file
heat_template_version: 2013-05-23

description: >
  Heat Orchestration Template 
  to deploy instance 
  with existing network 
  and floating ip.

parameters:
  key_name:
    type: string
    description: Name of keypair to assign to servers
  image: 
    type: string
    description: Name of image to use for servers
  flavor: 
    type: string
    description: Flavor to use for servers
  public_net_id: 
    type: string
    description: >
      ID of public network for which floating IP addresses will be allocated
  private_net_id: 
    type: string
    description: ID of private network into which servers get deployed
  private_subnet_id: 
    type: string
    description: ID of private sub network into which servers get deployed

resources:
  server:
    type: OS::Nova::Server
    properties:
      name: Server
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }
      networks:
        - port: { get_resource: server_port }
      user_data: |  
        #!/bin/bash
        yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
        yum-config-manager --disable remi-safe
        yum-config-manager --enable remi-php74
        cat << EOF >> /etc/yum.repos.d/mariadb.repo
        [mariadb]
        name = MariaDB
        baseurl = http://yum.mariadb.org/10.5/centos7-amd64
        gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
        gpgcheck=1
        EOF
        yum-config-manager --enable mariadb
        yum install -y httpd php php-mysqlnd MariaDB-server MariaDB-client
        systemctl start mariadb
        mysql -u root -e 'CREATE DATABASE wordpress_db'
        mysql -u root -e "CREATE USER 'wp-admin'@'localhost'       IDENTIFIED BY 'dkagh1.'"
        mysql -u root -e "GRANT ALL PRIVILEGES ON wordpress_db.* to 'wp-admin'@'localhost' IDENTIFIED BY 'dkagh1.'"
        mysql -u root -e "FLUSH PRIVILEGES"
        curl -o latest.tar.gz https://wordpress.org/latest.tar.gz
        tar zxf latest.tar.gz
        cp -r wordpress/* /var/www/html
        setfacl -Rm u:apache:rwX /var/www/html
        cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
        sed -i '23s/database_name_here/wordpress_db/g' wp-config.php
        sed -i '26s/username_here/wp-admin/g' wp-config.php
        sed -i '29s/password_here/dkagh1./g' wp-config.php
        systemctl start httpd
        systemctl enable httpd



  server_port:
    type: OS::Neutron::Port
    properties:
      network_id: { get_param: private_net_id }
      fixed_ips:
        - subnet_id: { get_param: private_subnet_id }
      security_groups: [{ get_resource: server_security_group }]

  server_floating_ip:
    type: OS::Neutron::FloatingIP
    properties:
      floating_network_id: { get_param: public_net_id }
      port_id: { get_resource: server_port }

  server_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: Add security group rules for server
      name: security-group
      rules:
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 22
          port_range_max: 22
        - remote_ip_prefix: 0.0.0.0/0
          protocol: icmp
        - remote_ip_prefix: 0.0.0.0/0
          protocol: tcp
          port_range_min: 80
          port_range_max: 80

outputs:
  server_private_ip:
    description: IP address of server in private network
    value: { get_attr: [ server, first_address ] }
  server_public_ip:
    description: Floating IP address of server in public network
    value: { get_attr: [ server_floating_ip, floating_ip_address ] }
  • multi value → >
  • command → |
  • 이 파일에서 '-'는 string으로 인식이 안되므로 오류가 생긴다.
  • 그렇기 때문에 환경파일에서 parameters의 값만 수정해서 제공한다.

 

 

3. environment file

parameters:
  key_name: test-key
  image: centos7
  flavor: wordpress
  public_net_id: ext-net
  private_net_id: test-net
  private_subnet_id: test-subnet

 

 

 

4. Launch Stack

  • rollback 체크 → 하나가 실패하면 그 전에 만들어놓은걸 삭제
  • 하나 안되서 새로 해야겠다 → rollback 체크
  • 하나 안되는거 그것만 고치겠다 → rollback 체크 안함.

 

 

5. ------

  • 처음에 public key를 찾을수없다는 오류가 뜬다 → 당연 → private key 알아서 끌어온다.
  • echo $? -> 전에 실행한 프로세스의 리턴코드를 출력(exit code) 0->정상 종료 나머지는 오류

 

'Infra > 프라이빗 클라우드 인프라' 카테고리의 다른 글

Image 생성 (diskimage-builder)  (0) 2020.07.07
Image 생성 (Snapshot)  (0) 2020.07.07
Open Stack - Cloud-init (wordpress)  (0) 2020.07.02
Open Stack 운영.3 (user)  (0) 2020.07.02
Open Stack 운영.2(user)  (0) 2020.07.01

댓글