<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>하늘구름&amp;trade;</title>
    <link>https://lovelettee01.tistory.com/</link>
    <description>하루한번 하늘보기!!</description>
    <language>ko</language>
    <pubDate>Wed, 5 Aug 2026 11:44:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>천풍훈</managingEditor>
    <image>
      <title>하늘구름&amp;trade;</title>
      <url>https://tistory1.daumcdn.net/tistory/935000/attach/dbf49d16078e4c69a82883e8e3ada573</url>
      <link>https://lovelettee01.tistory.com</link>
    </image>
    <item>
      <title>Grafana CPU 정보 모니터링(ft. InfluxDB)</title>
      <link>https://lovelettee01.tistory.com/67</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 CPU 온도 정보를 함께 확인 및 저장하고 &lt;b&gt;모니터링 툴(Grafana)&lt;/b&gt;에 추가하여 시각적으로 확인할 수 있도록 해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용은 기존 InfluxDB 및 Grafana를 설치 이후 작업으로 필요시 아래 이전 설치정보를 참고해서 보도록 하자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 이전 모니터링 적용 정보는 아래 링크를 통해 확인해 보자.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;InfluxDB + Grafana를 이용한 Proxmox 모니터링 적용&quot; href=&quot;https://lovelettee01.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;InfluxDB + Grafana를 이용한 Proxmox 모니터링 적용&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU정보를 확인하여 모니터링하는 것은 다음 네 가지 핵심 구성 요소로 이루어져 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 24px;&quot;&gt;
&lt;td style=&quot;height: 24px;&quot; align=&quot;left&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 24px;&quot; align=&quot;left&quot;&gt;역할&lt;/td&gt;
&lt;td style=&quot;height: 24px;&quot; align=&quot;left&quot;&gt;설치 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;&lt;b&gt;lm-sensors&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;시스템의 하드웨어 센서 정보를 읽어오는 도구&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;Linux OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;&lt;b&gt;Telegraf&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;센서 정보를 파싱하여 InfluxDB로 전송&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;Linux OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;&lt;b&gt;InfluxDB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;수집된 시계열 데이터를 저장하는 백엔드&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;별도의 서버 (또는 같은 서버)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;&lt;b&gt;Grafana&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;InfluxDB에 저장된 데이터를 보기 좋게 시각화하는 대시보드 도구&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; align=&quot;left&quot;&gt;별도의 서버 (또는 같은 서버)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  데이터 흐름도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 아키텍처는 데이터의 &lt;b&gt;수집&lt;/b&gt; &lt;b&gt;&amp;gt; 전송 &amp;gt; 저장 &amp;gt; 시각화&lt;/b&gt;의 4단계 순서로 진행됩니다&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;단계&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;구성 요소&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;주요 동작&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;사용 기술/언어&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;데이터 형태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;b&gt;1. 수집&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;lm-sensors&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;센서 정보 읽기&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;sensors command, Shell Script&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Plain Text &amp;gt; JSON/CSV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;b&gt;2. 전송&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Telegraf&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;데이터 수집 및 전달&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;InfluxDB Protocol&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Structured Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;b&gt;3. 저장&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;InfluxDB (Time-Series DB)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;시간순 데이터 저장&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Time-Series Data&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Structured Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;&lt;b&gt;4. 시각화&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Grafana (대시보드)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;데이터 조회 및 표현&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Flux/InfluxQL&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Visual Chart Data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 하나하나 설치하며 진행해 보도록 하자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1단계: lm-sensors 설치 및 데이터 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 단계는 시스템이 센서 정보를 인식하고, lm-sensors가 정상적으로 작동하는지 확인하는 단계이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1. lm-sensors 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하는 Linux 배포판에 맞춰 간단하게 패키지를 설치 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1780034500821&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install lm-sensors&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1780034520659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install lm_sensors
# 또는
sudo dnf install lm_sensors&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2.(선택사항) 센서 감지 및 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템에 연결된 센서를 검색하고 모듈을 로드한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 각자의 시스템별로 이 부분은 모두 다른 형태로 나타나기 때문에 필요에 따라 CPU정보를 가져올 수 있도록 설정해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1780033989251&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo sensors-detect&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Tip]&lt;/b&gt; 이 명령어는 모듈을 확인하기 위하여 여러 질문을 나오는데. 특별한 이유가 없다면, 대부분의 질문에 &lt;code&gt;YES&lt;/code&gt;를 입력하여 모듈을 활성화하는 것이 좋다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;783&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyKVHO/dJMcab5rwI2/dFz2sGgKucqzOvUAcpZxp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyKVHO/dJMcab5rwI2/dFz2sGgKucqzOvUAcpZxp0/img.png&quot; data-alt=&quot;sensors-detect 명령어를 통한 정보확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyKVHO/dJMcab5rwI2/dFz2sGgKucqzOvUAcpZxp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyKVHO%2FdJMcab5rwI2%2FdFz2sGgKucqzOvUAcpZxp0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;783&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;783&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;sensors-detect 명령어를 통한 정보확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.3. 데이터 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정이 완료되었다면, &lt;code&gt;sensors&lt;/code&gt; 명령어를 통해 현재 센서 값을 확인한다. 이 출력정보 InfluxDB로 전송하여 저장해 보도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1780034048036&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sensors&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSiLNb/dJMcaayI7rL/yKAFyhcxjAvpIrrGvDKX70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSiLNb/dJMcaayI7rL/yKAFyhcxjAvpIrrGvDKX70/img.png&quot; data-alt=&quot;CPU온도 정보 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSiLNb/dJMcaayI7rL/yKAFyhcxjAvpIrrGvDKX70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSiLNb%2FdJMcaayI7rL%2FyKAFyhcxjAvpIrrGvDKX70%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;125&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CPU온도 정보 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2단계: Telegraf 설정 및 데이터 수집 (Docker Compose)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Telegraf&lt;/b&gt;는 시스템 명령어의 출력을 읽어와 InfluxDB 형식에 맞춰 전송하는 역할을 한다. 여기서는 자세한 사용법은 기술하지 않을 예정이니 필요한 경우 자세한 사용법을 찾아보도록 하자. [&lt;a title=&quot;InfluxData Telegraf&quot; href=&quot;https://www.influxdata.com/time-series-platform/telegraf/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 기존 Docker를 활용하여 InfluxDB + Grafana를 세팅하였기 때문에 해당 Compose파일에 Telegraf를 추가해서 사용해 보도록 하려고 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Telegraf.conf 파일 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 Telegraf를 사용하는 경우에는 관련 내용만 별도로 추가해서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 사용하는 파일 없는 경우 아래 명령어를 통해 기본 Telegraf.conf 파일도 생성이 가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker를 통한 신규 파일 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780297144654&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --rm telegraf:latest telegraf config &amp;gt; ./telegraf.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 InfluxData에서 제공하고 있는 sensors plugin 항목을 사용하여 데이터를 저장해 보도록 하자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.1 Inputs.sensors Plugin (센서 데이터 수집) 설정 [&lt;a title=&quot;LM Sensors Input Plugin&quot; href=&quot;https://docs.influxdata.com/telegraf/v1/input-plugins/sensors/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Plugin으로 lm-sensors를 통한 데이터를 기본적으로 제공해 주고 있기 때문에 &lt;b&gt;[[inputs.sensors]]&lt;/b&gt; 를 추가해 주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요에 따라 remove_numbers (Default : true) 설정만 수정해 주면 되는데&amp;nbsp;주석에 나와 있듯이 각각의 코어 항목에 일련번호를 넣을지 설정하는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1780299462259&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Monitor sensors, requires lm-sensors package
[[inputs.sensors]]
  ## Remove numbers from field names.
  ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
  # remove_numbers = true

  ## Timeout is the maximum amount of time that the sensors command can run.
  # timeout = &quot;5s&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2.1.2&lt;span&gt; Output Plugin (InfluxDB 전송) 설정 [&lt;a title=&quot;Manually configure Telegraf&quot; href=&quot;https://docs.influxdata.com/influxdb/cloud/write-data/no-code/use-telegraf/manual-config/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Telegraf가 데이터를 InfluxDB로 전송하도록 본인의 정보를 설정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1780299593953&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[[outputs.influxdb_v2]]
  urls = [&quot;http://influxdb:8086&quot;] # influxdb server url
  token = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #API Token Info
  organization = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #Organinzation Info
  bucket = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #Bucket Info&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2.1.3 최종 telegraf.conf 파일&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사설이 길었지만 결국 최종적으로 아래와 같은 telegraf.conf 파일을 생성하고, 각각 필요에 따라 수정해서 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1780300752617&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Configuration for telegraf agent
[agent]
  interval = &quot;10s&quot;
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = &quot;0s&quot;
  flush_interval = &quot;10s&quot;
  flush_jitter = &quot;0s&quot;
  precision = &quot;&quot;
  hostname = &quot;&quot;
  omit_hostname = false

[[outputs.influxdb_v2]]
  urls = [&quot;http://influxdb:8086&quot;] # influxdb server url
  token = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #API Token Info
  organization = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #Organinzation Info
  bucket = &quot;&amp;lt;Change Here!!&amp;gt;&quot; #Bucket Info

[[inputs.sensors]]
  ## Remove numbers from field names.
  ## If true, a field name like 'temp1_input' will be changed to 'temp_input'.
  # remove_numbers = true

  ## Timeout is the maximum amount of time that the sensors command can run.
  # timeout = &quot;5s&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 아래는 InfluxDB의 WEB UI를 통해 Telegraf.conf 파일을 간단히 생성할 수 있는데 이렇게 생성한 Telegraf 설정파일을 다운로드도 하고 API를 통한 호출도 가능하니 이 부분은 필요한 사람만 보면 될 듯하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; InfluxDB WEB Telegraf.conf 생성방법&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. LoadData &amp;gt; Telegraf &amp;gt; CREATE CONFIGURATION&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Sensors정보를 저장할 Bucket 선택 &amp;gt; LM Sensors Plugin 선택 &amp;gt; CONTINUE CONFIGURING&lt;/p&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMD6X9/dJMb99Njkvk/gkM9VayEHDuQWb96j1Afi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMD6X9/dJMb99Njkvk/gkM9VayEHDuQWb96j1Afi0/img.png&quot; style=&quot;width: 48.2831%; margin-right: 10px;&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;937&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;48.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMD6X9/dJMb99Njkvk/gkM9VayEHDuQWb96j1Afi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMD6X9%2FdJMb99Njkvk%2FgkM9VayEHDuQWb96j1Afi0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cViAzh/dJMcaf7PXT1/wtG58q2jqMvjGoilxgzrX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cViAzh/dJMcaf7PXT1/wtG58q2jqMvjGoilxgzrX1/img.png&quot; style=&quot;width: 50.4959%;&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;841&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cViAzh/dJMcaf7PXT1/wtG58q2jqMvjGoilxgzrX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcViAzh%2FdJMcaf7PXT1%2FwtG58q2jqMvjGoilxgzrX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1194&quot; height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Sensors Telegraf.conf 파일생성&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;3. 생성할 Telegraf 이름 및 설명으로 본인이 확인하기 편하게 작성하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 [agent], [outputs] 정보는 기본적으로 작성되니 화면에 나와있는 [inputs] 정보에 대해서만 수정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.Telegraf를 생성하게 되면 API Token 정보를 통해 원격으로 설정내용으로 호출이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 API를 사용할 것이 아니기 때문에 참고용으로만 확인하고 넘어 가자.&lt;/p&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AC4Uk/dJMcaiKfwAs/vd82Ij8ZwNv3qkC7skNamK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AC4Uk/dJMcaiKfwAs/vd82Ij8ZwNv3qkC7skNamK/img.png&quot; style=&quot;width: 46.1165%; margin-right: 10px;&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;868&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;46.69&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AC4Uk/dJMcaiKfwAs/vd82Ij8ZwNv3qkC7skNamK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAC4Uk%2FdJMcaiKfwAs%2Fvd82Ij8ZwNv3qkC7skNamK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1191&quot; height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JS5Kz/dJMcaf04JJl/EMEyC4qflCqbnvkp091Mrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JS5Kz/dJMcaf04JJl/EMEyC4qflCqbnvkp091Mrk/img.png&quot; style=&quot;width: 52.6625%;&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;755&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;53.31&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JS5Kz/dJMcaf04JJl/EMEyC4qflCqbnvkp091Mrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJS5Kz%2FdJMcaf04JJl%2FEMEyC4qflCqbnvkp091Mrk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1183&quot; height=&quot;755&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Sensors Telegraf.conf 파일생성&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;5. Telegraf 화면에서 방금 작성한 항목을 선택할 경우 DOWNLOAD CONFIG 버튼으로 설정파일을 다운로드 가능&lt;/p&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCuG7A/dJMcahE1q6O/v5uNUUu5hSY3kJnktxDaA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCuG7A/dJMcahE1q6O/v5uNUUu5hSY3kJnktxDaA0/img.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;719&quot; data-is-animation=&quot;false&quot; style=&quot;width: 54.3194%; margin-right: 10px;&quot; data-widthpercent=&quot;54.99&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCuG7A/dJMcahE1q6O/v5uNUUu5hSY3kJnktxDaA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCuG7A%2FdJMcahE1q6O%2Fv5uNUUu5hSY3kJnktxDaA0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;719&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bomH7F/dJMcaaF0udx/CHhSRk3ni2g9SFIo9O8nUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bomH7F/dJMcaaF0udx/CHhSRk3ni2g9SFIo9O8nUk/img.png&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;829&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.4596%;&quot; data-widthpercent=&quot;45.01&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bomH7F/dJMcaaF0udx/CHhSRk3ni2g9SFIo9O8nUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbomH7F%2FdJMcaaF0udx%2FCHhSRk3ni2g9SFIo9O8nUk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1207&quot; height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Telegraf.conf 설정파일 다운로드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 Telegraf Docker-Compose 생성 및 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 생성한 telegraf.conf 파일을 기반으로 Docker-compose를 생성하여 실행해 보도록 하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Influxdb + Grafana 설치를 위한 Compose.yaml 파일에 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1780297320113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Influxdb + grafana + telegraf compose.yaml
services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: always
    ports:
      - 3000:3000
    volumes:
      - grafana-data:/var/lib/grafana
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    restart: always
    ports:
      - 8086:8086
    volumes:
      - influxdb2-data:/var/lib/influxdb2
      - influxdb2-config:/etc/influxdb2
  telegraf:
    image: telegraf:latest
    container_name: telegraf
    restart: always
    volumes:
      - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro # 본인의 telegraf.conf파일 연결
      - /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
  grafana-data:
  influxdb2-data:
  influxdb2-config:&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;Docker Compose 적용 및 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1783577240230&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d telegraf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v0PbO/dJMcacqhFzA/2JmLCJJA5U7vkeLxTdmpe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v0PbO/dJMcacqhFzA/2JmLCJJA5U7vkeLxTdmpe1/img.png&quot; data-alt=&quot;Telegraf Docker compose 적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v0PbO/dJMcacqhFzA/2JmLCJJA5U7vkeLxTdmpe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv0PbO%2FdJMcacqhFzA%2F2JmLCJJA5U7vkeLxTdmpe1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;135&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Telegraf Docker compose 적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3. Telegraf를 통한 데이터 수집 확인&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.1 telegraf.conf 설정파일을 통한 수집 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 Docker 가 실행되면 자동으로 미리 연결해 놓은 telegraf.conf 파일을 기준으로 자동으로 실행이 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 통해 정상적으로 수집이 되고 있는지 확인해 보자. 설정파일이 정상적이라면 문제없이 실행되었을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;--test&lt;/b&gt; 옵션은 정상적으로 수집되는 데이터를 확인하는 용도&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker exec -t telegraf telegraf --test&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E3l64/dJMcahE2j2w/3YRGPuXQxdVG8XtEjQQXLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E3l64/dJMcahE2j2w/3YRGPuXQxdVG8XtEjQQXLK/img.png&quot; data-alt=&quot;Telegraf 를 통한 CPU정보 수집확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E3l64/dJMcahE2j2w/3YRGPuXQxdVG8XtEjQQXLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE3l64%2FdJMcahE2j2w%2F3YRGPuXQxdVG8XtEjQQXLK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1227&quot; height=&quot;281&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Telegraf 를 통한 CPU정보 수집확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.2 API를 통한 데이터 확인 ( 참고용으로 필요한 경우 사용 )&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Telegraf를 생성했다면 &lt;b&gt;Setup&amp;nbsp;Instructions&lt;/b&gt; 항목에서 기본적인 정보 및 호출방법을 확인해 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 API Token정보가 있다면 `Telegraf Read` 권한을 부여해 사용해도 되고 팝업창에서 새로 생성해서 사용해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(✅생성된 모든 API Token은 API TOKENS에서 확인 가능하다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0mDdP/dJMcadvOlvD/fWoqKAPtvcmCkGrL6qjnV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0mDdP/dJMcadvOlvD/fWoqKAPtvcmCkGrL6qjnV1/img.png&quot; data-origin-width=&quot;1215&quot; data-origin-height=&quot;722&quot; data-is-animation=&quot;false&quot; style=&quot;width: 58.4314%; margin-right: 10px;&quot; data-widthpercent=&quot;59.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0mDdP/dJMcadvOlvD/fWoqKAPtvcmCkGrL6qjnV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0mDdP%2FdJMcadvOlvD%2FfWoqKAPtvcmCkGrL6qjnV1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1215&quot; height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ee1V5A/dJMcaicZtom/XV4okU8F7OO1ZrGf11fkq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ee1V5A/dJMcaicZtom/XV4okU8F7OO1ZrGf11fkq0/img.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;672&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.4059%;&quot; data-widthpercent=&quot;40.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ee1V5A/dJMcaicZtom/XV4okU8F7OO1ZrGf11fkq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fee1V5A%2FdJMcaicZtom%2FXV4okU8F7OO1ZrGf11fkq0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;782&quot; height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Telegraf 설정 확인 및 API 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 순서대로 실행해 보도록 하는데 우리는 Docker에 설치했으니 Docker로 진입해서 API호출을 실행해 보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Telegraf Docker 진입&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1783583463093&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it telegraf /bin/bash&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;Token 정보 export ( Token을 별도로 관리하는 게 아니라면 Influxdb Web의 Telegraf 설정파일에 직접 지정해도 됨 )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1783583347806&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export INFLUX_TOKEN=&amp;lt;본인 API Token정보입력&amp;gt;&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;API를 통한 telegraf 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1783583671086&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;telegraf --config http://192.168.0.145:8086/api/v2/telegrafs/10cc8c63fe987000 --test&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 API를 통해서도 아래처럼 간단하게 확인가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btcQ3e/dJMb99NKqte/WjgcSL37qZqjcaDaUrKyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btcQ3e/dJMb99NKqte/WjgcSL37qZqjcaDaUrKyk1/img.png&quot; data-alt=&quot;API를 통한 Telegraf 수집 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btcQ3e/dJMb99NKqte/WjgcSL37qZqjcaDaUrKyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtcQ3e%2FdJMb99NKqte%2FWjgcSL37qZqjcaDaUrKyk1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1229&quot; height=&quot;322&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;API를 통한 Telegraf 수집 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.3 Influxdb WEB UI에서 수집 데이터 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WebUI&amp;nbsp;&amp;gt;&amp;nbsp;Data&amp;nbsp;Explorer&lt;/b&gt;&amp;nbsp;항목에서&amp;nbsp;본인의&amp;nbsp;정보에&amp;nbsp;맞춰&amp;nbsp;확인해&amp;nbsp;보면&amp;nbsp;정상적으로&amp;nbsp;데이터가&amp;nbsp;수집되고&amp;nbsp;있는&amp;nbsp;것을&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;1025&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sGEzm/dJMcagM0Bhm/kXsWAl8qEOiHQdthiPZShK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sGEzm/dJMcagM0Bhm/kXsWAl8qEOiHQdthiPZShK/img.png&quot; data-alt=&quot;InfluxDB WebUI 수집데이터 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sGEzm/dJMcagM0Bhm/kXsWAl8qEOiHQdthiPZShK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsGEzm%2FdJMcagM0Bhm%2FkXsWAl8qEOiHQdthiPZShK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1726&quot; height=&quot;1025&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;InfluxDB WebUI 수집데이터 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3단계: Grafana 설정 및 대시보드 구성 (시각화)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 InfluxDB에 쌓인 데이터를 Grafana로 가져와 기존 생성했던 Proxmox 대시보드에 CPU 정보를 표시해 보도록 하자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 CPU정보 패널 추가&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;추가할 Dashboard &amp;gt; Edit &amp;gt; 표시할 패널 선택하여 Add Panel 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zwlSf/dJMcaixna2q/DNnKTbktNbSCD7z1u5KEv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zwlSf/dJMcaixna2q/DNnKTbktNbSCD7z1u5KEv1/img.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;933&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.8575%; margin-right: 10px;&quot; data-widthpercent=&quot;50.44&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zwlSf/dJMcaixna2q/DNnKTbktNbSCD7z1u5KEv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzwlSf%2FdJMcaixna2q%2FDNnKTbktNbSCD7z1u5KEv1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1276&quot; height=&quot;933&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLXyWu/dJMcaf1DIMS/FBltLE1CbNGS41q2PESps1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLXyWu/dJMcaf1DIMS/FBltLE1CbNGS41q2PESps1/img.png&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;946&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.9797%;&quot; data-widthpercent=&quot;49.56&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLXyWu/dJMcaf1DIMS/FBltLE1CbNGS41q2PESps1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLXyWu%2FdJMcaf1DIMS%2FFBltLE1CbNGS41q2PESps1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1271&quot; height=&quot;946&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Dashboard 에 패널 추가&lt;/figcaption&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;Configure visualization 선택 후 &amp;gt; All visualizations &amp;gt; Gauge 선택( ※해당항목은 본인이 원하는 스타일을 선택하면 됨 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVqqyX/dJMcag0wRQr/Vbc0HzQKUPFcVKkrTaAkpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVqqyX/dJMcag0wRQr/Vbc0HzQKUPFcVKkrTaAkpk/img.png&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;942&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.1652%; margin-right: 10px;&quot; data-widthpercent=&quot;49.74&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVqqyX/dJMcag0wRQr/Vbc0HzQKUPFcVKkrTaAkpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVqqyX%2FdJMcag0wRQr%2FVbc0HzQKUPFcVKkrTaAkpk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1269&quot; height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl664V/dJMcacYb7u7/QgJiMqU5qkTrkPTEOl2kw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl664V/dJMcacYb7u7/QgJiMqU5qkTrkPTEOl2kw0/img.png&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;939&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.672%;&quot; data-widthpercent=&quot;50.26&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl664V/dJMcacYb7u7/QgJiMqU5qkTrkPTEOl2kw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl664V%2FdJMcacYb7u7%2FQgJiMqU5qkTrkPTEOl2kw0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;939&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;CPU정보에 대한 상세 패널 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.2 데이터 확인 및 패널 상세설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2.1 CPU정보 데이터 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Flux 문법을 이용한 Query를 호출하여 데이터가 정상적으로 호출되는지 확인&lt;/li&gt;
&lt;li&gt;해당 조건은 각자의 조건에 맞게 수정해서 사용하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1784531604536&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from(bucket: &quot;${Bucket}&quot;)
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &quot;sensors&quot;)
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &quot;temp_input&quot;)
  |&amp;gt; filter(fn: (r) =&amp;gt; r.feature == &quot;package_id_0&quot;)&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;해당 Query를 호출하여 데이터가 정상적 조회가 되면 아래 화면과 같이 표현되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btsGfn/dJMcaiYj1Ip/KcKE4AqaqyT4SXKQxRMGa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btsGfn/dJMcaiYj1Ip/KcKE4AqaqyT4SXKQxRMGa0/img.png&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;917&quot; data-is-animation=&quot;false&quot; style=&quot;width: 37.9742%; margin-right: 10px;&quot; data-widthpercent=&quot;38.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btsGfn/dJMcaiYj1Ip/KcKE4AqaqyT4SXKQxRMGa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtsGfn%2FdJMcaiYj1Ip%2FKcKE4AqaqyT4SXKQxRMGa0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1274&quot; height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctLFoP/dJMcaiqyaCf/M7bBEth8kk2iNUgiyHg3m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctLFoP/dJMcaiqyaCf/M7bBEth8kk2iNUgiyHg3m0/img.png&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;569&quot; data-is-animation=&quot;false&quot; style=&quot;width: 60.863%;&quot; data-widthpercent=&quot;61.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctLFoP/dJMcaiqyaCf/M7bBEth8kk2iNUgiyHg3m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctLFoP%2FdJMcaiqyaCf%2FM7bBEth8kk2iNUgiyHg3m0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Influxdb CPU정보 데이터 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2.2 (선택사항) 패널 상세설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 데이터 시각화 되었다면 끝이긴 하지만 가시성 있도록 패널에 몇 가지만&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;추가로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;수정해 보도록 하자.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.1938%;&quot;&gt;대메뉴&lt;/td&gt;
&lt;td style=&quot;width: 51.4728%;&quot;&gt;하위메뉴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.1938%;&quot;&gt;Panel options&lt;/td&gt;
&lt;td style=&quot;width: 51.4728%;&quot;&gt;&lt;b&gt;Title&lt;/b&gt; : 화면에 표시되는 타이틀 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.1938%;&quot;&gt;Standard options&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 51.4728%;&quot;&gt;&lt;b&gt;Unit&lt;/b&gt; : Temperature &amp;gt; Celsius(℃)&lt;br /&gt;&lt;b&gt;Min&amp;nbsp;&lt;/b&gt; : 0&lt;br /&gt;&lt;b&gt;Max&lt;/b&gt; : 100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.1938%;&quot;&gt;Thresholds&lt;/td&gt;
&lt;td style=&quot;width: 51.4728%;&quot;&gt;&lt;b&gt;Add threshold&lt;/b&gt; : 60%, 70%, 80% 90% 추가&lt;br /&gt;&lt;b&gt;Thresholds mode&lt;/b&gt; : percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 위처럼만 수정을 해준다면 아래와 같은 화면을 볼 수 있는데 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;필요에 따라 원하는 데로 우측 옵션을 조절해 사용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 저장을 통해 화면에 적용이 된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0ZNCM/dJMcag7kvPy/bzA2YKjBzZD5CVWvyFRgAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0ZNCM/dJMcag7kvPy/bzA2YKjBzZD5CVWvyFRgAK/img.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;939&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.3583%; margin-right: 10px;&quot; data-widthpercent=&quot;46.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0ZNCM/dJMcag7kvPy/bzA2YKjBzZD5CVWvyFRgAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0ZNCM%2FdJMcag7kvPy%2FbzA2YKjBzZD5CVWvyFRgAK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;939&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfvbB9/dJMcabrsudF/P3Ocr5XKNOX1gTUFGVJaL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfvbB9/dJMcabrsudF/P3Ocr5XKNOX1gTUFGVJaL0/img.png&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;823&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.4789%;&quot; data-widthpercent=&quot;53.1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfvbB9/dJMcabrsudF/P3Ocr5XKNOX1gTUFGVJaL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfvbB9%2FdJMcabrsudF%2FP3Ocr5XKNOX1gTUFGVJaL0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1269&quot; height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;CPU정보 패널 상세정보 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.3 (선택사항) 모든 CPU 코어별 정보 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 방식으로 나머지 CPU코어에 대한 정보도 표현해 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Add Panel을&lt;/b&gt; 통해 &lt;b&gt;Time serises&lt;/b&gt; 차트를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYdBwJ/dJMcahLW3IT/rqlJCKAm1hegsoL9dT8BTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYdBwJ/dJMcahLW3IT/rqlJCKAm1hegsoL9dT8BTK/img.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;803&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.2844%; margin-right: 10px;&quot; data-widthpercent=&quot;53.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYdBwJ/dJMcahLW3IT/rqlJCKAm1hegsoL9dT8BTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYdBwJ%2FdJMcahLW3IT%2FrqlJCKAm1hegsoL9dT8BTK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;803&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pV31f/dJMcaiKOPWV/oPRXjQeFmfOUyVCZ0OEPhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pV31f/dJMcaiKOPWV/oPRXjQeFmfOUyVCZ0OEPhk/img.png&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;943&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.5528%;&quot; data-widthpercent=&quot;46.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pV31f/dJMcaiKOPWV/oPRXjQeFmfOUyVCZ0OEPhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpV31f%2FdJMcaiKOPWV%2FoPRXjQeFmfOUyVCZ0OEPhk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1271&quot; height=&quot;943&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Time serise 챠트 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3.3.1 CPU Core정보 데이터 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Package를 제외한 나머지 core 정보만 가져오도록 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1784553208718&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from(bucket: &quot;${Bucket}&quot;)
  |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &quot;sensors&quot;)
  |&amp;gt; filter(fn: (r) =&amp;gt; r._field == &quot;temp_input&quot;)
  |&amp;gt; filter(fn: (r) =&amp;gt; r.feature != &quot;package_id_0&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ntrvp/dJMcahSFl9u/7212FlXOPWFfp6kmPdQKrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ntrvp/dJMcahSFl9u/7212FlXOPWFfp6kmPdQKrK/img.png&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;1545&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.4821%; margin-right: 10px;&quot; data-widthpercent=&quot;51.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ntrvp/dJMcahSFl9u/7212FlXOPWFfp6kmPdQKrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fntrvp%2FdJMcahSFl9u%2F7212FlXOPWFfp6kmPdQKrK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1899&quot; height=&quot;1545&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y7ljA/dJMcahrJc5A/0QpV3rmLX8c7VhMgQ7K9Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y7ljA/dJMcahrJc5A/0QpV3rmLX8c7VhMgQ7K9Tk/img.png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;1624&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.3551%;&quot; data-widthpercent=&quot;48.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y7ljA/dJMcahrJc5A/0QpV3rmLX8c7VhMgQ7K9Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY7ljA%2FdJMcahrJc5A%2F0QpV3rmLX8c7VhMgQ7K9Tk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;1624&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3.3.2 (선택사항) 패널 상세설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 기존 CPU정보와 동일하게 가시성 있도록 패널에 몇 가지만&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;추가로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;수정해 보도록 하자.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 187px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;대메뉴&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;하위메뉴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Panel options&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;Title&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 화면에 표시되는 타이틀 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;Tooltip&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;Tooltop mode &lt;/b&gt;: All&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;height: 34px;&quot;&gt;Graph Styles&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot;&gt;&lt;b&gt;Fill opacity&lt;/b&gt; : 60&lt;br /&gt;&lt;b&gt;Gradient mode&lt;/b&gt; : Opacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 56px;&quot;&gt;
&lt;td style=&quot;height: 56px;&quot;&gt;Standard options&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 56px;&quot;&gt;&lt;b&gt;Unit&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: Temperature &amp;gt; Celsius(℃)&lt;br /&gt;&lt;b&gt;Min&amp;nbsp;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 0&lt;br /&gt;&lt;b&gt;Max&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;Thresholds&lt;/td&gt;
&lt;td style=&quot;height: 38px;&quot;&gt;&lt;b&gt;Add threshold&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 60%, 70%, 80% 90% 추가&lt;br /&gt;&lt;b&gt;Thresholds mode&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;해당 패널 역시&amp;nbsp;&lt;/span&gt;&lt;span&gt;필요에 따라 원하는 데로 우측 옵션을 조절해&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;1950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n4Sw5/dJMcabybjXa/MqALUhSvYGZk29o0LANKYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n4Sw5/dJMcabybjXa/MqALUhSvYGZk29o0LANKYK/img.png&quot; data-alt=&quot;CPU Core Time Serises 정보 패널 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n4Sw5/dJMcabybjXa/MqALUhSvYGZk29o0LANKYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn4Sw5%2FdJMcabybjXa%2FMqALUhSvYGZk29o0LANKYK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;843&quot; height=&quot;870&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;1950&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CPU Core Time Serises 정보 패널 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며...&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로서 길고 길었던 모든 적용이 완료되면 아래와 같이 CPU 온도 정보 및 각각 CPU Core정보를 한눈에 파악할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 전체적으로 보면 크게 어렵지 않게 적용할 수 있으며 추가하고 싶은 다른 데이터가 있다면 같은 형태로 추가해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps. 추가로 해당 정보를 통해 Grafana에서 제공해 주는 &lt;i&gt;Alerting&lt;/i&gt; 기능을 사용한다면 CPU사용량 온도 Disk용량등 특정 수치값 이상인경우 메시지를 보내주는 기능도 구현가능하다. 해당 항목은 추후 별도로 작성하도록 하겠다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2088&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diTqeZ/dJMcacRm18x/j6WPNacld0yatY2OCB1SQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diTqeZ/dJMcacRm18x/j6WPNacld0yatY2OCB1SQk/img.png&quot; data-alt=&quot;CPU 온도 정보가 추가된 모니터링 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diTqeZ/dJMcacRm18x/j6WPNacld0yatY2OCB1SQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiTqeZ%2FdJMcacRm18x%2Fj6WPNacld0yatY2OCB1SQk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;2088&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2088&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CPU 온도 정보가 추가된 모니터링 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Proxmox/Monitoring</category>
      <category>cpu 모니터링</category>
      <category>cpu온도</category>
      <category>grafana</category>
      <category>InfluxDB</category>
      <category>lm-sensor</category>
      <category>Proxmox</category>
      <category>telegraf</category>
      <category>모니터링</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/67</guid>
      <comments>https://lovelettee01.tistory.com/67#entry67comment</comments>
      <pubDate>Wed, 27 May 2026 13:26:09 +0900</pubDate>
    </item>
    <item>
      <title>InfluxDB + Grafana를 이용한 Proxmox 모니터링 적용</title>
      <link>https://lovelettee01.tistory.com/66</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 클라우드를 통해 서버를 이용할 경우 본인이 선택한 서버의 스펙에 따라 가격이 책정되는데 사양이 올라갈수록 가격이 올라가는 만큼 적정 수준의 스펙을 선택하여 사용하는 것이 바람직하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 요즘 MiniPC가 많이 보급됨에 따라서 가성비 저전력 MiniPC에 서버를 구축하는 경우도 종종 있는데 해당 경우에도 서버 정보를 한눈에 본다면 좀 더 효율적으로 관리할 수 있지 않을까 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 서버의 정보를 모니터링하여 서버의 가동률 및 실사용률 등을 파악해 좀 더 효율적인 관리를 해 볼 수 있도록 해보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 사전적으로 필요한 정보는 아래 링크를 통해 확인해 보자.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;Proxmox VE 리눅스 컨테이너(LXC)생성&quot; href=&quot;https://lovelettee01.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Proxmox VE 리눅스 컨테이너(LXC) 생성&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Docker 스크립트로 설치하기(ft.portainer)&quot; href=&quot;https://lovelettee01.tistory.com/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker 스크립트로 설치하기(ft.portainer)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Proxmox 모니터링&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 항목별 Summary Dashboard&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox Web UI에도 기본적으로 Summary 항목의 Dashboard 통해서 각각 서버의 기본정보 및 항목별로 모니터링할 수 있는 화면이 존재한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Proxmox Datacenter &amp;gt; Summary&lt;/li&gt;
&lt;li&gt;Datacenter &amp;gt; Cluster &amp;gt; Summary&lt;/li&gt;
&lt;li&gt;Cluster &amp;gt; VM or CT &amp;gt; Summary&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b&gt;Proxmox 로컬 서버&lt;/b&gt; 및 &lt;b&gt;클러스터&lt;/b&gt;, 클러스터 하위의 &lt;b&gt;VM, CT&lt;/b&gt; 등 각 항목별로 &lt;i&gt;Summary&lt;/i&gt;가 존재하며 해당 항목을 통해 기본적인 정보의 모니터링이 가능하며 이를 통해 서버의 정보 확인이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch1gve/dJMcahiqmUs/5KvLs6oGChyYDLOkoIKiC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch1gve/dJMcahiqmUs/5KvLs6oGChyYDLOkoIKiC0/img.png&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;1025&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch1gve/dJMcahiqmUs/5KvLs6oGChyYDLOkoIKiC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch1gve%2FdJMcahiqmUs%2F5KvLs6oGChyYDLOkoIKiC0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTFRT/dJMcac2uqJP/KMA7oC6m9jfvolzpo3AQl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTFRT/dJMcac2uqJP/KMA7oC6m9jfvolzpo3AQl0/img.png&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;1025&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTFRT/dJMcac2uqJP/KMA7oC6m9jfvolzpo3AQl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTFRT%2FdJMcac2uqJP%2FKMA7oC6m9jfvolzpo3AQl0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c36emJ/dJMcabJhnNI/wh8Z5meoSCXi54V2y3pF11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c36emJ/dJMcabJhnNI/wh8Z5meoSCXi54V2y3pF11/img.png&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;1025&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c36emJ/dJMcabJhnNI/wh8Z5meoSCXi54V2y3pF11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc36emJ%2FdJMcabJhnNI%2Fwh8Z5meoSCXi54V2y3pF11%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Promox 항목별 Dashboard Summary&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 정보로도 파악은 가능하지만 좀 더 직관적이고 시각적으로 한눈에 파악하기 좋도록 모니터링 툴을 적용해 보도록 할 텐데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox에서는 서버의 정보를 파악하여 확인할 수 있도록 &lt;i&gt;Metric Server&lt;/i&gt;를 제공하고 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 Metric Server&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2.1 Metric Server란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Metric Server란 &lt;/b&gt;간단하게 서버의 CPU 및 메모리 사용량 같은 리소스 메트릭정보를 수집하여 제공하는 서비스를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 쿠버네티스(Kubernetes) 시스템에서 각 클러스트의 메트릭정보를 수집하여 제공하는 모니터링 오픈소스 서비스로서 많이 사용되며, 추가적으로 Prometheus, Elastic Stack, DataDog 등과 같은 애플리케이션도 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 이게 주제가 아니니 필요한 경우 별도로 확인해 보도록 하자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2.2 Metric Server 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 해당 Metric Server 설정은 InfuxDB설치 이후 가능함으로 미리 확인만 하고 넘어가자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Dtacenter &amp;gt; Metric Server &amp;gt; Add &amp;gt; InfluxDB&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/roN6d/dJMcaj8nP8J/Zx7EhVYV7MLKv4UtddIc4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/roN6d/dJMcaj8nP8J/Zx7EhVYV7MLKv4UtddIc4k/img.png&quot; data-alt=&quot;Proxmox Metric Server 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/roN6d/dJMcaj8nP8J/Zx7EhVYV7MLKv4UtddIc4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FroN6d%2FdJMcaj8nP8J%2FZx7EhVYV7MLKv4UtddIc4k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1335&quot; height=&quot;680&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox Metric Server 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox에서 제공하는 &lt;b&gt;Metric Server&lt;/b&gt;는 &lt;i&gt;Graphite&lt;/i&gt;, &lt;i&gt;InfluxDB&lt;/i&gt; 두 가지 선택지가 존재하는데 이 두 가지 모두 Metric Server로부터 정보를 전달받아 저장할 시계열 DB를 세팅하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보편적으로 많이 사용되는 InfluxDB를 설치하여 적용해 보도록 하자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. InfluxDB&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 시계열 데이터베이스(TSDB)로서 간단하게 설명하자면, 시계열 데이터(Time series data - 시간의 흐름에 따라 발생하는 데이터)를 저장하도록 고안된 데이터베이스이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;&lt;b&gt;InfluxDB 버전&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;참고로 여기서는 &lt;span style=&quot;color: #ef5369;&quot;&gt;InfluxDB OSS v2&lt;/span&gt; 버전을 사용하였다. &lt;br /&gt;굳이 해당내용을 설명한 이유는 두 가지 버전의 핵심 개념 및 용어가 크게 변경되어 다르기 때문이다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;InfluxDB v1, v2버전 차이&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 208px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;InfluxDB 1.x [&lt;a title=&quot;InfluxDB v1 Documentation&quot; href=&quot;https://docs.influxdata.com/influxdb/v1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;InfluxDB 2.x [&lt;a title=&quot;InfluxDB v2 Documentation&quot; href=&quot;https://docs.influxdata.com/influxdb/v2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;아키텍처&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;단일 컴포넌트 아키텍처&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;마이크로서비스 아키텍처&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 52px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 52px;&quot;&gt;핵심 개념/용어&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 52px;&quot;&gt;Database, Retention Policy (DB/RP), User, Continuous Query&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 52px;&quot;&gt;Organization, Bucket, Token, Task (DB/RP 조합이 Bucket으로 변경됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;인증 및 보안&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;사용자 이름/비밀번호 기반 인증&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;토큰(Token) 기반의 인증 및 권한 부여 시스템 도입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;쿼리 언어&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;InfluxQL (SQL과 유사함)&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;Flux(기본), InfluxQL 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;데이터 모델&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;데이터 베이스, 태그(Tag)와 필드(Field)로 구분&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;태그와 필드 개념은 유지, 버킷(Bucket)에 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 26px;&quot;&gt;
&lt;td style=&quot;width: 19.2245%; height: 26px;&quot;&gt;사용 편의성&lt;/td&gt;
&lt;td style=&quot;width: 38.6549%; height: 26px;&quot;&gt;CLI를 사용하여 관리&lt;/td&gt;
&lt;td style=&quot;width: 42.1205%; height: 26px;&quot;&gt;통합된 웹 UI 제공 (데이터 탐색, 시각화, 대시보드, 설정 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 InfluxDB설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치는 Docker Compose를 통해서 간단하게 설치가 가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;(선택사항) influxdb 폴더 생성&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768807392084&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /services/influxdb &amp;amp;&amp;amp; cd /services&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;&lt;u&gt;&lt;b&gt;compose.yaml 파일 생성&lt;/b&gt;&lt;/u&gt; (Influx OSS v2 Docker-compose &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Install&lt;/span&gt;Guide [&lt;a title=&quot;Influx OSS v2 Docker-compose 설치 Guide&quot; href=&quot;https://docs.influxdata.com/influxdb/v2/install/use-docker-compose/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;])&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 사이트에서는 설치 편의나 보안 이유로 secrets를 사용하는 방법으로 설정되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 이후 해당 정보는 설정 가능하니 필요에 따라 설치하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 간단하게 최소 설정만으로 설치를 진행해 보도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1768807054051&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# compose.yaml
services:
  influxdb2:
    image: influxdb:2
    ports:
      - 8086:8086
    volumes:
      - influxdb2-data:/var/lib/influxdb2
      - influxdb2-config:/etc/influxdb2
volumes:
  influxdb2-data:
  influxdb2-config:&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;&lt;u&gt;&lt;b&gt;Docker Compose를 통한 설치&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768809046965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddQYMv/dJMcabQuGMg/TLhaVpnyVTfXI0ihXieGp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddQYMv/dJMcabQuGMg/TLhaVpnyVTfXI0ihXieGp1/img.png&quot; data-alt=&quot;Influxdb docker compose실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddQYMv/dJMcabQuGMg/TLhaVpnyVTfXI0ihXieGp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddQYMv%2FdJMcabQuGMg%2FTLhaVpnyVTfXI0ihXieGp1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1232&quot; height=&quot;281&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Influxdb docker compose실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 InfluxDB 설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2.1 Web UI접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Influxdb를 설치하였으면 이제 Web관리 페이지에 접속해 보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;http://&amp;lt;본인의 서버 IP&amp;gt;:8086&lt;/u&gt; 정보로 접속하여 확인가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;911&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KPKiK/dJMcaiWmuL3/PCLF7munCoGIFB1qkPAAS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KPKiK/dJMcaiWmuL3/PCLF7munCoGIFB1qkPAAS0/img.png&quot; data-alt=&quot;Influxdb Web 관리 콘솔 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KPKiK/dJMcaiWmuL3/PCLF7munCoGIFB1qkPAAS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKPKiK%2FdJMcaiWmuL3%2FPCLF7munCoGIFB1qkPAAS0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1058&quot; height=&quot;911&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;911&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Influxdb Web 관리 콘솔 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2.1 Influxdb 관리계정 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 접속 시 아래처럼 초기 관리자 정보를 세팅하는 화면이 나오게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 생성한 compose.yaml 작성 시 environment 부분을 미리 입력한 경우 해당 화면은 스킵되게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고만 하고 넘어가도록 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1768889976077&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#compose.yaml 작성시 초기설정값 지정
....
environment:
      DOCKER_INFLUXDB_INIT_MODE: setup
      DOCKER_INFLUXDB_INIT_USERNAME_FILE: /run/secrets/influxdb2-admin-username
      DOCKER_INFLUXDB_INIT_PASSWORD_FILE: /run/secrets/influxdb2-admin-password
      DOCKER_INFLUXDB_INIT_ADMIN_TOKEN_FILE: /run/secrets/influxdb2-admin-token
      DOCKER_INFLUXDB_INIT_ORG: &amp;lt;Initial Organization 항목&amp;gt; 
      DOCKER_INFLUXDB_INIT_BUCKET: &amp;lt;Initial Bucket 항목&amp;gt; 
....&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계정생성 시 본인의 admin 계정에 대한 Token 정보를 확인할 수 있다. 해당 Token은 별도로 저장해 놓고 사용하도록 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하단에 버튼 3개 중 필요에 따라 누르면 계정생성은 마무리된다. 참고로 3가지는 메뉴이동이니 크게 신경 쓰지 않아도 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4HTHE/dJMcafyBl6J/sJzGaTjA5CzsA5Pb1IhhEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4HTHE/dJMcafyBl6J/sJzGaTjA5CzsA5Pb1IhhEk/img.png&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4HTHE/dJMcafyBl6J/sJzGaTjA5CzsA5Pb1IhhEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4HTHE%2FdJMcafyBl6J%2FsJzGaTjA5CzsA5Pb1IhhEk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1170&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t5EVA/dJMcabJKWKa/2bykKdrloeTdIwvBApN191/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t5EVA/dJMcabJKWKa/2bykKdrloeTdIwvBApN191/img.png&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t5EVA/dJMcabJKWKa/2bykKdrloeTdIwvBApN191/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft5EVA%2FdJMcabJKWKa%2F2bykKdrloeTdIwvBApN191%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1170&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/epllCU/dJMcafSU7QA/VMALa6OVvc15I0X3Cp8Qb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/epllCU/dJMcafSU7QA/VMALa6OVvc15I0X3Cp8Qb1/img.png&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/epllCU/dJMcafSU7QA/VMALa6OVvc15I0X3Cp8Qb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FepllCU%2FdJMcafSU7QA%2FVMALa6OVvc15I0X3Cp8Qb1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1170&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Influxdb 관리계정 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;&lt;b&gt;API Token 정보 확인방법&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;가끔 생성한 Token정보를 기록해&amp;nbsp; 놓지 않고 잊어버리는 경우기 존재하기에 influx cli를 통해 확인하는 방법을 알아보도록 한다.&lt;br /&gt;&lt;b&gt;1. 서버접속 후 docker로 실행 중인 influxdb container에 접속&lt;/b&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1768890830420&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it influxdb /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 서버접속 후 influx 명령어를 통해 config 정보 생성&lt;/b&gt; &lt;br /&gt;- config는 Influxdb 인증정보를 세팅하기 위하여 실행 (해당과정을 하지 않을 경우 403 에러 발생)&lt;/p&gt;
&lt;pre id=&quot;code_1768891052631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Default CLI Guide
influx config create \
  -n CONFIG_NAME \
  -u http://localhost:8086 \
  -p USERNAME:PASSWORD \
  -o ORG&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래처럼 본인의 ID/PW정보를 세팅하여 config를 생성해 주면 해당 계정으로 활성화된다.&lt;br /&gt;참고로 &lt;b&gt;-a&lt;/b&gt; 옵션은 해당 Config를 생성하면서 활성화해 주는 항목이며 패스워드에 특수문자 가존재하는 경우 '' 로 감싸주도록 하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1768891136357&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;influx config create -a -n confName -u http://localhost:8086 -p admin:'12345678'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. influx auth list 명령어를 통한 Token 정보 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1768891352468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;influx auth list&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1543&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tP6ar/dJMcafSU7Zo/h7bhQhsYIwOyZKAQB9UoY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tP6ar/dJMcafSU7Zo/h7bhQhsYIwOyZKAQB9UoY0/img.png&quot; data-alt=&quot;Infulx CLI Token 정보확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tP6ar/dJMcafSU7Zo/h7bhQhsYIwOyZKAQB9UoY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtP6ar%2FdJMcafSU7Zo%2Fh7bhQhsYIwOyZKAQB9UoY0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1543&quot; height=&quot;188&quot; data-origin-width=&quot;1543&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Infulx CLI Token 정보확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Proxmox와 Influxdb 연동&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Influxdb Bucket 생성 및 API Token 발급&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 계정생성 시 만들었던 Bucket 및 API Token정보가 존재하긴 하지만 권한설정이나 모니터링만을 위한 별도의 Bucket 및 API Token을 생성해 보도록 하자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1.1 Bucket생성&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Influx WEB &amp;gt; Load Data &amp;gt; Buckets &amp;gt; CREATE BUCKET&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c14CxW/dJMcacPqxBT/fuEicFD6dInfhTdPamY5u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c14CxW/dJMcacPqxBT/fuEicFD6dInfhTdPamY5u1/img.png&quot; data-alt=&quot;Influxdb Bucket 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c14CxW/dJMcacPqxBT/fuEicFD6dInfhTdPamY5u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc14CxW%2FdJMcacPqxBT%2FfuEicFD6dInfhTdPamY5u1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1158&quot; height=&quot;685&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Influxdb Bucket 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1.2 API Token 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Custom API Token생성을 클릭하여 위에서 생성한 Bucket에 Read/Write 권한을 부여한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 API를 통해서 생성된 Bucket에 Proxmox 정보를 저장하도록 하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API를 생성하면 별도의 API Token이 생성되는데 해당 Token정보를 저장해 놓도록 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Influx WEB &amp;gt; Load Data &amp;gt; API Tokens &amp;gt; GENERATE API TOKEN&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oEXXC/dJMcabpreY6/RXZFjdtDehPTBXoNM38gUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oEXXC/dJMcabpreY6/RXZFjdtDehPTBXoNM38gUK/img.png&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;868&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.1136%; margin-right: 10px;&quot; data-widthpercent=&quot;43.62&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oEXXC/dJMcabpreY6/RXZFjdtDehPTBXoNM38gUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoEXXC%2FdJMcabpreY6%2FRXZFjdtDehPTBXoNM38gUK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1414&quot; height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ApfzN/dJMcachzjgy/1y1WPbknx9gUivbahGSvUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ApfzN/dJMcachzjgy/1y1WPbknx9gUivbahGSvUk/img.png&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;673&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.7236%;&quot; data-widthpercent=&quot;56.38&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ApfzN/dJMcachzjgy/1y1WPbknx9gUivbahGSvUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FApfzN%2FdJMcachzjgy%2F1y1WPbknx9gUivbahGSvUk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1417&quot; height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Custom API Token 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 Proxmox Metric Server 설정 및 데이터 확인&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2.1 Proxmox Metric Server 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 InfluxDB에 새로 생성한 Bucket을 Proxmox의 Metric Server로 연결해 보도록 하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Server&lt;/b&gt; : 본인 Influxdb 서버 IP&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Port&lt;/b&gt; : 8086 (변경한 경우 본인 포트 입력)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Protocol&lt;/b&gt; : HTTP&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Organization&lt;/b&gt; : Influxdb Organization 명&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bucket&lt;/b&gt; : 생성한 Bucket명&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Token&lt;/b&gt; : 생성한 API Token정보 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Dtacenter &amp;gt; Metric Server &amp;gt; Add &amp;gt; InfluxDB&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P59IG/dJMcaaYmJgw/T8xVeOUWKocQUvjgo7mpFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P59IG/dJMcaaYmJgw/T8xVeOUWKocQUvjgo7mpFk/img.png&quot; data-alt=&quot;Proxmox Metric Server 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P59IG/dJMcaaYmJgw/T8xVeOUWKocQUvjgo7mpFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP59IG%2FdJMcaaYmJgw%2FT8xVeOUWKocQUvjgo7mpFk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1419&quot; height=&quot;735&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;735&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox Metric Server 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결이 정상적으로 완료되면 아래와 같이 등록된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;725&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPbjnw/dJMcajnpUl2/hjlwWbs3ivboUG8VCCmPwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPbjnw/dJMcajnpUl2/hjlwWbs3ivboUG8VCCmPwK/img.png&quot; data-alt=&quot;Metric Server InfluxDB 등록 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPbjnw/dJMcajnpUl2/hjlwWbs3ivboUG8VCCmPwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPbjnw%2FdJMcajnpUl2%2FhjlwWbs3ivboUG8VCCmPwK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1419&quot; height=&quot;725&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;725&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Metric Server InfluxDB 등록 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2.2 InfluxDB 데이터 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 연동이 되었다면 일정주기로 InfluxDB Bucket에 자동 저 정 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;InfluxDB의 Data Explorer항목을 통해 Bucket에 저장되는 정보를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1825&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NRtxE/dJMcagK3GzM/IBitwcVNErMVht6V5SStg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NRtxE/dJMcagK3GzM/IBitwcVNErMVht6V5SStg1/img.png&quot; data-alt=&quot;proxmox-monitor에 저장된 데이터 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NRtxE/dJMcagK3GzM/IBitwcVNErMVht6V5SStg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNRtxE%2FdJMcagK3GzM%2FIBitwcVNErMVht6V5SStg1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1825&quot; height=&quot;822&quot; data-origin-width=&quot;1825&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;proxmox-monitor에 저장된 데이터 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Grafana&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시계열 데이터 베이스와 연동하여 데이터를 시각화하여 보여주기 위한 애플리케이션으로 데이터를 통합하여 시스템 상태를 실시간 모니터링 할 수 있게 도와주며&amp;nbsp;  다양한 대시보드를 제공하여 사용자가 원하는 유연한 형태의 화면 구성이 가능하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1 Grafana 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grafana 역시 Docker를 통해 간단하게 설치해 보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Compose.yaml 수정&lt;/b&gt; &lt;/u&gt;- 기존 InfluxDB 파일에 추가해 보자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;compose.yaml에 grafana를 추가하고 기존 생성된 볼륨을 연결하여 사용할 수 있도록 external: true 옵션을 추가해 준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1769155203511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Influxdb + grafana compose.yaml
services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: always
    ports:
      - 3000:3000
    volumes:
      - grafana-data:/var/lib/grafana
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    restart: always
    ports:
      - 8086:8086
    volumes:
      - influxdb2-data:/var/lib/influxdb2
      - influxdb2-config:/etc/influxdb2
volumes:
  grafana-data:
  	external : true
  influxdb2-data:
 	external : true	
  influxdb2-config:
  	external : true&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;&lt;u&gt;&lt;b&gt;Docker Compose를 통한 설치&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1769491800393&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1877&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp9F3f/dJMcacIHGjP/YdzP1P5ykCrEdZqnfZSchK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp9F3f/dJMcacIHGjP/YdzP1P5ykCrEdZqnfZSchK/img.png&quot; data-alt=&quot;Influx &amp;amp;amp; Grafana Compose 파일 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp9F3f/dJMcacIHGjP/YdzP1P5ykCrEdZqnfZSchK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp9F3f%2FdJMcacIHGjP%2FYdzP1P5ykCrEdZqnfZSchK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1877&quot; height=&quot;267&quot; data-origin-width=&quot;1877&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Influx &amp;amp; Grafana Compose 파일 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2 Grafana 설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2.1 Grafana Web UI 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grafana 역시 Web UI에 접속해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;http://&amp;lt;본인의 서버 IP&amp;gt;:3000&lt;/u&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;정보로 접속하여 확인가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;b&gt;초기 아이디 / 패스워드&lt;/b&gt; : &lt;span style=&quot;color: #ee2323;&quot;&gt;admin / admin&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5CseH/dJMcaf6txqk/6hMOvNFoGeWEGAv1rpCkDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5CseH/dJMcaf6txqk/6hMOvNFoGeWEGAv1rpCkDk/img.png&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5CseH/dJMcaf6txqk/6hMOvNFoGeWEGAv1rpCkDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5CseH%2FdJMcaf6txqk%2F6hMOvNFoGeWEGAv1rpCkDk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1099&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boSpvt/dJMcaaREB1h/cAvJZKpPkc006U7ru5WqOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boSpvt/dJMcaaREB1h/cAvJZKpPkc006U7ru5WqOk/img.png&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boSpvt/dJMcaaREB1h/cAvJZKpPkc006U7ru5WqOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboSpvt%2FdJMcaaREB1h%2FcAvJZKpPkc006U7ru5WqOk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1099&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Grafana WEB UI 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2.2 InfluxDB Data 연동&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 InfluxDB에 적재된 데이터를 가져와 Grafana와 연동해 보도록 하자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Grafana Home &amp;gt; Connections &amp;gt; Data Sources &amp;gt; InfluxDB&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Query language&lt;/b&gt;&lt;/u&gt; : Flux 선택 (Influxdb 2.x 버전 SQL)&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;HTTP &amp;gt; URL&lt;/b&gt;&lt;/u&gt; : 본인의 influxDB Web 접속 URL (ex. http://192.168.0.119:8086)&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;InfluxDB Details&lt;/b&gt;&lt;/u&gt; : InfluxDB정보 입력
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Organization : 본인의 Organization 정보 입력&lt;/li&gt;
&lt;li&gt;Token : 생성한 Bucket API Token정보 입력&lt;/li&gt;
&lt;li&gt;Default Bucket : 생성한 Bucket정보 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X3N4i/dJMcaaRECqj/kaxJa70HJGboHN4Dcqqn7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X3N4i/dJMcaaRECqj/kaxJa70HJGboHN4Dcqqn7K/img.png&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X3N4i/dJMcaaRECqj/kaxJa70HJGboHN4Dcqqn7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX3N4i%2FdJMcaaRECqj%2FkaxJa70HJGboHN4Dcqqn7K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLj8pY/dJMcaivkFdH/u6nvVeLbuxQ5tswkov1QlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLj8pY/dJMcaivkFdH/u6nvVeLbuxQ5tswkov1QlK/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLj8pY/dJMcaivkFdH/u6nvVeLbuxQ5tswkov1QlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLj8pY%2FdJMcaivkFdH%2Fu6nvVeLbuxQ5tswkov1QlK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bhyj5/dJMcaaqzyeR/JN3BP668AekDfdoDGrnmP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bhyj5/dJMcaaqzyeR/JN3BP668AekDfdoDGrnmP1/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bhyj5/dJMcaaqzyeR/JN3BP668AekDfdoDGrnmP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBhyj5%2FdJMcaaqzyeR%2FJN3BP668AekDfdoDGrnmP1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Grafana + InfluxDB Data 연동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 입력이 된 경우 &lt;b&gt;Save &amp;amp; test&lt;/b&gt; 버튼 클릭 시 다음과 같이 정상적으로 연동된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXYNuF/dJMcaaKSl3X/HOKm2XKCZ9p2Kq2IQNgIwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXYNuF/dJMcaaKSl3X/HOKm2XKCZ9p2Kq2IQNgIwK/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXYNuF/dJMcaaKSl3X/HOKm2XKCZ9p2Kq2IQNgIwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXYNuF%2FdJMcaaKSl3X%2FHOKm2XKCZ9p2Kq2IQNgIwK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nzspm/dJMcafyExbw/C9hJyRJxX9fOAVQEyi9fDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nzspm/dJMcafyExbw/C9hJyRJxX9fOAVQEyi9fDk/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;806&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nzspm/dJMcafyExbw/C9hJyRJxX9fOAVQEyi9fDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNzspm%2FdJMcafyExbw%2FC9hJyRJxX9fOAVQEyi9fDk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;InfluxDB 연동 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 influxdb Data Source에서 대시보드생성(Build a dashboard) 및 데이터확인(explorer)이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌측메뉴에 대한 링크정보이니 참고만 하고 이제 그럼 데이터를 시각적으로 보여줄 대시보드를 생성하러 가보자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2.2 Grafana Dashboard 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 생성에 가면 한 땀 한 땀 생성을 해야 하지만 이미 다른 유능하신 분들이 만들어 놓은 대시보드들이 존재함으로 이미 만들어진 대시보드를 가져와 보도록 하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Grafana Dashboards : &lt;a href=&quot;https://grafana.com/grafana/dashboards/?search=Proxmox&amp;amp;dataSource=influxdb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://grafana.com/grafana/dashboards/?search=Proxmox&amp;amp;dataSource=influxdb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox에서 Influxdb를 사용하는 대시보드들을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대시보드에 들어가면 우측에 &lt;b&gt;Copy ID to clipboard&lt;/b&gt; 버튼을 클릭하여 해당 대시보드 ID를 복사한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 Grfana 회원가입은 따로 하지 않아도 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;b&gt;주의사항 - 대시보드 Influx2.x 버전 지원여부 확인&lt;br /&gt;&lt;/b&gt;각 대시보드는 결국 Influxdb에 조회를 해서 데이터를 보여줘야 하는데 버전별로 문법이 차이가 있기 때문에 Influxdb 2.x버전 문법인 Flux 지원여부를 확인해야 함.&lt;br /&gt;따로 확인방법이 있는 건 아니지만 제목에서 &lt;b&gt;[Flux]라고&lt;/b&gt; 정의된 대시보드들은 대부분 Influxdb 2.x버전의 문법을 사용하는 것이기 때문에 해당 대시보드는 지원된다고 보면 된다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UJD3n/dJMcac9H2kh/qQWkkwRtZMfbaqOOxc0vtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UJD3n/dJMcac9H2kh/qQWkkwRtZMfbaqOOxc0vtk/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UJD3n/dJMcac9H2kh/qQWkkwRtZMfbaqOOxc0vtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUJD3n%2FdJMcac9H2kh%2FqQWkkwRtZMfbaqOOxc0vtk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ubcNP/dJMb99LW3nd/ntneUkjMjahpEOgNFLfw5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ubcNP/dJMb99LW3nd/ntneUkjMjahpEOgNFLfw5K/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ubcNP/dJMb99LW3nd/ntneUkjMjahpEOgNFLfw5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FubcNP%2FdJMb99LW3nd%2FntneUkjMjahpEOgNFLfw5K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Grafana Dashboards 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다시 Grafana 사이트로 돌아와서 선택한 대시보드를 적용해 보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Home &amp;gt; Dashboards &amp;gt; Create dashboard&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;대시 보드를 가져올 것이기 때문에 &lt;u&gt;Import a dashboard&lt;/u&gt;를 선택한다.&lt;/li&gt;
&lt;li&gt;복사한 대시보드 ID를 입력 후 &lt;u&gt;Load&lt;/u&gt; 버튼을 클릭한다.&lt;/li&gt;
&lt;li&gt;정상적으로 로드된 경우 자신의 &lt;u&gt;Influxdb&lt;/u&gt;를 선택하고 &lt;u&gt;Import&lt;/u&gt;를 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BWe6Y/dJMb996g0KW/yK1F5ZMUvLiajjmyBpnIEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BWe6Y/dJMb996g0KW/yK1F5ZMUvLiajjmyBpnIEK/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BWe6Y/dJMb996g0KW/yK1F5ZMUvLiajjmyBpnIEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBWe6Y%2FdJMb996g0KW%2FyK1F5ZMUvLiajjmyBpnIEK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w1Z7x/dJMb99LW3Bm/jt6KGC3gg5ajS1DDtlsPs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w1Z7x/dJMb99LW3Bm/jt6KGC3gg5ajS1DDtlsPs1/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w1Z7x/dJMb99LW3Bm/jt6KGC3gg5ajS1DDtlsPs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw1Z7x%2FdJMb99LW3Bm%2Fjt6KGC3gg5ajS1DDtlsPs1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/COBcD/dJMcagYBieb/03qD5kfF5pGjLuAzKieyMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/COBcD/dJMcagYBieb/03qD5kfF5pGjLuAzKieyMK/img.png&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/COBcD/dJMcagYBieb/03qD5kfF5pGjLuAzKieyMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCOBcD%2FdJMcagYBieb%2F03qD5kfF5pGjLuAzKieyMK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Grafana Dashboard 적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2.3 Grafana Dashboard 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대시보드가 정상적으로 연동되었다면 다음과 같이 대시보드가 표시되는 것을 확인할 수 있다. &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zu9yd/dJMcaiWpqlT/JY5aRDN0jYu8B8YOxhamJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zu9yd/dJMcaiWpqlT/JY5aRDN0jYu8B8YOxhamJ0/img.png&quot; data-alt=&quot;Grafana 대시보드 연동 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zu9yd/dJMcaiWpqlT/JY5aRDN0jYu8B8YOxhamJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZu9yd%2FdJMcaiWpqlT%2FJY5aRDN0jYu8B8YOxhamJ0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1337&quot; height=&quot;1032&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Grafana 대시보드 연동 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로서 길고 길었던 InfluxDB + Grafana를 연동한 Proxmox 모니터링 페이지가 완성되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인이 필요한 정보가 있다면 Infulxdb에 데이터를 입력하고 Grafana에서는 해당 대시보드에 추가해서 보여줄 수도 있으며 Alerting을 이용하여 특정 Rule을 생성하여 해당 Rule에 해당하는 경우 Push 알람서비스까지 제공하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 그렇듯 이제 시작이다. 이제 한 발짝 내디딘 것일 뿐...ㅎ&lt;/p&gt;</description>
      <category>Proxmox/Monitoring</category>
      <category>dashboard</category>
      <category>grafana</category>
      <category>InfluxDB</category>
      <category>metric server</category>
      <category>monitoring</category>
      <category>Proxmox</category>
      <category>summary</category>
      <category>대시보드</category>
      <category>모니터링</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/66</guid>
      <comments>https://lovelettee01.tistory.com/66#entry66comment</comments>
      <pubDate>Tue, 4 Nov 2025 15:43:57 +0900</pubDate>
    </item>
    <item>
      <title>NPM Plus 수동 설치하기(feat. Proxmox)</title>
      <link>https://lovelettee01.tistory.com/65</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 &lt;b&gt;NPM Plus를 수동으로 설치&lt;/b&gt;하며 함께 사용가능한 &lt;b&gt;추가기능 설치&lt;/b&gt;도 진행해 보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 NPM Plus에 대한 설치 방법에 대해서만 작성예정임으로 기본적인 NPM Plus에 대한 정보 및 설치 시 필요한 항목에 대해서는 따로 정리해 놓은 글을 참조해 보도록 하자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 사전적으로 필요한 정보는 아래 링크를 통해 확인해 보자.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;NPM Plus 설치하기(ft.Proxmox VE Helper-Scripts)&quot; href=&quot;https://lovelettee01.tistory.com/62&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NPM Plus 설치하기(ft.Proxmox VE Helper-Scripts)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Proxmox VE 리눅스 컨테이너(LXC)생성&quot; href=&quot;https://lovelettee01.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Proxmox VE 리눅스 컨테이너(LXC) 생성&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Docker 스크립트로 설치하기(ft.portainer)&quot; href=&quot;https://lovelettee01.tistory.com/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker 스크립트로 설치하기(ft.portainer)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. NPM Plus 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 NPM Plus에 대한 설치는 Github를 통해 배포되는 compose.yaml 파일을 통해 간단하게 설치 가능하기에 수동 설치라고 할만한 요소가 없을 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Docker compose를 통해 설치를 진행할 때 필요에 따라 설정을 변경하여 기능을 추가할 수 있으니 한번 진행해 보도록 하자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; NPM Plus의 공식 사이트(Github) 정보는 아래에서 확인가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NPM Plus Github 링크 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a title=&quot;NPM plus Github Link&quot; href=&quot;https://github.com/ZoeyVid/NPMplus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ZoeyVid/NPMplus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NPM Plus Compose.yaml :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a title=&quot;NPM Plus Compose.yaml&quot; href=&quot;https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;compose.yaml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 NPM Plus Quick Setup [&lt;a title=&quot;NPM Plus Quick Setup&quot; href=&quot;https://github.com/ZoeyVid/NPMplus?tab=readme-ov-file#quick-setup&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;u&gt;&lt;b&gt;(선택사항)&amp;nbsp; Npmplus 폴더 생성&lt;/b&gt;&lt;/u&gt;&amp;nbsp;- 관리의 용의성을 위한 단계로 필요에 따라 진행하도록 하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1760945809336&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /services/npmplus &amp;amp;&amp;amp; cd /services/npmplus&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;&lt;u&gt;&lt;b&gt;comopose.yaml 파일 다운로드&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1760945936631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml -o docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rgmyv/dJMb9NhuXsq/ip7ZoAWC35DeDA7kAQi3Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rgmyv/dJMb9NhuXsq/ip7ZoAWC35DeDA7kAQi3Jk/img.png&quot; data-alt=&quot;NPM Plus Compose파일 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rgmyv/dJMb9NhuXsq/ip7ZoAWC35DeDA7kAQi3Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frgmyv%2FdJMb9NhuXsq%2Fip7ZoAWC35DeDA7kAQi3Jk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;129&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM Plus Compose파일 다운로드&lt;/figcaption&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;&lt;u&gt;&lt;b&gt;docker-compose.yaml 정보 수정&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드한 docker-compose.yaml에서 &lt;i&gt;volumes&lt;/i&gt;,&amp;nbsp;&lt;i&gt;TZ&lt;/i&gt;,&amp;nbsp;&lt;i&gt;ACME_EMAIL&lt;/i&gt; 정보를 자신의 정보에 맞게 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1761116994811&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clP0zE/dJMb9N2RW0o/lrF1bHja0dAJJmzofufPaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clP0zE/dJMb9N2RW0o/lrF1bHja0dAJJmzofufPaK/img.png&quot; data-alt=&quot;docker-compose.yaml 파일 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clP0zE/dJMb9N2RW0o/lrF1bHja0dAJJmzofufPaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclP0zE%2FdJMb9N2RW0o%2FlrF1bHja0dAJJmzofufPaK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1226&quot; height=&quot;387&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose.yaml 파일 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 16.124%; height: 21px;&quot;&gt;&lt;b&gt;입력항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7133%; height: 21px;&quot;&gt;&lt;b&gt;필수여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.5736%; height: 21px;&quot;&gt;&lt;b&gt;입력값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.5891%; height: 21px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 16.124%; height: 21px;&quot;&gt;volumes&lt;/td&gt;
&lt;td style=&quot;width: 12.7133%; height: 21px;&quot;&gt;필수&lt;/td&gt;
&lt;td style=&quot;width: 14.5736%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;./data:/data&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.5891%; height: 21px;&quot;&gt;Docker와 연결할 Volume 디렉토리 지정&lt;br /&gt;(각자의 설정에 맞도록 지정)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 16.124%; height: 21px;&quot;&gt;TZ&lt;/td&gt;
&lt;td style=&quot;width: 12.7133%; height: 21px;&quot;&gt;필수&lt;/td&gt;
&lt;td style=&quot;width: 14.5736%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;Asia/Seoul&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.5891%; height: 21px;&quot;&gt;시간대 설정 (필수): &quot;&lt;a title=&quot;Wikipedia Time Zone List&quot; href=&quot;https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TZ identifier&lt;/a&gt;&quot;에서 값 중 하나로 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 16.124%; height: 21px;&quot;&gt;ACME_EMAIL&lt;/td&gt;
&lt;td style=&quot;width: 12.7133%; height: 21px;&quot;&gt;선택사항&lt;/td&gt;
&lt;td style=&quot;width: 14.5736%; height: 21px;&quot;&gt;본인의 이메일&lt;/td&gt;
&lt;td style=&quot;width: 56.5891%; height: 21px;&quot;&gt;ACME(자동 인증서 관리 환경)에 사용될 이메일 주소: 현재 선택 사항이지만, 미래에 필요할 수 있으므로 입력 권장. Let's Encrypt에는 선택 사항이지만 ZeroSSL 및 Google Public CA에는 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Docker Compose를 통한 설치&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 통해 설치를 진행하면 NPM Plus를 손쉽게 설치할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 서비스도 정상적으로 실행되며 volumes에 연결한 data 폴더도 확인 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1760946146908&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt6vKS/dJMb9L43Hhh/3NOU4GnlX5PhKm8NxNqk3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt6vKS/dJMb9L43Hhh/3NOU4GnlX5PhKm8NxNqk3K/img.png&quot; data-alt=&quot;Docker compose 를 통한 npm plus 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt6vKS/dJMb9L43Hhh/3NOU4GnlX5PhKm8NxNqk3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt6vKS%2FdJMb9L43Hhh%2F3NOU4GnlX5PhKm8NxNqk3K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1187&quot; height=&quot;816&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker compose 를 통한 npm plus 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 NPM Plus 사이트 접속 및 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리자 사이트의 접속정보는 해당 Docker Container의 로그에 기록되어 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Docker Container 정보 확인&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761118514048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8fDsg/dJMb9NIzJC6/k9hFoTdnAq2uMkXMW24sk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8fDsg/dJMb9NIzJC6/k9hFoTdnAq2uMkXMW24sk0/img.png&quot; data-alt=&quot;Docker Container ID 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8fDsg/dJMb9NIzJC6/k9hFoTdnAq2uMkXMW24sk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8fDsg%2FdJMb9NIzJC6%2Fk9hFoTdnAq2uMkXMW24sk0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1186&quot; height=&quot;50&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker Container ID 확인&lt;/figcaption&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;&lt;u&gt;&lt;b&gt;컨테이너 로그를 통한 접속정보 확인&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761118590240&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker logs &amp;lt;컨테이너ID&amp;gt; | grep password&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/svL2r/dJMb9OtWVa9/KTsVQoJ9Qir4fe185oZmxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/svL2r/dJMb9OtWVa9/KTsVQoJ9Qir4fe185oZmxK/img.png&quot; data-alt=&quot;접속 정보 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/svL2r/dJMb9OtWVa9/KTsVQoJ9Qir4fe185oZmxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsvL2r%2FdJMb9OtWVa9%2FKTsVQoJ9Qir4fe185oZmxK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1183&quot; height=&quot;128&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접속 정보 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 확인 가능하듯 &lt;b&gt;admin@example.org&lt;/b&gt;와 &lt;b&gt;password&lt;/b&gt;를 통해 관리자 UI에 로그인 가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;관리자 사이트 접속&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;https://&amp;lt;본인서버 IP&amp;gt;:81&lt;/b&gt;으로 접속하여 위에서 확인한 접속정보를 통해 로그인 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHgUgE/dJMb85Jaf1W/UYlMat2DaPH5zI9LOh5wX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHgUgE/dJMb85Jaf1W/UYlMat2DaPH5zI9LOh5wX1/img.png&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;712&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3292%; margin-right: 10px;&quot; data-widthpercent=&quot;49.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHgUgE/dJMb85Jaf1W/UYlMat2DaPH5zI9LOh5wX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHgUgE%2FdJMb85Jaf1W%2FUYlMat2DaPH5zI9LOh5wX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8PrcS/dJMb9QFiv9R/c2kjxW4MGFRE1lpoVQM830/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8PrcS/dJMb9QFiv9R/c2kjxW4MGFRE1lpoVQM830/img.png&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;713&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.508%;&quot; data-widthpercent=&quot;50.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8PrcS/dJMb9QFiv9R/c2kjxW4MGFRE1lpoVQM830/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8PrcS%2FdJMb9QFiv9R%2Fc2kjxW4MGFRE1lpoVQM830%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;998&quot; height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM Plus 관리자 UI 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 기본적으로 설치가 완료된다면 Helper Script를 통한 NPM Plus설치와 동일하게 설치를 진행하게 된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 이야기하였듯 사실 NPM Plus 수동설치라고 하는 것은 Helper Script를 통해설치 하는 것에서 단지 Proxmox LXC컨테이너를 생성하고 Docker를 설치한 후 Compose.yaml파일을 수정/실행하는 작업을 수동으로 하고 있는 것뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 설치가 완료되었으니 이제 NPM Plus에 추가된 기능을 함께 적용해 보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 추가기능 설치 및 적용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가기능이라고 하여 별도로 설치가 되는 것은 아니고 다운로드한 docker-compose.yaml에 주석처리된 부분을 하나씩 풀어가며 적용이 가능함으로 이 부분을 기억하고 가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 각각의 모든 기능에 대해 논하진 않고 기본적으로 설치에 관하여만 작성하였으니 디테일한 설정 부분은 별도로 확인해서 적용하도록 하면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 추가기능 부분은 &lt;u&gt;Helper Script&lt;/u&gt;를 통해 NPM Plus를 설치한 경우에도 동일하게 적용가능하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Helper Script 설치 시 Compose File 위치 : &lt;b&gt;/opt/comopose.yaml&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Goaccess 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실시간 웹 로그 분석 프로그램으로 NPM Plus에 내장되어 있어 &lt;b&gt;환경 변수(environemnt)&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;u&gt;&lt;b&gt;docker-compose.yaml 환경변수 수정&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 docker-compose.yaml 파일에서 아래 3가지 항목만 주석을 풀어주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1761204151826&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- &quot;LOGROTATE=true&quot;
- &quot;LOGROTATIONS=7&quot;
- &quot;GOA=true&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 주석을 모두 제거하고 아래와 같이 반영하여도 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1761204049080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  npmplus:
    container_name: npmplus
    image: docker.io/zoeyvid/npmplus:latest
    restart: always
    network_mode: host
    volumes:
      - &quot;./data:/data&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;ACME_EMAIL=&amp;lt;본인의 이메일&amp;gt;&quot;
      - &quot;LOGROTATE=true&quot;
      - &quot;LOGROTATIONS=7&quot;
      - &quot;GOA=true&quot;&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;&lt;u&gt;&lt;b&gt;docker-compose.yaml 재적용&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761204418040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc2mHj/dJMb81UiRD1/jNOkMsougGDbgsVA3xYzCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc2mHj/dJMb81UiRD1/jNOkMsougGDbgsVA3xYzCk/img.png&quot; data-alt=&quot;docker-compose.yaml 재적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc2mHj/dJMb81UiRD1/jNOkMsougGDbgsVA3xYzCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc2mHj%2FdJMb81UiRD1%2FjNOkMsougGDbgsVA3xYzCk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;949&quot; height=&quot;98&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose.yaml 재적용&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;Goaccess 페이지 확인&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;https://&amp;lt;본인서버 IP&amp;gt;:91&lt;/b&gt;으로 접속하면 아래와 같이 오픈소스를 통한 실시간으로 정보 확인이&amp;nbsp;가능하다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM Plus에 기본적으로 적용이 되어있기 때문에 이렇게 환경변수 수정으로만 간단하게 확인이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세한 설명 및 환경변수를 통해 포트나 추가적인 설정이 가능하긴 하지만 여기서는 패스하도록 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;945&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWQoNN/dJMb9d8gTww/r2R9FVbqsOhf5u9TkyVsoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWQoNN/dJMb9d8gTww/r2R9FVbqsOhf5u9TkyVsoK/img.png&quot; data-alt=&quot;Goaccess 적용 및 관리 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWQoNN/dJMb9d8gTww/r2R9FVbqsOhf5u9TkyVsoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWQoNN%2FdJMb9d8gTww%2Fr2R9FVbqsOhf5u9TkyVsoK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1228&quot; height=&quot;945&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;945&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Goaccess 적용 및 관리 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 geoipupdate 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MaxMind의 GeoIP를 이용하여 접속 IP주소에 대한 정보파악용으로 Goaccess와 연동되어 GEO Location 페이지에서 접속정보를 파악할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2.1 MaxMind 회원가입&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  MaxMind는 별도로 회원가입을 진행해야 하며 Geolite2는 무료로 사용 가능하다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MaxMind 회원가입 : &lt;a title=&quot;MaxMind 회원가입&quot; href=&quot;https://www.maxmind.com/en/geolite2/signup&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.maxmind.com/en/geolite2/signup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원가입 후 &lt;b&gt;Generate new license key&lt;/b&gt;를 통해 NPM plus에서 사용할 license정보를 추가하여 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 License key정보는 발급당시 다운로드하여 놓거나 별도로 메모를 해두어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발급 후에는 확인이 어려우니 별도 저장해놓지 않은 경우 삭제 후 새로 생성해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjXfjs/dJMb9eF6Qdc/slSKkRnTOPItokd8LClOik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjXfjs/dJMb9eF6Qdc/slSKkRnTOPItokd8LClOik/img.png&quot; data-alt=&quot;Maxmind npmplus geoipupdate용 License 발급&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjXfjs/dJMb9eF6Qdc/slSKkRnTOPItokd8LClOik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjXfjs%2FdJMb9eF6Qdc%2FslSKkRnTOPItokd8LClOik%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1244&quot; height=&quot;627&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Maxmind npmplus geoipupdate용 License 발급&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2.2 geoipupdate 항목 적용&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발급완료 시 &lt;b&gt;geoipupdate&lt;/b&gt; 항목의 &lt;i&gt;ACCOUNT_ID&lt;/i&gt; 및 &lt;i&gt;LICENSE_KEY&lt;/i&gt; 항목에 본인 정보를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;volumes 항목은 npm plus의 volumes 항목의 data/goaccess/geoip 항목을 연결해 주면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;docker-compose.yaml 수정&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761290342981&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# This can be used with GOA=true, to keep the geopip database updated, you need to change the envs to make it work
  geoipupdate:
    container_name: npmplus-geoipupdate
    image: ghcr.io/maxmind/geoipupdate:latest
    restart: always
    network_mode: bridge
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;GEOIPUPDATE_EDITION_IDS=GeoLite2-Country GeoLite2-City GeoLite2-ASN&quot;
      - &quot;GEOIPUPDATE_ACCOUNT_ID=&amp;lt;your-account-id&amp;gt;&quot; # needs to be changed
      - &quot;GEOIPUPDATE_LICENSE_KEY=&amp;lt;your-license-key&amp;gt;&quot; # needs to be changed
      - &quot;GEOIPUPDATE_FREQUENCY=24&quot;
    volumes:
      - &quot;./data/goaccess/geoip:/usr/share/GeoIP&quot;&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;&lt;u&gt;&lt;b&gt;docker-compose.yaml 재적용&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761204418040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo4VAL/dJMb9LxeCqF/7HFhDFxYP8y903Ek0BOqWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo4VAL/dJMb9LxeCqF/7HFhDFxYP8y903Ek0BOqWK/img.png&quot; data-alt=&quot;npmplus geoipudate적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo4VAL/dJMb9LxeCqF/7HFhDFxYP8y903Ek0BOqWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo4VAL%2FdJMb9LxeCqF%2F7HFhDFxYP8y903Ek0BOqWK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;366&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;npmplus geoipudate적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 보듯이 npmplus-geoipupdate가 실행되고 geoip폴더에 GeoLite2 항목들도 정상적으로 다운되어 적용된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠시 후 웹페이지에 접속해 보면 아래와 같이 GEO Location항목이 추가되고 접속정보를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4WSJe/dJMcabJe1BH/NhOukW5eKClENvKmAZ9XT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4WSJe/dJMcabJe1BH/NhOukW5eKClENvKmAZ9XT1/img.png&quot; data-alt=&quot;Goaccess GEO Location 페이지 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4WSJe/dJMcabJe1BH/NhOukW5eKClENvKmAZ9XT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4WSJe%2FdJMcabJe1BH%2FNhOukW5eKClENvKmAZ9XT1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1377&quot; height=&quot;977&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;977&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Goaccess GEO Location 페이지 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 crowdsec 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오픈소스 및 커뮤니티 기반의 실시간 침입방지 시스템으로 해당 항목도 주석을 풀어 간단한 정보 입력을 통해 적용가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;volumes항목에 본인의 경로를 입력하도록 하며 마지막 openappsec부분은 openappsec설치 이후 진행하도록 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;docker-compose.yaml 수정&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761722200281&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# This can be used to enable crowdsec, see README for a guide
  crowdsec:
    container_name: crowdsec
    image: docker.io/crowdsecurity/crowdsec:latest
    restart: always
    network_mode: bridge
    ports:
      - &quot;127.0.0.1:7422:7422&quot;
      - &quot;127.0.0.1:8080:8080&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;COLLECTIONS=ZoeyVid/npmplus&quot;
    volumes:
      - &quot;./data/crowdsec/conf:/etc/crowdsec&quot;
      - &quot;./data/crowdsec/data:/var/lib/crowdsec/data&quot;
      - &quot;./data/nginx:/opt/npmplus/nginx:ro&quot;
#      - &quot;/opt/openappsec/logs:/opt/openappsec/logs:ro&quot; # only uncomment if you also use the openappsec-agent container&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;&lt;u&gt;&lt;b&gt;docker-compose.yaml 재적용&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761204418040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYyX7/dJMcaajgnzN/DP6TKJe03dy1Hy6ac5VYOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYyX7/dJMcaajgnzN/DP6TKJe03dy1Hy6ac5VYOK/img.png&quot; data-alt=&quot;NPM Plus crowdsec 적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYyX7/dJMcaajgnzN/DP6TKJe03dy1Hy6ac5VYOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYyX7%2FdJMcaajgnzN%2FDP6TKJe03dy1Hy6ac5VYOK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1391&quot; height=&quot;511&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM Plus crowdsec 적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 정상적으로 재적용되며 실행되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.1 Crowdsec 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정은 Github에서도 확인가능하다. : [&lt;a title=&quot;Crowdsec 설정&quot; href=&quot;https://github.com/ZoeyVid/NPMplus?tab=readme-ov-file#crowdsec&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&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;b&gt;&lt;u&gt;Crowdsec npmplus 설정파일 생성&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인의 경로를 확인하여 해당 파일을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1761204418040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ./data/crowdsec/conf/acquis.d/npmplus.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1761724779978&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;filenames:
  - ./data/npmplus/nginx/*.log
labels:
  type: npmplus
---
filenames:
  - ./data/npmplus/nginx/*.log
labels:
  type: modsecurity
---
listen_addr: 0.0.0.0:7422
appsec_config: crowdsecurity/appsec-default
name: appsec
source: appsec
labels:
  type: appsec
# if you use openappsec you can enable this
#---
#source: file
#filenames:
# - /opt/openappsec/logs/cp-nano-http-transaction-handler.log*
#labels:
#  type: openappsec&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;&lt;b&gt;&lt;u&gt;Crowdsec bouncer API key 생성&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761800717390&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it crowdsec cscli bouncers add nginx-bouncer&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGTkXT/dJMcabCtFaB/M2sTokZNtJZSj6ARlenGGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGTkXT/dJMcabCtFaB/M2sTokZNtJZSj6ARlenGGK/img.png&quot; data-alt=&quot;Crowdsec bouncer API key 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGTkXT/dJMcabCtFaB/M2sTokZNtJZSj6ARlenGGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGTkXT%2FdJMcabCtFaB%2FM2sTokZNtJZSj6ARlenGGK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;106&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Crowdsec bouncer API key 생성&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;Crowdsec Configuration 파일 수정&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일의 &lt;i&gt;ENABLED&lt;/i&gt; 값을 true로 &lt;i&gt;API_KEY&lt;/i&gt; 항목을 위에서 생성한 Key값으로 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1761800975601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ./data/crowdsec/crowdsec.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIpr0/dJMcagjt4tG/gnRUPXKjjJ2B6clWlRNKv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIpr0/dJMcagjt4tG/gnRUPXKjjJ2B6clWlRNKv1/img.png&quot; data-alt=&quot;crowdsec.conf 파일 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIpr0/dJMcagjt4tG/gnRUPXKjjJ2B6clWlRNKv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIpr0%2FdJMcagjt4tG%2FgnRUPXKjjJ2B6clWlRNKv1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1307&quot; height=&quot;576&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;crowdsec.conf 파일 수정&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;Docker Compose 재시작 및 확인&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재시작 후 로그에 crowdsec 정보가 정상적으로 출력된다면 적용이 완료된 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1761803095162&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose restart&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1761803120111&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose logs --tail 10 -f crowdsec&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FuGww/dJMcabWMs0X/rxQ6FKRss6oZpTgddT3iAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FuGww/dJMcabWMs0X/rxQ6FKRss6oZpTgddT3iAk/img.png&quot; data-alt=&quot;Crowdsec 실행 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FuGww/dJMcabWMs0X/rxQ6FKRss6oZpTgddT3iAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFuGww%2FdJMcabWMs0X%2FrxQ6FKRss6oZpTgddT3iAk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1678&quot; height=&quot;265&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Crowdsec 실행 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 통해 바운서 호출여부도 확인 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1761806698726&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it crowdsec cscli metrics show bouncers&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SSp58/dJMcafdObQC/IElLFLVghnqnXxIlYtUppk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SSp58/dJMcafdObQC/IElLFLVghnqnXxIlYtUppk/img.png&quot; data-alt=&quot;Crowdsec bouncers 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SSp58/dJMcafdObQC/IElLFLVghnqnXxIlYtUppk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSSp58%2FdJMcafdObQC%2FIElLFLVghnqnXxIlYtUppk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;180&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Crowdsec bouncers 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.2 Crowdsec 차단 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 동작하는지 확인을 위해 간단하게 본인 컴퓨터 IP를 차단하여 테스트해 보도록 하자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coZQnG/dJMcaesq2UK/uX7KdKDLTlhvm37ISwYMd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coZQnG/dJMcaesq2UK/uX7KdKDLTlhvm37ISwYMd1/img.png&quot; data-alt=&quot;Crowdsec에서 호출되는 본인 아이피확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coZQnG/dJMcaesq2UK/uX7KdKDLTlhvm37ISwYMd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoZQnG%2FdJMcaesq2UK%2FuX7KdKDLTlhvm37ISwYMd1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1334&quot; height=&quot;53&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Crowdsec에서 호출되는 본인 아이피확인&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;접속 IP 차단&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761807846629&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it crowdsec cscli decisions add -i 192.168.0.40&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfu4yT/dJMcaap2fg6/ifmGsqUVkct8RFDf2ggmX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfu4yT/dJMcaap2fg6/ifmGsqUVkct8RFDf2ggmX1/img.png&quot; data-alt=&quot;본인 PC IP 차단&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfu4yT/dJMcaap2fg6/ifmGsqUVkct8RFDf2ggmX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfu4yT%2FdJMcaap2fg6%2FifmGsqUVkct8RFDf2ggmX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;149&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본인 PC IP 차단&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6suG9/dJMcai9rrlg/Z2dkD3krbizsRzTnBjbR4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6suG9/dJMcai9rrlg/Z2dkD3krbizsRzTnBjbR4k/img.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;797&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6suG9/dJMcai9rrlg/Z2dkD3krbizsRzTnBjbR4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6suG9%2FdJMcai9rrlg%2FZ2dkD3krbizsRzTnBjbR4k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6e3Ni/dJMb99Sciiu/eqE5oVWkqknVA0mTambjLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6e3Ni/dJMb99Sciiu/eqE5oVWkqknVA0mTambjLk/img.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;797&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6e3Ni/dJMb99Sciiu/eqE5oVWkqknVA0mTambjLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6e3Ni%2FdJMb99Sciiu%2FeqE5oVWkqknVA0mTambjLk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Crowdsec IP차단 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 간단하게 차단 확인이 가능하다. 나머지는 개별적으로 확인해 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crowdsec cscli 명령어 확인 : &lt;a href=&quot;https://docs.crowdsec.net/docs/next/cscli/cscli_decisions&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.crowdsec.net/docs/next/cscli&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4 openappsec-agent 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 머신러닝 기반의 웹 애플리케이션 API 위협 보호 솔루션인 Openappsec도 설치해 보도록 하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Open-appsec NPM Plus 설치 가이드 : &lt;a title=&quot;Open-appsec NPM Plus 설치 가이드&quot; href=&quot;https://docs.openappsec.io/integrations/npmplus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.openappsec.io/integrations/npmplus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.4.1 openappsec 회원가입 및 프로파일 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;u&gt;&lt;b&gt;Open-appsec 회원가입&lt;/b&gt;&lt;/u&gt; : &lt;a title=&quot;Open-appsec 사이트 회원가입&quot; href=&quot;https://my.openappsec.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://my.openappsec.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;머신러닝 모델 다운로드&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원가입 후 오른쪽 상단의 본인 프로필 이미지를 클릭하여 &lt;b&gt;Download advanced ML Model&lt;/b&gt;을 선택하여 다운로드한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1rip8/dJMcaho9ZbD/fgblLCRxW0c9H4FDkO5KEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1rip8/dJMcaho9ZbD/fgblLCRxW0c9H4FDkO5KEk/img.png&quot; data-origin-width=&quot;1319&quot; data-origin-height=&quot;843&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.9&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.3225%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1rip8/dJMcaho9ZbD/fgblLCRxW0c9H4FDkO5KEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1rip8%2FdJMcaho9ZbD%2FfgblLCRxW0c9H4FDkO5KEk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1319&quot; height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSXeyG/dJMcacVGNAy/Yk6f3i2bqIBZvMkYz7JFV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSXeyG/dJMcacVGNAy/Yk6f3i2bqIBZvMkYz7JFV1/img.png&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;841&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.1&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.5147%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSXeyG/dJMcacVGNAy/Yk6f3i2bqIBZvMkYz7JFV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSXeyG%2FdJMcacVGNAy%2FYk6f3i2bqIBZvMkYz7JFV1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1321&quot; height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Open-appsec 머신러닝 ML 모델 다운로드&lt;/figcaption&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;&lt;u&gt;&lt;b&gt;Docker Profile&lt;/b&gt;&lt;/u&gt;&lt;u&gt;&lt;b&gt;생성&lt;/b&gt;&lt;/u&gt; [&lt;a title=&quot;Open-appsec Create Profile&quot; href=&quot;https://docs.openappsec.io/getting-started/using-the-web-ui-saas/create-a-profile&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상단 Enforce항목을 선택하여 Profile생성 메뉴로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 새로운 Docker Profile을 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Profile 설정 (순서는 상관없지만 편의상 화살표 방향으로 표시함)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Name : 본인이 구분하기 편한 이름입력&lt;/li&gt;
&lt;li&gt;Sub Type : NGINX Proxy Manager + open-appsec 선택&lt;/li&gt;
&lt;li&gt;Authentication 항목의 Token 항목 복사(추후 docker-compose.yaml 에 적용)&lt;/li&gt;
&lt;li&gt;Management 항목 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 상단 &lt;b&gt;Enforce&lt;/b&gt;항목을 선택 &lt;i&gt;PUBLISH &amp;amp; ENFORCE POLICY&lt;/i&gt; 버튼을 통해 적용 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;( 참고로 기존 정보 변경 후에도 Enforce 항목을 클릭하여 Publish를 진행해 줘야지만 정상적으로 반영이 완료된다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6zvgx/dJMcadNPyMd/1kQ3LpAtsNTaUNe8aEEBek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6zvgx/dJMcadNPyMd/1kQ3LpAtsNTaUNe8aEEBek/img.png&quot; style=&quot;width: 50.7548%; margin-right: 10px;&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;859&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.35&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6zvgx/dJMcadNPyMd/1kQ3LpAtsNTaUNe8aEEBek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6zvgx%2FdJMcadNPyMd%2F1kQ3LpAtsNTaUNe8aEEBek%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1329&quot; height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAbIws/dJMcadtwK3c/Pk8dWazpLAhchLDwCmxSQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAbIws/dJMcadtwK3c/Pk8dWazpLAhchLDwCmxSQK/img.png&quot; style=&quot;width: 48.0824%;&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;816&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;48.65&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAbIws/dJMcadtwK3c/Pk8dWazpLAhchLDwCmxSQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAbIws%2FdJMcadtwK3c%2FPk8dWazpLAhchLDwCmxSQK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1196&quot; height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXToF0/dJMcaa4D7yb/zg4xwiLMG8sAlKgYcPg3fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXToF0/dJMcaa4D7yb/zg4xwiLMG8sAlKgYcPg3fk/img.png&quot; style=&quot;width: 49.3433%; margin-right: 10px; margin-top: 10px;&quot; data-origin-width=&quot;1209&quot; data-origin-height=&quot;926&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXToF0/dJMcaa4D7yb/zg4xwiLMG8sAlKgYcPg3fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXToF0%2FdJMcaa4D7yb%2Fzg4xwiLMG8sAlKgYcPg3fk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1209&quot; height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SmHJA/dJMcagDNcMb/lhTXz2G0aufEF4HfNQosXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SmHJA/dJMcagDNcMb/lhTXz2G0aufEF4HfNQosXK/img.png&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;927&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4939%; margin-top: 10px;&quot; data-widthpercent=&quot;50.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SmHJA/dJMcagDNcMb/lhTXz2G0aufEF4HfNQosXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSmHJA%2FdJMcagDNcMb%2FlhTXz2G0aufEF4HfNQosXK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1214&quot; height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.4.2 openappsec-agent 설정 적용&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원가입이 완료 이후 docker-compose.yaml에 &lt;b&gt;openappsec-agent&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;b&gt;&lt;u&gt;openappsec 폴더 생성&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761889977406&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /services/npmplus &amp;amp;&amp;amp; \
mkdir openappsec &amp;amp;&amp;amp; \
mkdir ./openappsec/conf &amp;amp;&amp;amp; \
mkdir ./openappsec/data &amp;amp;&amp;amp; \
mkdir ./openappsec/logs &amp;amp;&amp;amp; \
mkdir ./openappsec/localconf&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;&lt;b&gt;&lt;u&gt;다운로드한 머신러닝 모델파일 업로드&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox의 호스트에 업로드하여 컨테이너로 복사하는 방식으로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너로 파일을 전송하는 방법은 각자의 상황에 맞도록 하면 될 것 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1761891377266&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#pct push &amp;lt;컨테이너ID&amp;gt; &amp;lt;Proxmox 경로&amp;gt; &amp;lt;컨테이너 경로&amp;gt;
pct push 100 /root/open-appsec-advanced-model.tgz /services/npmplus/openappsec/open-appsec-advanced-model.tgz&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;&lt;b&gt;&lt;u&gt;docker-compose.yaml 수정&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761892427858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#environment 주석 제거
- &quot;NGINX_LOAD_OPENAPPSEC_ATTACHMENT_MODULE=true&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1761892559614&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; #crowdsec volumes에 openappsec logs폴더 연결
 - &quot;./openappsec/logs:/opt/openappsec/logs:ro&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1761889671390&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# This can be used to run openappsec, you also need to set NGINX_LOAD_OPENAPPSEC_ATTACHMENT_MODULE to true and set ipc for NPMplus
  openappsec-agent:
    container_name: openappsec-agent
    image: ghcr.io/openappsec/agent:latest
    restart: always
    ipc: shareable
    volumes:
      - &quot;./openappsec/conf:/etc/cp/conf&quot;
      - &quot;./openappsec/data:/etc/cp/data&quot;
      - &quot;./openappsec/logs:/var/log/nano_agent&quot;
      - &quot;./openappsec/localconf:/ext/appsec&quot;
      - &quot;./openappsec/open-appsec-advanced-model.tgz:/advanced-model/open-appsec-advanced-model.tgz&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;autoPolicyLoad=true&quot;
      - &quot;registered_server=NPMplus&quot;
      - &quot;user_email=&amp;lt;본인의 이메일&amp;gt;&quot;
      - &quot;AGENT_TOKEN=&amp;lt;appsec-token&amp;gt;&quot;
    command: /cp-nano-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;&lt;u&gt;&lt;b&gt;docker-compose.yaml 재적용&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761204418040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHan2v/dJMcake7CUw/drA929A3m5P7sPAKElvoJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHan2v/dJMcake7CUw/drA929A3m5P7sPAKElvoJ1/img.png&quot; data-alt=&quot;docker-compose.yaml 재적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHan2v/dJMcake7CUw/drA929A3m5P7sPAKElvoJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHan2v%2FdJMcake7CUw%2FdrA929A3m5P7sPAKElvoJ1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;487&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose.yaml 재적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 완료가 되었다면 위와 같이 모든 컨테이너가 정상적으로 실행될 것이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.4.3 openappsec-agent 연결 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;my.openappsec.io 홈페이지의 &lt;b&gt;Agents&lt;/b&gt;항목을 보면 정상적으로 연결이 완료된 것을 확인할 수 있으며, &lt;b&gt;Monotoring&lt;/b&gt;항목에서 관련 정보를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QTtEL/dJMcafx7ijq/2NGkCJ37oBi7ka7765s501/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QTtEL/dJMcafx7ijq/2NGkCJ37oBi7ka7765s501/img.png&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;979&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTtEL/dJMcafx7ijq/2NGkCJ37oBi7ka7765s501/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTtEL%2FdJMcafx7ijq%2F2NGkCJ37oBi7ka7765s501%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1212&quot; height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQyAl9/dJMcae62VcA/IR8s2KvYVTSjriwGlTFBKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQyAl9/dJMcae62VcA/IR8s2KvYVTSjriwGlTFBKK/img.png&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;979&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQyAl9/dJMcae62VcA/IR8s2KvYVTSjriwGlTFBKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQyAl9%2FdJMcae62VcA%2FIR8s2KvYVTSjriwGlTFBKK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1212&quot; height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;openappsec-agent 연결 확인 및 모니터링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. NPM Plus 최종확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;아래는 최종적으로 적용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;docker-compose.yaml&lt;/b&gt;파일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;openappsec에는 별도의 sync, db 등 추가 컨테이너가 존재하는데 해당 항목은 각자의 필요에 따라 원하는 기능을 추가하여 사용하면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;u&gt;&lt;b&gt;docker-compose.yaml&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1761898741949&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  npmplus:
    container_name: npmplus
    image: docker.io/zoeyvid/npmplus:latest
    restart: always
    network_mode: host
    volumes:
      - &quot;./data:/data&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;ACME_EMAIL=&amp;lt;본인의 E-Mail&amp;gt;&quot;
      - &quot;LOGROTATE=true&quot;
      - &quot;LOGROTATIONS=7&quot;
      - &quot;GOA=true&quot;
      - &quot;NGINX_LOAD_OPENAPPSEC_ATTACHMENT_MODULE=true&quot;
  geoipupdate:
    container_name: npmplus-geoipupdate
    image: ghcr.io/maxmind/geoipupdate:latest
    restart: always
    network_mode: bridge
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;GEOIPUPDATE_EDITION_IDS=GeoLite2-Country GeoLite2-City GeoLite2-ASN&quot;
      - &quot;GEOIPUPDATE_ACCOUNT_ID=&amp;lt;maxmind-account-id&amp;gt;&quot;
      - &quot;GEOIPUPDATE_LICENSE_KEY=&amp;lt;maxmind-license-key&amp;gt;&quot;
      - &quot;GEOIPUPDATE_FREQUENCY=24&quot;
    volumes:
      - &quot;./data/goaccess/geoip:/usr/share/GeoIP&quot;
  crowdsec:
    container_name: crowdsec
    image: docker.io/crowdsecurity/crowdsec:latest
    restart: always
    network_mode: bridge
    ports:
      - &quot;127.0.0.1:7422:7422&quot;
      - &quot;127.0.0.1:8080:8080&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;COLLECTIONS=ZoeyVid/npmplus&quot;
    volumes:
      - &quot;./data/crowdsec/conf:/etc/crowdsec&quot;
      - &quot;./data/crowdsec/data:/var/lib/crowdsec/data&quot;
      - &quot;./data/nginx:/opt/npmplus/nginx:ro&quot;
      - &quot;./openappsec/logs:/opt/openappsec/logs:ro&quot;
  openappsec-agent:
    container_name: openappsec-agent
    image: ghcr.io/openappsec/agent:latest
    restart: always
    ipc: shareable
    volumes:
      - &quot;shm-volume:/dev/shm/check-point&quot;
      - &quot;./openappsec/conf:/etc/cp/conf&quot;
      - &quot;./openappsec/data:/etc/cp/data&quot;
      - &quot;./openappsec/logs:/var/log/nano_agent&quot;
      - &quot;./openappsec/localconf:/ext/appsec&quot;
      - &quot;./openappsec/open-appsec-advanced-model.tgz:/advanced-model/open-appsec-advanced-model.tgz&quot;
    environment:
      - &quot;TZ=Asia/Seoul&quot;
      - &quot;autoPolicyLoad=true&quot;
      - &quot;registered_server=NPMplus&quot;
      - &quot;user_email=&amp;lt;본인의 E-Mail&amp;gt;&quot;
      - &quot;AGENT_TOKEN=&amp;lt;Openappsec-access-token&amp;gt;&quot;
    command: /cp-nano-agent&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며..&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이로써 길고 길었던 NPM Plus 수동 설치 및 추가기능에 대해 모두 적용해 보았다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추가기능에 대해서 특별히 어렵지 않게 적용이 가능한 것 같지만 사실 이건 단순히 설치 및 기본 설정에만 해당하는 것이라 여기서 확장되는 부분은 개인의 노력이 필요할 듯하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참 쉽고도 멀다....ㅎ&lt;/p&gt;</description>
      <category>Proxmox/NPM</category>
      <category>compose.yaml</category>
      <category>CrowdSec</category>
      <category>Docker Compose</category>
      <category>geoipupdate</category>
      <category>goaccess</category>
      <category>maxmind</category>
      <category>NPM</category>
      <category>openappsec</category>
      <category>Proxmox</category>
      <category>수동 설치</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/65</guid>
      <comments>https://lovelettee01.tistory.com/65#entry65comment</comments>
      <pubDate>Mon, 13 Oct 2025 17:02:35 +0900</pubDate>
    </item>
    <item>
      <title>Docker Compose 버전(v1, v2)</title>
      <link>https://lovelettee01.tistory.com/64</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 Docker를 사용하면서 Docker Compose를 활용해 간단하게 여러 가지 서비스를 편리하게 관리 및 설치하여 사용해 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Docker를 설치하고 그저 막연하게 사용하던 Docker Compose에 대해서 알아보기 위해서 정리해 보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 여기서는 Docker Compose에 대한 사용법 등에 대한 설명을 하려는 것은 아니니 해당 내용에 대한 설명은 추후에 따로 정리해 보도록 하고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 Docker Compose에 대해 간단하게 알아보자&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;&lt;b&gt;테스트 환경&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;- ubuntu22.04&lt;br /&gt;- Docker version 28.4.0&lt;br /&gt;참고로 Docker 설치는 &lt;a href=&quot;https://lovelettee01.tistory.com/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker 스크립트로 설치하기(ft.portainer)&lt;/a&gt;를 참고하면 됨&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Docker Compose란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker Compose란?&lt;/b&gt; Docker의 개별 컨테이너를 하나의 서비스로 정의하여 각각의 컨테이너를 묶음으로 편리하게 관리할 수 있도록 작업환경을 제공하는 Docker의 관리도구이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Compose를 이용하면 여러 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의하여 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때문에 관리해야 할 컨테이너수가 많거나 정의해야 할 옵션이 많다면 Docker compose를 이용하여 사용하는 것이 바람직하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 간단하게 Compose 파일 생성하고 실행을 진행해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 Compose 파일 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker compose는 yaml이라는 별도의 파일을 생성하여 관리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 샘플로 Wordpress와 Mysql을설치하는 Compose yaml 파일을 작성해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1758697730641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /services/wordpress &amp;amp;&amp;amp; cd /services/wordpress/
nano docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1758696977339&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3.9&quot;

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  
  wordpress:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - &quot;8000:80&quot;
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 Compose 파일 실행&lt;/h3&gt;
&lt;pre id=&quot;code_1758697490053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; data-alt=&quot;docker-compse 미설치 에러&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG48Vb%2FbtsQMCacWkV%2FTobyy16s25BPhGvcecWgq0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;82&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compse 미설치 에러&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 짠!! 하고 실행될 줄 알았지만 우분투를 기준으로 위 명령어를 실행하면 docker-compose 명령어가 실행되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 우리는 docker-compose를 설치할 방법을 찾아보게 되는데....&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.3 docker-compose vs docker compose&lt;/h3&gt;
&lt;pre id=&quot;code_1758700967068&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up
#or
docekr compose up&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명하였듯이 docker-compose를 설치하기 위해서 찾다 보니 &lt;b&gt;docker compose&lt;/b&gt;, &lt;b&gt;docker-compose&lt;/b&gt;처럼 실행 명령어가 제각각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 오타인가?? 아무거나 써도 될까?? 의문이 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 쓴 목적이 여기에 있는데 인터넷에도 정보가 혼재되어 있으며 애매하게 사용했던 두 명령어의 차이에 대해 알아보도록 하자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt; Docker Compose 명령어는 버전에 따라 차이가 있기 때문에 버전에 대해 먼저 알아보자.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker Compose 버전&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 애플리케이션에는 서비스마다 각각의 버전이 존재하고 버전이 올라감에 따라 버그 수정 및 기능 향상 등 각 버전별 특징이 존재하기 마련이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker Compose&lt;/b&gt; 역시 &lt;i&gt;V1&lt;/i&gt;버전과 &lt;i&gt;V2&lt;/i&gt;버전이 존재하는데 결론먼저 이야기 하면 사실상 V1버전은 버그 수정 및 보안 문제에 대한 지원이 종료(EOL)되었기 때문에 Docker Compose는 V2버전을 사용해야 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; Docker Compose V1 지원종료(&lt;u&gt;Docker compose V1 End of Life&lt;/u&gt;)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;Docker compose V1 End of Life&quot; href=&quot;https://github.com/docker/roadmap/issues/257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker roadmap에 올라온 이슈&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.docker.com/blog/announcing-compose-v2-general-availability/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Compose V2 정식 출시 발표&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Docker Compose 버전별 특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Compose의 두 가지 버전의 차이에 대해서는 정리하면 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;Compose V1 vs Compose V2&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 282px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 21px;&quot;&gt;버전&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 21px;&quot;&gt;Compose V1&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 21px;&quot;&gt;Compose V2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 59px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 59px;&quot;&gt;명령어(Command)&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 59px;&quot;&gt;docker-compose&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 59px;&quot;&gt;docker compose&lt;br /&gt;(V2버전도 권장하진 않지만 docker-compose 명령어 사용이 가능하도록 &lt;a title=&quot;compose install standalone&quot; href=&quot;https://docs.docker.com/compose/install/standalone/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Standalone&lt;/a&gt; 방식을 제공한다. )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 21px;&quot;&gt;작성언어(Language)&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 21px;&quot;&gt;Python&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 21px;&quot;&gt;Go&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 42px;&quot;&gt;설치방법(Installaion)&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 42px;&quot;&gt;Docker Engine과 별도로 설치되는 독립형(Standalone) Python 기반의 Binary 설치&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 42px;&quot;&gt;Docker Desktop에 포함되며 Docker Engine에 플러그인(Plug-in) 형태로 설치된다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 21px;&quot;&gt;빌드(Build)&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 21px;&quot;&gt;순차적 이미지 빌드&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 21px;&quot;&gt;BulidKit을 사용하여 병렬로 이미지 빌드(빌드속도 개선)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 21px;&quot;&gt;컨테이너 생성(naming)&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 21px;&quot;&gt;언더바('_')를 사용 (e.g. app_name_1)&lt;br /&gt;DNS와 호환되지 않는다.&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 21px;&quot;&gt;하이픈('-')을 사용 (e.g. app-name-1)&lt;br /&gt;DNS와 호환된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 38px;&quot;&gt;Compose(yaml) 파일 특징&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 38px;&quot;&gt;파일형식에 따라 최상위 version 항목 필요&lt;br /&gt;(ex. version: 3.8)&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 38px;&quot;&gt;version 항목 불필요 및 무시됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 38px;&quot;&gt;Github 주소&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 38px;&quot;&gt;별도의 브렌치로 관리&lt;br /&gt;&lt;a title=&quot;docker-compose v1 legacy github&quot; href=&quot;https://github.com/docker/compose/tree/v1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/docker/compose/tree/v1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 38px;&quot;&gt;Main Github 사용&lt;br /&gt;&lt;a title=&quot;docker compose main github&quot; href=&quot;https://github.com/docker/compose&quot;&gt;https://github.com/docker/compose&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.6356%; height: 21px;&quot;&gt;지원여부&lt;/td&gt;
&lt;td style=&quot;width: 36.0077%; height: 21px;&quot;&gt;2023.6월 지원종료(EOL)&lt;/td&gt;
&lt;td style=&quot;width: 41.3566%; height: 21px;&quot;&gt;개발 및 업데이트 진행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 버전별 차이점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;&lt;u&gt;설치방법(Installaion)&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 내부에서 처리되는 Python이나 Go 부분과 처리 속도 등은 우리가 잘 느끼지 못하는 영역이지만 독립적인(Standalone) 설치형에서 플러그인 (Plug-in) 형태로 변경되면서 최근에는 Docker를 설치하게 되면 기본적으로 플러그인 형태로 자동으로 설치되기 때문에 별도로 설치하지 않아도 사용가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;u&gt;명령어(Command)&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적인 생각으로는 우리가 가장 헷갈려하는 부분이기도 하며 가장 큰 변화가 아닐까 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금도 많이 사용하고 있는 &lt;u&gt;docker-compose&lt;/u&gt; 명령어가 &lt;i&gt;docker compose&lt;/i&gt;로 변경되었는데 아직도 여러 곳에서 이를 혼용하여 사용하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;docker compose&lt;/i&gt;로 명령어는 단순히 사용하는 입장에서 바뀐 것뿐만 아니라 가장 큰 차이는 기존 &lt;u&gt;docker-compose&lt;/u&gt;를 설치 및 사용하기 위하여 Python의&amp;nbsp; pip를 사용해야 하는 등 &lt;b&gt;Python 의존성&lt;/b&gt;에서 자유로워졌으며, Docker 내부의 네이티브와 통합되어 다양하게 사용가능하며 전반적인 성능도 향상되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로는 필요에 따라 V1버전을 꼭 써야 하는 경우가 아니라면 docker compose명령어로 사용하는 것이 좋을 것 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;u&gt;Compose file(Yaml) 작성&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Compose 파일 작성 시 기존 Legacy(V1) 버전에서는 Version항목(eg version '2.x', version '3.x')을 최상위 요소에 사용하여 해당 Compose의 릴리즈 정보에 기초하여&amp;nbsp; 파일 포맷을 지정하였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Compose file format versions 1 with Compose 1.0.0 in 2014&lt;/li&gt;
&lt;li&gt;Compose file format versions 2.x with Compose 1.6.0 in 2016&lt;/li&gt;
&lt;li&gt;Compose file format versions 3.x with Compose 1.10.0 in 2017&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 버전 정보에 따라 Compose파일 작성 시 사용가능한 매개변수가 다르기 때문에 버전이 달라지는 경우 Compose파일을 새로 수정해야 하는 상황이 발생하기도 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 Compose가 V2 버전으로 올라가면서 해당 버전 정보 필드 여부와 상관없이 최신 스키마를 사용하여 파일을 검증하도록 수정되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 버전(2.x, 3.x)과의 호환성을 위하여 version 필드속성은 정보제공용으로 사용되며, 더 이상은 사용하지 않는다는 경고메시지가 출력됨에 따라 삭제하는 것을 권장한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Docker Compose 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근엔 Docker Compose가 Docker 내에 plug-in 형태로 설치가 되지만 아직까지 예전의 설치 방법으로 설치도 진행되며 이 때문에 생기는 문제점 및 설치방 법들&amp;nbsp;역시 혼재되어 있어 정리를 해보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. 플러그인 설치 [&lt;a title=&quot;Docker Compose Plugin 설치&quot; href=&quot;https://docs.docker.com/compose/install/linux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 이야기하였듯 최신 Docker을 설치하게 되면 Compose는 Docker 내에 plugin 형태로 설치되게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시나 &lt;b&gt;docker-compose-plugin&lt;/b&gt;이 설치되어 있지 않은 경우에만 별도로 설치하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투(Ubuntu) 기준으로 아래와 같이 간단하게 설치가능하다. So Simple~ &lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Docker Compose Plugin 설치&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758873394094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-get update
apt-get install docker-compose-plugin&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;&lt;u&gt;&lt;b&gt;Docker Compose 설치 확인&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758874392464&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt list docker*&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CSCOi/btsQmQOb1Tw/XELP9XvNpkk4qKkDnKEDo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CSCOi/btsQmQOb1Tw/XELP9XvNpkk4qKkDnKEDo0/img.png&quot; data-alt=&quot;Docker Compose Plugin설치 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CSCOi/btsQmQOb1Tw/XELP9XvNpkk4qKkDnKEDo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCSCOi%2FbtsQmQOb1Tw%2FXELP9XvNpkk4qKkDnKEDo0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;927&quot; height=&quot;292&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker Compose Plugin설치 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 (권장 안 함) Standalone 방식 설치 [&lt;a title=&quot;Docker Compose Plugin 설치&quot; href=&quot;https://docs.docker.com/compose/install/linux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼재되어 있다는 게 아직도 해당 Standalone 방식으로 설치하는 경우가 많기 때문이며,&amp;nbsp; 해당방법으로 설치하는 경우 때문에 docker-compose명령어도 계속 사용되고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;설치파일 다운로드 및 설치&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1756972506433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 버전지정설치
curl -L &quot;https://github.com/docker/compose/releases/download/v2.39.4/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose

# 최신버전설치
curl -L &quot;https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 &lt;b&gt;버전정보(v2.39.4)&lt;/b&gt;는 각자 상황에 맞게 변경 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;* 버전정보 확인(&lt;a href=&quot;https://github.com/docker/compose/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/docker/compose/releases&lt;/a&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;u&gt;&lt;b&gt;바이너리 파일에 실행권한 적용&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1758875000404&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x /usr/local/bin/docker-compose&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;&lt;b&gt;&lt;u&gt;심볼릭 링크 설정&lt;/u&gt;&lt;/b&gt; - Path 등록이 안 된 경우 어디서든 실행가능하도록&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1759129770328&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SmwN1/btsQVkGniJf/Hg2dFlUKFlC0kNglL3Vx7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SmwN1/btsQVkGniJf/Hg2dFlUKFlC0kNglL3Vx7K/img.png&quot; data-alt=&quot;Path 설정 오류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SmwN1/btsQVkGniJf/Hg2dFlUKFlC0kNglL3Vx7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSmwN1%2FbtsQVkGniJf%2FHg2dFlUKFlC0kNglL3Vx7K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;919&quot; height=&quot;91&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Path 설정 오류&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;docker-compose 설치확인&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 docker-compose가 독립적(standalone)으로 설치되어 실행되지만 내부적으로는 docker compose와 동일한 명령어를 사용하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;873&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAeLn/btsQUQetYet/IfBph5kFMabKUdzN4cgbAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAeLn/btsQUQetYet/IfBph5kFMabKUdzN4cgbAK/img.png&quot; data-alt=&quot;docker-compose 설치 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAeLn/btsQUQetYet/IfBph5kFMabKUdzN4cgbAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAeLn%2FbtsQUQetYet%2FIfBph5kFMabKUdzN4cgbAK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;986&quot; height=&quot;873&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;873&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose 설치 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.3  &lt;span style=&quot;color: #ee2323;&quot;&gt;[지원종료]&lt;/span&gt; docker-compose(v1) 설치&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 해당 방법은 사용을 하지 않아야 한다는 차원에서 작성함‼️&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 기준로 docker-compose를 처음 실행 할 당시 설치가 되어있지 않다면 하단에 친절하게 &lt;b&gt;'apt install docker-compose'&lt;/b&gt;를 실행해 보라는 항목이 표시되기 때문에 고민하지 않고 해당 명령어로 설치를 실행하는 경우가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 해당 명령어롤 통해 docker-compose를 설치해 보도록 하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; data-alt=&quot;docker-compse 미설치 에러&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG48Vb/btsQMCacWkV/Tobyy16s25BPhGvcecWgq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG48Vb%2FbtsQMCacWkV%2FTobyy16s25BPhGvcecWgq0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;82&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compse 미설치 에러&lt;/figcaption&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;&lt;b&gt;&lt;u&gt;apt를 통한 docker-compose 설치&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;해당 명령어롤 통해 docker-compose를 설치해 보면 apt를 통해 간단한 게 설치가 마무리된다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1749712618462&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install docker-compose -y&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;&lt;b&gt;&lt;u&gt;docker-compose 설치확인&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 버전 정보를 보게 되면 기존 Legacy(v1) 버전이 설치되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되면 우리가 막연하게 사용하는 docker-compose는 v1버전으로 동작하는 것임으로 Python에러 등 우리가 생각지 못했던 갖가지 문제에 직면하게 될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC3ZOf/btsQS1BBFyf/4vIPkFL87Tj56FsCNtxyJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC3ZOf/btsQS1BBFyf/4vIPkFL87Tj56FsCNtxyJ0/img.png&quot; data-alt=&quot;docker-compose version확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC3ZOf/btsQS1BBFyf/4vIPkFL87Tj56FsCNtxyJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC3ZOf%2FbtsQS1BBFyf%2F4vIPkFL87Tj56FsCNtxyJ0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;99&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose version확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 사용하면서 매번 버전정보나 업데이트 정보를 확인해 가며 사용한다는 게 쉽지는 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Docker Compose처럼 신경 쓰지 않고 편하게 사용하면서 매번 사용할 때마다 오류가 나면 그때그때 마다 해결해 사용하는 정도로 사용해 왔었다면 이런 궁금증을 한 번쯤 확인하고 넘어가는 것도 이후에 좀 더 편하게 사용할 수 있는 방법이 아닐까 생각한다.&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <category>compose(v1)</category>
      <category>compose(v2)</category>
      <category>docker</category>
      <category>Docker Compose</category>
      <category>docker compose 설치</category>
      <category>docker-compse</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/64</guid>
      <comments>https://lovelettee01.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 8 Sep 2025 15:57:22 +0900</pubDate>
    </item>
    <item>
      <title>Docker 스크립트로 설치하기(ft.portainer)</title>
      <link>https://lovelettee01.tistory.com/63</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Docker란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 이제 너무나 많은 곳에서 사용하기에 설명이 필요할까 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 구체적으로 설명하자면 주제에서 벗어나기 때문에 간단하게만 확인하고 넘어가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이를 관리하기 위한 여러 툴들이 존재하는데 오늘은 portainer라는 관리툴 설치까지 함께 진행해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 하이퍼 바이저(Hypervisor)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼(platform)을 말한다. 가상화 머신 모니터 또는 가상화 머신 매니저(영어: virtual machine monitor 또는 virtual machine manager, 줄여서 VMM)라고도 부른다. (출처. &lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80&quot;&gt;위키피디아&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼 바이저 에는 Type1, Type2, Type3 형태가 존재하게 되는데 Docker는 Type3 형태의 &lt;b&gt;Container형 하이퍼바이저&lt;/b&gt;에 속한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Type3 - '​Container'형 하이퍼바이저&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 OS위에 컨테이너관리 소프트웨어를 설치하여, 논리적으로 컨테이너를 나누어 사용&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;li&gt;종류 : Docker, LXC, LXD, CRI-O, Kata, Haconiwa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bepDiX/btsMWI6zZRM/sku8v23fV5kyPB3i7Irap1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bepDiX/btsMWI6zZRM/sku8v23fV5kyPB3i7Irap1/img.png&quot; data-alt=&quot;컨테이너 형태의 가상화 (출처 : tutorialspoint.com)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bepDiX/btsMWI6zZRM/sku8v23fV5kyPB3i7Irap1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbepDiX%2FbtsMWI6zZRM%2Fsku8v23fV5kyPB3i7Irap1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;728&quot; height=&quot;392&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨테이너 형태의 가상화 (출처 : tutorialspoint.com)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker 설치&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Docker 설치 환경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 보았듯 운영체제 위에서 컨테이너 형태로 실행되기 때문에 운영체제에 상관없이 설치 및 운영이 가능한 이점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 Docker 공식 사이트에서 제공하는 설치 지원 플랫폼정보이다. [&lt;a title=&quot;Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 각 시스템 별로 설치방법을 제공하니 각 플랫폼 항목을 선택해 공식 설치 방법을 확인할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;플랫폼&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;x86_64 / amd64&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;arm64 / aarch64&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;arm(32비트)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;ppc64le&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;s390x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;Centos Docker Install &quot; href=&quot;https://docs.docker.com/engine/install/centos/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;센트OS&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;Debian Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/debian/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;데비안&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;fedora Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/fedora/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;페도라&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;Raspberry Pi OS (32-bit) Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/raspberry-pi-os/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;라즈베리파이 OS(32비트)&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;RHEL Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/rhel/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RHEL&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;SLES Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/sles/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;슬레스&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;Ubuntu Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;우분투&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a title=&quot;Binaries Docker Install&quot; href=&quot;https://docs.docker.com/engine/install/binaries/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;바이너리&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 Docker 설치 편의 스크립트 제공&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이 글을 작성한 목적은 여기에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 OS 및 플랫폼 별로 설치방법이 약간씩 차이가 있는데 공식 설치방법을 보면서 설치하면 되긴 하지만 사실 약간 번거로운 부분이 존재하는데 Docker에서는 편의 스크립트를 제공해 간단하게 명령어 입력만으로 설치를 제공한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker Installation Srcipt : &lt;a title=&quot;Docker Install Script&quot; href=&quot;https://get.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://get.docker.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Docker sciprt Github : &lt;a title=&quot;Docker Install Github&quot; href=&quot;https://github.com/docker/docker-install&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub - docker/docker-install: Docker installation script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 해당 스크립트를 통해 설치를 진행해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 스크립트를 통한 Docker 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 설치는 스크립트 실행만으로 간단하게 진행 가능하지만 필요한 패키지들이 존재함으로 아래 항목을 순차적으로 진행해 보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 참고로 아래 Docker 설치는 Ubuntu 기준으로 설치를 진행함.&lt;br /&gt;패키지 업데이트등 항목 및 필수 패키지 설치는 운영체제 별로 상이함. (RPM-based : yum 사용)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 패키지 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1749710866082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 필수 패키지 설치&lt;/p&gt;
&lt;pre id=&quot;code_1749711256459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt install curl -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 스크립트를 통해 Docker 설치&lt;/p&gt;
&lt;pre id=&quot;code_1749712562896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sh ./get-docker.sh
or
curl -fsSL https://get.docker.com/ | sudo sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5lG5Q/btsQhqz3xk9/9GqBQXlRTn0nqomIdQHOs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5lG5Q/btsQhqz3xk9/9GqBQXlRTn0nqomIdQHOs0/img.png&quot; data-alt=&quot;Docker 설치 스크립트 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5lG5Q/btsQhqz3xk9/9GqBQXlRTn0nqomIdQHOs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5lG5Q%2FbtsQhqz3xk9%2F9GqBQXlRTn0nqomIdQHOs0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1416&quot; height=&quot;841&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 설치 스크립트 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계가 문제없이 정상적으로 완료되었다면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;서버에&lt;span&gt; &lt;/span&gt;&lt;/span&gt;Docker가 정상적으로 설치된 것이다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 단계를 통해 정상적으로 설치되었는지 확인해 보자.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.4 Docker 설치 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Docker 설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1749712654007&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;service docker status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mVyst/btsQhS39f5e/pW3rCMWwkggWoDFKSgSWQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mVyst/btsQhS39f5e/pW3rCMWwkggWoDFKSgSWQK/img.png&quot; data-alt=&quot;Docker 서비스 상태 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mVyst/btsQhS39f5e/pW3rCMWwkggWoDFKSgSWQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmVyst%2FbtsQhS39f5e%2FpW3rCMWwkggWoDFKSgSWQK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1507&quot; height=&quot;349&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 서비스 상태 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Docker 자동 실행 (부팅 시 자동으로 실행되지 않을 경우)&lt;/p&gt;
&lt;pre id=&quot;code_1749712654007&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl enable docker&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctra5v/btsQns7wA8Z/zi1mAXxt2Y23xfNJqRy5tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctra5v/btsQns7wA8Z/zi1mAXxt2Y23xfNJqRy5tk/img.png&quot; data-alt=&quot;Docker 서비스 자동실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctra5v/btsQns7wA8Z/zi1mAXxt2Y23xfNJqRy5tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctra5v%2FbtsQns7wA8Z%2Fzi1mAXxt2Y23xfNJqRy5tk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;79&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 서비스 자동실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로서 간단하게 스크립트를 통해 Docker를 설치 및 확인하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 처음 시작한다면 CLI를 통해 명령어를 익혀야 구조나 사용 중 문제가 생겼을 때 해결할 때도 도움이 되긴 하지만 그것 또한 개인의 선택의 문제로 남겨두고 이제는 Docker를 Webui를 통해 사용할 수 있도록 하는 관리툴인 Portainer에 대해 알아보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Portainer 란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI 버전의 Docker를 GUI를 통해 관리하기 위한 툴로서 Docker 이미지, 컨테이너, 볼륨 및 로그와 이벤트 확인 등 모든 작업을 Web UI를 통해 관리 및 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 Windows에 설치하는 Docker Desktop기능을 Linux에서도 사용하게 해주는 관리 플랫폼이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도 Komodo, Dockge, Arcane이 존재하니 필요에 따라 설치해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Portainer 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Portainer는 상업용 BE(Business Edition) 버전과 개인용 CE(Community Edition)이 존재하는데 개인용 CE버전을 설치해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크를 통해 공식 페이지의 설치 방법도 확인 가능하다.&lt;/p&gt;
&lt;figure id=&quot;og_1757317621780&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Install Portainer CE with Docker on Linux | Portainer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;docs.portainer.io&quot; data-og-source-url=&quot;https://docs.portainer.io/start/install-ce/server/docker/linux&quot; data-og-url=&quot;https://docs.portainer.io/start/install-ce/server/docker/linux&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LF2ZY/hyZITsykNs/6LAj209tQ0zHhgxztIF2Vk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/801NP/hyZGeZqO35/wvop6V5CfI67mEKlk0PTf0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://docs.portainer.io/start/install-ce/server/docker/linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.portainer.io/start/install-ce/server/docker/linux&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LF2ZY/hyZITsykNs/6LAj209tQ0zHhgxztIF2Vk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/801NP/hyZGeZqO35/wvop6V5CfI67mEKlk0PTf0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install Portainer CE with Docker on Linux | Portainer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.portainer.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 데이터베이스 저장용 Docker 볼륨 생성&lt;/p&gt;
&lt;pre id=&quot;code_1757317741412&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker volume create portainer_data&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qQONd/btsQnDuqWbp/Q5vWVkjaxE7Sbbk0nNXB21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qQONd/btsQnDuqWbp/Q5vWVkjaxE7Sbbk0nNXB21/img.png&quot; data-alt=&quot;Portainer Database Docker volume 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qQONd/btsQnDuqWbp/Q5vWVkjaxE7Sbbk0nNXB21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqQONd%2FbtsQnDuqWbp%2FQ5vWVkjaxE7Sbbk0nNXB21%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;102&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Portainer Database Docker volume 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Portainer Server 컨테이너 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자의 설정에 따라 8000 / 9443 포트는 변경가능&lt;/p&gt;
&lt;pre id=&quot;code_1757317786835&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlYEVP/btsQnAkbnJ1/DnnD5nGKhKHIUShxtv1hl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlYEVP/btsQnAkbnJ1/DnnD5nGKhKHIUShxtv1hl1/img.png&quot; data-alt=&quot;Portainer Server Container 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlYEVP/btsQnAkbnJ1/DnnD5nGKhKHIUShxtv1hl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlYEVP%2FbtsQnAkbnJ1%2FDnnD5nGKhKHIUShxtv1hl1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1127&quot; height=&quot;274&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Portainer Server Container 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Docker Portainer 컨테이너 설치확인&lt;/p&gt;
&lt;pre id=&quot;code_1757318012543&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1411&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pSqhI/btsQqpOVIAI/kHaW8DQzhZaKwYtvS1Rxj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pSqhI/btsQqpOVIAI/kHaW8DQzhZaKwYtvS1Rxj1/img.png&quot; data-alt=&quot;Portainer 설치 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pSqhI/btsQqpOVIAI/kHaW8DQzhZaKwYtvS1Rxj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSqhI%2FbtsQqpOVIAI%2FkHaW8DQzhZaKwYtvS1Rxj1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1411&quot; height=&quot;61&quot; data-origin-width=&quot;1411&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Portainer 설치 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker를 통해 설치하면 이처럼 간단하게 서비스 설치가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 간단하게 설치된 Portainer에 대해 확인해 보자.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.2 Portainer 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트의 변경이 없다면 &lt;b&gt;https://본인의 서버 IP:9443&lt;/b&gt;으로 Portainer 관리 페이지에 접속 가능하다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 서버 접속 시&amp;nbsp; &lt;u&gt;'Your Portainer instance timed out for security purposes'&lt;/u&gt; 메시지가 출력되는 경우 Portainer 서버 재기동을 통해 해결가능하다. [&lt;a title=&quot;Portainer Timeout Error&quot; href=&quot;https://portal.portainer.io/knowledge/your-portainer-instance-has-timed-out-for-security-purposes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;br /&gt;
&lt;pre id=&quot;code_1757318963196&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop portainer
docker start portainer​&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FMc49/btsQonq39ps/dL4Wg1HoLdEaL2WQL55OC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FMc49/btsQonq39ps/dL4Wg1HoLdEaL2WQL55OC1/img.png&quot; data-alt=&quot;Portainer 관리 페이지 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FMc49/btsQonq39ps/dL4Wg1HoLdEaL2WQL55OC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFMc49%2FbtsQonq39ps%2FdL4Wg1HoLdEaL2WQL55OC1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;892&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Portainer 관리 페이지 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 관리 계정입력을 생성할 수 있으며 기존 백업되었던 정보가 있다면 백업데이터를 복구하여 접속할 수도 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.3 Portainer WebUI 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 Get Started 클릭하여 접속해 보면 현재 서버의 Docker 정보를 확인할 수 있다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 사용법에 대해서는 별도로 다루지 않겠지만 WebUI인 만큼 간단한 건 항목을 눌러가며 확인해 볼 수 있을 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KgTx2/btsQoQ7CmeS/ZGk8KYSlKHGRvSpuk465Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KgTx2/btsQoQ7CmeS/ZGk8KYSlKHGRvSpuk465Q1/img.png&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;892&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.7362%; margin-right: 10px;&quot; data-widthpercent=&quot;44.25&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KgTx2/btsQoQ7CmeS/ZGk8KYSlKHGRvSpuk465Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgTx2%2FbtsQoQ7CmeS%2FZGk8KYSlKHGRvSpuk465Q1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QNBlH/btsQpHPRGNH/ljcYklQGcBm2D7Mq5uR88K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QNBlH/btsQpHPRGNH/ljcYklQGcBm2D7Mq5uR88K/img.png&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;892&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.101%;&quot; data-widthpercent=&quot;55.75&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QNBlH/btsQpHPRGNH/ljcYklQGcBm2D7Mq5uR88K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQNBlH%2FbtsQpHPRGNH%2FljcYklQGcBm2D7Mq5uR88K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Portainer WebUI 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <category>docker</category>
      <category>docker 설치</category>
      <category>docker-script</category>
      <category>Docker관리</category>
      <category>get.docker.com</category>
      <category>hypervisor</category>
      <category>Portainer</category>
      <category>하이퍼바이저</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/63</guid>
      <comments>https://lovelettee01.tistory.com/63#entry63comment</comments>
      <pubDate>Mon, 1 Sep 2025 17:22:27 +0900</pubDate>
    </item>
    <item>
      <title>NPM Plus 설치하기(ft.Proxmox VE Helper-Scripts)</title>
      <link>https://lovelettee01.tistory.com/62</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 &lt;b&gt;NPM(Nginx Proxy Manager)&lt;/b&gt;에 관하여 이야기한 적 있는데 이번에 이야기할 &lt;i&gt;NPM Plus&lt;/i&gt;는 기본적으로 NPM에 대한 사전지식이 있다는 전제하에 작성하였기 때문에 해당 NPM에 대한 기본적인 정보를 알고 싶다면 기존 작성된 항목을 확인하고 오는 것이 이 글의 내용을 이해하는데 도움이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 NPM Plus의 설치에 대한 내용만 작성할 예정이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; NPM의 기본적인 설명 및 자세한 사용방법에 대해서 알고 싶다면 아래 링크를 통해 확인해 보면 된다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;Proxmox에 NPM(Nginx Proxy Manager) 설치 및 SSL적용&quot; href=&quot;https://lovelettee01.tistory.com/58&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Proxmox에 NPM(Nginx Proxy Manager) 설치 및 SSL적용&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 NPM이 설치되고 NPM Plus가 설치돼야 하는 것이 아닌 각각의 서비스인 만큼 설치가 목적이라고 한다면 아래의 내용에 따라 설치하여 사용해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 NPM Plus에 대해 알아보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. NPM Plus란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM Plus는 공식 NPM의 Github 프로젝트를 포크(fork) 해서 만든 서드파티 프로젝트라고 보면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 별도의 공식 홈페이지는 없고 Github나 기타 커뮤니티를 통해 전파되어 사용되고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NPM Plus Github 링크 : &lt;a title=&quot;NPM Plus Github&quot; href=&quot;https://github.com/ZoeyVid/NPMplus&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://github.com/ZoeyVid/NPMplus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bojbfz/btsP8uKC8ds/Maw3swLDkL1zWSNYPqCHu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bojbfz/btsP8uKC8ds/Maw3swLDkL1zWSNYPqCHu1/img.png&quot; data-alt=&quot;공식 NPM의 서드파티 프로젝트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bojbfz/btsP8uKC8ds/Maw3swLDkL1zWSNYPqCHu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbojbfz%2FbtsP8uKC8ds%2FMaw3swLDkL1zWSNYPqCHu1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1245&quot; height=&quot;252&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공식 NPM의 서드파티 프로젝트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근엔 Proxmox 사용자를 위한 &lt;b&gt;Proxmox VE Helper-Scripts&lt;/b&gt; 페이지에 NPMplus가 추가되어 설치하여 사용하기에 좀 더 수월해졌다 해당 부분도 아래에서 같이 이야기해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 NPM Plus 사용 목적&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선적으로 고민해야 할 문제 이긴 한데 왜? NPM Plus를 설치하려는지 목적이 명확하게 구분되어야 할 것 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단지 Plus가 붙어서 좋아 보인다는 이유만으로 설치를 하기보다는 그 목적에 맞게 설치되는 게 맞는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM Plus인 만큼 공식적인 NPM의 기능 이외에 추가적인 기능들이 존재하긴 하지만 문제가 발생할 가능성 역시 존재함으로 본인이 필요로 하는 기능이 있다면 설치해 보도록 하며 기본적인 기능은 NPM만으로도 충분히 사용가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번쯤은 생각해 보자는 측면에서의 이야기이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 NPM Plus 추가 기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM Plus의 추가기능은 Github &lt;a title=&quot;NPM Plus 새로운 기능&quot; href=&quot;https://github.com/ZoeyVid/NPMplus?tab=readme-ov-file#list-of-new-features&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;README&lt;/a&gt; 항목에 친절하게 설명되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굉장히 많은 새로운 기능이 존재하는데 대표적인 것만 간단하게 정리하면 아래와 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;⁉️ 참고로 HTTP/3(Quic), modeSecurity 및 Goaccess는 기본적으로 포함되어 있지만 나머지 기능들은 사용하려면 추가로 설치해 사용해야 한다.&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;알파인&amp;nbsp;리눅스&amp;nbsp;기반&amp;nbsp;더&amp;nbsp;작은&amp;nbsp;도커&amp;nbsp;이미지&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;경량화하여 좀 더 빠르고 가벼운 이미지 구현&lt;/li&gt;
&lt;li&gt;단점으로는 지원되는 아키텍처가 한정되어 있음(x86_64/amd64, aarch64/arm64)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;HTTP/3(QUIC) 프로토콜 지원&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;최신 HTTP 3.0 기술로 UDP기반 QUIC 프로토콜을 사용하여 빠른 연결설정&lt;/li&gt;
&lt;li&gt;HOL 블로킹 문제점을 해결하여 전송속도가 향상된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;CrowdSec IPS 지원&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;오픈소스 및 커뮤니티 기반의 실시간 침입방지 시스템&lt;/li&gt;
&lt;li&gt;실시간 로그를 분석하여 악의적인 IP주소 탐지 및 차단하는 침입방지 시스템(IPS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;modSecurity 지원&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Apache, Nginx, IIS 등에서 다양한 플랫폼에서 사용되는 오픈소스 웹 애플리케이션 방화벽(WAF)&lt;/li&gt;
&lt;li&gt;HTTP 요청 및 응답을 필터링하여 웹 애플리케이션을 SQL Injection, XSS 등 다양한 웹 공격으로부터 보호하고, 침입을 탐지 및 차단&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Open-appsec 지원&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;머신러닝 기반의 사전 예방적 웹 애플리케이션 및 API 위협 보호&lt;/li&gt;
&lt;li&gt;OWASP Top10 취약점 및 제로데이 공격으로부터 애플리케이션 보호&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Goaccess 포함&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;오픈소스, 실시간 로깅 분석 및 웹 로그 분석 웹 서버입니다&lt;/li&gt;
&lt;li&gt;콘솔 인터페이스를 통해 실시간으로 웹 서버 로그를 분석하고 시각화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;geoipupdate 기능 지원&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MaxMind의 GeoIP를 이용한 특정 IP주소에 대한정보를 파악할 수 있다.&lt;/li&gt;
&lt;li&gt;Goaccess와 연동되어 GEO Location 페이지에서 서버 접속정보를 파악할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM Plus에 추가된 새로운 기능을 살펴보자면 보안측면에 있어 중점적으로 많은 기능들이 추가된 것 같다는 느낌이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도 많은 기능들이 있으니 직접 한 번은 확인해 보는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 실제로 NPM Plus를 설치해 보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. NPM Plus 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 &lt;b&gt;Proxmox VE Helper-Scripts&lt;/b&gt;에 NPM Plus가 추가되어 NPM설치 때와 마찬가지로 우선 간단하게 설치 가능한 Script 통한 설치를 먼저 진행해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Proxmox VE Helper-Scripts를 통한 NPM Plus설치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.1 사이트 접속 및 확인&lt;/h4&gt;
&lt;figure id=&quot;og_1756367175943&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Proxmox VE Helper-Scripts&quot; data-og-description=&quot;The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.&quot; data-og-host=&quot;community-scripts.github.io&quot; data-og-source-url=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=npmplus&quot; data-og-url=&quot;https://community-scripts.github.io/ProxmoxVE/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bp0ukI/hyZGnNEp4A/UHmnbG36bHZEMDCgu2xhB0/img.png?width=2400&amp;amp;height=1200&amp;amp;face=0_0_2400_1200,https://scrap.kakaocdn.net/dn/jNZZE/hyZDNGJlfZ/A6dXZy7hh3RxkrDOnBrxhk/img.png?width=2400&amp;amp;height=1200&amp;amp;face=0_0_2400_1200&quot;&gt;&lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=npmplus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=npmplus&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bp0ukI/hyZGnNEp4A/UHmnbG36bHZEMDCgu2xhB0/img.png?width=2400&amp;amp;height=1200&amp;amp;face=0_0_2400_1200,https://scrap.kakaocdn.net/dn/jNZZE/hyZDNGJlfZ/A6dXZy7hh3RxkrDOnBrxhk/img.png?width=2400&amp;amp;height=1200&amp;amp;face=0_0_2400_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Proxmox VE Helper-Scripts&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The official website for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 300+ scripts to help you manage your Proxmox VE environment.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;community-scripts.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 링크를 통해 VE Helper-Scripts 사이트의 NPM Plus 항목을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 빨간색으로 표시한 항목들은 로그인, 설치스크립트 및 추후 Docker Compose관련해서 필요하니 눈으로 한번 보고 넘어가자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;930&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7C8w9/btsQclzw5jJ/4eRlgIwVPESo8ipck5k7MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7C8w9/btsQclzw5jJ/4eRlgIwVPESo8ipck5k7MK/img.png&quot; data-alt=&quot;Proxmox VE Helper-Scripts의 NPMplus 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7C8w9/btsQclzw5jJ/4eRlgIwVPESo8ipck5k7MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7C8w9%2FbtsQclzw5jJ%2F4eRlgIwVPESo8ipck5k7MK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1352&quot; height=&quot;930&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;930&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox VE Helper-Scripts의 NPMplus 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.2 Script를 통한 NPMPlus 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인의 Proxmox Shell에 접속하여 위 Helper-Scripts 사이트에서 확인한 아래 함수를 통해 설치를 진행할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1756366997050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/npmplus.sh)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;u&gt;접속정보&lt;/u&gt; : Proxmox Web &amp;gt; Datacenter &amp;gt; [본인노드] &amp;gt; Shell&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFod0/btsQbOBvoLw/VUQ2yudqXXIPZGGj0ercO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFod0/btsQbOBvoLw/VUQ2yudqXXIPZGGj0ercO1/img.png&quot; data-alt=&quot;Proxmox Shell에서 스크립트 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFod0/btsQbOBvoLw/VUQ2yudqXXIPZGGj0ercO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFod0%2FbtsQbOBvoLw%2FVUQ2yudqXXIPZGGj0ercO1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1395&quot; height=&quot;751&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox Shell에서 스크립트 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 시 기본 설정을 변경할 수도 있으며 해당 설정값은 설치 이후에도 변경 가능하니 &lt;i&gt;Defalut Settings&lt;/i&gt;으로 진행해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 다음과 같이 설치가 진행 중 입력을 해야 하는 부분이 나오는데 입력정보를 확인해서 각자의 상황에 맞게 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VvTfb/btsP97IO9LX/iqU0t4KcJ7ofWfPlEqoiL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VvTfb/btsP97IO9LX/iqU0t4KcJ7ofWfPlEqoiL1/img.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;677&quot; data-is-animation=&quot;false&quot; style=&quot;width: 56.4242%; margin-right: 10px;&quot; data-widthpercent=&quot;57.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VvTfb/btsP97IO9LX/iqU0t4KcJ7ofWfPlEqoiL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVvTfb%2FbtsP97IO9LX%2FiqU0t4KcJ7ofWfPlEqoiL1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;950&quot; height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmgUXs/btsQbxfyvjG/EUmjX2ddbmuN9HXKi9rRI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmgUXs/btsQbxfyvjG/EUmjX2ddbmuN9HXKi9rRI1/img.png&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;511&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.413%;&quot; data-widthpercent=&quot;42.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmgUXs/btsQbxfyvjG/EUmjX2ddbmuN9HXKi9rRI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmgUXs%2FbtsQbxfyvjG%2FEUmjX2ddbmuN9HXKi9rRI1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;VE Helper Script를 통한 NPM설치 진행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 63px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 38.1008%; height: 21px;&quot;&gt;&lt;b&gt;입력요청&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.22482%; height: 21px;&quot;&gt;&lt;b&gt;필수여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.1783%; height: 21px;&quot;&gt;&lt;b&gt;입력값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 21px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 38.1008%; height: 21px;&quot;&gt;Enter your TZ Identifier (e.g., Europe/Berlin)&lt;/td&gt;
&lt;td style=&quot;width: 9.22482%; height: 21px;&quot;&gt;필수&lt;/td&gt;
&lt;td style=&quot;width: 13.1783%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;Asia/Seoul&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 21px;&quot;&gt;시간대 설정 (필수): &quot;&lt;a title=&quot;Wikipedia Time Zone List&quot; href=&quot;https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TZ identifier&lt;/a&gt;&quot;에서 값 중 하나로 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 38.1008%; height: 21px;&quot;&gt;Enter your ACME Email&lt;/td&gt;
&lt;td style=&quot;width: 9.22482%; height: 21px;&quot;&gt;선택사항&lt;/td&gt;
&lt;td style=&quot;width: 13.1783%; height: 21px;&quot;&gt;본인의 이메일&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 21px;&quot;&gt;ACME(자동 인증서 관리 환경)에 사용될 이메일 주소: 현재 선택 사항이지만, 미래에 필요할 수 있으므로 입력 권장. Let's Encrypt에는 선택 사항이지만 ZeroSSL 및 Google Public CA에는 필수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되게 되면 NPM때와 마찬가지로 LXC 컨테이너 서버가 생성 실행되며 서버 URL을 통해 관리콘솔에 접속하여 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csA4cG/btsQcJsL8f2/9iQPYqyQWEkBUr9CPpVpR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csA4cG/btsQcJsL8f2/9iQPYqyQWEkBUr9CPpVpR0/img.png&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;671&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.9491%; margin-right: 10px;&quot; data-widthpercent=&quot;52.56&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csA4cG/btsQcJsL8f2/9iQPYqyQWEkBUr9CPpVpR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsA4cG%2FbtsQcJsL8f2%2F9iQPYqyQWEkBUr9CPpVpR0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;948&quot; height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/swbxk/btsQebpcMXo/LAuS3qrnevMNygzMU4PKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/swbxk/btsQebpcMXo/LAuS3qrnevMNygzMU4PKkK/img.png&quot; data-origin-width=&quot;1089&quot; data-origin-height=&quot;854&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.8881%;&quot; data-widthpercent=&quot;47.44&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/swbxk/btsQebpcMXo/LAuS3qrnevMNygzMU4PKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fswbxk%2FbtsQebpcMXo%2FLAuS3qrnevMNygzMU4PKkK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1089&quot; height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM plus 설치완료 및 Web UI접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.3 WEB 관리콘솔 로그인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 NPM의 경우 최초 관리 콘솔 접속 시 정보가 공통이었던 반면 NPM plus는 별도의 긴 문자열로 이루어져 있기 때문에 스크립트를 통해 설치할 경우 최초 암호자체를 따로 제공해주고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 설치 전 VE Helper-Scripts사이트 접속 시 설명된 &lt;b&gt;Application credentials&lt;/b&gt;&amp;nbsp;항목을 통해 접속 정보를 확인가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신의 npmplus 설치 서버에 접속하여 아래 명령어를 통해 접속정보를 확인해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1756444800358&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat /opt/.npm_pwd&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;접속정보 : Proxmox Web &amp;gt; Datacenter &amp;gt; [본인노드] &amp;gt; [npmplus 컨테이너] &amp;gt; Console&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qgrps/btsQcIoeeuo/S1r0kTYnMvnw8cQEJtWaIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qgrps/btsQcIoeeuo/S1r0kTYnMvnw8cQEJtWaIK/img.png&quot; data-alt=&quot;NPM Plus관리콘솔 로그인 정보확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qgrps/btsQcIoeeuo/S1r0kTYnMvnw8cQEJtWaIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQgrps%2FbtsQcIoeeuo%2FS1r0kTYnMvnw8cQEJtWaIK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1281&quot; height=&quot;738&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM Plus관리콘솔 로그인 정보확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 해당정보를 통해 로그인을 진행하게 되면 기존 NPM과 동일하게 사용자정보를 업데이트하는 화면이 나오며 해당 항목을 통해 정보업데이트 하여 사용가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bItRXO/btsQbZKOjEc/Mm29ElXSQfljqXP8cCkL71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bItRXO/btsQbZKOjEc/Mm29ElXSQfljqXP8cCkL71/img.png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bItRXO/btsQbZKOjEc/Mm29ElXSQfljqXP8cCkL71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbItRXO%2FbtsQbZKOjEc%2FMm29ElXSQfljqXP8cCkL71%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Elzpn/btsQej1RRcH/ESAHOBTR6iobFlbj9d3Kh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Elzpn/btsQej1RRcH/ESAHOBTR6iobFlbj9d3Kh0/img.png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Elzpn/btsQej1RRcH/ESAHOBTR6iobFlbj9d3Kh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FElzpn%2FbtsQej1RRcH%2FESAHOBTR6iobFlbj9d3Kh0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Web관리콘솔 로그인 및 사용자 정보 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1.4 신규 추가기능확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 두 가지 버전의 차이점에 대해서 기존 NPM과 비교해서 확인해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 다크모드 지원 역시 NPM Plus의 특징이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래에서 보는 것과 같이 Proxy Host등록 시 &lt;b&gt;ModSecurity&lt;/b&gt; 및 &lt;b&gt;CoreRuleSet&lt;/b&gt;&amp;nbsp;추가되는 등 옵션 항목이 변경된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceZGDR/btsQcWsYN3Z/LoqxuVsRqS2B7TJ0LyoqS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceZGDR/btsQcWsYN3Z/LoqxuVsRqS2B7TJ0LyoqS1/img.png&quot; style=&quot;width: 51.096%; margin-right: 10px;&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;499&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceZGDR/btsQcWsYN3Z/LoqxuVsRqS2B7TJ0LyoqS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceZGDR%2FbtsQcWsYN3Z%2FLoqxuVsRqS2B7TJ0LyoqS1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;454&quot; height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B0jHn/btsQdUBExZi/SQqcbgxO8R2U57MR78pLbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B0jHn/btsQdUBExZi/SQqcbgxO8R2U57MR78pLbk/img.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;587&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.7412%;&quot; data-widthpercent=&quot;48.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B0jHn/btsQdUBExZi/SQqcbgxO8R2U57MR78pLbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB0jHn%2FbtsQdUBExZi%2FSQqcbgxO8R2U57MR78pLbk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Default 영역 비교 (NPM(좌측) vs NPM Plus(우측))&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL 탭 부분도 확인해 보면 &lt;b&gt;Brotli 압축지원&lt;/b&gt; 및 &lt;b&gt;HTTP/3-Quic&lt;/b&gt; 옵션이 추가되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOOkOy/btsQeleuDID/A3fXaVJm71o8CxAACKVcYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOOkOy/btsQeleuDID/A3fXaVJm71o8CxAACKVcYK/img.png&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;354&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.8615%; margin-right: 10px;&quot; data-widthpercent=&quot;50.45&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOOkOy/btsQeleuDID/A3fXaVJm71o8CxAACKVcYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOOkOy%2FbtsQeleuDID%2FA3fXaVJm71o8CxAACKVcYK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvxPLL/btsQcj3xuJH/NF30aLWY1Wz9wJthg52WD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvxPLL/btsQcj3xuJH/NF30aLWY1Wz9wJthg52WD0/img.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;397&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.9757%;&quot; data-widthpercent=&quot;49.55&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvxPLL/btsQcj3xuJH/NF30aLWY1Wz9wJthg52WD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvxPLL%2FbtsQcj3xuJH%2FNF30aLWY1Wz9wJthg52WD0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;SSL 영역 비교 (NPM(좌측) vs NPM Plus(우측))&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 보듯이 이제 간단하게 관리 UI를 통해 추가된 기능 옵션을 활성화할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 수동으로 NPM Plus 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 글이 길어지는 관계로 수동으로 NPM Plus를 설치하는 방법은 별도로 작성예정이다. [ 작성 중.... ]&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  &lt;b&gt;Location Confige File&lt;/b&gt; : /opt/compose.yaml&lt;br /&gt;참고로 위에 언급한 Proxmox VE Helper-Scripts 사이트의 &lt;b&gt;Location Config File&lt;/b&gt;에 보면&amp;nbsp;&lt;u&gt;/opt/compose.yaml&lt;/u&gt; 항목이 존재하는데 해당 compose.yaml 파일은 수동설치 시 사용하는 파일로서 해당파일을 통해 NPM Plus가 설치가 되는 것이다.&lt;br /&gt;여기서 알 수 있듯이 해당 Helper 설치스크립트는 기존 확인한 Github의 내용을 토대로 하여 작성된 것을 확인할 수 있다.&lt;br /&gt;&lt;br /&gt;그래서 해당 compose.yaml 파일은 확인만 하고 넘어가고 자세한 사용법은 수동설치 부분에서 따로 확인해 보자.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 먼가 장황하게 설명했지만 NPM plus 설치도 스크립트를 사용하면 1~2분 정도면 간단하게 끝나기 때문에 특별한 게 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 지나고 사용하는 입장에서만 보면 누군가의 수고로 인해 사용은 점점 더 간단하고 쉬워지는 것 같다....&lt;/p&gt;</description>
      <category>Proxmox/NPM</category>
      <category>helper-scripts</category>
      <category>nginxproxymanager</category>
      <category>NPM</category>
      <category>npm plus</category>
      <category>npmplus</category>
      <category>Proxmox</category>
      <category>Proxmox VE Hepler Scripts</category>
      <category>Script설치</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/62</guid>
      <comments>https://lovelettee01.tistory.com/62#entry62comment</comments>
      <pubDate>Wed, 30 Jul 2025 16:28:43 +0900</pubDate>
    </item>
    <item>
      <title>NPM을 이용한 Proxmox 내부 네트워크 설정</title>
      <link>https://lovelettee01.tistory.com/61</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 Proxmox에 사설네트워크 구성을 이야기한 적이 있는데 이번에는 내부 네트워크를 조금 더 효율적으로 관리하기 위한 리버스프록시 서버 &lt;b&gt;NPM(Nginx Proxy Manager)&lt;/b&gt;을 이용하여 관리하는 방법을 확인해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 항목은 단지 NPM의 사용설명서 같은 부분이라 딱히 어려울 것이 없이 간단하게 확인만 해보면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 필요에 따라 해당 설정을 하려면 우선적으로 &lt;u&gt;Proxmox에 사설네트워크 구성&lt;/u&gt; 및 &lt;u&gt;NPM( Nginx Proxy Manager )&lt;/u&gt; 설치가 선행되어야 하기 때문에 이 부분은 아래 링크를 통해 확인해 보자.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;Proxmox 사설네트워크 확인 및 사설망 구성&quot; href=&quot;https://lovelettee01.tistory.com/60&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Proxmox 사설네트워크 확인 및 사설망 구성&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;Proxmox에 NPM(Nginx Proxy Manager) 설치 및 SSL적용&quot; href=&quot;https://lovelettee01.tistory.com/58&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Proxmox에 NPM(Nginx Proxy Manager) 설치 및 SSL적용&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 기존 네트워크 구성 및 문제점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM을 적용하기 이전이라면 아래와 같이 내부네트워크가 구성되어 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당설정은 외부에서 호출 시 Proxmox 서버의 네트워크를 거처 내부의 가상 사설네트워크(vmbr1)까지 연결되게 되는데 이때 각각의 서비스에 접근하기 위해서는 각각의 서버로 포트포워딩을 설정해줘야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZVnjd/btsPuQOyIzD/HRnKTKg1evsBKitBmWeXF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZVnjd/btsPuQOyIzD/HRnKTKg1evsBKitBmWeXF0/img.png&quot; data-alt=&quot;NPM적용 전 내부네트워크 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZVnjd/btsPuQOyIzD/HRnKTKg1evsBKitBmWeXF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZVnjd%2FbtsPuQOyIzD%2FHRnKTKg1evsBKitBmWeXF0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;675&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM적용 전 내부네트워크 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 바로 서비스가 추가될 때마다 포트포워딩 설정을 해야 하며 동일한 포트를 사용하는 서비스에 대해서도 포트를 변경해서 사용하여야 하는 상황이 발생하게 되는 문제가 존재한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이제 이 문제를 효율적으로 관리하기 위한 NPM을 이용해 구성해 보도록 하자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. NPM(Nginx Proxy Manager)을 이용한 내부네트워크 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 &lt;b&gt;NPM(Nginx Proxy Manager)&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;WEB UI를 이용하여 네트워크 관리가 용이함&lt;/li&gt;
&lt;li&gt;도메인을 연결하여 간편하게 접근 및 사용가능&lt;/li&gt;
&lt;li&gt;도메인에 SSL을 적용하여 안전한 연결 구현 가능&lt;/li&gt;
&lt;li&gt;외부연결 시 포트는 http(80), https(443) 포트만 포트포워딩 하여 내부에서 사용하는 모든 포트를 포워딩하지 않아도 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 NPM 서버로 포트포워딩 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM은 기본적으로 &lt;u&gt;Http(80)&lt;/u&gt;, &lt;u&gt;Https(443)&lt;/u&gt; 포트를 전달받기 때문에 해당 포트에 대해서 포트포워딩 설정을 진행해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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 class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano /etc/network/interfaces&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;포트 포워딩 설정 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;‼️81번 포트에 대해서는 최초 접근에 필요하며 설정이 완료되면 80, 443 포트만 전달하여 사용가능함&lt;/blockquote&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Port Fowading (http, https -&amp;gt; Nginx Proxy Manager)
post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80

# 웹 관리화면 최초접근시 필요(81)
#post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81
#post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81&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;네트워크 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1753254714890&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl restart networking&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2 웹 관리 페이지 접속 및 연결 설정&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt; Nginx Proxy Manger에 도메인 연결 및 SSL관련한 설정이 완료되었다는 가정하에 설명함.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포트포워딩 설정이 끝난 경우 본인의 &lt;b&gt;[Proxmox 서버 IP]:81&lt;/b&gt; 포트를 통해 NPM 웹 관리 페이지에 접근할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  NPM Web Proxy Host 연결 설정&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;NPM Web UI &amp;gt; Hosts &amp;gt; Proxy Hosts &amp;gt; Add Proxy Host를 통해 등록&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Details 탭
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Domain Names : 사용할 서브도메인 정보 입력&lt;/li&gt;
&lt;li&gt;Forward Hostname / IP : NPM이 설치된 서버 내부 사설 IP 정보 입력&lt;/li&gt;
&lt;li&gt;Forwrad Port : 81 (Web 관리 콘솔 접속 포트)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL 탭&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;본인의 SSL 인증서 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsnRCQ/btsPuDIOQRa/G1OcAjJxiwOzYiu08QH0Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsnRCQ/btsPuDIOQRa/G1OcAjJxiwOzYiu08QH0Nk/img.png&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;739&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.325%; margin-right: 10px;&quot; data-widthpercent=&quot;48.89&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsnRCQ/btsPuDIOQRa/G1OcAjJxiwOzYiu08QH0Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsnRCQ%2FbtsPuDIOQRa%2FG1OcAjJxiwOzYiu08QH0Nk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1095&quot; height=&quot;739&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx4uFx/btsPuKgQIWz/Pu52q5BTmdurnwPKQbmj9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx4uFx/btsPuKgQIWz/Pu52q5BTmdurnwPKQbmj9K/img.png&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;707&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.5122%;&quot; data-widthpercent=&quot;51.11&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx4uFx/btsPuKgQIWz/Pu52q5BTmdurnwPKQbmj9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx4uFx%2FbtsPuKgQIWz%2FPu52q5BTmdurnwPKQbmj9K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1095&quot; height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM Web UI접속 Host 설정정보 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 설정이 완료되었다면 아래와 같이 등록이 완료된 화면을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 해당 도메인을 입력하거나 빨간색 부분을 클릭해 보면 도메인을 통해 정상적으로 접속되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;‼️참고로 해당 도메인으로 접속 설정이 완료되면 프록시 서버에서 내부 서버 및 포트로 이동이 되기 때문에&amp;nbsp;&lt;u&gt;1.1 NPM 서버로 포트포워딩 설정&lt;/u&gt;에서 지정하였던 81번 포트포워딩 설정은 삭제해 줘도 된다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JSKPz/btsPwEspFgh/rFeEETA7CCKv4aUnaHI3lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JSKPz/btsPwEspFgh/rFeEETA7CCKv4aUnaHI3lk/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JSKPz/btsPwEspFgh/rFeEETA7CCKv4aUnaHI3lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJSKPz%2FbtsPwEspFgh%2FrFeEETA7CCKv4aUnaHI3lk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3rarh/btsPvUCQ3cQ/Vh8tkJF4BofplZZkKkQehk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3rarh/btsPvUCQ3cQ/Vh8tkJF4BofplZZkKkQehk/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3rarh/btsPvUCQ3cQ/Vh8tkJF4BofplZZkKkQehk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3rarh%2FbtsPvUCQ3cQ%2FVh8tkJF4BofplZZkKkQehk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM Web Proxy Host 연결 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.3 서비스 추가에 따른 Proxy Hosts 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 실제적인 구성은 끝났다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자 서비스가 추가됨에 따라 &lt;b&gt;Proxy Hosts&lt;/b&gt;에 NPM웹 관리 콘솔을 추가한 것과 같이 추가해 주기만 하면 되는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;별도의 포트 오픈이나 추가 서버 설정 없이도 간단하게 &lt;b&gt;Proxy Hosts&lt;/b&gt;를 등록해 사용하기만 하면 되는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. NPM을 이용한 네트워크 구성 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM을 이용하여 사설네트워크 설정을 마무리하면 이용하면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;최종적으로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;다음과 같은 결과를 얻을 수 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 사설네트워크 설정보다 한층 업그레이드된 느낌이 든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; data-alt=&quot;NPM을 이용한 최종 Proxmox 사설 네트워크 구성도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd7cV4%2FbtsPkGqd6Ix%2Fcyb1YezYo4kCx4PzgPkgL1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;666&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM을 이용한 최종 Proxmox 사설 네트워크 구성도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Proxmox Web 관리콘솔 Proxy Hosts등록‼️&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 내부 사설 네트워크(vmbr1)와 연결된 Proxmox 서버의 가상네트워크(vmbr0)에서 호출되는 Proxmox 웹 관리콘솔(8006)에 대해서도 NPM을 통해 접속되도록 설정해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명한 것과 같이 간단하게 Proxy Host를 등록해 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IYT8C/btsPxV8B5CM/36gbhMOLF0ZaTTfXtK9HD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IYT8C/btsPxV8B5CM/36gbhMOLF0ZaTTfXtK9HD0/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IYT8C/btsPxV8B5CM/36gbhMOLF0ZaTTfXtK9HD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIYT8C%2FbtsPxV8B5CM%2F36gbhMOLF0ZaTTfXtK9HD0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PizMi/btsPwWsIQc8/h1XsAHpWr1v7AGsDeDSkLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PizMi/btsPwWsIQc8/h1XsAHpWr1v7AGsDeDSkLK/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PizMi/btsPwWsIQc8/h1XsAHpWr1v7AGsDeDSkLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPizMi%2FbtsPwWsIQc8%2Fh1XsAHpWr1v7AGsDeDSkLK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Proxmox Web 관리콘솔 Proxy Hosts등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 처럼 등록되기는 했지만 '&lt;i&gt;도메인으로 너무 여러 번 리디렉션 되었습니다.'&lt;/i&gt; 문구가 표시되며 실제 연결이 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 SSL호출 시 NPM서버의 사설 네트워크망(vmbr1)과 다른 가상네트워크(vmbr0)로 호출이 되기 때문에 문제가 발생한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctWKNh/btsPvD2f819/4pds1yCMfPklFtp902VZ10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctWKNh/btsPvD2f819/4pds1yCMfPklFtp902VZ10/img.png&quot; data-alt=&quot;NPM 도메인 접속오류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctWKNh/btsPvD2f819/4pds1yCMfPklFtp902VZ10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctWKNh%2FbtsPvD2f819%2F4pds1yCMfPklFtp902VZ10%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM 도메인 접속오류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 NPM의 proxy_ssl_verify 기능을 사용하지 않는 것으로 간단하게 해결 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 설정화면으로 들어가서 &lt;b&gt;Advanced 탭 &amp;gt; Custom Nginx Configuration&lt;/b&gt; 부분에 아래 항목을 추가해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1753259095208&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;proxy_ssl_verify off;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PXWHJ/btsPwW0zsqh/QQuuACc0LAS3EnaArc9RJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PXWHJ/btsPwW0zsqh/QQuuACc0LAS3EnaArc9RJK/img.png&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.6692%; margin-right: 10px;&quot; data-widthpercent=&quot;50.25&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PXWHJ/btsPwW0zsqh/QQuuACc0LAS3EnaArc9RJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPXWHJ%2FbtsPwW0zsqh%2FQQuuACc0LAS3EnaArc9RJK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3zauz/btsPwY5bfYj/A0mQjx100h2h7YWPC2vNa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3zauz/btsPwY5bfYj/A0mQjx100h2h7YWPC2vNa1/img.png&quot; data-origin-width=&quot;1079&quot; data-origin-height=&quot;759&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.168%;&quot; data-widthpercent=&quot;49.75&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3zauz/btsPwY5bfYj/A0mQjx100h2h7YWPC2vNa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3zauz%2FbtsPwY5bfYj%2FA0mQjx100h2h7YWPC2vNa1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM의 proxy_ssl_verify 기능 Off&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 잠시 후 다시 접속을 해보면 짠!! 이제 Proxmox 역시 도메인을 통해 접속이 완료되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqA38L/btsPws7P0iI/5CD3Yu9cXhAbGsl6ZTj5Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqA38L/btsPws7P0iI/5CD3Yu9cXhAbGsl6ZTj5Ok/img.png&quot; data-alt=&quot;NPM을 이용한 Proxmox UI접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqA38L/btsPws7P0iI/5CD3Yu9cXhAbGsl6ZTj5Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqA38L%2FbtsPws7P0iI%2F5CD3Yu9cXhAbGsl6ZTj5Ok%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1090&quot; height=&quot;759&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM을 이용한 Proxmox UI접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;&lt;b&gt;Proxmox Web UI Console(Shell) 접속 오류&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;NPM을 이용하여 호출된 Proxmox 웹 관리 페이지에서 Web Console(Shell) 접속 시 &lt;u&gt;'undefined'가&lt;/u&gt; 뜨면서 오류가 나는 경우가 있는데 이 부분은 Proxy Hosts 설정의 '&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;u&gt;Websockets Support&lt;/u&gt;&lt;/span&gt;'를 활성화해서 연결해 주면 된다.&lt;br /&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eodD2B/btsPwASxJMi/pKKSWkfNMUQMgklEQqsZ90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eodD2B/btsPwASxJMi/pKKSWkfNMUQMgklEQqsZ90/img.png&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;459&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.0656%; margin-right: 10px;&quot; data-widthpercent=&quot;46.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eodD2B/btsPwASxJMi/pKKSWkfNMUQMgklEQqsZ90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeodD2B%2FbtsPwASxJMi%2FpKKSWkfNMUQMgklEQqsZ90%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;787&quot; height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lo7n3/btsPw2gOBDV/yI4NO3tG5ypRrZbupeoAu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lo7n3/btsPw2gOBDV/yI4NO3tG5ypRrZbupeoAu0/img.png&quot; style=&quot;width: 52.6968%;&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;622&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;53.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lo7n3/btsPw2gOBDV/yI4NO3tG5ypRrZbupeoAu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flo7n3%2FbtsPw2gOBDV%2FyI4NO3tG5ypRrZbupeoAu0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1220&quot; height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Websockets Support 활성화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 최종 구성도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 작업이 완료되면 아래와 같이 깔끔하게 NPM을 이용하여 모든 구성이 가능해진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9sECM/btsPxTQK71C/XP7AOoRFqxQD6d2fDTPTu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9sECM/btsPxTQK71C/XP7AOoRFqxQD6d2fDTPTu0/img.png&quot; data-alt=&quot;NPM을 이용한 최종 네트워크 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9sECM/btsPxTQK71C/XP7AOoRFqxQD6d2fDTPTu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9sECM%2FbtsPxTQK71C%2FXP7AOoRFqxQD6d2fDTPTu0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;893&quot; height=&quot;669&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM을 이용한 최종 네트워크 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 보안이 더 필요하다면 공유기랑 NPM서버 사이에 오픈소스 웹 방화벽(OPNsense, pfSense 등)을 구축한다면 기본적인 서버구성은 마무리되지 않을까 한다.&lt;/p&gt;</description>
      <category>Proxmox/Network</category>
      <category>nginxproxymanager</category>
      <category>NPM</category>
      <category>Proxmox</category>
      <category>proxmox 네트워크</category>
      <category>Proxmox 사설네트워크</category>
      <category>ssl</category>
      <category>내부네트워크 설정</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/61</guid>
      <comments>https://lovelettee01.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 24 Jul 2025 14:07:04 +0900</pubDate>
    </item>
    <item>
      <title>Proxmox 네트워크 확인 및 사설망 구성</title>
      <link>https://lovelettee01.tistory.com/60</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며..&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 네트워크 설정을 해야 할까?라는 단순한 질문에 사실 설정 하지 않아도 Proxmox 사용하는데 지장은 없다고 답할 수 있다.&lt;br /&gt;그런데 굳지 하지 않아도 되는 네트워크 설정을 하는 이유는 이왕 설치 한이상 좀 더 효율적으로 사용하기 위함이랄까??&lt;br /&gt;너무 단순하게 이야기했지만 이 부분은 필요한 사람만 필요에 따라 설정을 해 사용하면 된다는 이야기이다.&lt;br /&gt;그럼 필요한 사람들만의 효율적인 Proxmox사용을 위해 사설 네트워크 설정을 진행해 보자!~&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt; &lt;u&gt;Private IP(사설 IP)란?&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;보통 집에서 인터넷을 이용할 경우 대부분 통신사 공유기 또는 별도의 공유기를 통해서 연결되어 있을 것이다.&lt;br /&gt;해당 공유기를 통해서 외부와 &lt;u&gt;Public IP(공인 IP)&lt;/u&gt;를 통해 인터넷 연결을 하고 집내부의 기기들은 &lt;u&gt;Private IP(사설 IP)&lt;/u&gt;를 할당받아 사용하게 되는데 이때 우리가 보는 &lt;b&gt;192&lt;/b&gt; 또는 &lt;b&gt;172&lt;/b&gt;로 시작하는 IP들이 이에 해당한다.&lt;br /&gt;&lt;br /&gt;이렇게 사설 IP를 이용하는 이유는 사용하는 IT기기들이 늘어남에 따라 공유기를 통해 굳이 공인 IP를 사용해야 하지 않아도 되는 장비나 기기들에 대해 중복으로 사용가능한 IP를 효율적으로 제공하기 위함이다.&lt;br /&gt;&lt;br /&gt;보통은 공유기에서 자동으로 할당해 주는 방식(DHCP)으로 사용하여 할당되지 않은 새로운 IP로 자동으로 생성해 주기 때문에 신경 쓰지 않아도 되지만 이렇게 생성된 사설 IP는 내부에서만 사용되는 IP이고 외부에서 접속이 되지 않기 때문에 필요에 따라 외부에서 접속 가능하도록 포트포워드등 라우팅 설정을 해주어야 한다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Proxmox의 기본 네트워크 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여느 OS처럼 Proxmox를 설치하면 본인의 물리적 네트워크 카드(NIC)에 의해서 초기설정한 IP대역으로 연결이 된다.&lt;br /&gt;이때의 IP가 위에서 설명한 사설 IP가 할당되며 해당 IP를 통해서 해당 Proxmox의 서비스에 접속하게 된다.&lt;br /&gt;그래서 Proxmox 실행 시 설정한 사설 IP:8006 포트를 통해 WebUI에도 접근하여 사용가능하다.&lt;br /&gt; &lt;u&gt;참고로 앞서 설명했듯이 해당 사설 IP로는 내부에서만 접속되며 외부에서 접속하려면 공유기 설정에서 8006 포트를 포트포워딩 해줘야 한다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnI2d/btsPj9l49mo/y1pw2Y2fFLvaMxdGgdEF71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnI2d/btsPj9l49mo/y1pw2Y2fFLvaMxdGgdEF71/img.png&quot; data-alt=&quot;사설IP가 할당된 Proxmox 기본 네트워크&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnI2d/btsPj9l49mo/y1pw2Y2fFLvaMxdGgdEF71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnI2d%2FbtsPj9l49mo%2Fy1pw2Y2fFLvaMxdGgdEF71%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;421&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사설IP가 할당된 Proxmox 기본 네트워크&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 네트워크 정보확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 통해 현재 설정된 Proxmox의 네트워크 정보를 확인해 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano /etc/network/interfaces&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;auto lo
iface lo inet loopback

# ens33은 NIC에 대한 정보이다.
iface ens33 inet manual

# 가상 브릿지 [ vm(가상) + br(브릿지) + 일련번호 ]
# vmbr0(Linux Bridge)가 자동으로 생성되며 ens33으로부터 모든 포트를 전달받아 외부와 통신한다.
auto vmbr0
iface vmbr0 inet static
        address 192.168.0.70/24
        gateway 192.168.0.1
        bridge-ports ens33
        bridge-stp off
        bridge-fd 0&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;ens33 : NIC(물리적 네트워크 카드)에 대한 정보(각자마다 이름은 다를 수 있음)&lt;/li&gt;
&lt;li&gt;vmbr0 : 가상 Linux Bridge로서 Proxmox 설치 시 자동으로 생성되며 ens33과 연결되어 외부와의 모든 통신이 이루어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;WebUI &amp;gt; [본인 Node] &amp;gt; System &amp;gt; Network를 통해서도 확인 가능하다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8BGed/btsPgE80h5r/ahOkidwrZsE7jDecgbGTe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8BGed/btsPgE80h5r/ahOkidwrZsE7jDecgbGTe0/img.png&quot; data-alt=&quot;Proxmox Web Network 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8BGed/btsPgE80h5r/ahOkidwrZsE7jDecgbGTe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8BGed%2FbtsPgE80h5r%2FahOkidwrZsE7jDecgbGTe0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1426&quot; height=&quot;774&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox Web Network 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 서비스 추가에 따른 네트워크 구성도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 네트워크 구성으로 서비스들을 추가할 경우 아래와 같이 구성될 것이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;새로운 서비스가 추가&lt;/li&gt;
&lt;li&gt;공유기로부터 새로운 사설 IP할당&lt;/li&gt;
&lt;li&gt;외부접속을 위한 공유기의 포트포워딩 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HK6jf/btsPjpbXHbr/QGQZxYsKxlTlfKsh5bIksk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HK6jf/btsPjpbXHbr/QGQZxYsKxlTlfKsh5bIksk/img.png&quot; data-alt=&quot;기본 네트워크 설정에서의 서비스 구성도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HK6jf/btsPjpbXHbr/QGQZxYsKxlTlfKsh5bIksk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHK6jf%2FbtsPjpbXHbr%2FQGQZxYsKxlTlfKsh5bIksk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;891&quot; height=&quot;652&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 네트워크 설정에서의 서비스 구성도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.3 기본 네트워크의 문제점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명한 것처럼 공유기 사설 IP대역이 허락하는 한 포트포워딩등 설정을 통해서 서비스를 추가해 나가는 것에는 문제가 없다.&lt;br /&gt;하지만 서비스가 많아지고 복잡해지며 또한 보안적인 측면에서도 위처럼 관리하는 것은 바람직하지 않을 것이다.&lt;br /&gt;이 때문에 공유기 역시 Router로서 사설 IP를 사용하는 것이다.&lt;br /&gt;각설하고 그럼 이제 Proxmox에도 사설망으로 네트워크를 구성해 보자~&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Proxmox 사설 네트워크 설정&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 사설 네트워크는 사설 가상 브릿지 생성 &amp;gt; NAT설정 &amp;gt; 포트포워딩 설정 순으로 진행된다.&lt;br /&gt;과정은 필요 없다 한다면 &lt;u&gt;2.4 최종 네트워크 설정정보&lt;/u&gt; 부분만 확인해 보면 된다.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 사설 가상브리지 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 사설망의 IP대역은 10.1.1.xxx대역을 사용하였는데 IP대역에 대해서는 아래 표를 참조하면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;&lt;b&gt;사설 IP대역&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;사설 IP라고 해서 아무것이나 사용하는 것은 아니며 미리 약속된 대역대가 존재함으로 확인해서 사용하면 된다. &lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;144&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%82%AC%EC%84%A4%EB%A7%9D&quot; target=&quot;_blank&quot; title=&quot;사설IP대역&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6tnvH/btsPkvo1ikV/3VlkSq2uTnmPtYsPrGGGX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6tnvH%2FbtsPkvo1ikV%2F3VlkSq2uTnmPtYsPrGGGX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;970&quot; height=&quot;144&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;사설 IP대역 (출처 : 위키피디아)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 통해 네트워크 설정에 진입해 아래와 같이 사설 가상 브리지(vmbr1)를 추가해 보자.&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 class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano /etc/network/interfaces&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;사설 가상 브릿지 (vmbr1) 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# vmbr1 사설 가상 네트워크 구성
auto vmbr1
iface vmbr1 inet static
        address 10.1.1.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0&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;네트워크 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;systemctl restart networking&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생성한 &lt;b&gt;사설 가상 브리지(vmbr1)&lt;/b&gt;는 &lt;b&gt;가상 브리지(vmbr0)&lt;/b&gt;와 다르게 &lt;u&gt;bridge-ports&lt;/u&gt;가 &lt;i&gt;none&lt;/i&gt;으로 설정되어 있기 때문에 NIC과 연결이 되어있지 않다 그래서 실제로 외부와 통신은 되지 않고 오직 vmbr0 과의 내부 네트워크 통신만 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qMIrQ/btsPiJ97yaM/jNKLZ9qb58Qfjwei1kZkn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qMIrQ/btsPiJ97yaM/jNKLZ9qb58Qfjwei1kZkn0/img.png&quot; data-alt=&quot;사설 가상 브리지 생성 및 외부연결 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qMIrQ/btsPiJ97yaM/jNKLZ9qb58Qfjwei1kZkn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqMIrQ%2FbtsPiJ97yaM%2FjNKLZ9qb58Qfjwei1kZkn0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;918&quot; height=&quot;373&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사설 가상 브리지 생성 및 외부연결 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래에서 보듯이 실제로 컨테이너에 새로 생성한 &lt;b&gt;사설 가상브릿지 네트워크(vmbr1)&lt;/b&gt; 연결 시 외부 연결은 되지 않지만 내부와의 연결은 가능한 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L2FJU/btsPoteqiF9/NoM568n6DwOQLW4LwX6z71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L2FJU/btsPoteqiF9/NoM568n6DwOQLW4LwX6z71/img.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;510&quot; style=&quot;width: 48.581%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L2FJU/btsPoteqiF9/NoM568n6DwOQLW4LwX6z71/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2FJU%2FbtsPoteqiF9%2FNoM568n6DwOQLW4LwX6z71%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/98ASt/btsPom7vLih/WcfYVZy4AnLBB3Fu2hjT41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/98ASt/btsPom7vLih/WcfYVZy4AnLBB3Fu2hjT41/img.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;493&quot; style=&quot;width: 50.2562%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/98ASt/btsPom7vLih/WcfYVZy4AnLBB3Fu2hjT41/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F98ASt%2FbtsPom7vLih%2FWcfYVZy4AnLBB3Fu2hjT41%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;vmbr1 가상 브릿지 연결시 외부연결 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 사설 가상브릿지 NAT 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vmbr0은 NIC와 연결되어 외부통신이 가능하고 vmbr1은 vmbr0과의 내부통신이 가능함으로 두 개의 가상 브릿지를 NAT로 연결하여 외부호출 시 vmbr0에서 vmbr1로 전달하게 함으로써 외부와의 통신연결을 하도록 하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBv9ih/btsPp1VB1kd/Z9JVJjDQbxVs9PWGs358dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBv9ih/btsPp1VB1kd/Z9JVJjDQbxVs9PWGs358dK/img.png&quot; data-alt=&quot;외부호출 &amp;amp;harr; vmbr0 &amp;amp;harr; vmbr1 호출과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBv9ih/btsPp1VB1kd/Z9JVJjDQbxVs9PWGs358dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBv9ih%2FbtsPp1VB1kd%2FZ9JVJjDQbxVs9PWGs358dK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;855&quot; height=&quot;346&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;외부호출 &amp;harr; vmbr0 &amp;harr; vmbr1 호출과정&lt;/figcaption&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;네트워크 설정 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano /etc/network/interfaces&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;사설 가상브릿지 NAT 설정 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# NAT Setting
post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
post-up   iptables -t nat -A POSTROUTING -s '10.1.1.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.1.1.0/24' -o vmbr0 -j MASQUERADE&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;네트워크 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;systemctl restart networking&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctt9TC/btsPpY5mXJT/9ir7pJdzru4AFUsBdkSfe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctt9TC/btsPpY5mXJT/9ir7pJdzru4AFUsBdkSfe0/img.png&quot; data-alt=&quot;NAT 설정을 통한 외부통신 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctt9TC/btsPpY5mXJT/9ir7pJdzru4AFUsBdkSfe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctt9TC%2FbtsPpY5mXJT%2F9ir7pJdzru4AFUsBdkSfe0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1557&quot; height=&quot;567&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NAT 설정을 통한 외부통신 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 사설 가상브릿지의 외부 통신 연결을 위한 NAT설정이 완료되면 가상 사설 네트워크(vmbr1)에서도 외부 통신이 가능해진다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 외부 접속을 위한 포트포워딩 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAT설정이 끝나면 외부와의 통신은 되기는 하지만 이때도 내부에서 외부로의 통신은 가능한데 실제로 외부에서 내부의 서비스를 접속하려면 해당 서버로 포트를 연결해 줘야 한다.&lt;br /&gt;이것은 공유기에서 사설 IP생성한 것과 동일한 이유로 내부의 사설 IP에 대해서는 외부에서 접근할 수 없기 때문에 외부에서 접속하려고 할 경우 포트포워딩을 통해 해당 포트를 vmbr1로 전달해 접속하려는 서버를 연결해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DYohG/btsPqmrMd0J/oqGVvblkxperUm8VKKGKmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DYohG/btsPqmrMd0J/oqGVvblkxperUm8VKKGKmk/img.png&quot; data-alt=&quot;가상 사설 네트워크(vmbr1)로 포트포워딩&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DYohG/btsPqmrMd0J/oqGVvblkxperUm8VKKGKmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDYohG%2FbtsPqmrMd0J%2FoqGVvblkxperUm8VKKGKmk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;657&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가상 사설 네트워크(vmbr1)로 포트포워딩&lt;/figcaption&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;네트워크 설정 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;nano /etc/network/interfaces&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;포트 포워딩 설정 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 아래 예시에서는 NPM(Nginx Proxy Manager)의 포트 포워딩을 설정하고 있다.&lt;br /&gt;- http(80), https(443), webui(81) 포트에 대해서 사설네트워크(vmbr1)를 이용한 서버로 포트포워딩 해준다.&lt;/blockquote&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Port Fowading (http, https, webui -&amp;gt; Nginx Proxy Manager)
post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80
post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81&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;네트워크 서비스 재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;systemctl restart networking&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4 최종 네트워크 설정 정보 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 사설네트워크 설정이 완료된 네트워크 설정파일은 아래와 같다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;auto lo
iface lo inet loopback

# ens33은 NIC에 대한 정보이다. (각자 다를수 있음)
iface ens33 inet manual

# 가상 브릿지 [ vm(가상) + br(브릿지) + 일련번호 ]
# vmbr0(Linux Bridge)가 자동으로 생성되며 ens33으로부터 모든 포트를 전달받아 외부와 통신한다.
auto vmbr0
iface vmbr0 inet static
        address 192.168.0.70/24
        gateway 192.168.0.1
        bridge-ports ens33
        bridge-stp off
        bridge-fd 0

# vmbr1 사설 가상 네트워크 구성
auto vmbr1
iface vmbr1 inet static
        address 10.1.1.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0

        # NAT Setting
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.1.1.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.1.1.0/24' -o vmbr0 -j MASQUERADE

        # Port Fowading (http, https -&amp;gt; Nginx Proxy Manager)
        post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.1.1.2:443
        post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.1.1.2:80
        post-up   iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81
        post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 81 -j DNAT --to 10.1.1.2:81

source /etc/network/interfaces.d/*&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 외부 접속 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모든 설정이 마무리되었으므로 외부에서 접속해 보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 공유기 포트포워딩 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자의 공유기에서 http(80), https(443), webui(81) 포트에 대해서 포트포워딩 설정을 진행하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZUMD3/btsPtAK5agv/92n2NFnyeLN580SktXSBX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZUMD3/btsPtAK5agv/92n2NFnyeLN580SktXSBX1/img.png&quot; data-alt=&quot;공유기 포트포워딩 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZUMD3/btsPtAK5agv/92n2NFnyeLN580SktXSBX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZUMD3%2FbtsPtAK5agv%2F92n2NFnyeLN580SktXSBX1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1203&quot; height=&quot;122&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공유기 포트포워딩 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 NPM 관리 콘솔 접속 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 모든 설정이 정상적으로 되었다면 Proxmox의 기본 네트워크 주소에 81 포트로 아래와 같이 외부에서 내부의 NPM서버 관리 웹 페이지로 접속이 되는 것을 확인할 수 있다. &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6oPiM/btsPtCvrzac/MqJLjvTRZjb0ZvYqtt09dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6oPiM/btsPtCvrzac/MqJLjvTRZjb0ZvYqtt09dk/img.png&quot; data-alt=&quot;NPM 웹 관리 콘솔접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6oPiM/btsPtCvrzac/MqJLjvTRZjb0ZvYqtt09dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6oPiM%2FbtsPtCvrzac%2FMqJLjvTRZjb0ZvYqtt09dk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1185&quot; height=&quot;743&quot; data-origin-width=&quot;1185&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM 웹 관리 콘솔접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.3 문제점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 여기도 여전히 문제점은 존재하는데 외부호출 과정에 대해 작업한 것을 포함해 요약해 보면 아래와 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;외부호출&lt;/li&gt;
&lt;li&gt;공유기 포트포워딩 설정&lt;/li&gt;
&lt;li&gt;Proxmox 네트워크(vmbr0) 호출 &amp;harr; Proxmox 사설네트워크(vmbr1) NAT설정을 통한 통신&lt;/li&gt;
&lt;li&gt;Proxmox 사설네트워크(vmbr1) 포트포워딩 설정을 통한 서버 연결&lt;/li&gt;
&lt;li&gt;서버 호출 완료&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리적인 측면에서 Proxmox내부에 사설네트워크를 구축하긴 했지만 서비스가 추가될 경우 해당 서비스에서 사용할 포트에 대해서 공유기 및 내부 사설네트워크(vmbr1)에 모두 포트포워딩 설정을 진행해 줘야 하기 때문에 비효율 적인 것은 여전할 수 있다.&lt;br /&gt;동일한 포트를 사용하는 서비스에 대해서도 사용할 수 없는 문제 역시 있기 때문에 포트를 변경해서 사용하여야 하는 상황이 발생할 문제 또한 존재한다.&lt;br /&gt;&lt;br /&gt;이러한 문제를 해결하기 위하여 위에서 예제로 설명한 &lt;b&gt;NPM(Nginx Proxy Manager)&lt;/b&gt;을 이용할 수 있는데 내용이 길어지는 관계로 아래 별도의 게시물을 통해 확인해 볼 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1753334265267&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;NPM을 이용한 Proxmox 내부 네트워크 설정&quot; data-og-description=&quot;들어가며..이전에 Proxmox에 사설네트워크 구성을 이야기한 적이 있는데 이번에는 내부 네트워크를 조금 더 효율적으로 관리하기 위한 리버스프록시 서버 NPM(Nginx Proxy Manager)을 이용하여 관리하는&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/61&quot; data-og-url=&quot;https://lovelettee01.tistory.com/61&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/V7fQT/hyZrAfaw1u/wjXyJhwPbTT8P8AKvob0jk/img.png?width=800&amp;amp;height=599&amp;amp;face=0_0_800_599,https://scrap.kakaocdn.net/dn/la0fJ/hyZnfKEDk9/ZcLAOKgKJn4j7kgN5UYKK1/img.png?width=800&amp;amp;height=599&amp;amp;face=0_0_800_599,https://scrap.kakaocdn.net/dn/mQNQs/hyZqVDLidl/cAKYpcJNecqlsQV1DskK41/img.png?width=1090&amp;amp;height=759&amp;amp;face=0_0_1090_759&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/61&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/61&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/V7fQT/hyZrAfaw1u/wjXyJhwPbTT8P8AKvob0jk/img.png?width=800&amp;amp;height=599&amp;amp;face=0_0_800_599,https://scrap.kakaocdn.net/dn/la0fJ/hyZnfKEDk9/ZcLAOKgKJn4j7kgN5UYKK1/img.png?width=800&amp;amp;height=599&amp;amp;face=0_0_800_599,https://scrap.kakaocdn.net/dn/mQNQs/hyZqVDLidl/cAKYpcJNecqlsQV1DskK41/img.png?width=1090&amp;amp;height=759&amp;amp;face=0_0_1090_759');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;NPM을 이용한 Proxmox 내부 네트워크 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;들어가며..이전에 Proxmox에 사설네트워크 구성을 이야기한 적이 있는데 이번에는 내부 네트워크를 조금 더 효율적으로 관리하기 위한 리버스프록시 서버 NPM(Nginx Proxy Manager)을 이용하여 관리하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 보기로 NPM을 이용하여 사설네트워크 설정을 마무리하면 최종적으로 다음과 같은 결과를 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; data-alt=&quot;최종 Proxmox 사설 네트워크 구성도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd7cV4/btsPkGqd6Ix/cyb1YezYo4kCx4PzgPkgL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd7cV4%2FbtsPkGqd6Ix%2Fcyb1YezYo4kCx4PzgPkgL1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;906&quot; height=&quot;666&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 Proxmox 사설 네트워크 구성도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 하나하나 풀어서 설명하다 보니 먼가 엄청 장황하게 설명해 복잡한 것 같지만 어쩌면 굉장히 간단한 작업이라고 할 수도 있다.&lt;br /&gt;하지만 한번 설정해 두면 관리나 사용상 편리하게 사용할 수 있으니 한 번쯤은 구현해서 사용해 보도록 하자.&lt;/p&gt;</description>
      <category>Proxmox/Network</category>
      <category>NPM</category>
      <category>Proxmox</category>
      <category>proxmox 네트워크</category>
      <category>Proxmox 사설네트워크</category>
      <category>reverse proxy</category>
      <category>vmbr</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/60</guid>
      <comments>https://lovelettee01.tistory.com/60#entry60comment</comments>
      <pubDate>Tue, 15 Jul 2025 17:24:23 +0900</pubDate>
    </item>
    <item>
      <title>Nginx Prorxy Manager 차근차근 수동 설치하기(feat. Proxmox)</title>
      <link>https://lovelettee01.tistory.com/59</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; 들어가며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 NPM(Nginx Proxy Manager) 설치 방법은 이미 너무 다양하며 자동으로 간단하게 설치할 수 있는 스크립트 또한 존재하기 때문에 단순히 NPM만을 설치하려 한다면 굳이 수동으로 설치하지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크립트를 이용한 자동설치는 아래 링크를 통해 간단하게 설치할 수 있는 방법으로 설치를 권장한다.&lt;/p&gt;
&lt;figure id=&quot;og_1749106439131&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Proxmox에 NPM(Nginx Proxy Manager) 및 SSL적용&quot; data-og-description=&quot;1. 사전준비NPM(Nginx Proxy Manager)을 설치하기에 앞서 도메인 준비 및 리버스 프록시 서버(Reverse Proxy Server)의 개념에 대해서만 알고 넘어가자.1.1 도메인(Domain) 준비HTTPS의 SSL연결을 사용하려면 기본&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/58&quot; data-og-url=&quot;https://lovelettee01.tistory.com/58&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FehxW/hyY44H6wta/ChUVQtFQ7GTyyCl27ARkLK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/Ch4jG/hyY05PsokI/1UnNsFr88HRVzQr2e4cpDk/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/mQrYn/hyY36sCdP8/N417SQbfDqyGh6BBPPFlj1/img.png?width=1239&amp;amp;height=798&amp;amp;face=0_0_1239_798&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/58&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/58&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FehxW/hyY44H6wta/ChUVQtFQ7GTyyCl27ARkLK/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/Ch4jG/hyY05PsokI/1UnNsFr88HRVzQr2e4cpDk/img.png?width=800&amp;amp;height=476&amp;amp;face=0_0_800_476,https://scrap.kakaocdn.net/dn/mQrYn/hyY36sCdP8/N417SQbfDqyGh6BBPPFlj1/img.png?width=1239&amp;amp;height=798&amp;amp;face=0_0_1239_798');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Proxmox에 NPM(Nginx Proxy Manager) 및 SSL적용&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 사전준비NPM(Nginx Proxy Manager)을 설치하기에 앞서 도메인 준비 및 리버스 프록시 서버(Reverse Proxy Server)의 개념에 대해서만 알고 넘어가자.1.1 도메인(Domain) 준비HTTPS의 SSL연결을 사용하려면 기본&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Proxmox의 LXC컨테이너 또는 VM에 NPM 이외에 다른 서비스들도 함께 설치 및 관리하려 하는 경우 등 각자의 이유로 수동으로 설치를 해야 하는 경우가 존재하기 때문에 확인하여 설치를 진행해 보자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. LXC 컨테이너 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 Proxmox에 NPM을 설치할 LXC컨테이너를 생성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 생성방법은 간단하지만 설명해야 할 부분이 좀 있기에 기존 정리해 놓은 아래 링크로 대체하도록 함.&lt;/p&gt;
&lt;figure id=&quot;og_1749109368560&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Proxmox VE 리눅스 컨테이너(LXC)생성&quot; data-og-description=&quot;Proxmox VE에서는 LXC(Linux Container)와 KVM(Kernel-based Virtual Machine) 두 가지의 가상화 기술을 동시에 지원한다.오늘은 LXC에 대해 알아보고 Proxmox에서 설치 및 사용방법에 대해서도 알아보자.1. LXC(Linux Cont&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/51&quot; data-og-url=&quot;https://lovelettee01.tistory.com/51&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgqe9s/hyY1c8UapG/VXwXMn12ReaFfn3j45wNvK/img.png?width=724&amp;amp;height=537&amp;amp;face=0_0_724_537,https://scrap.kakaocdn.net/dn/cv5kTe/hyY1fEv5N2/URdVCNIeAF4UnDMWIbLsJK/img.png?width=724&amp;amp;height=537&amp;amp;face=0_0_724_537,https://scrap.kakaocdn.net/dn/DzgMN/hyY1fqYQRJ/1WGtEkHowVJOSxhxsre6Gk/img.png?width=1428&amp;amp;height=767&amp;amp;face=0_0_1428_767&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/51&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgqe9s/hyY1c8UapG/VXwXMn12ReaFfn3j45wNvK/img.png?width=724&amp;amp;height=537&amp;amp;face=0_0_724_537,https://scrap.kakaocdn.net/dn/cv5kTe/hyY1fEv5N2/URdVCNIeAF4UnDMWIbLsJK/img.png?width=724&amp;amp;height=537&amp;amp;face=0_0_724_537,https://scrap.kakaocdn.net/dn/DzgMN/hyY1fqYQRJ/1WGtEkHowVJOSxhxsre6Gk/img.png?width=1428&amp;amp;height=767&amp;amp;face=0_0_1428_767');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Proxmox VE 리눅스 컨테이너(LXC)생성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Proxmox VE에서는 LXC(Linux Container)와 KVM(Kernel-based Virtual Machine) 두 가지의 가상화 기술을 동시에 지원한다.오늘은 LXC에 대해 알아보고 Proxmox에서 설치 및 사용방법에 대해서도 알아보자.1. LXC(Linux Cont&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; Ubuntu 22.04 컨테이너 생성완료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 생성이 완료되면 다음과 같은 화면을 볼 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  최초 컨테이너 생성 이후에는 패키지 업데이트를 진행해 주는 것이 좋다.&lt;br /&gt;
&lt;pre id=&quot;code_1749457168038&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by7YAZ/btsOy0jAyvR/qPrhCDsqTB3Qdgp1GkaIVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by7YAZ/btsOy0jAyvR/qPrhCDsqTB3Qdgp1GkaIVk/img.png&quot; data-alt=&quot;Ubuntu 22.04설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by7YAZ/btsOy0jAyvR/qPrhCDsqTB3Qdgp1GkaIVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby7YAZ%2FbtsOy0jAyvR%2FqPrhCDsqTB3Qdgp1GkaIVk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1202&quot; height=&quot;698&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;698&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Ubuntu 22.04설치 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker 및 Docker-Compose 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 NPM을 설치하려면 공식 사이트에서도 Docker-Compose를 이용하여 설치하는 것을 설명하고 있으므로 생성한 컨테이너에 Docker관련 항목들을 설치를 진행해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 패키지 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1749710866082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 필수 패키지 설치&lt;/p&gt;
&lt;pre id=&quot;code_1749711256459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install curl -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 스크립트를 통해 Docker 설치&lt;/p&gt;
&lt;pre id=&quot;code_1749712562896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sh ./get-docker.sh
or
curl -fsSL https://get.docker.com/ | sudo sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Docker 설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1749712654007&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;service docker status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgsa6u/btsOyvKTgcd/RnfPEPdLBMCv4bpO5Hyuqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgsa6u/btsOyvKTgcd/RnfPEPdLBMCv4bpO5Hyuqk/img.png&quot; data-alt=&quot;Docker 설치 및 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgsa6u/btsOyvKTgcd/RnfPEPdLBMCv4bpO5Hyuqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcgsa6u%2FbtsOyvKTgcd%2FRnfPEPdLBMCv4bpO5Hyuqk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1274&quot; height=&quot;279&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 설치 및 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Nginx Proxy Manager 설치&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 설치 가이드 확인 및 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nginx Proxy Manager의 공식 사이트에 접속해 &lt;i&gt;Get Started&lt;/i&gt;를 클릭하거나 [&lt;a style=&quot;color: #0070d1;&quot; title=&quot;Nginx Proxy Manager Guide&quot; href=&quot;https://nginxproxymanager.com/guide/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;가이드&lt;/a&gt;] 링크를 통해 확인 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7hCw7/btsOF5k7lvL/XPxqDBrA4mmrJuMqviAZBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7hCw7/btsOF5k7lvL/XPxqDBrA4mmrJuMqviAZBK/img.png&quot; data-alt=&quot;Nginx Proxy Manager Guide&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7hCw7/btsOF5k7lvL/XPxqDBrA4mmrJuMqviAZBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7hCw7%2FbtsOF5k7lvL%2FXPxqDBrA4mmrJuMqviAZBK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1182&quot; height=&quot;864&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Nginx Proxy Manager Guide&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; Quick Setup으로 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 간단하게 설치할 수 있는 방법으로 차례대로 진행해 보면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 관리의 용이성을 위해 설치하려는 폴더를 미리지정해 설치를 진행하도록 하자.(선택사항)&lt;br /&gt;
&lt;pre id=&quot;code_1750231078936&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p /services/npm &amp;amp;&amp;amp; cd /services/npm&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가이드에서 설명하는 데로 docker-compose 파일을 작성해서 설치를 진행해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1750231524754&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nano docker-compose.yml&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1750230524467&quot; class=&quot;yaml&quot; data-ke-language=&quot;yaml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1750232329142&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFfutt/btsOGQnofrO/NTb6PnnIpWCOW1kNKoOy7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFfutt/btsOGQnofrO/NTb6PnnIpWCOW1kNKoOy7k/img.png&quot; style=&quot;width: 65.3991%; margin-right: 10px;&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;324&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;66.17&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFfutt/btsOGQnofrO/NTb6PnnIpWCOW1kNKoOy7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFfutt%2FbtsOGQnofrO%2FNTb6PnnIpWCOW1kNKoOy7k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;672&quot; height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3SQWT/btsOHI3bWAX/2KrDABKcA2y8UkI38QKKQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3SQWT/btsOHI3bWAX/2KrDABKcA2y8UkI38QKKQk/img.png&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;612&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.4381%;&quot; data-widthpercent=&quot;33.83&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3SQWT/btsOHI3bWAX/2KrDABKcA2y8UkI38QKKQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3SQWT%2FbtsOHI3bWAX%2F2KrDABKcA2y8UkI38QKKQk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Docker Compose를 이용한 NPM설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 설치가 되었다면 다음과 같이 Docker에 컨테이너가 정상적으로 동작하고 있을 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1750232957789&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1351&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMAvzG/btsOFIDPhLw/WEy0hspb5QMG8OrLiObYOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMAvzG/btsOFIDPhLw/WEy0hspb5QMG8OrLiObYOK/img.png&quot; data-alt=&quot;docker ps 를 통한 컨테이너 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMAvzG/btsOFIDPhLw/WEy0hspb5QMG8OrLiObYOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMAvzG%2FbtsOFIDPhLw%2FWEy0hspb5QMG8OrLiObYOK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1351&quot; height=&quot;58&quot; data-origin-width=&quot;1351&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker ps 를 통한 컨테이너 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 Quick Setup과 Full Setup의 차이는 별도의 Database를 사용하는지 여부이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Full Setup의 경우는 MySQL / MariaDB를 함께 연동하여 사용하도록 하는 구조로서 폭넓고 안정적인 서비스를 제공해야 하는 경우에 선택가능하며 일반적인 경우 Quick Setup으로 만도 충분히 사용가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 Quick Setup의 경우는 sqlite를 Databse를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 지정한 Volume의 data폴더 (/services/npm/data)를 확인해 보면 &lt;b&gt;database.sqlite&lt;/b&gt; 파일이 존재하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tdmFM/btsPw1PDOJV/vgZ7XQOVCr5LdkDsXRwJh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tdmFM/btsPw1PDOJV/vgZ7XQOVCr5LdkDsXRwJh0/img.png&quot; data-alt=&quot;NPM Quick Setup &amp;amp;gt; database.sqlite 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tdmFM/btsPw1PDOJV/vgZ7XQOVCr5LdkDsXRwJh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtdmFM%2FbtsPw1PDOJV%2FvgZ7XQOVCr5LdkDsXRwJh0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1214&quot; height=&quot;281&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM Quick Setup &amp;gt; database.sqlite 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.2 Web 관리 콘솔 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 설치가 완료되었다면 자신의 IP를 확인하여 81번 포트로 접속을 해보면 Web 관리콘솔로 접속할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Username: &lt;span style=&quot;color: #ee2323;&quot;&gt;admin@example.com&lt;/span&gt;&lt;br /&gt;Password: &lt;span style=&quot;color: #ee2323;&quot;&gt;changeme&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9etRS%2FbtsOnpdNzD4%2FDX6NkxZhfM7LBRf1dfkiq1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkjxup%2FbtsOpALRKrn%2FVHNAOJvrqhAiWq9yEBtKJ1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcow1UL%2FbtsOpGyivQS%2FFvR5x3OkpSjDO0JkxKKm90%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM 로그인 및 Email, 패스워드 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 이후에 초기에 본인이 추후 사용할 이메일 정보 및 패스워드를 지정하여 이후 로그인 시에는 본인이 지정한 이메일 및 패스워드를 통해 로그인하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 설정이나 등록방법 또는 SSL연결 등은 맨 위에서도 링크로 제공한 &lt;a title=&quot;NPM자동설치 및 SSL적용&quot; href=&quot;https://lovelettee01.tistory.com/58&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NPM자동설치 및 SSL적용&lt;/a&gt; 관련포스트를 참고해 보면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 방법은 꼭 NPM만을 위한 것은 아니며 같은 방식으로 다른 서비스들도 계속 추가해 나갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker를 이용해 계속해서 서비스를 추가할 수 있으며, 여기에 Komodo, Dockge, Portainer, Arcane 등 Docker Tool을 이용하여 서비스 관리 역시 UI를 통해 할 수 있으니 참고해 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참 끝이 없긴 없네...ㅎ;;&lt;/p&gt;</description>
      <category>Proxmox/NPM</category>
      <category>docker</category>
      <category>docker-compose</category>
      <category>lxc컨테이너</category>
      <category>nginxproxymanager</category>
      <category>NPM</category>
      <category>Proxmox</category>
      <category>수동설치</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/59</guid>
      <comments>https://lovelettee01.tistory.com/59#entry59comment</comments>
      <pubDate>Fri, 27 Jun 2025 13:55:26 +0900</pubDate>
    </item>
    <item>
      <title>Proxmox에 NPM(Nginx Proxy Manager) 설치 및 SSL적용</title>
      <link>https://lovelettee01.tistory.com/58</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 사전준비&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM(Nginx Proxy Manager)을 설치하기에 앞서 도메인 준비 및 리버스 프록시 서버(Reverse Proxy Server)의 개념에 대해서만 알고 넘어가자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 도메인(Domain) 준비&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTPS의 SSL연결을 사용하려면 기본적으로 도메인을 필요로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인의 도메인을 가지고 있는 경우가 아니라면 아래 링크를 통해 Duckdns라는 무료 도메인서비스를 이용하는 방법을 확인해 보자.&lt;/p&gt;
&lt;figure id=&quot;og_1747197761234&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Duckdns 무료 도메인(DDNS) 연결&quot; data-og-description=&quot;실제 도메인 연결은 국내외 수많은 호스팅 업체가 존재하며 도메인에 따라서 가격도 천차만별이다.물론 유료 호스팅을 사용하면 원하는 도메인을 설정할 수 있으며 당연히 안정성면에서도 뛰&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/56&quot; data-og-url=&quot;https://lovelettee01.tistory.com/56&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cqXQzH/hyYTi7YgBD/ykrAxKDp9lMJgwPq5JDDwk/img.png?width=800&amp;amp;height=358&amp;amp;face=0_0_800_358,https://scrap.kakaocdn.net/dn/bLjh3u/hyYTdlgVlN/dyX3aTnlAKlpu7XYn3Zp8k/img.png?width=800&amp;amp;height=358&amp;amp;face=0_0_800_358,https://scrap.kakaocdn.net/dn/DSOeQ/hyYTgvw2Hk/opjyRbyapyKTQ3k8lB9D60/img.png?width=1239&amp;amp;height=555&amp;amp;face=0_0_1239_555&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/56&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cqXQzH/hyYTi7YgBD/ykrAxKDp9lMJgwPq5JDDwk/img.png?width=800&amp;amp;height=358&amp;amp;face=0_0_800_358,https://scrap.kakaocdn.net/dn/bLjh3u/hyYTdlgVlN/dyX3aTnlAKlpu7XYn3Zp8k/img.png?width=800&amp;amp;height=358&amp;amp;face=0_0_800_358,https://scrap.kakaocdn.net/dn/DSOeQ/hyYTgvw2Hk/opjyRbyapyKTQ3k8lB9D60/img.png?width=1239&amp;amp;height=555&amp;amp;face=0_0_1239_555');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Duckdns 무료 도메인(DDNS) 연결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;실제 도메인 연결은 국내외 수많은 호스팅 업체가 존재하며 도메인에 따라서 가격도 천차만별이다.물론 유료 호스팅을 사용하면 원하는 도메인을 설정할 수 있으며 당연히 안정성면에서도 뛰&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 리버스 프록시서버(Reverse Proxy Server) 란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;리버스 프록시란? 간단하게 이야기하면 외부인터넷과 연결된 서버로서 모든 요청은 리버스 프록시 서버가 전달받으며 전달받은 정보를 기반으로 내부 네트워크(LAN)상에 존재하는 각각의 서버에 요청하고 응답받은 정보를 다시 클라이언트로 전달하는 중계서버 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 중계 역할에 NPM이 사용되며 우리가 원하는 기능을 해당 NPM을 통해 편하게 관리하게 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 프록시 서버의 개념에 대해서는 아래링크를 통해 알아보면 된다.&lt;/p&gt;
&lt;figure id=&quot;og_1747809625623&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;프록시 서버(Proxy Server) 개념 정리&quot; data-og-description=&quot;1. 프록시 서버(Proxy Server)란?프록시(Proxy)는 '대리'라는 뜻 그대로 클라이언트(사용자)와 서버 사이에 존재하며 둘 사이의 통신의 요청과 응답을 대리하여 수행하는 역할로서 클라이언트와 서버&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/57&quot; data-og-url=&quot;https://lovelettee01.tistory.com/57&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uePg9/hyYW7ylWRv/ODE6fwRN8ksCcsZQ04z3S0/img.png?width=469&amp;amp;height=454&amp;amp;face=0_0_469_454,https://scrap.kakaocdn.net/dn/81T3p/hyYU5hvoUv/ZSAbRR8x6joIY2mHpLWz31/img.png?width=469&amp;amp;height=454&amp;amp;face=0_0_469_454,https://scrap.kakaocdn.net/dn/b0jAks/hyYYwxKLpc/h72l5HhVrKGpPyIkZaKNn1/img.png?width=1367&amp;amp;height=769&amp;amp;face=0_0_1367_769&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/57&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uePg9/hyYW7ylWRv/ODE6fwRN8ksCcsZQ04z3S0/img.png?width=469&amp;amp;height=454&amp;amp;face=0_0_469_454,https://scrap.kakaocdn.net/dn/81T3p/hyYU5hvoUv/ZSAbRR8x6joIY2mHpLWz31/img.png?width=469&amp;amp;height=454&amp;amp;face=0_0_469_454,https://scrap.kakaocdn.net/dn/b0jAks/hyYYwxKLpc/h72l5HhVrKGpPyIkZaKNn1/img.png?width=1367&amp;amp;height=769&amp;amp;face=0_0_1367_769');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프록시 서버(Proxy Server) 개념 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 프록시 서버(Proxy Server)란?프록시(Proxy)는 '대리'라는 뜻 그대로 클라이언트(사용자)와 서버 사이에 존재하며 둘 사이의 통신의 요청과 응답을 대리하여 수행하는 역할로서 클라이언트와 서버&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. NPM(Nginx Proxy Manager)이란?&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NPM은 기본적으로 위에 이야기한 리버스&lt;span&gt;&amp;nbsp;&lt;/span&gt;프록시&lt;span&gt;&amp;nbsp;&lt;/span&gt;서버(Reverse Proxy Server)로서의 역할을 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이것을 가지고 무엇을 할 수 있을까??&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;731&quot;&gt;&lt;a href=&quot;https://nginxproxymanager.com/&quot; target=&quot;_blank&quot; title=&quot;Nginx Proxy Manager Website&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTL0m/btsOoP9j4hI/BqcA8jO5t0VfZMWncwZqKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTL0m%2FbtsOoP9j4hI%2FBqcA8jO5t0VfZMWncwZqKK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1227&quot; height=&quot;731&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;Nginx Proxy Manager&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 NPM 사용 목적 및 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;u&gt;Proxy Hosts&lt;/u&gt; : 서버로 들어온 요청을 특정 위치로 라우팅 한다&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Redirection Hosts&lt;/u&gt; : 특정 도메인으로 접속된 요청을 다른 도메인으로 리다이렉션 시킨다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Streams&lt;/u&gt; : Nginx의 새로운 기능인 Stream은 TCP/UDP 트래픽을 네트워크상의 다른 컴퓨터로 직접 전달해 준다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;404 Hosts&lt;/u&gt; : 페이지를 찾을 수 없을 때 연결페이지 설정한다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;SSL Certificates&lt;/u&gt; : Let`sEncrypt 기반 SSL 인증 설정을 관리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 NPM을&amp;nbsp;사용하는 여러 가지 목적이 있겠지만 내가 현재 원하는 그림을 간단하게만 그려보면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 도메인으로 호출을 하게 되면 해당서버로 접속을 할 수 있도록 하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 보다 더 많은 기능들이 존재하지만 추후 알아보기로 하고 이제 설치부터 진행해 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eehnIo/btsOe57yvOc/sC45ap0b8Yrj8OJ2fJzrY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eehnIo/btsOe57yvOc/sC45ap0b8Yrj8OJ2fJzrY0/img.png&quot; data-alt=&quot;NPM을 이용한 서버 구상도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eehnIo/btsOe57yvOc/sC45ap0b8Yrj8OJ2fJzrY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeehnIo%2FbtsOe57yvOc%2FsC45ap0b8Yrj8OJ2fJzrY0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;872&quot; height=&quot;491&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM을 이용한 서버 구상도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. NPM 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 Nginx Proxy Manager에서 제공하는 공식 설치 방법(Setup Guide)이 있다. 하지만 Proxmox VE Helper-Scripts를 먼저 이야기하는 이유는 사용이 간단하기 때문에 추천하는 용도이긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 편한 만큼 실제 설치가 어떤 방식으로 진행되는지는 관심을 가지지 않는 경우 과정은 모르고 설치 시 문제가 발생할 경우 조치도 어렵기 때문에 혹여나 난 하나하나 설치해 보기를 원한다면 아래 링크를 통해 공식 설치 가이드를 통한 설치항목을 참고해 보는 것도 괜찮은 방법이다.&lt;/p&gt;
&lt;figure id=&quot;og_1751000252413&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Nginx Prorxy Manager 차근차근 수동 설치하기(feat. Proxmox)&quot; data-og-description=&quot; 들어가며사실 NPM(Nginx Proxy Manager) 설치 방법은 이미 너무 다양하며 자동으로 간단하게 설치할 수 있는 스크립트 또한 존재하기 때문에 단순히 NPM만을 설치하려 한다면 굳이 수동으로 설치하&quot; data-og-host=&quot;lovelettee01.tistory.com&quot; data-og-source-url=&quot;https://lovelettee01.tistory.com/59&quot; data-og-url=&quot;https://lovelettee01.tistory.com/59&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/chdb2J/hyZbvUsdge/wSeTrrIPKGelc5ezokX7E0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/BtxaY/hyZcqyIJx2/OBHQFidKQT3rp8HrSl3z51/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/bXkSZZ/hyZchV6LpM/IKswRGosZ0WPkBck4ZeZ6K/img.png?width=1182&amp;amp;height=864&amp;amp;face=0_0_1182_864&quot;&gt;&lt;a href=&quot;https://lovelettee01.tistory.com/59&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lovelettee01.tistory.com/59&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/chdb2J/hyZbvUsdge/wSeTrrIPKGelc5ezokX7E0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/BtxaY/hyZcqyIJx2/OBHQFidKQT3rp8HrSl3z51/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/bXkSZZ/hyZchV6LpM/IKswRGosZ0WPkBck4ZeZ6K/img.png?width=1182&amp;amp;height=864&amp;amp;face=0_0_1182_864');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Nginx Prorxy Manager 차근차근 수동 설치하기(feat. Proxmox)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt; 들어가며사실 NPM(Nginx Proxy Manager) 설치 방법은 이미 너무 다양하며 자동으로 간단하게 설치할 수 있는 스크립트 또한 존재하기 때문에 단순히 NPM만을 설치하려 한다면 굳이 수동으로 설치하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lovelettee01.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Proxmox VE Helper-Scripts를 통한 설치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;※ Proxmox VE Helper-Scripts란?(&lt;a title=&quot;Proxmox VE Helper-Scripts&quot; href=&quot;https://community-scripts.github.io/ProxmoxVE/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proxmox의 사용자가 및 그에 따른 활용도가 늘어나는 만큼 각각의 설치항목을 간단하게 설치하여 사용하기 위하여 대단하신 분들이 만들어 공유하는 간편 설치(?) Github이 존재하는데 이곳에서 제공하는 명령어를 통해 간단하게 설치 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트는 직관적이라 따로 설명하지 않고 각자 필요에 따라 검색해서 설치하여 사용하면 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1.1 사이트 접속 및 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VE Helper-Script 사이트에서 &lt;a title=&quot;Nginx Proxy Manager in Helper-Scripts&quot; href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Nginx Proxy Manager&lt;/b&gt;&lt;/a&gt;를 검색해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 후 아래와 같이 기본적인 설명 및 설치방법 기타 설정 방법 등 정보를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl3I3B/btsOlAzEE9h/se1hbmKjSjrDZTTLfyVhK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl3I3B/btsOlAzEE9h/se1hbmKjSjrDZTTLfyVhK1/img.png&quot; data-alt=&quot;Promox VE Helper-Scripts Nginx Proxy Manager&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl3I3B/btsOlAzEE9h/se1hbmKjSjrDZTTLfyVhK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl3I3B%2FbtsOlAzEE9h%2Fse1hbmKjSjrDZTTLfyVhK1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;894&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Promox VE Helper-Scripts Nginx Proxy Manager&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 항목 중 빨간색으로 표시한 부분이 우리가 중요하게 확인해야 할 부분으로 설치 스크립트 및 설치 후 로그인 정보를 확인 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 설치를 시작해 보자!.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1.2 Script를 통한 NPM 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인의 Proxmox Shell에 접속해서 아래 함수를 통해 설치를 진행해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1748844853241&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/nginxproxymanager.sh)&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wQHUD/btsOmW9MDXx/oFFJ6KnKDZkoQiCnORrPB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wQHUD/btsOmW9MDXx/oFFJ6KnKDZkoQiCnORrPB0/img.png&quot; data-alt=&quot;Proxmox Shell에서 Script 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wQHUD/btsOmW9MDXx/oFFJ6KnKDZkoQiCnORrPB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwQHUD%2FbtsOmW9MDXx%2FoFFJ6KnKDZkoQiCnORrPB0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1271&quot; height=&quot;700&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox Shell에서 Script 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 후 아래와 같이 LXC를 설치할지 묻는 화면이 나오고 이어서 설정 부분이 나온다 본인이 원하는 설정이 있다면 수정하면 되며 기본적으로 &lt;i&gt;Default Settings&lt;/i&gt;를 선택해 설치하면 되며 필요시 추후 변경도 가능하니 Ok를 선택해 설치를 진행해 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lc0dk/btsOnudUv7e/w5EivgKIvCiqyA2iIWTjFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lc0dk/btsOnudUv7e/w5EivgKIvCiqyA2iIWTjFK/img.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;401&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.2372%; margin-right: 10px;&quot; data-widthpercent=&quot;49.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lc0dk/btsOnudUv7e/w5EivgKIvCiqyA2iIWTjFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flc0dk%2FbtsOnudUv7e%2Fw5EivgKIvCiqyA2iIWTjFK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;746&quot; height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYnA8/btsOlzHwXIc/IAXrPcGjFy4HRsjQU9M85K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYnA8/btsOlzHwXIc/IAXrPcGjFy4HRsjQU9M85K/img.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;397&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.6%;&quot; data-widthpercent=&quot;50.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYnA8/btsOlzHwXIc/IAXrPcGjFy4HRsjQU9M85K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYnA8%2FbtsOlzHwXIc%2FIAXrPcGjFy4HRsjQU9M85K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Promox VE Helper-Scripts 를 통한 NPM 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;‼️Proxmox에서 제공하는 쉘이 아닌 외부 SSH를 이용하여 접속한 경우 설치 시 아래와 같은 메시지를 볼 수 있다.&lt;br /&gt;Proxmox shell이 아닌 곳에서 설치할 경우 잠재적인 문제가 발생할 수 있다는 내용인데 혹시 모르니 Proxmox Shell을 이용하여 설치하는 것을 권장한다.&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMgZtp/btsOotL1OBg/1fpJgnnhrj8iPoBKKEKMxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMgZtp/btsOotL1OBg/1fpJgnnhrj8iPoBKKEKMxK/img.png&quot; data-alt=&quot;외부SSH를 이용한 설치시 확인 팝업&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMgZtp/btsOotL1OBg/1fpJgnnhrj8iPoBKKEKMxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMgZtp%2FbtsOotL1OBg%2F1fpJgnnhrj8iPoBKKEKMxK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;146&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;외부SSH를 이용한 설치시 확인 팝업&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠시 후 설치가 진행되고 설치 중간에 최신버전이 아닌 이전버전을 설치를 묻는 항목이 나오는데 각자 상황에 맞게 설치하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전을 설치할 경우 'N'을 입력 후 진행하면 아래와 같이 설치가 완료된 항목이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; ~ 이로서 설치가 끝이다 얼마나 간단하게 설치할 수 있는지는 별도로 이야기하지 않아도 될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xAslO/btsOmJ3A00i/6GKux3sJoPt9CAPZ2LEMh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xAslO/btsOmJ3A00i/6GKux3sJoPt9CAPZ2LEMh1/img.png&quot; data-alt=&quot;Script를 통한 NPM 설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xAslO/btsOmJ3A00i/6GKux3sJoPt9CAPZ2LEMh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxAslO%2FbtsOmJ3A00i%2F6GKux3sJoPt9CAPZ2LEMh1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1031&quot; height=&quot;684&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Script를 통한 NPM 설치 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되면 좌측에 101(nginxproxymanager) LXC컨테이너가 생성되며 자동실행 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 하단의 접속 URL을 통해 접속하면 NPM관리 콘솔로 접근하지만 당장은 포트포워딩이나 각자의 상황에 따라 서버에 접속되지 않을 수 있다. 이 부분은 관리콘솔 접속 부분에서 별도로 설명하도록 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. WEB 관리 콘솔 접속&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1 방화벽 오픈 및 포트 포워딩 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부에서 NPM 관리 콘솔에 접속하기 위해서는 내부에 접근가능하도록 방화벽 및 포트 포워딩을 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 ipTime을 기준으로 보면 접근 가능한 IP 및 포트를 오픈함으로써 외부에서도 접근가능하도록 지정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자의 네트워크 환경에 맞도록 구성해서 사용하도록 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;u&gt;&lt;b&gt; 필수 오픈 포트&lt;/b&gt;&lt;/u&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;80 / 443 (웹 서비스 포트 오픈)&lt;/li&gt;
&lt;li&gt;81 (웹 관리 콘솔 포트 오픈) - &lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;[설정 후 삭제]&lt;/span&gt; 해당 포트는 Proxy Host 등록 전 확인용도로만 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2sC4b/btsOlOLmmiN/z3FGJbv0jAzwPkP8fscGhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2sC4b/btsOlOLmmiN/z3FGJbv0jAzwPkP8fscGhk/img.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;842&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.3654%; margin-right: 10px;&quot; data-widthpercent=&quot;43.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2sC4b/btsOlOLmmiN/z3FGJbv0jAzwPkP8fscGhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2sC4b%2FbtsOlOLmmiN%2Fz3FGJbv0jAzwPkP8fscGhk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1022&quot; height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6Fexn/btsOmqwAuHj/yKPHkwKkQ05iEh2kAzX50K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6Fexn/btsOmqwAuHj/yKPHkwKkQ05iEh2kAzX50K/img.png&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;798&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;56.12&quot; data-filename=&quot;blob&quot; style=&quot;width: 55.4718%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6Fexn/btsOmqwAuHj/yKPHkwKkQ05iEh2kAzX50K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6Fexn%2FbtsOmqwAuHj%2FyKPHkwKkQ05iEh2kAzX50K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1239&quot; height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;IPTime 포트 포워딩 규칙 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2 관리 콘솔 접속 및 로그인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리 콘솔 접속 URL을 통해 다음과 같은 로그인 화면을 볼 수 있으며 3.1.1 사이트정보에서 이야기한 기본 로그인 정보를 통해 로그인 가능하다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;You can use the following credentials to login to the Nginx Proxy Manager ct. &lt;br /&gt;Username: &lt;span style=&quot;color: #ee2323;&quot;&gt;admin@example.com&lt;/span&gt;&lt;br /&gt;Password: &lt;span style=&quot;color: #ee2323;&quot;&gt;changeme&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9etRS/btsOnpdNzD4/DX6NkxZhfM7LBRf1dfkiq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9etRS%2FbtsOnpdNzD4%2FDX6NkxZhfM7LBRf1dfkiq1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkjxup/btsOpALRKrn/VHNAOJvrqhAiWq9yEBtKJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkjxup%2FbtsOpALRKrn%2FVHNAOJvrqhAiWq9yEBtKJ1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;748&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cow1UL/btsOpGyivQS/FvR5x3OkpSjDO0JkxKKm90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcow1UL%2FbtsOpGyivQS%2FFvR5x3OkpSjDO0JkxKKm90%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;NPM 로그인 및 Email, 패스워드 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 이후에 초기에 본인이 추후 사용할 이메일 정보 및 패스워드를 지정하여 이후 로그인 시에는 본인이 지정한 이메일 및 패스워드를 통해 로그인하면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  로그인 정보는 Web 관리콘솔 &amp;gt; Users 항목을 통해 추후 변경도 가능하고 필요에 따라 사용자를 추가해서 사용도 가능하다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 도메인 접속 및 SSL적용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM을 설치하고 외부에서 접속되도록 하였다면 이제 도메인을 연결하고 SSL을 통한 보안 작업까지 마무리해 보자!~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 항목은 1. 사전준비 부분에서 설명한 Duckdns를 통한 도메인 연결이 되었다는 가정하에 진행하였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.1 도메인을 통한 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인이 정상적으로 연결이 되었다면 다음과 같이 도메인을 통해 접속을 해보면 접속페이지가 출력되며 로그인도 정상적으로 진행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 아직 SSL이 적용되어 있지 않기 때문에 &lt;i&gt;⚠️안전하지 않음&lt;/i&gt;이 표시되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGlXj2/btsOpcLhPIu/Kk7FauSsjyGVRCx5LKba0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGlXj2/btsOpcLhPIu/Kk7FauSsjyGVRCx5LKba0k/img.png&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;813&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.747%; margin-right: 10px;&quot; data-widthpercent=&quot;51.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGlXj2/btsOpcLhPIu/Kk7FauSsjyGVRCx5LKba0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGlXj2%2FbtsOpcLhPIu%2FKk7FauSsjyGVRCx5LKba0k%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1065&quot; height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wZWTQ/btsOpKgi9tk/uzSTutehniqikZvO3Qvi70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wZWTQ/btsOpKgi9tk/uzSTutehniqikZvO3Qvi70/img.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;899&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.0902%;&quot; data-widthpercent=&quot;48.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wZWTQ/btsOpKgi9tk/uzSTutehniqikZvO3Qvi70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwZWTQ%2FbtsOpKgi9tk%2FuzSTutehniqikZvO3Qvi70%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1116&quot; height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Duckdns 무료 도메인을 통한 NPM접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.2&amp;nbsp; SSL 인증서 발급(with. Let`s Encrypt)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSL은 NPM에서 제공하는 기능을 통해 무료 Let`s Encrypt 인증서를 발급받는다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;관리콘솔 &amp;gt; SSL Certificates &amp;gt; Add SSL Certificate&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blMK0F/btsOp7h0k5T/M5tiHWqUv4QvQumTCmCNh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blMK0F/btsOp7h0k5T/M5tiHWqUv4QvQumTCmCNh1/img.png&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;709&quot; data-is-animation=&quot;false&quot; style=&quot;width: 54.0032%; margin-right: 10px;&quot; data-widthpercent=&quot;54.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blMK0F/btsOp7h0k5T/M5tiHWqUv4QvQumTCmCNh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblMK0F%2FbtsOp7h0k5T%2FM5tiHWqUv4QvQumTCmCNh1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blaxNQ/btsOorJb9Xw/Tgw6dOWBBHZAoTUyU8Yr5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blaxNQ/btsOorJb9Xw/Tgw6dOWBBHZAoTUyU8Yr5K/img.png&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;854&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.834%;&quot; data-widthpercent=&quot;45.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blaxNQ/btsOorJb9Xw/Tgw6dOWBBHZAoTUyU8Yr5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblaxNQ%2FbtsOorJb9Xw%2FTgw6dOWBBHZAoTUyU8Yr5K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Let`s Encrypt SSL인증서 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Add Let`s Encrypt Certificate 항목의 [*] 표시가 된 필수 입력사항( Use a DNS Challenge 토글 버튼을 활성화한 정보 포함)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 76px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 27.5581%; height: 21px;&quot;&gt;Domain Names&lt;/td&gt;
&lt;td style=&quot;width: 72.4419%; height: 21px;&quot;&gt;인증서를 발급받으려는 도메인정보를 입력 (탭[\tab] 을 눌러 복수개 입력가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 27.5581%; height: 21px;&quot;&gt;Email Address for Let`s Encrypt&lt;/td&gt;
&lt;td style=&quot;width: 72.4419%; height: 21px;&quot;&gt;본인의 이메일 정보를 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.5581%; height: 17px;&quot;&gt;DNS Provider&lt;/td&gt;
&lt;td style=&quot;width: 72.4419%; height: 17px;&quot;&gt;본인의 DNS Provider정보 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.5581%; height: 17px;&quot;&gt;Credentials File Content&lt;/td&gt;
&lt;td style=&quot;width: 72.4419%; height: 17px;&quot;&gt;각 DNS 별로 본인인증용 Token정보등등 필요정보를 입력해준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 DNS Provider는 &lt;b&gt;DuckDns&lt;/b&gt;를 선택하고 &lt;i&gt;your-duckdns-token&lt;/i&gt; 부분에 본인의 Duckdns Token정보를 입력해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Save를 클릭하면 잠시 후 다음과 같이 인증서가 발급된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 무료 인증서인 만큼 3개월의 만료주기가 주어진다. 만료되기 전에 우측의 ⁝ 부분을 클릭하여 Renew Now항목을 통해 3개월 단위 갱신이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서 갱신 부분은 서버에 Crontab 등 자동갱신도 지정할 수 있다. 이 부분은 너무 길어지는 관계로 패스....&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qxHDL/btsOqasdjpu/WdAtx6bx1WGWl8dCBwcp0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qxHDL/btsOqasdjpu/WdAtx6bx1WGWl8dCBwcp0K/img.png&quot; data-alt=&quot;인증서 발급 완료 및 갱신&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qxHDL/btsOqasdjpu/WdAtx6bx1WGWl8dCBwcp0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqxHDL%2FbtsOqasdjpu%2FWdAtx6bx1WGWl8dCBwcp0K%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1061&quot; height=&quot;432&quot; data-origin-width=&quot;1061&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인증서 발급 완료 및 갱신&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 오류사항 발생 시 하단 더 보기 항목 확인&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 인증서 발급단계에서의 에러는 너무 다양해서 다 확인할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요에 따라 이 부분은 각자 확인을 해서 해결해야 할 부분으로 생각된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 기본적인 버그에 해당하기 때문에 확인해서 실행해 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Duckdns Certbot 커멘드 에러 발생 시&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;nginxproxymanager lxc 컨테이너에서 Console에 접속 후 아래 명령어 입력&lt;/blockquote&gt;
&lt;pre id=&quot;code_1749019942168&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 -m pip install certbot_dns_duckdns&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPgtar/btsOnoTCA1V/K9cRkj8fLqvsKI6ixVfWU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPgtar/btsOnoTCA1V/K9cRkj8fLqvsKI6ixVfWU0/img.png&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;343&quot; data-is-animation=&quot;false&quot; style=&quot;width: 30.8331%; margin-right: 10px;&quot; data-widthpercent=&quot;31.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPgtar/btsOnoTCA1V/K9cRkj8fLqvsKI6ixVfWU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPgtar%2FbtsOnoTCA1V%2FK9cRkj8fLqvsKI6ixVfWU0%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcgwvp/btsOo9OACy5/imR7HfK7Al0FCad6KylBRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcgwvp/btsOo9OACy5/imR7HfK7Al0FCad6KylBRK/img.png&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;402&quot; data-is-animation=&quot;false&quot; style=&quot;width: 67.8614%;&quot; data-widthpercent=&quot;68.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcgwvp/btsOo9OACy5/imR7HfK7Al0FCad6KylBRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdcgwvp%2FbtsOo9OACy5%2FimR7HfK7Al0FCad6KylBRK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;957&quot; height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;SSL 인증서 발급시 오류&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;참고 링크 : &lt;a title=&quot;SSL 생성 오류&quot; href=&quot;https://svrforum.com/docker/730947&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;nginx proxy manager에서 ssl 생성 시 오류&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.3 도메인연결 및 SSL 인증서 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 길고 험난했던 과정의 마지막을 달려가고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 도메인을 연결하고 이전에 생성한 SSL인증서를 적용해 보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;관리콘솔 &amp;gt; Hosts &amp;gt; Proxy Hosts &amp;gt; Add Proxy Host&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6zTi/btsOoIYg1cI/pkhOy4Jhpptys7cewx6Ihk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6zTi/btsOoIYg1cI/pkhOy4Jhpptys7cewx6Ihk/img.png&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;634&quot; data-is-animation=&quot;false&quot; style=&quot;width: 39.677%; margin-right: 10px;&quot; data-widthpercent=&quot;40.62&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6zTi/btsOoIYg1cI/pkhOy4Jhpptys7cewx6Ihk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6zTi%2FbtsOoIYg1cI%2FpkhOy4Jhpptys7cewx6Ihk%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;948&quot; height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq5WgB/btsOoIYiAwZ/ziWA9G12wvs0kqiFh2QbOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq5WgB/btsOoIYiAwZ/ziWA9G12wvs0kqiFh2QbOK/img.png&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;442&quot; data-is-animation=&quot;false&quot; style=&quot;width: 24.1337%; margin-right: 10px;&quot; data-widthpercent=&quot;24.71&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq5WgB/btsOoIYiAwZ/ziWA9G12wvs0kqiFh2QbOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq5WgB%2FbtsOoIYiAwZ%2FziWA9G12wvs0kqiFh2QbOK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bioCnk/btsOou7czDU/wyXTXgMfkzrWAtqIwgxbR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bioCnk/btsOou7czDU/wyXTXgMfkzrWAtqIwgxbR1/img.png&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;315&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.8638%;&quot; data-widthpercent=&quot;34.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bioCnk/btsOou7czDU/wyXTXgMfkzrWAtqIwgxbR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbioCnk%2FbtsOou7czDU%2FwyXTXgMfkzrWAtqIwgxbR1%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;새로운 Proxy Host정보 생성 및 SSL 적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 새로운 Proxy Host 정보를 생성해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기가 내가 하려고 했던 Reverse Proxy 서버로서의 역할을 지정하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm.lovelettee.duckdns.org 도메인 접속 시 내부의 NPM 웹관리 콘솔(81번 포트)로 연결하는 설정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 Details 부분의 정보만 입력하면 Reverse Proxy로서의 역할을 하는 것이며 SSL탭설정은 SSL적용 시에만 진행해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록 완료 후 도메인 영역을 클릭하면 짠!!~  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드디어 도메인 연결 및 SSL적용이 완료되었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; 이제 Reverse Proxy를 통해 연결되기 때문에 포트포워딩으로 활성화했던 81번 포트는 필요가 없어진다.&amp;nbsp;&lt;br /&gt;포트포워딩 설정에서 삭제해도 정상적으로 연결이 된다.&lt;br /&gt;외부접속 포트인(80, 443)으로 NPM 접속 후 내부에서 다시 분배되는 것이다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KQ8CQ/btsOphTHXNp/2aIioAKj12RZB53B9TaWkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KQ8CQ/btsOphTHXNp/2aIioAKj12RZB53B9TaWkK/img.png&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;896&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KQ8CQ/btsOphTHXNp/2aIioAKj12RZB53B9TaWkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKQ8CQ%2FbtsOphTHXNp%2F2aIioAKj12RZB53B9TaWkK%2Fimg.png&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; loading=&quot;lazy&quot; width=&quot;1582&quot; height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;도메인에 SSL적용된 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 Proxy Server를 설치한다는 것 자체가 네트워크(도메인, 방화벽, 포트포워딩등) 및 서버에 대한 여러 사전지식을 필요로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것도 우선 적용한 것일 뿐 사실상 완벽하진 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공유기에서 포트를 지정해 오픈해 주는 방식은 결국 한 포트에 한 가지 서비스만 연결될 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 Proxmox 서버를 통해 내부 사설네트워크(VPC)를 구성해 보자.&lt;/p&gt;</description>
      <category>Proxmox/NPM</category>
      <category>helper-scripts</category>
      <category>let`s encrypt</category>
      <category>nginxproxymanager</category>
      <category>NPM</category>
      <category>Proxmox</category>
      <category>reverse proxy</category>
      <category>ssl</category>
      <author>천풍훈</author>
      <guid isPermaLink="true">https://lovelettee01.tistory.com/58</guid>
      <comments>https://lovelettee01.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 2 Jun 2025 17:14:21 +0900</pubDate>
    </item>
  </channel>
</rss>