<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ossian Story</title>
    <link>https://ossian.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 11 Jul 2026 21:44:45 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ossians</managingEditor>
    <item>
      <title>[Zabbix] Zabbix Agent Install - CentOS7</title>
      <link>https://ossian.tistory.com/120</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;131&quot; data-filename=&quot;zabbix_logo_500x131.png&quot; width=&quot;420&quot; height=&quot;112&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjkzUK/btraHsFgFEK/9BYrbceIAHlx6IzB4JAnD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjkzUK/btraHsFgFEK/9BYrbceIAHlx6IzB4JAnD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjkzUK/btraHsFgFEK/9BYrbceIAHlx6IzB4JAnD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjkzUK%2FbtraHsFgFEK%2F9BYrbceIAHlx6IzB4JAnD0%2Fimg.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;131&quot; data-filename=&quot;zabbix_logo_500x131.png&quot; width=&quot;420&quot; height=&quot;112&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Agent 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627368287038&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Zabbix Agent Repository 추가 및 설치
[root@zabbix-client-01 ~]# rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.14-1.el7.x86_64.rpm&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Agent Config 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627369078883&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi /etc/zabbix/zabbix_agentd.conf

# Zabbix Server 및 Client Hostname 입력 후 저장
----------------------------------------------
...
Server=192.168.10.140
ServerActive=192.168.10.140:10051
Hostname=zabbix-clinet-01
...
----------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Server Client 등록 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Configuration &amp;gt; Hosts &amp;gt; Create host&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;897&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlll60/btraEfzXaiC/2QTejxRzZf0o0AKy7aQmDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlll60/btraEfzXaiC/2QTejxRzZf0o0AKy7aQmDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlll60/btraEfzXaiC/2QTejxRzZf0o0AKy7aQmDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlll60%2FbtraEfzXaiC%2F2QTejxRzZf0o0AKy7aQmDk%2Fimg.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;897&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Client 호스트 정보 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cH6KWN/btraGOPhtlC/D7tElyPhxEUd5mv6yFgiJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cH6KWN/btraGOPhtlC/D7tElyPhxEUd5mv6yFgiJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH6KWN/btraGOPhtlC/D7tElyPhxEUd5mv6yFgiJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH6KWN%2FbtraGOPhtlC%2FD7tElyPhxEUd5mv6yFgiJ0%2Fimg.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Client 적용 Template 선택 후 Add&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/81f9d/btraCTjCnJT/Y0FOgwfNPvpwhZZzlvEzK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/81f9d/btraCTjCnJT/Y0FOgwfNPvpwhZZzlvEzK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/81f9d/btraCTjCnJT/Y0FOgwfNPvpwhZZzlvEzK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F81f9d%2FbtraCTjCnJT%2FY0FOgwfNPvpwhZZzlvEzK0%2Fimg.png&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Client 정상등록 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;2479&quot; data-origin-height=&quot;1307&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nKBhZ/btrax74kyuN/l5aySVRxJVWflMnT2P78KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nKBhZ/btrax74kyuN/l5aySVRxJVWflMnT2P78KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nKBhZ/btrax74kyuN/l5aySVRxJVWflMnT2P78KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnKBhZ%2Fbtrax74kyuN%2Fl5aySVRxJVWflMnT2P78KK%2Fimg.png&quot; data-origin-width=&quot;2479&quot; data-origin-height=&quot;1307&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Agent Config Option]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PidFile&lt;br /&gt;&lt;/span&gt;- Pid File 위치&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;PidFile=/var/run/zabbix/zabbix_agentd.pid&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;LogType&lt;br /&gt;- Log 저장 타입&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;LogType=file&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;system &amp;ndash; in syslog&lt;br /&gt;&amp;nbsp; + file &amp;ndash; to file&lt;br /&gt;&amp;nbsp; &amp;nbsp;+ console &amp;ndash; normal output&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;LogFile&lt;br /&gt;- Log 저장 경로&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;LogFile=/var/log/zabbix/zabbix_agentd.log&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;LogFileSzie&lt;br /&gt;- Log 최대 저장 크기&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;LogFileSize=1&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;0-1024&lt;br /&gt;&amp;nbsp; + 0 &amp;ndash; 제한 없음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;DebugLevel&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;- 로깅 수준&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;DebugLevel=3&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;0 &amp;ndash; 기본&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&amp;nbsp; + 1 &amp;ndash; 중요한 메시지&lt;br /&gt;&amp;nbsp; + 2 &amp;ndash; 오류&lt;br /&gt;&amp;nbsp; + 3 &amp;ndash; 경고&lt;br /&gt;&amp;nbsp; + 4 &amp;ndash; 디버깅용&lt;br /&gt;&amp;nbsp; + 5 &amp;ndash; 디버깅용 최대&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;SourceIP&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;- 외부로 나가는 연결을 위한 로컬 IP 주소&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;SourceIP=192.168.10.140&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EnableRemoteCommands&lt;br /&gt;- Zabbix Server에서 Agent로 원격 명령 허용여부&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;EnableRemoteCommands=0&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;1 &amp;ndash; 허용&lt;br /&gt;&amp;nbsp; + 0 &amp;ndash; 허용되지 않음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;LogRemoteCommands&lt;br /&gt;- Zabbix Server에서 Remote Command 시 해당 Command를 Log에 기록&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;LogRemoteCommands=0&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;1 &amp;ndash; 허용&lt;br /&gt;&amp;nbsp; + 0 &amp;ndash; 허용되지 않음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;Server&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;- Zabbix Server IP 입력&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Server=127.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ListenPort&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Zabbix Agent Listen Port 번호&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;ListenPort=10050&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + &lt;span style=&quot;color: #111111;&quot;&gt;1024-32767&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ListenIP&lt;br /&gt;- Zabbix Agent Listen IP&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;ListenIP=0.0.0.0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;StartAgent&lt;br /&gt;- 수동검사를 처리하는 Zabbix Agent 데몬에 기 할당된 인스턴스 수&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;StartAgents=3&lt;/span&gt;&lt;br /&gt;- Option&lt;br /&gt;&amp;nbsp; + 0&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 수동검사가 시작되지 않고 Zabbix Agent가 TCP 포트를 수신하지 않음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ServerActive&lt;br /&gt;- Zabbix Server IP 입력&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;ServerActive=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:10051&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hostname&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Client Hostname 입력, Hostname은 Zabbix Server에 등록된 Client Hostname과 반드시 동일해야 함&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Hostname=TEXT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HostMetadata&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Client의 메타데이터 입력&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;HostMetadata=TEXT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RefreshActiveChecks&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Zabbix Agent의 데이터 수집 업데이트 빈도&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;RefreshActiveChecks=120&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BufferSend&lt;br /&gt;- Zabbix Agent의 지정된 시간만큼 버퍼에 데이터를 채움&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;BufferSend=60&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BufferSize&lt;br /&gt;-&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Zabbix Agent의 데이터 버퍼 크기, 버퍼를 채운 후 데이터 전송&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&lt;span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;BufferSize=100&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;MaxLinesPerSecond&lt;br /&gt;- 로그파일 확인 시 처리된 라인 수&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;MaxLinesPerSecond=20&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;Timeout&lt;br /&gt;- 처리하는 최대 시간&lt;br /&gt;- Timeout=3&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;AllowRoot&lt;br /&gt;- Zabbix Agent를 Root 사용자로 시작&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;AllowRoot=1&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;User&lt;br /&gt;- Zabbix Agent를 실행할 사용자 지정&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;User=zabbix&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;Include&lt;br /&gt;- 지정된 디렉토리에서 모든 Zabbix Agent Config 파일을 로드&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Include=/etc/zabbix/zabbix_agentd.d/*.conf&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #111111;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;UserParameter&lt;br /&gt;- 시스템을 모니터링하기 위한 사용자의 커스텀 파라미터&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;UserParameter=key,command&lt;/span&gt;&lt;br /&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;UserParameter=active_connections,netstat -an | wc -l&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>[Server Story]/Management</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/120</guid>
      <comments>https://ossian.tistory.com/120#entry120comment</comments>
      <pubDate>Tue, 27 Jul 2021 15:44:55 +0900</pubDate>
    </item>
    <item>
      <title>[Zabbix] Zabbix Server Install - CentOS7 &amp;amp; MySQL &amp;amp; Nginx</title>
      <link>https://ossian.tistory.com/119</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;131&quot; data-filename=&quot;zabbix_logo_500x131.png&quot; width=&quot;420&quot; height=&quot;112&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Jyeh/btraGPmWeNV/pdJkmlsRNgVtmKp5Q0olwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Jyeh/btraGPmWeNV/pdJkmlsRNgVtmKp5Q0olwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Jyeh/btraGPmWeNV/pdJkmlsRNgVtmKp5Q0olwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Jyeh%2FbtraGPmWeNV%2FpdJkmlsRNgVtmKp5Q0olwk%2Fimg.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;131&quot; data-filename=&quot;zabbix_logo_500x131.png&quot; width=&quot;420&quot; height=&quot;112&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix는 모든 종류의 IT 인프라, 서비스, 애플리케이션, 리소스 모니터링을 위한 솔루션입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ TEST 환경 구성 ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;417&quot; width=&quot;484&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dK6wLC/btraBTYh8q2/6lZRAVZ9xqGZbo7pjmounK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dK6wLC/btraBTYh8q2/6lZRAVZ9xqGZbo7pjmounK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dK6wLC/btraBTYh8q2/6lZRAVZ9xqGZbo7pjmounK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdK6wLC%2FbtraBTYh8q2%2F6lZRAVZ9xqGZbo7pjmounK%2Fimg.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;417&quot; width=&quot;484&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Server 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zabbix.com/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.zabbix.com/download&lt;/a&gt; 접속&lt;/li&gt;
&lt;li&gt;구성하려는 Zabbix Version, OS, Database, WebServer를 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/le13x/btraEffw6Df/UN3qioBf7OAPqGBOtkJW71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/le13x/btraEffw6Df/UN3qioBf7OAPqGBOtkJW71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/le13x/btraEffw6Df/UN3qioBf7OAPqGBOtkJW71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fle13x%2FbtraEffw6Df%2FUN3qioBf7OAPqGBOtkJW71%2Fimg.png&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Server 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627363943103&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Zabbix Repository 추가
[root@zabbix-server ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

# Zabbix Server / Agent 설치
[root@zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Frontend 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627364342011&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ReadHat Software Collections 활성화
[root@zabbix-server ~]# yum install centos-release-scl

# Zabbix Frontend Repository 활성화
[root@zabbix-server ~]# vi /etc/yum.repos.d/zabbix.repo

# enabled 값 0에서 1로 변경 후 저장
-------------------------------------------------------
[zabbix-frontend]
...
enabled=1
...
-------------------------------------------------------

# Zabbix Frontend 설치
[root@zabbix-server ~]# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ MySQL 5.7 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 5.7 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627364857460&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# MySQL 5.7 Repository 설치
[root@zabbix-server ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

# MySQL 5.7 설치
[root@zabbix-server ~]# yum install -y mysql-community-server mysql-community-devel

# MySQL 서비스 시작
[root@zabbix-server ~]# systemctl start mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 5.7 초기 설정 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365038842&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 초기 설정 시작 전 초기 암호 획득
[root@zabbix-server ~]# grep 'password' /var/log/mysqld.log
2021-07-27T05:49:45.902184Z 1 [Note] A temporary password is generated for root@localhost: s3t,goioPH=p

# 초기 설정 시작
[root@zabbix-server ~]# mysql_secure_installation

----------------------------------------------------------------------------------
New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!
----------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL UTF8 설정 및 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365299504&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# vi /etc/my.cnf

-------------------------------------------------------------------------------------
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
-------------------------------------------------------------------------------------

[root@zabbix-server ~]# systemctl restart mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Database 생성 및 Zabbix Database 계정생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365455095&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# mysql -uroot -p

-------------------------------------------------------------------
mysql&amp;gt; create database zabbix character set utf8 collate utf8_bin;
mysql&amp;gt; create user zabbix@localhost identified by 'password';
mysql&amp;gt; grant all privileges on zabbix.* to zabbix@localhost;
mysql&amp;gt; quit;
-------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix 초기 Database Schema와 Data를 MySQL Zabbix Database에 Import&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365606058&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix​&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Server 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Server Configration 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365773181&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# vi /etc/zabbix/zabbix_server.conf

# Zabbix Server Config 파일의 DBPassword 입력 후 저장
------------------------------------------------------------------
...
### Option: DBPassword
#       Database password.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=password
...
------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Nginx 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627365913423&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# vi /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf

# Zabbix Nginx Config 파일의 listen, server_name 주석해제 후 입력
------------------------------------------------------------------
server {
        listen          80;
        server_name     192.168.10.140;
...
}
------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix PHP 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627366136325&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

# Zabbix PHP Config 파일에 nginx 추가 및 Timezone 설정
------------------------------------------------------------------
[zabbix]
...
listen.acl_users = apache,nginx
...
php_value[date.timezone] = Asia/Seoul
------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zabbix Server 시작 및 시작프로그램 등록&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627366161984&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
[root@zabbix-server ~]# systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Server 시작 시 Nginx 에러 처리 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627366347927&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

# 아래와 같이 Nginx에 대한 에러 발생
Job for rh-nginx116-nginx.service failed because the control process exited with error code. See &quot;systemctl status rh-nginx116-nginx.service&quot; and &quot;journalctl -xe&quot; for details.

# &quot;systemctl status rh-nginx116-nginx.service&quot; and &quot;journalctl -xe&quot; 확인 시 아래와 같은 Nginx HTTP and reverse proxy server 에러 발생
Jul 27 15:10:29 zabbix-server systemd[1]: Failed to start The nginx HTTP and reverse proxy server.

# Zabbix 관련 모든 서비스 중지
[root@zabbix-server ~]# systemctl stop zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

# netstat -anpt로 열려있는 Port 확인
[root@zabbix-server ~]# netstat -anpt
----------------------------------------
....
tcp6       0      0 :::3306                 :::*                    LISTEN      3235/mysqld
tcp6       0      0 :::80                   :::*                    LISTEN      3347/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      1190/sshd
....
----------------------------------------

# Zabbix 관련 모든 서비스를 중지하였음에도 80 Port가 열려있음
# ps-ef | grep nginx로 실행중인 Nginx 프로세스 확인
[root@zabbix-server ~]# ps -ef | grep nginx
root       3347      1  0 15:10 ?        00:00:00 nginx: master process /opt/rh/rh-nginx116/root/usr/sbin/nginx
nginx      3348   3347  0 15:10 ?        00:00:00 nginx: worker process
nginx      3349   3347  0 15:10 ?        00:00:00 nginx: worker process
nginx      3350   3347  0 15:10 ?        00:00:00 nginx: worker process
nginx      3351   3347  0 15:10 ?        00:00:00 nginx: worker process
root       3579   2152  0 15:17 pts/0    00:00:00 grep --color=auto nginx

# Nginx 프로세스를 강제로 종료
[root@zabbix-server ~]# kill -9 3347 3348 3349 3350 3351

[root@zabbix-server ~]# ps -ef | grep nginx
root       3583   2152  0 15:18 pts/0    00:00:00 grep --color=auto nginx

# Zabbix 관련 서비스 재시작
[root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Server Web 접속 및 초기 설정]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;http://192.168.1.140 웹브라우저 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;762&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xdEDp/btraCTDRTM9/VEM2gNOKjhzVcj78K6vDf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xdEDp/btraCTDRTM9/VEM2gNOKjhzVcj78K6vDf0/img.png&quot; data-alt=&quot;Zabbix Server Web 초기 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xdEDp/btraCTDRTM9/VEM2gNOKjhzVcj78K6vDf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxdEDp%2FbtraCTDRTM9%2FVEM2gNOKjhzVcj78K6vDf0%2Fimg.png&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;762&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server Web 초기 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exeDvJ/btraCSLIPWF/mB8DgPnunuPkKaK635YkDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exeDvJ/btraCSLIPWF/mB8DgPnunuPkKaK635YkDk/img.png&quot; data-alt=&quot;Zabbix Server 요구사항 체크&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exeDvJ/btraCSLIPWF/mB8DgPnunuPkKaK635YkDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexeDvJ%2FbtraCSLIPWF%2FmB8DgPnunuPkKaK635YkDk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server 요구사항 체크&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXgGP/btraFFLQNxl/LmPyLCfYUT0rL7Jill2JAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXgGP/btraFFLQNxl/LmPyLCfYUT0rL7Jill2JAK/img.png&quot; data-alt=&quot;Zabbix Server Database 설정 / Zabbix MySQL 계정 및 암호 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXgGP/btraFFLQNxl/LmPyLCfYUT0rL7Jill2JAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXgGP%2FbtraFFLQNxl%2FLmPyLCfYUT0rL7Jill2JAK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server Database 설정 / Zabbix MySQL 계정 및 암호 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drzKBY/btraBd3Q8lg/ZKTOKQzG4eaP62wxI2BDhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drzKBY/btraBd3Q8lg/ZKTOKQzG4eaP62wxI2BDhk/img.png&quot; data-alt=&quot;Zabbix Server 사용포트 및 호스트정보 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drzKBY/btraBd3Q8lg/ZKTOKQzG4eaP62wxI2BDhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrzKBY%2FbtraBd3Q8lg%2FZKTOKQzG4eaP62wxI2BDhk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server 사용포트 및 호스트정보 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W7xYK/btrazvcin7w/e2c3gwcmfs8nmmxzj9ckg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W7xYK/btrazvcin7w/e2c3gwcmfs8nmmxzj9ckg0/img.png&quot; data-alt=&quot;Zabbix Server Web 설정 최종 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W7xYK/btrazvcin7w/e2c3gwcmfs8nmmxzj9ckg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW7xYK%2Fbtrazvcin7w%2Fe2c3gwcmfs8nmmxzj9ckg0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server Web 설정 최종 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZHbJs/btraGN3PMwr/BMKeQYAzNzkVb0YAdGect0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZHbJs/btraGN3PMwr/BMKeQYAzNzkVb0YAdGect0/img.png&quot; data-alt=&quot;Zabbix Server Web 설정 마무리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZHbJs/btraGN3PMwr/BMKeQYAzNzkVb0YAdGect0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZHbJs%2FbtraGN3PMwr%2FBMKeQYAzNzkVb0YAdGect0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;761&quot; width=&quot;500&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Server Web 설정 마무리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Zabbix Login ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;567&quot; width=&quot;341&quot; height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zpqVC/btraqrV5U8I/TdzeLSrPS5BnKjBAtywPk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpqVC/btraqrV5U8I/TdzeLSrPS5BnKjBAtywPk1/img.png&quot; data-alt=&quot;초기 계정 Admin / zabbix&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpqVC/btraqrV5U8I/TdzeLSrPS5BnKjBAtywPk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzpqVC%2FbtraqrV5U8I%2FTdzeLSrPS5BnKjBAtywPk1%2Fimg.png&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;567&quot; width=&quot;341&quot; height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;초기 계정 Admin / zabbix&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cytk1Q/btraBTRI7Jg/TBSYx0O2i08SeoF3efVKt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cytk1Q/btraBTRI7Jg/TBSYx0O2i08SeoF3efVKt0/img.png&quot; data-alt=&quot;Zabbix Dashbord&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cytk1Q/btraBTRI7Jg/TBSYx0O2i08SeoF3efVKt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcytk1Q%2FbtraBTRI7Jg%2FTBSYx0O2i08SeoF3efVKt0%2Fimg.png&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zabbix Dashbord&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[Server Story]/Management</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/119</guid>
      <comments>https://ossian.tistory.com/119#entry119comment</comments>
      <pubDate>Tue, 27 Jul 2021 14:04:06 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Settings.py SECRET_KEY 보호하기</title>
      <link>https://ossian.tistory.com/115</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkAQea/btqBZrN1yHI/CzX4EQFwPRDi4dJDNRrBG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkAQea/btqBZrN1yHI/CzX4EQFwPRDi4dJDNRrBG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkAQea/btqBZrN1yHI/CzX4EQFwPRDi4dJDNRrBG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkAQea%2FbtqBZrN1yHI%2FCzX4EQFwPRDi4dJDNRrBG1%2Fimg.png&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Setting.py의 SECRET_KEY 보호하기 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Setting.py에는 Django의 SECRET_KEY, Database 설정 계정의 암호 등 민감정보가 텍스트로 기록되어 있음&lt;/li&gt;
&lt;li&gt;이러한 민감정보를 숨기기 위해 민감정보를 json 파일로 만들고 숨김, 숨겨진 민감정보 json 파일을 읽어들이는 방식으로 직접입력된 민감정보 텍스트를 보호&lt;/li&gt;
&lt;li&gt;민감정보를 입력하기 위한 json 파일 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581603690716&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pwd
/opt/todo

$ vi .secrets.json

--------------------------------------------------------------------------------
{
  &quot;SECRET_KEY&quot;: &quot;[Django의 SECRET_KEY 입력]&quot;,
  &quot;DATABASE&quot;: &quot;[Database 연결 계정의 암호 입력]&quot;
}
--------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Setting.py 설정 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581603753803&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /opt/todo/todo/settings.py

-----------------------------------------------------------------------------------------
# Json 모듈 불러오기
import os, json
from django.core.exceptions import ImproperlyConfigured


# 기존 Django의 SECRET_KEY 정보 삭제
secret_file = os.path.join(BASE_DIR, '.secrets.json')


# secrets.json 파일을 읽은 후 secrets 변수에 저장
with open(secret_file) as f:
    secrets = json.loads(f.read())

# get_secret 함수를 생성하여 호출 시 해당 키 값 리턴
def get_secret(setting, secrets=secrets):
    try:
        return secrets[setting]
    except KeyError:
        error_msg = &quot;Set the {} environment variable&quot;.format(setting)
        raise ImproperlyConfigured(error_msg)

# get_secret 함수를 호출하여 json SECRET_KEY 키의 값 적용
SECRET_KEY = get_secret(&quot;SECRET_KEY&quot;)

....


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'todo',
        'USER': 'todo_admin',
        
        # Database 연결 계정의 Password도 동일하게 Json의 DATABASE 키의 값 적용
        'PASSWORD': get_secret(&quot;DATABASE&quot;),
        
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': &quot;SET sql_mode='STRICT_TRANS_TABLES'&quot;,
            'charset': 'utf8mb4',
        },
    }
}

-----------------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;runserver, makemigrations &amp;amp; migrate 등의 명령어를 통해 정상적으로 작동하는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/115</guid>
      <comments>https://ossian.tistory.com/115#entry115comment</comments>
      <pubDate>Thu, 13 Feb 2020 23:29:56 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - MySQL 5.7 연결하기</title>
      <link>https://ossian.tistory.com/114</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi10Xs/btqBZMdkmkP/qFRuRM69ZF5gsas48PRp1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi10Xs/btqBZMdkmkP/qFRuRM69ZF5gsas48PRp1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi10Xs/btqBZMdkmkP/qFRuRM69ZF5gsas48PRp1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi10Xs%2FbtqBZMdkmkP%2FqFRuRM69ZF5gsas48PRp1K%2Fimg.png&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ MySQL 5.7 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Yum을 통한 MySQL 설치를 위해 rpm 파일 다운로드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601501734&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 5.7 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601562462&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ yum install -y mysql-community-server mysql-community-devel&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 서비스 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601587124&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl start mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 초기 설정 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601657207&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 초기 설정 시작 전 초기 암호 획득
$ grep 'password' /var/log/mysqld.log
2020-02-13T13:48:47.145695Z 1 [Note] A temporary password is generated for root@localhost: sFrZ),rk-3ar

# 초기 설정 시작
mysql_secure_installation

----------------------------------------------------------------------------------
Securing the MySQL server deployment.

Enter password for user root:        

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!
----------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL UTF8 설정 및 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581602117955&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /etc/my.cnf

-------------------------------------------------------------------------------------
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

-------------------------------------------------------------------------------------

$ systemctl restart mysqld&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django와 연동을 위한 Database 생성 및 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1581602416023&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mysql -u root -p

....
# Database 생성
mysql&amp;gt; create database [데이터베이스명];


# 계정 생성
mysql&amp;gt; create user '[계정명]'@'%' identified by '[비밀번호]';
Query OK, 0 rows affected (0.00 sec)


# 생성된 데이터베이스에 접근권한 부여
mysql&amp;gt; grant all privileges on [데이터베이스명].* to '[계정명]'@'%';
Query OK, 0 rows affected (0.00 sec)

# 변경사항 저장 및 반영
mysql&amp;gt; flush privileges;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Setting.py 데이터베이스 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django와 MySQL 연결을 위해 mysqlclient 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581602732801&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ yum -y install gcc
$ pip install mysqlclient&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django settings.py Database 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581602624765&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /opt/todo/todo/settings.py

----------------------------------------------------------------------------------
...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '[데이터베이스 이름]',
        'USER': '[데이터베이스 연결 시 사용할 계정]',
        'PASSWORD': '[계정 비밀번호]',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': &quot;SET sql_mode='STRICT_TRANS_TABLES'&quot;,
            'charset': 'utf8mb4',
        },
    }
}

...
----------------------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;./manage.py makemigrations &amp;amp; migrate를 통한 Django Database 반영&lt;br /&gt;- makemigrations은 Django의 models.py에 작성된 모델 테이블을 SQL 명령어로 변환하여 Migration 파일을 만듬&lt;br /&gt;- migrate는 makemigrations을 통해 변경된 모델 테이블을 데이터베이스에 반영하는 작업을 함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581602928505&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./manage.py makemigrations
No changes detected

$ ./manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL에 생성된 Django Database 및 Table 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581603088467&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; show tables;
+----------------------------+
| Tables_in_todo             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/114</guid>
      <comments>https://ossian.tistory.com/114#entry114comment</comments>
      <pubDate>Thu, 13 Feb 2020 23:11:39 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Settings.py</title>
      <link>https://ossian.tistory.com/113</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nx5O5/btqBXVoW59b/JsB1jmSEcbk41kaiksoZG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nx5O5/btqBXVoW59b/JsB1jmSEcbk41kaiksoZG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nx5O5/btqBXVoW59b/JsB1jmSEcbk41kaiksoZG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnx5O5%2FbtqBXVoW59b%2FJsB1jmSEcbk41kaiksoZG0%2Fimg.png&quot; data-filename=&quot;django-logo-negative.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Settings.py ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Project의 주요 설정을 담당하는 환경설정 파일&lt;/li&gt;
&lt;li&gt;App 추가, 언어설정, 세션설정, 환경설정, 플러그인 설정등 다양한 설정을 정의하는 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581599311883&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
└── todo
    ├── db.sqlite3
    ├── manage.py
    └── todo
        ├── __init__.py
        ├── __pycache__
        │   ├── __init__.cpython-36.pyc
        │   ├── settings.cpython-36.pyc
        │   ├── urls.cpython-36.pyc    
        │   └── wsgi.cpython-36.pyc    
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Setting.py 주요 설정]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1581600620514&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /opt/todo/todo/settings.py

...

# Django의 Base Directory 설정 부분
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Django의 Secret Key 설정 부분
SECRET_KEY = 'a5_d$=0l#4d9s1o@&amp;amp;azbsgnb2i0wljab6m5lxx&amp;amp;dac_c2@rj8*'


# Django의 Debug 모드를 설정하는 부분, Production 환경에선 Debug 모드를 활성화 하지 않음
DEBUG = True


# Django 접근 허용 Host들, Production 환경의 경우 누구든 접근할 수 있게 Any Open
ALLOWED_HOSTS = ['*']


# Django에서 생성한 APP 또는 Django의 Plugin들을 설정하는 부분
INSTALLED_APPS = [
	'django.contrib.admin',
    ...
]


# Request 발생 시 미들웨어를 거쳐 Urls.py에 연결된 View로 이동, Response 발생 시에도 미들웨어를 거쳐 응답
# Request와 Response에 대한 커스텀을 하거나 조작할 때 사용
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    ...
]


# Django의 Root Urls.py를 설정하는 부분
ROOT_URLCONF = 'todo.urls'


# Django의 Template의 위치나 조작을 설정하는 부분
TEMPLATES = [
    ...
]


# Django의 Database를 설정하는 부분
DATABASES = {
	...
}


# Django의 언어설정 및 시간설정을 하는 부분
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = False


# Django의 Static File(CSS, JS 등)을 설정하는 부분
----------------------------------------------------------------------------
# Static 파일 호출 시 url 설정
STATIC_URL = '/static/'

# Static 파일의 Directory 설정, 이 설정으로 Django 프로젝트 디렉토리 내에 있는 Static 폴더를 찾아 파일을 제공
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
    STATIC_DIR,
]

# Static 파일을 한곳으로 모아주는 디렉토리 설정 부분, [ ./manage.py collectstatic ] 명령 사용 시 Static 파일이 한곳으로 모아짐
# Nginx, Apache등에서 Static 파일 제공을 위한 디렉토리 설정
STATIC_ROOT = os.path.join(BASE_DIR, '.static_root')
----------------------------------------------------------------------------


# Django의 Media File(첨부파일, 사진파일, 동영상 파일 등)을 설정하는 부분
# 설정의 내용은 Static 파일과 동일

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')


# Django의 Session time out을 설정하는 부분
SESSION_COOKIE_AGE = 1200
SESSION_SAVE_EVERY_REQUEST = True&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Tutorial을 위한 Setting.py ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Static (CSS, JS 등) 파일 Directory 생성&lt;/li&gt;
&lt;li&gt;Media (첨부파일, 사진, 동영상 등) 파일 Directory 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581600881719&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pwd
/opt/todo

mkdir static
mkdir .static_root
mkdir media

--------------------------------------------------------
.
└── todo
    ├── db.sqlite3
    ├── manage.py
    ├── media
    ├── static
    └── todo
        ├── __init__.py
        ├── __pycache__
        │   ├── __init__.cpython-36.pyc
        │   ├── settings.cpython-36.pyc
        │   ├── urls.cpython-36.pyc
        │   └── wsgi.cpython-36.pyc
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
--------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django settings.py 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601011835&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'a5_d$=0l#4d9s1o@&amp;amp;azbsgnb2i0wljab6m5lxx&amp;amp;dac_c2@rj8*'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'todo.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'todo.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_L10N = True

USE_TZ = False


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

#------[ Django Static Setting ]------#
STATIC_URL = '/static/'
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
    STATIC_DIR,
]
STATIC_ROOT = os.path.join(BASE_DIR, '.static_root')

#------[ Django Media Setting ]------#
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

#------[ Session Time Out ]------#
SESSION_COOKIE_AGE = 1200
SESSION_SAVE_EVERY_REQUEST = True
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Static File 모아보기 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Production 환경일 경우 Static 파일 변경 후 반영하기 위해 반드시 Static 파일을 모아주어야 함&lt;/li&gt;
&lt;li&gt;[ ./manage.py collectstatic ] 명령어를 실행 할 경우 Static 파일의 Root Directory로 설정한 [ .static_root ] 디렉토리에 Static 파일들이 모두 복사되는 것을 확인할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581601250655&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd /opt/todo
$ ./manage.py collectstatic
130 static files copied to '/opt/todo/.static_root'.

---------------------------------------------------------------------
.
└── todo
    ├── .static_root
    │   └── admin
    │       ├── css
    │       │   ├── autocomplete.css
    │       │   ├── base.css
    │       │   ├── changelists.css
    │       │   ├── dashboard.css
    │       │   ├── fonts.css
    │       │   ├── forms.css
    │       │   ├── login.css
    │       │   ├── responsive.css
    │       │   ├── responsive_rtl.css
    ....
---------------------------------------------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/113</guid>
      <comments>https://ossian.tistory.com/113#entry113comment</comments>
      <pubDate>Thu, 13 Feb 2020 22:41:59 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - VS Code 개발 환경 설정</title>
      <link>https://ossian.tistory.com/112</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HlEIa/btqBOsHHXaD/JqA3fkPOIpcOCZ8S7K77uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HlEIa/btqBOsHHXaD/JqA3fkPOIpcOCZ8S7K77uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HlEIa/btqBOsHHXaD/JqA3fkPOIpcOCZ8S7K77uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHlEIa%2FbtqBOsHHXaD%2FJqA3fkPOIpcOCZ8S7K77uk%2Fimg.png&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ SFTP Config 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://ossian.tistory.com/107&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/02/02 - [[Web]/Django] - [Django] Django Tutorial - CentOS 7 환경설정&lt;/a&gt; 에서 설치한 SFTP Config 설정하기&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1581175966933&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django] Django Tutorial - CentOS 7 환경설정&quot; data-og-description=&quot;[ Django Tutorial 개발 환경 구성 ] CentOS 7 설치 - Virtual Server Visual Studio Code 설치 [ CentOS 7 - 환경 구성 ] SSH Setting - 계정 / 패스워드 기반으로 SSH를 접속 할 수 있도록 설정 $ vi /etc/ssh/..&quot; data-og-host=&quot;ossian.tistory.com&quot; data-og-source-url=&quot;https://ossian.tistory.com/107&quot; data-og-url=&quot;https://ossian.tistory.com/107&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZCp9L/hyESMfK6vZ/LkHOmJ9YE6I7mZLV87f0B0/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/S9JVv/hyESGT83qn/jrUjA2jignW1eS2tPZMPkK/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/IoUlC/hyERzoOjqN/IuEv0QgH0eKVvbiLxwNwIK/img.png?width=1436&amp;amp;height=567&amp;amp;face=0_0_1436_567&quot;&gt;&lt;a href=&quot;https://ossian.tistory.com/107&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ossian.tistory.com/107&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZCp9L/hyESMfK6vZ/LkHOmJ9YE6I7mZLV87f0B0/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/S9JVv/hyESGT83qn/jrUjA2jignW1eS2tPZMPkK/img.png?width=800&amp;amp;height=364&amp;amp;face=0_0_800_364,https://scrap.kakaocdn.net/dn/IoUlC/hyERzoOjqN/IuEv0QgH0eKVvbiLxwNwIK/img.png?width=1436&amp;amp;height=567&amp;amp;face=0_0_1436_567');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Django] Django Tutorial - CentOS 7 환경설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[ Django Tutorial 개발 환경 구성 ] CentOS 7 설치 - Virtual Server Visual Studio Code 설치 [ CentOS 7 - 환경 구성 ] SSH Setting - 계정 / 패스워드 기반으로 SSH를 접속 할 수 있도록 설정 $ vi /etc/ssh/..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;ossian.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Code를 작성할 로컬 디렉토리 생성 또는 지정하여 F1을 입력하여 SFTP Config 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Odvv9/btqBODbfc3T/YdsVkWYNziHHv33Gaim5T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Odvv9/btqBODbfc3T/YdsVkWYNziHHv33Gaim5T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Odvv9/btqBODbfc3T/YdsVkWYNziHHv33Gaim5T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOdvv9%2FbtqBODbfc3T%2FYdsVkWYNziHHv33Gaim5T0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;860&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생성된 SFTP Config 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581176432874&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;host&quot;: &quot;[ Django Project Server IP ]&quot;,
    &quot;port&quot;: 22,
    &quot;username&quot;: &quot;[ Django Project User Name ]&quot;,
    &quot;password&quot;: &quot;[ Django Project User Password ]&quot;,
    &quot;protocol&quot;: &quot;sftp&quot;,
    &quot;privateKeyPath&quot;: null,
    &quot;passphrase&quot;: null,
    &quot;passive&quot;: false,
    &quot;remotePath&quot;: &quot;[ Djngo Project Directory]&quot;,
    &quot;uploadOnSave&quot;: false,
    &quot;syncMode&quot;: &quot;update&quot;,
    &quot;watcher&quot;: {
        &quot;files&quot;: false,
        &quot;autoUpload&quot;: false,
        &quot;autoDelete&quot;: false
    },
    &quot;ignore&quot;: [&quot;**/.vscode/**&quot;, &quot;**/.git/**&quot;, &quot;**/.DS_Store&quot;]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Project Server에서 Django Source 파일 다운로드&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kH05e/btqBODI97Ox/Gk2AMvHklyE2jGwU5PzZtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kH05e/btqBODI97Ox/Gk2AMvHklyE2jGwU5PzZtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kH05e/btqBODI97Ox/Gk2AMvHklyE2jGwU5PzZtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkH05e%2FbtqBODI97Ox%2FGk2AMvHklyE2jGwU5PzZtk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다운로드 된 Django Source 파일 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G631K/btqBQ1947vM/hQhoY87GjkcOe0Ql4PyH00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G631K/btqBQ1947vM/hQhoY87GjkcOe0Ql4PyH00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G631K/btqBQ1947vM/hQhoY87GjkcOe0Ql4PyH00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG631K%2FbtqBQ1947vM%2FhQhoY87GjkcOe0Ql4PyH00%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업 후 Django Source 파일 업로드&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kVUDL/btqBPX8bUna/AZpqnsn7KK3lX8v4M0bad1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kVUDL/btqBPX8bUna/AZpqnsn7KK3lX8v4M0bad1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVUDL/btqBPX8bUna/AZpqnsn7KK3lX8v4M0bad1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkVUDL%2FbtqBPX8bUna%2FAZpqnsn7KK3lX8v4M0bad1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/112</guid>
      <comments>https://ossian.tistory.com/112#entry112comment</comments>
      <pubDate>Sun, 9 Feb 2020 00:45:46 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Django &amp;amp; Nginx 연동하기</title>
      <link>https://ossian.tistory.com/111</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9zvTj/btqBQnS17ID/3PMJi6MfitQTmqK0dsRJ3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9zvTj/btqBQnS17ID/3PMJi6MfitQTmqK0dsRJ3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9zvTj/btqBQnS17ID/3PMJi6MfitQTmqK0dsRJ3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9zvTj%2FbtqBQnS17ID%2F3PMJi6MfitQTmqK0dsRJ3k%2Fimg.png&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Nginx 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Yum을 통해 Nginx 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581174699397&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ yum -y install nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Nginx 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Nginx todo.conf 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581175019748&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /etc/nginx/conf.d/todo.conf

server {
        listen         80;
        server_name    localhost;
        location = /favicon.ico { access_log off; log_not_found off; }

        # Django media
        location /media  {
                internal;
                gzip_static on;
                expires max;
                alias /opt/todo/media;  # your Django project's media files - amend as required
                include /etc/nginx/mime.types;
        }

        location /static {
                gzip_static on;
                expires max;
                alias /opt/todo/.static_root;  # your Django project's static files - amend as required
                include /etc/nginx/mime.types;
        }

        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_pass http://unix:/opt/todo/socket.sock;
        }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Nginx nginx.conf 수정&lt;br /&gt;+ server { ... } 부분 주석처리&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581175063350&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /etc/nginx/conf

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Nginx Service 실행 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn Service 실행&lt;/li&gt;
&lt;li&gt;Nginx Service 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581175297766&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl start gunicorn
$ systemctl start nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Nginx &amp;amp; Gunicorn &amp;amp; Django 연동 확인 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;http://[ Django Project Server IP ]&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sCeok/btqBNMl9WGQ/a4Mn0Z5TcK3jKOhoj8O6i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sCeok/btqBNMl9WGQ/a4Mn0Z5TcK3jKOhoj8O6i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sCeok/btqBNMl9WGQ/a4Mn0Z5TcK3jKOhoj8O6i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsCeok%2FbtqBNMl9WGQ%2Fa4Mn0Z5TcK3jKOhoj8O6i1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ 접근 log 확인 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Nginx Access log를 통해 Nginx &amp;amp; Gunicorn &amp;amp; Django의 정상적인 접근 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581175536217&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ tail -f /var/log/nginx/access.log

192.168.219.1 - - [09/Feb/2020:00:20:33 +0900] &quot;GET / HTTP/1.1&quot; 200 16351 &quot;-&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36&quot; &quot;-&quot;
192.168.219.1 - - [09/Feb/2020:00:24:15 +0900] &quot;GET / HTTP/1.1&quot; 200 16351 &quot;-&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36&quot; &quot;-&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn Service 확인을 통해 Nginx &amp;amp; Gunicorn &amp;amp; Django의 정상적인 접근 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581175689854&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ journalctl -f -t gunicorn
-- Logs begin at 토 2020-02-08 22:00:52 KST. --
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1658] [INFO] Booting worker with pid: 1658
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1660] [INFO] Booting worker with pid: 1660
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1661] [INFO] Booting worker with pid: 1661
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1664] [INFO] Booting worker with pid: 1664
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1666] [INFO] Booting worker with pid: 1666
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1668] [INFO] Booting worker with pid: 1668
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1670] [INFO] Booting worker with pid: 1670
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1672] [INFO] Booting worker with pid: 1672
 2월 09 00:20:33 django-01 gunicorn[1655]: - - [08/Feb/2020:15:20:33 +0000] &quot;GET / HTTP/1.0&quot; 200 16351 &quot;-&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36&quot;
 2월 09 00:24:15 django-01 gunicorn[1655]: - - [08/Feb/2020:15:24:15 +0000] &quot;GET / HTTP/1.0&quot; 200 16351 &quot;-&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36&quot;
 2월 09 00:26:50 django-01 gunicorn[1655]: - - [08/Feb/2020:15:26:50 +0000] &quot;GET / HTTP/1.0&quot; 200 16351 &quot;-&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/111</guid>
      <comments>https://ossian.tistory.com/111#entry111comment</comments>
      <pubDate>Sun, 9 Feb 2020 00:29:22 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Django &amp;amp; Gunicorn 연동하기</title>
      <link>https://ossian.tistory.com/110</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uPYZK/btqBO65dSU2/bbZ5T5UUcEylmJSkTUQJE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uPYZK/btqBO65dSU2/bbZ5T5UUcEylmJSkTUQJE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uPYZK/btqBO65dSU2/bbZ5T5UUcEylmJSkTUQJE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuPYZK%2FbtqBO65dSU2%2FbbZ5T5UUcEylmJSkTUQJE1%2Fimg.png&quot; data-filename=&quot;django.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Gunicorn 이란? ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python WSGI(Web Server Gateway Interface)로 WEB Server(Nginx)로부터 서버사이드 요청을 받으면 WSGI(Gunicorn)를 통해 서버 어플리케이션(Django)으로 전달하는 역할을 함&lt;/li&gt;
&lt;li&gt;Django의 [ runserver ] 명령어는 단일 쓰레드로 작동하여 테스트용도로 적당하나, Request 요청이 많아질 경우 현저히 처리 능력이 떨어지므로 Production 환경에는 사용할 수 없음&lt;/li&gt;
&lt;li&gt;WSGI는 멀티 쓰레드를 만들 수 있도록하여 Request 요청이 많아지더라도 효율적으로 처리하므로 Production 환경에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;314&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv4XGh/btqBO6RG4Wd/B25wDRxcLBixd5JjdfKkhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv4XGh/btqBO6RG4Wd/B25wDRxcLBixd5JjdfKkhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv4XGh/btqBO6RG4Wd/B25wDRxcLBixd5JjdfKkhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv4XGh%2FbtqBO6RG4Wd%2FB25wDRxcLBixd5JjdfKkhK%2Fimg.png&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;314&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Gunicorn 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python 가상환경에서 Gunicorn 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581157812644&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip install gunicorn&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Gunicorn 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn Demon Service 생성 및 설정&lt;br /&gt;+ User = Gunicorn 서비스를 실행할 사용자 계정&lt;br /&gt;+ Group = Gunicorn 서비스를 실행할 사용자 그룹&lt;br /&gt;+ WorkingDirectory = Django Project의 manage.py가 위치한 경로&lt;br /&gt;+ ExecStart = gunicorn 서비스가 설치된 경로(가상환경에 설치하였으므로 해당 경로를 지정)&lt;br /&gt;+ ExecStart의 --workers 옵션 = 쓰레드 갯수 입력(통상 해당 서버 Core * 2를 지정)&lt;br /&gt;+ ExecStart의 --bind 옵션 = unix:[ sock 파일 생성 위치 ] [ Django Project의 wsgi 파일위치 ]&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581158122755&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi /etc/systemd/system/gunicorn.service


[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/opt/todo/
ExecStart=/root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --bind unix:/opt/todo/socket.sock todo.wsgi:application

[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Gunicorn Service 실행 및 확인 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn Service 적용 및 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581174355543&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl daemon-reload

$ systemctl start gunicorn&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn Service 확인&lt;br /&gt;+ Worker에서 설정한 숫자만큼 쓰레드가 만들어짐&lt;br /&gt;+ Gunicorn에서 설정한 Bind의 scoket.sock가 만들어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581174407879&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ systemctl status gunicorn

● gunicorn.service - gunicorn daemon
   Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: disabled)
   Active: active (running) since 토 2020-02-08 22:20:29 KST; 1h 43min ago
 Main PID: 1655 (gunicorn)
   CGroup: /system.slice/gunicorn.service
           ├─1655 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1658 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1660 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1661 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1664 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1666 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1668 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           ├─1670 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...
           └─1672 /root/.virtualenvs/env_django/bin/python3 /root/.virtualenvs/env_django/bin/gunicorn --access-logfile - --workers 8 --...

 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1655] [INFO] Listening at: unix:/opt/todo/socket.sock (1655)
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1655] [INFO] Using worker: sync
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1658] [INFO] Booting worker with pid: 1658
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1660] [INFO] Booting worker with pid: 1660
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1661] [INFO] Booting worker with pid: 1661
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1664] [INFO] Booting worker with pid: 1664
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1666] [INFO] Booting worker with pid: 1666
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1668] [INFO] Booting worker with pid: 1668
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1670] [INFO] Booting worker with pid: 1670
 2월 08 22:20:29 django-01 gunicorn[1655]: [2020-02-08 22:20:29 +0900] [1672] [INFO] Booting worker with pid: 1672
 
 
 ----
 
 
 $ cd /opt/todo
 
 .
├── db.sqlite3
├── manage.py
├── socket.sock
└── todo
    ├── __init__.py
    ├── __pycache__
    │&amp;nbsp;&amp;nbsp; ├── __init__.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; ├── settings.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; ├── urls.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; └── wsgi.cpython-36.pyc
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/110</guid>
      <comments>https://ossian.tistory.com/110#entry110comment</comments>
      <pubDate>Sat, 8 Feb 2020 19:30:27 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Django 설치하기</title>
      <link>https://ossian.tistory.com/109</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qgbh2/btqBEBrimWO/QGKMRVXcyIY2jTb4f9jip1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qgbh2/btqBEBrimWO/QGKMRVXcyIY2jTb4f9jip1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qgbh2/btqBEBrimWO/QGKMRVXcyIY2jTb4f9jip1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQgbh2%2FbtqBEBrimWO%2FQGKMRVXcyIY2jTb4f9jip1%2Fimg.png&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django 설치 전 가상환경 실행 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://ossian.tistory.com/108?category=878483&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전 포스팅에서 설치 및 설정한 Python Virtualenv&lt;/a&gt;에서 Django 설치 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580638031278&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#workon [ 가상환경 이름 ]

$ workon env_django&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django 최신 버전 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580638106715&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip install django&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django 특정 버전 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580638133364&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip install django==2.2.7&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Project&amp;nbsp; 생성 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Project를 생성할 디렉토리로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580639162021&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; $ cd /opt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Project 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580639308046&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# django-admin startproject [ Project Name ]

$ django-admin startproject todo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생성된 Django Project 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580641290600&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
└── todo
    ├── manage.py
    └── todo
        ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Project 테스트 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생성된 프로젝트의 setting.py 파일 수정&lt;br /&gt;- [ DATABASES ]는 Django에서 사용할 DATABASE를 설정할 수 있으며 기본적으로 sqlite3를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580642000076&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

ALLOWED_HOSTS = ['*'] # 모든 호스트에서 접근될 수 있도록 설정 변경

...

# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Project 실행 테스트 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;manage.py 파일이 위치한 Django Project 디렉토리에서 runserver 0.0.0.0:80 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580642360683&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# runserver [ HOST IP ]:[ Port ]

$ ./manage.py runserver 0.0.0.0:80&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;※ Django 2.1 버전 이하는 sqlite3 3.7로 실행가능&lt;/p&gt;
&lt;p&gt;※ Django 2.2 버전 이상은 sqlite3 3.8 이상으로 실행가능&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django 2.2 버전 이상에서 sqlite3 실행 시 오류 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580642522415&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ sqlite3 3.8 이상 업데이트 방법 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sqlite3 최신 버전 다운로드 및 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580644891216&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# https://www.sqlite.org/{year}/{sqlite-autoconf-{version}.tar.gz)

$ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz

$ yum -y install gcc
$ tar zxvf sqlite-autoconf-3310100.tar.gz
$ cd sqlite-autoconf-3310100
$ ./configure --prefix=/usr/local
$ make
$ sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴파일 후 시스템 링크 라이브러리에 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1581167950787&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo &quot;/usr/local/lib&quot; &amp;gt;&amp;gt; /etc/ld.so.conf
$ /sbin/ldconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치한 sqlite3 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645196768&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi .bashrc

...
#SQLITE3 Setting
export LD_LIBRARY_PATH=/usr/local/lib&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경된 Bashrc Profile 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645282285&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ source .bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Project 디렉토리로 이동하여 runserver 0.0.0.0:80 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645373979&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./manage.py runserver 0.0.0.0:80

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

February 02, 2020 - 12:09:49
Django version 3.0.2, using settings 'todo.settings'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django sqlite3 Database에 관리자 생성 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;runserver 실행 후 sqlite3 Database 생성 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645560981&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ tree

.
├── db.sqlite3  # 생성된 sqlite3 Database
├── manage.py
└── todo
    ├── __init__.py
    ├── __pycache__
    │&amp;nbsp;&amp;nbsp; ├── __init__.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; ├── settings.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; ├── urls.cpython-36.pyc
    │&amp;nbsp;&amp;nbsp; └── wsgi.cpython-36.pyc
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sqlite3에 Django Project Table 생성 및 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645685928&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./manage.py makemigrations #sqlite3 Database에 반영할 sql 명령어 생성
No changes detected

$ ./manage.py migrate # makemigrations을 통해 생성된 sql 명령어를 실행하여 Database에 적용
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리자 계정 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645785695&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./manage.py createsuperuser

Username (leave blank to use 'root'): admin
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Django Project Dev Web Service 시작 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;runserver 0.0.0.0:80 실행 및 브라우저에서 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580645896219&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./manage.py runserver 0.0.0.0:80

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
February 02, 2020 - 12:17:05
Django version 3.0.2, using settings 'todo.settings'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;http://[ Django Project Server IP ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/37Hzd/btqBHTXWbSv/U4wTwosIk93FiV4HK9AzjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/37Hzd/btqBHTXWbSv/U4wTwosIk93FiV4HK9AzjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/37Hzd/btqBHTXWbSv/U4wTwosIk93FiV4HK9AzjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F37Hzd%2FbtqBHTXWbSv%2FU4wTwosIk93FiV4HK9AzjK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;http://[ Django Project Server IP]/admin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJCp3Z/btqBHS5Njpe/KT4Gk8auG3EHkERM1DLP5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJCp3Z/btqBHS5Njpe/KT4Gk8auG3EHkERM1DLP5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJCp3Z/btqBHS5Njpe/KT4Gk8auG3EHkERM1DLP5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJCp3Z%2FbtqBHS5Njpe%2FKT4Gk8auG3EHkERM1DLP5K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;580&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/109</guid>
      <comments>https://ossian.tistory.com/109#entry109comment</comments>
      <pubDate>Sun, 2 Feb 2020 19:09:06 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Django Tutorial - Python 3.x Virtualenv 만들기</title>
      <link>https://ossian.tistory.com/108</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;0_TBnR0VAH8GyFk5wj.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1aJ7A/btqBEBdyyH4/PwXB1kBgBE1YvkG9bCKVik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1aJ7A/btqBEBdyyH4/PwXB1kBgBE1YvkG9bCKVik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1aJ7A/btqBEBdyyH4/PwXB1kBgBE1YvkG9bCKVik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1aJ7A%2FbtqBEBdyyH4%2FPwXB1kBgBE1YvkG9bCKVik%2Fimg.png&quot; data-filename=&quot;0_TBnR0VAH8GyFk5wj.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot; width=&quot;580&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Python 3.x 설치 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python 3.x RPM Download&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580597178599&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum install -y python36u python36u-libs python36u-devel python36u-pip

# ERROR 발생 시
$ yum install -y https://repo.ius.io/ius-release-el7.rpm&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python 3.x Virtualenv Install&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580597228153&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pip3.6 install --upgrade pip
$ pip3.6 install virtualenv virtualenvwrapper&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python Virtualenv 폴더 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580597264911&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cd /root
$ mkdir .virtualenvs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Virtualenv 환경설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580597962457&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi .bashrc

# .bashrc
 
# User specific aliases and functions
 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
 
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
 
#Virtualenvs Setting
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6
export PYTHONIOENCODING=utf8
source /usr/local/bin/virtualenvwrapper.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Virtualenvwrapper.sh 위치 확인 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580638574553&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ find / -name virtualenvwrapper.sh

/usr/local/bin/virtualenvwrapper.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경된 Bashrc Profile 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580607614696&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ source .bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;b&gt;[ Python 3.x 가상환경 사용하기 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가상환경 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580607830367&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mkvirtualenv [ 가상환경 이름 ]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가상환경 사용하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580607913077&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ workon [ 가상환경 이름 ]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가상환경 종료하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580607941914&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ deactivate&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가상환경 삭제하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580607990253&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ rmvirtualenv [ 가상환경 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;[ Python 3.x Virtualenv 살펴보기 ]&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python3 가상환경이 저장될 디렉토리&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580608276753&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ls -al /root/.virtualenvs/

drwxr-xr-x  3 root root 282  2월  2 10:44 .
dr-xr-x---. 5 root root 181  2월  2 10:41 ..

drwxr-xr-x  5 root root  56  2월  2 10:44 env_django  #Python Virtual Directory

-rwxr-xr-x  1 root root 135  2월  2 10:41 get_env_details
-rw-r--r--  1 root root  96  2월  2 10:41 initialize
-rw-r--r--  1 root root  73  2월  2 10:41 postactivate
-rw-r--r--  1 root root  75  2월  2 10:41 postdeactivate
-rwxr-xr-x  1 root root  66  2월  2 10:41 postmkproject
-rw-r--r--  1 root root  73  2월  2 10:41 postmkvirtualenv
-rwxr-xr-x  1 root root 110  2월  2 10:41 postrmvirtualenv
-rwxr-xr-x  1 root root  99  2월  2 10:41 preactivate
-rw-r--r--  1 root root  76  2월  2 10:41 predeactivate
-rwxr-xr-x  1 root root  91  2월  2 10:41 premkproject
-rwxr-xr-x  1 root root 130  2월  2 10:41 premkvirtualenv
-rwxr-xr-x  1 root root 111  2월  2 10:41 prermvirtualenv&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python3 가상환경을 통해 각각의 별도의 분리된 Python3 환경 사용가능&lt;br /&gt;- Python3 가상환경은 각각의 가상환경 별로 독립된 환경 제공&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1580608427022&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pwd

/root/.virtualenvs/env_django/lib/python3.6/site-packages&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Web]/Django</category>
      <author>ossians</author>
      <guid isPermaLink="true">https://ossian.tistory.com/108</guid>
      <comments>https://ossian.tistory.com/108#entry108comment</comments>
      <pubDate>Sun, 2 Feb 2020 07:59:25 +0900</pubDate>
    </item>
  </channel>
</rss>