今回やることは、さくらVPSでOSをインストール後にrootユーザーでログイン。Ansibleをインストールし、初期設定の内容を書いたymlファイルを作成。その後、ansible-playbookコマンドで、作成したymlファイルを読み込んでAnsibleを実行します。

環境

  • CentOS7
  • Ansible2.8.1

Ansibleでやること

ymlファイルに以下の内容を書いて実行します。パスワード認証を無効化するので、公開鍵認証は別途対応する必要があります。(ymlには鍵認証の設定は書いていません)

  • ユーザーの作成
  • sudo権限の付与
  • パスワード認証の無効化
  • rootユーザーのログインを無効化
  • LocaleをCからja_JP.UTF-8に変更
  • ssh再起動
  • SELinuxの無効化
  • Apacheのインストール
  • Apacheの自動起動の設定
  • mysql5.7のインストール
  • mysqlの自動起動の設定
  • firewallの設定

Ansibleのインストールと実行

Ansibleをインストール

$ yum -y install ansible

Ansibleのバージョンを確認

$ ansible --version

ymlファイルの作成

$ vi setup.yml

- hosts: 127.0.0.1
  connection: local
  become: yes
  tasks:
  vars:
    - username: hoge
    - password: huga

  tasks:
    - name: Add user
      user:
        name: "{{ username }}"
        password: "{{ password }}"

    - name: grant sudo privileges
      lineinfile:
        dest: /etc/sudoers
        backup: yes
        line: "{{ username }} ALL=(ALL) NOPASSWD: ALL"

    - name: Disable password authentication
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^PasswordAuthentication"
        insertafter: "^#PasswordAuthentication"
        line: "PasswordAuthentication no"

    - name: No root user login
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^PermitRootLogin"
        insertafter: "^#PermitRootLogin"
        line: "PermitRootLogin no"

    - name: Change of locale
      lineinfile:
        dest: /etc/locale.conf
        regexp: "^LANG="
        line: "LANG='ja_JP.UTF-8'"

    - name: ssh restart
      service:
        name: sshd
        state: restarted

    - name: Disable SELinux
      selinux: state=disabled

    - name: Apache installation
      yum: name=httpd state=latest

    - name: Apache auto-start setup
      service: name=httpd state=started enabled=yes

    - name: Add mysql 8.0 repository (also includes 5.7)
      yum: name=https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

    - name: Disable mysql 8.0 Repository
      command: >
        yum-config-manager --disable mysql80-community

    - name: Enable mysql 5.7 Repository
      command: >
        yum-config-manager --enable mysql57-community

    - name: Add MySQL repository
      yum: name=mysql-community-server

    - name: Setting up automatic startup of mysql
      service: name=mysqld state=started enabled=yes

    - name: firewall-cmd allow Apachei(HTTP)
      firewalld: service=http permanent=true state=enabled immediate=true

    - name: firewall-cmd allow Apache(SSL)
      firewalld: service=https permanent=true state=enabled immediate=true

    - name: firewall-cmd allow MySQL
      firewalld: service=mysql permanent=true state=enabled immediate=true

setup.ymlの文法をチェック。WARNINGが出たけど、とりあえず実行は出来そうです。

$ ansible-playbook setup.yml --syntax-check

 [WARNING]: provided hosts list is empty, only localhost is available. Note
that the implicit localhost does not match 'all'
 [WARNING]: While constructing a mapping from /root/setup.yml, line 1, column
3, found a duplicate dict key (tasks). Using last defined value only.

Ansibleを実行します。

$ ansible-playbook setup.yml
PLAY [127.0.0.1] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]

### 長いので省略...

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=19   changed=17   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

実行後、unreachableやfailedが0であれば、問題なく反映されたかと思います。PHPのインストールとか他にもやりたいことあったんですが、疲れたので一旦ここまでで。後日検証して、追記していきます。