diff --git a/.env.swp b/.env.swp
new file mode 100644
index 0000000000000000000000000000000000000000..30411c128cce3be3ab2473aa2cacf7a30ee302d0
--- /dev/null
+++ b/.env.swp
@@ -0,0 +1,2 @@
+[server]
+log ansible_host=127.0.0.1
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..65dedec339d76256f885ee5458184d2a3c13f0bc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+
+\.env
diff --git a/README.md b/README.md
index 59d0c15c899d07313d75af9fc536bb217764f97c..ec0ec99a67144503732c1a253d53bae6af6fcbc5 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,48 @@
 # log_server
 �𠯫隤䔶撩��滚膥
+
+## 鞈��坔冗蝯鞉��
+resources �鍂靘�摮䀹𦆮頠罸�𠉛㮾��𡏭身摰𡁏�𠉛鍂
+
+tasks �鍂靘�摮䀹𦆮��憿𧼮�䀹𦆮閬�摰㕑�腈��閮剖�𡁶�Ansible Playbook��垍��
+
+.env.swp Ansible Playbook銝餅�笔��彍瑼�
+
+install.yml �鍂靘�摰㕑�脲���銋见�𦯀辣
+
+config.yml �鍂靘�閮剖�𡁶㮾��靝�贝身摰�
+
+## Ansible Playbook ��滢�𨀣�蝔�
+1. 撠�.env.swp瑼𥪜�齿㺿���.env
+2. 閮剖��.env銝哨���齿�厩�銝餅�笔�滩�䳢P嚗�虾銝�甈∟身摰𡁜�𡁜蝱
+3. 撠�./resources/.env.swp瑼𥪜�齿㺿���.env嚗峕迨�搴onarQube���鞈��坔澈����銋讠㮾��𡏭身摰𡄯�諹�贝䌊銵諹身摰𡁜末
+4. �贝�䔶誑銝𧢲��誘摰㕑�脲���銋见�𦯀辣
+```
+ansible-playbook -i .env install.yml --ask-become-pass
+```
+5. 頛詨�亦蒈�亦鍂撖�蝣�
+6. 蝑匧�券�函�����憟𦯀辣�賢�㕑�嘥�峕�琜�䔶蒂銝娍�埝�㕑歲Fail
+7. �贝�䔶誑銝𧢲��誘閮剖�𡁏�滚�坔膥
+```
+ansible-playbook -i .env config.yml --ask-become-pass
+```
+8. 頛詨�亦蒈�亦鍂撖�蝣�
+9. 蝑匧�券�函�����憟𦯀辣�賢�㕑�嘥�峕�琜�䔶蒂銝娍�埝�㕑歲Fail
+
+## ��滚�躰����𦻖���
+
+5044 Port�摔ogstash��滚��
+
+5601 Port�摘ibana��滚��
+
+9200, 9300 Port�慟lasticsearch��滚��
+
+�𧋦隡箸�滚膥��笔�蓥�见�䕘�屸�鞱身����见�见�𡝗��/var/log/dpkg.log��滚�辷�屸�鞱身��撠晍pkg.log銝剔��批捆�誯�榢ilebeat��𥪜�Logstash�𡁜�𡝗�琜�峕�敺峕聢撘誩�𡝗�𥪜縧Elasticsearch嚗䔶�𢁅ibana�����
+
+雿惩虾隞仿�誯�𦒘耨�㺿�删垢銝餅�笔�蓥�讠�/opt/filebeat/filebeat.yml閮剖�𡁏�枏�𡝗�娍���皞琜�諹�����/opt/logstash/pipeline/dpkg.conf�脰�諹���坔�𡝗��
+
+## Logstash ��𡝗�鞱身摰𡁶㮾��𣈯����
+
+[grok ��坔飛](https://blog.johnwu.cc/article/elk-logstash-grok-filter.html)
+
+[grok debug](https://grokdebug.herokuapp.com/)
\ No newline at end of file
diff --git a/config.yml b/config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..071bc61021354b213ed992d912d3807bc7a040ed
--- /dev/null
+++ b/config.yml
@@ -0,0 +1,8 @@
+---
+- hosts: log
+  remote_user: petercheng
+  become: yes
+  tasks:
+    # ��嘥�见�𣇉頂蝯�
+    - name: "閮剖�𡁶頂蝯勗��彍"
+      include_tasks: tasks/config/init.yml
\ No newline at end of file
diff --git a/install.yml b/install.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f83f180c9ee8a00e5c1d880393424863193284bb
--- /dev/null
+++ b/install.yml
@@ -0,0 +1,16 @@
+---
+- hosts: log
+  remote_user: petercheng
+  become: yes
+  tasks:
+    # ��嘥�见�𣇉頂蝯�
+    - name: "�函頂蝯望凒�鰵"
+      include_tasks: tasks/install/init.yml
+
+    # 摰㕑�𨌯ocker
+    - name: "摰㕑�𨌯ocker"
+      include_tasks: tasks/install/docker.yml
+
+    # 摰㕑�𨌯ocker-Compose
+    - name: "摰㕑�𨌯ocker"
+      include_tasks: tasks/install/docker-compose.yml
\ No newline at end of file
diff --git a/resources/docker/.env.swp b/resources/docker/.env.swp
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/resources/docker/docker-compose.yml b/resources/docker/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..37f652cc4c25275f07c2471c576db9408104abaa
--- /dev/null
+++ b/resources/docker/docker-compose.yml
@@ -0,0 +1,59 @@
+version: '3'
+services:
+  elasticsearch: 
+    image: 'docker.elastic.co/elasticsearch/elasticsearch:7.5.0'
+    container_name: 'elasticsearch'
+    networks:
+      - log-networks
+    ports: 
+      -  0.0.0.0:9200:9200
+      -  0.0.0.0:9300:9300
+    volumes:
+      - ./elasticsearch/data:/usr/share/elasticsearch/data
+      - ./elasticsearch/config:/usr/share/elasticsearch/config
+    environment:
+      - discovery.type=single-node
+    restart: always
+  kibana:
+    image: 'docker.elastic.co/kibana/kibana:7.5.0'
+    container_name: 'kibana'
+    networks:
+      - log-networks
+    depends_on:
+      - elasticsearch
+    ports:
+      - 0.0.0.0:5601:5601
+    volumes:
+      - ./kibana/config:/usr/share/kibana/config
+    restart: always
+  filebeat:
+    image: 'docker.elastic.co/beats/filebeat:7.5.0'
+    container_name: 'filebeat'
+    networks:
+      - log-networks
+    volumes: 
+      - /opt/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
+      - /opt/filebeat/data:/usr/share/filebeat/data
+      - /opt/filebeat/logs:/usr/share/filebeat/logs
+      - /var/log:/log/local
+    depends_on:
+      - elasticsearch
+      - logstash
+    restart: always
+  logstash:
+    image: 'docker.elastic.co/logstash/logstash:7.5.0'
+    container_name: 'logstash'
+    networks:
+      - log-networks
+    ports:
+      - 0.0.0.0:5044:5044
+    volumes:
+      - /opt/logstash/config:/usr/share/logstash/config
+      - /opt/logstash/pipeline:/usr/share/logstash/pipeline
+    depends_on:
+      - elasticsearch
+    restart: always
+networks: 
+  log-networks:
+    driver: bridge
+    
diff --git a/resources/elasticsearch.tar.gz b/resources/elasticsearch.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b938a71591d02a2a29f9d51935663d2cbbdeea3d
Binary files /dev/null and b/resources/elasticsearch.tar.gz differ
diff --git a/resources/filebeat.tar.gz b/resources/filebeat.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f5a3aa45fc8b0ca36b1dd1212eddf1fd934f81aa
Binary files /dev/null and b/resources/filebeat.tar.gz differ
diff --git a/resources/kibana.tar.gz b/resources/kibana.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..2a6f6d77ee2bde5e8bcfc4889d413c79a6b24e80
Binary files /dev/null and b/resources/kibana.tar.gz differ
diff --git a/resources/logstash.tar.gz b/resources/logstash.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b9148f4adbbf2fb5b6bb48dc6e8762c738d9868e
Binary files /dev/null and b/resources/logstash.tar.gz differ
diff --git a/tasks/config/init.yml b/tasks/config/init.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3c869a8e5091755ce956031e767527deab01ca8e
--- /dev/null
+++ b/tasks/config/init.yml
@@ -0,0 +1,59 @@
+---
+  - name: "銴�ˊDocker-Compose.yml���删垢璈笔膥"
+    copy:
+      src: ./resources/docker/docker-compose.yml
+      dest: /opt/docker-compose.yml
+      owner: root
+      group: root
+      follow: yes
+      mode: "644"
+  - name: "銴�ˊDocker�兛憓�霈𦠜彍���删垢璈笔膥"
+    copy:
+      src: ./resources/docker/.env
+      dest: /opt/.env
+      owner: root
+      group: root
+      follow: yes
+      mode: "644"
+  - name: "銴�ˊ�贝�袏lasticsearch����鞈���"
+    unarchive:
+      src: ./resources/elasticsearch.tar.gz
+      dest: /opt
+  - name: "閮剖�鍃lasticsearch鞈��坔冗甈𢠃��"
+    file:
+      path: /opt/elasticsearch/data
+      mode: "777"
+      owner: root
+      group: root
+      recurse: yes
+  - name: "銴�ˊ�贝�𤅎ilebeat����鞈���"
+    unarchive:
+      src: ./resources/filebeat.tar.gz
+      dest: /opt
+  - name: "閮剖�鎄ilebeat鞈��坔冗甈𢠃��"
+    file:
+      path: /opt/filebeat/data
+      mode: "777"
+      owner: root
+      group: root
+      recurse: yes
+  - name: "閮剖�鎄ilebeat鞈��坔冗甈𢠃��"
+    file:
+      path: /opt/filebeat/logs
+      mode: "777"
+      owner: root
+      group: root
+      recurse: yes
+  - name: "銴�ˊ�贝�㕙ibana����鞈���"
+    unarchive:
+      src: ./resources/kibana.tar.gz
+      dest: /opt
+  - name: "銴�ˊ�贝�𥴰ogstash����鞈���"
+    unarchive:
+      src: ./resources/logstash.tar.gz
+      dest: /opt
+  - name: "�贝�㷉ocker-Compose"
+    shell: "docker-compose -f /opt/docker-compose.yml up -d --build"
+    args:
+      executable: /bin/bash
+  
\ No newline at end of file
diff --git a/tasks/install/docker-compose.yml b/tasks/install/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c194c8ecfd57d7621436a537d1656b2fe9c2796e
--- /dev/null
+++ b/tasks/install/docker-compose.yml
@@ -0,0 +1,19 @@
+---
+  #摰��𡃏�𦠜彍
+  - shell: echo $(uname -s)-$(uname -m)
+    register: os
+  
+  #摰㕑�𨌯ocker-Compose
+  - name: "銝贝��Docker-Compose 1.25.0"
+    get_url:
+      url: https://github.com/docker/compose/releases/download/1.25.0/docker-compose-{{ os.stdout }}
+      dest: /usr/local/bin/docker-compose
+      mode: "755"
+  - name: "閮剖�鋽ocker-Compose�嘑銵屸����"
+    file:
+      src: /usr/local/bin/docker-compose
+      dest: /usr/bin/docker-compose
+      owner: root
+      group: root
+      state: link
+      follow: yes
\ No newline at end of file
diff --git a/tasks/install/docker.yml b/tasks/install/docker.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4693cabc7c6babc68ab7b8d80fcae301d5f1737c
--- /dev/null
+++ b/tasks/install/docker.yml
@@ -0,0 +1,44 @@
+---
+  #摰��𡃏�𦠜彍
+  - shell: echo $(lsb_release -cs)
+    register: release_name
+  
+  #摰㕑�𨌯ocker
+  - name: "蝘駁膄��羓�㇄ocker"
+    apt:
+      pkg:
+        - docker
+        - docker-engine
+        - docker.io
+        - containerd
+        - runc
+        - docker-ce
+      purge: yes
+      state: absent
+  - name: "摰㕑�苷�贝��Docker����銋讠㮾靘脲�批�𦯀辣"
+    apt:
+      pkg: 
+        - apt-transport-https 
+        - ca-certificates 
+        - curl 
+        - gnupg-agent 
+        - software-properties-common
+      state: present
+      update_cache: yes
+  - name: "銝贝�匧�㕑�𨌯ocker����銋见�𦯀辣摨亮PG Key"
+    apt_key:
+      url: https://download.docker.com/linux/ubuntu/gpg
+      state: present
+  - name: "銝贝��Docker憟𦯀辣摨思�皞�"
+    apt_repository:
+      repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ release_name.stdout }} stable
+      state: present
+      filename: docker.list
+  - name: "摰㕑�𨌯ocker"
+    apt:
+      pkg: 
+        - docker-ce 
+        - docker-ce-cli 
+        - containerd.io
+      state: present
+      update_cache: yes
\ No newline at end of file
diff --git a/tasks/install/init.yml b/tasks/install/init.yml
new file mode 100644
index 0000000000000000000000000000000000000000..200ffc538ebd96f9b5b2e9b1fb8a2616dff8a17f
--- /dev/null
+++ b/tasks/install/init.yml
@@ -0,0 +1,6 @@
+---
+
+# ��嘥�见�𣇉頂蝯�
+- name: "�函頂蝯望凒�鰵"
+  apt: 
+    upgrade: dist
\ No newline at end of file