<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>내일을 위한 오늘의 기록</title>
    <link>https://expbox77.tistory.com/</link>
    <description>이 광활한 인터넷에서
우리가 만난 것은
행운임에 틀림이 없을 겁니다.</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 15:29:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>expbox77</managingEditor>
    <image>
      <title>내일을 위한 오늘의 기록</title>
      <url>https://tistory1.daumcdn.net/tistory/7408747/attach/de310bc64dd74591b68caffbd216f20d</url>
      <link>https://expbox77.tistory.com</link>
    </image>
    <item>
      <title>올해는 더 많은 글을 올릴 수 있길..</title>
      <link>https://expbox77.tistory.com/21</link>
      <description>&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;올해는 좀 더 좋은 글을 많이 올릴 수 있었으면 좋겠습니다.&lt;/p&gt;</description>
      <category>잡담</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/21</guid>
      <comments>https://expbox77.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 1 Jan 2026 02:56:30 +0900</pubDate>
    </item>
    <item>
      <title>SMT3000RMI2U RBC43 호환 배터리로 교환하기</title>
      <link>https://expbox77.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;올해 여름 UPS 모델을 바꿨다. Legrand Niky S 3KVA 모델에서 SMT3000RMI2U 모델로 변경했다. 기존은 타워형이었다면, 새로 구입한 모델은 랙형으로 서버랙에 넣을 수 있는 제품이다. 기존 제품도 서버랙에 넣을 수는 있는데 일체감이 좀 떨어지는 데다 NUT에 대한 지원이 좀 미비해서 모델 정보가 제대로 나오지 않는 문제가 있었다.&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;SMT3000RMI2U는 2CPU에서 중고로 올라왔던 물건인데, 무려 NMC 2 웹 콘솔(AP9631 장착)을 사용할 수 있는 물건이었다. 다만, 구입하려면 인천까지 가야 하는 게 문제였다. 어찌저찌 약속을 잡고 차로 왕복 3시간이 넘는 거리를 갔고 배터리 테스트 결과 배터리의 노후화가 있어서 가격 협의를 살짝 했는데 마음씨&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 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아무런 정보가 없으니 유튜브에 &quot;SMT3000RMI2U 배터리 교체&quot;라고 쳤다. 그랬더니 아래 영상이 나왔다.&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;a href=&quot;https://youtu.be/sXmMysZ7j3I&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/sXmMysZ7j3I&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;SMT3000RMI2U에서 사용하는 RBC43 배터리를 쓰는 SUA3000RM2U 모델에서의 호환 배터리 교체 영상으로 배터리의 정보가 있었다. 영상에서 쓰는 배터리는 &lt;b&gt;한국아트라스BX KB4.5-12&lt;/b&gt; 모델인데, 나는 UPS에는 세방전지 로케트배터리를 주로 사용했기에 &lt;b&gt;세방전지 로케트배터리 ES5-12&lt;/b&gt; 모델과 비교하다가 총 8개를 구입해야 해서 조금 더 저렴하고 영상의 업자도 사용하니 나름 신뢰성이 있다고 판단하여&amp;nbsp;&lt;b&gt;한국아트라스BX KB4.5-12&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모델로 구입했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_3351 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WZOfI/dJMcachpHme/wm0HshGaBdIleo3FkMEeR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WZOfI/dJMcachpHme/wm0HshGaBdIleo3FkMEeR0/img.jpg&quot; data-alt=&quot;든든하게 잘 포장되어 왔다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WZOfI/dJMcachpHme/wm0HshGaBdIleo3FkMEeR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWZOfI%2FdJMcachpHme%2Fwm0HshGaBdIleo3FkMEeR0%2Fimg.jpg&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;405&quot; height=&quot;540&quot; data-filename=&quot;IMG_3351 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도착하는 날에 비가 왔고 비를 좀 맞긴 했지만 캡이 씌워져 있었고 2차적으로 자투리 박스를 위에 덮어놔서 내부까지 크게 젖지는 않았다. 생각보다 배터리 하나의 크기가 작아서 신기했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_3352 크게.jpeg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2wK9E/dJMcafyrs9A/tyGQdPKypIde4JkBzwaDl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2wK9E/dJMcafyrs9A/tyGQdPKypIde4JkBzwaDl0/img.jpg&quot; data-alt=&quot;전면 커버를 빼면 이렇게 배터리와 연결되어있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2wK9E/dJMcafyrs9A/tyGQdPKypIde4JkBzwaDl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2wK9E%2FdJMcafyrs9A%2FtyGQdPKypIde4JkBzwaDl0%2Fimg.jpg&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;540&quot; height=&quot;405&quot; data-filename=&quot;IMG_3352 크게.jpeg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전면 커버를 빼고 배터리를 빼냈다. UPS에서 배터리가 없다는 알람이 뜨지만 전원 공급이 끊기지는 않는다. UPS에 전원이 들어가 있는 채로 빼도 된다는 점이 굉장히 좋았다. 이때까지 쓰는 UPS 모델들은 전부 전원 다 빼고 교체했어야 했는데 그 점에서는 엄청난 메리트가 있었다.&amp;nbsp; RBC43 모듈이 생각보다 엄청 무거웠다. 뺄 때는 장갑도 없어서 조금 힘들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_3353 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVohRu/dJMb99LKVRI/xCXDvduw3zfk9ABRoQi6F0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVohRu/dJMb99LKVRI/xCXDvduw3zfk9ABRoQi6F0/img.jpg&quot; data-alt=&quot;어떻게 연결되어있는지 잊어먹지 않으려고 한 장.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVohRu/dJMb99LKVRI/xCXDvduw3zfk9ABRoQi6F0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVohRu%2FdJMb99LKVRI%2FxCXDvduw3zfk9ABRoQi6F0%2Fimg.jpg&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;405&quot; height=&quot;540&quot; data-filename=&quot;IMG_3353 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래의 배터리는 Vision CP1250으로 12V 5Ah이다. 내부 구성이 깔끔하게 배선되어 있어서 최대한 유지하면서 배터리를 교체했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_3355 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjkdZ/dJMcafyrs9B/0Y0ain51UnK71hohjB7cz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjkdZ/dJMcafyrs9B/0Y0ain51UnK71hohjB7cz1/img.jpg&quot; data-alt=&quot;교체 이후 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjkdZ/dJMcafyrs9B/0Y0ain51UnK71hohjB7cz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxjkdZ%2FdJMcafyrs9B%2F0Y0ain51UnK71hohjB7cz1%2Fimg.jpg&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;405&quot; height=&quot;540&quot; data-filename=&quot;IMG_3355 크게.jpeg&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 구입한 한국아트라스BX KB4.5-12는 12V 4.5Ah라서 기존 배터리 대비해서 배터리 용량이 줄어들었다. 다음에는 가격 차이가 크게 나지 않는다면 세방전지 로케트배터리 ES5-12 모델을 구입할 것 같은데 다음 배터리 교체 일자가 2030년 6월로 설정되어서 까마득한 미래인지라 나중 가면 또 다른 선택지가 있을지도 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap UPS 네트워크 관리 카드 2 2025-12-25 21-57-08 복사본.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lnq8W/dJMcachpH7u/Bn1e1gQKWyfErhz4KjSOEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lnq8W/dJMcachpH7u/Bn1e1gQKWyfErhz4KjSOEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lnq8W/dJMcachpH7u/Bn1e1gQKWyfErhz4KjSOEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLnq8W%2FdJMcachpH7u%2FBn1e1gQKWyfErhz4KjSOEk%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;1248&quot; height=&quot;126&quot; data-filename=&quot;Monosnap UPS 네트워크 관리 카드 2 2025-12-25 21-57-08 복사본.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배터리를 교체하고 나서 NMC 웹 콘솔에서 확인한 내용이다. 배터리 교체에 20분 정도 걸렸다. 이후 배터리가 충전되길 하루정도 기다렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap UPS 네트워크 관리 카드 2 2025-12-26 00-16-07 복사본.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Ouq6/dJMcadght0G/qJZctxdkseLQOqFvo2Kuz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Ouq6/dJMcadght0G/qJZctxdkseLQOqFvo2Kuz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Ouq6/dJMcadght0G/qJZctxdkseLQOqFvo2Kuz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Ouq6%2FdJMcadght0G%2FqJZctxdkseLQOqFvo2Kuz0%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;1223&quot; height=&quot;280&quot; data-filename=&quot;Monosnap UPS 네트워크 관리 카드 2 2025-12-26 00-16-07 복사본.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자체 테스트 이후 GPU 서버에 부하를 많이 줘서 UPS 사용량 25% 이상으로 만들고 런타임 보정도 했다. 런타임 보정하니까 용량이 갑자기 30%로 줄었다. 배터리가 연결되고 끊어진 부분은 NMC에서 인지했지만 교체된 건 모르니 기존 배터리인 것으로 인식해서 충전이 안된 것 같다. 배터리 충전한다고 괜히 기다렸다는 생각이 들었지만 지금이라도 제대로 충전 됐으니 된 거지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv2Mks/dJMb99ZiBDS/zoJSiwGqeYr9J6pjKAuLU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv2Mks/dJMb99ZiBDS/zoJSiwGqeYr9J6pjKAuLU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv2Mks/dJMb99ZiBDS/zoJSiwGqeYr9J6pjKAuLU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv2Mks%2FdJMb99ZiBDS%2FzoJSiwGqeYr9J6pjKAuLU1%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;450&quot; height=&quot;421&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 상태다. GPU 서버는 꺼놨고 스토리지 서버랑 NAS 정도만 켜놓은 상태라 출력이 좀 낮다. 거기에 배터리 온도가 좀 낮은데 거의 외부인 부분이라 어쩔 수 없다. &lt;a href=&quot;https://cdn.hankook-atlasbx.com/PRD/CUSTOMER/20190514/8f318508-01c1-41ce-8f0a-88f0b2ba4a63/KB_%EC%8B%9C%EB%A6%AC%EC%A6%88.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;배터리 관련 자료&lt;/a&gt;를 좀 찾아봤는데 섭씨 -15도 ~ 45도 사이에서 작동을 보증하기에 크게 걱정할 건 없을 것 같다. 잘 작동하는 온도는 20도인데 겨울이라 어쩔 수 없다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 이렇게 배터리 교체까지 마무리하니 이제 든든해졌다. 안전하게 오래 사용할 수 있었으면 좋겠다.&lt;/p&gt;</description>
      <category>HomeLAB/홈랩 잡담</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/20</guid>
      <comments>https://expbox77.tistory.com/20#entry20comment</comments>
      <pubDate>Fri, 26 Dec 2025 01:56:41 +0900</pubDate>
    </item>
    <item>
      <title>[Mikrotik] 미크로틱 라우터에 ZeroTier 설정하기</title>
      <link>https://expbox77.tistory.com/19</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;블로그용-미크로틱 라우터에 ZeroTier 설정하기.drawio.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buD8uE/btsQgfmKYm4/cWFxRbqFcNcK56HHJgH0x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buD8uE/btsQgfmKYm4/cWFxRbqFcNcK56HHJgH0x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buD8uE/btsQgfmKYm4/cWFxRbqFcNcK56HHJgH0x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuD8uE%2FbtsQgfmKYm4%2FcWFxRbqFcNcK56HHJgH0x0%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;633&quot; height=&quot;233&quot; data-filename=&quot;블로그용-미크로틱 라우터에 ZeroTier 설정하기.drawio.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://expbox77.tistory.com/18&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;7월&amp;nbsp;중&amp;nbsp;RB5009UG+S+IN&amp;nbsp;이&amp;nbsp;도착했습니다.&lt;/a&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;방법을&amp;nbsp;찾아가면서&amp;nbsp;이것저것&amp;nbsp;설정하는&amp;nbsp;중인데,&amp;nbsp;뭐&amp;nbsp;하나&amp;nbsp;설정하려면&amp;nbsp;관리용&amp;nbsp;PC에&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;br /&gt;&lt;br /&gt;Wireguard&amp;nbsp;VPN이&amp;nbsp;기본&amp;nbsp;내장되어&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;VPN을&amp;nbsp;설정하면&amp;nbsp;되는&amp;nbsp;부분이지만,&amp;nbsp;VPN으로&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;추가/해제하는&amp;nbsp;것이&amp;nbsp;쉽고&amp;nbsp;간편한&amp;nbsp;방법이&amp;nbsp;필요했습니다.&lt;br /&gt;&lt;br /&gt;그래서 찾아본 결과 ARM, ARM64 기반의 미크로틱 라우터에 ZeroTier 패키지가 정식으로 배포되고 있는 것을 확인했습니다. 공식 문서와 유튜브 영상에서 설명이 정말 잘 되어 있어서 순조롭게 설정을 마쳤으나, 오류로 설정 하나가 자동으로 생성되지 않는 경우가 있어 Winbox로&amp;nbsp;접속할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;것을&amp;nbsp;알게&amp;nbsp;되었습니다.(안&amp;nbsp;그래도&amp;nbsp;댓글에서&amp;nbsp;이를&amp;nbsp;지적함)&lt;br /&gt;&lt;br /&gt;이 글에서는 오류가 생긴다면 해결할 수 있는 방법에 대해서 추가로 설명할 예정입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 시스템 사양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델명: Mikrotik RB5009UG+S+IN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS: 7.19.4&amp;nbsp;(stable)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Winbox 버전: WinBox 4.0 beta30 (Mac 버전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. ZeroTier 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mikrotik.com/download/archive&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mikrotik.com/download/archive&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 링크에서 자신의 RouterOS의 버전에 맞는 ZeroTier 패키지(.npk) 파일을 다운로드합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0ZjAX/btsQik1pY9Z/kk7b94DHzyaKJ8iFfKCPg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0ZjAX/btsQik1pY9Z/kk7b94DHzyaKJ8iFfKCPg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0ZjAX/btsQik1pY9Z/kk7b94DHzyaKJ8iFfKCPg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0ZjAX%2FbtsQik1pY9Z%2Fkk7b94DHzyaKJ8iFfKCPg1%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;274&quot; height=&quot;33&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RouterOS의 버전, 아키텍처를 꼭 잘 확인하여 다운로드하시면 됩니다.&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;자신의 RouterOS 버전을 모른다면, 아래의 접은 글을 보고 확인하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;Winbox 접속 후 System - Resources를 선택하면 Version을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;1208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uPugt/btsQjFcDluP/il648729R2YIXUb9UorSKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uPugt/btsQjFcDluP/il648729R2YIXUb9UorSKK/img.png&quot; data-alt=&quot;제 버전은 7.19.4(stable)입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uPugt/btsQjFcDluP/il648729R2YIXUb9UorSKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuPugt%2FbtsQjFcDluP%2Fil648729R2YIXUb9UorSKK%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;330&quot; height=&quot;398&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;1208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;제 버전은 7.19.4(stable)입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Files를 열고 ZeroTier 패키지를 드래그해서 업로드해 줍니다.&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;p data-ke-size=&quot;size16&quot;&gt;&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;1226&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYEQFT/btsQiXEOtyy/MKBvpKOxaSNt8qZLUPxQ1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYEQFT/btsQiXEOtyy/MKBvpKOxaSNt8qZLUPxQ1k/img.png&quot; data-alt=&quot;최상위 경로에 업로드 된 패키지 설치 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYEQFT/btsQiXEOtyy/MKBvpKOxaSNt8qZLUPxQ1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYEQFT%2FbtsQiXEOtyy%2FMKBvpKOxaSNt8qZLUPxQ1k%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;487&quot; height=&quot;305&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;768&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 System - Reboot를 선택해서 재부팅하면 자동으로 설치가 됩니다. 패키지 설치 파일은 자동으로 설치된 후 삭제됩니다.&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;패키지가 정상적으로 잘 설치되었다면, Log에서 패키지가 정상적으로 설치되었다고 남아 있거나 System - Packages에서 ZeroTier가 보일 것입니다. 혹은 왼쪽 메뉴에서 ZeroTier가 보이면 설치가 정상적으로 완료된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBRm8/btsQiDGEKTu/5tzwlNzsTEXvtKBvlpWxBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBRm8/btsQiDGEKTu/5tzwlNzsTEXvtKBvlpWxBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBRm8/btsQiDGEKTu/5tzwlNzsTEXvtKBvlpWxBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBRm8%2FbtsQiDGEKTu%2F5tzwlNzsTEXvtKBvlpWxBK%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;558&quot; height=&quot;350&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. ZeroTier 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.zerotier.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.zerotier.com/&lt;/a&gt;&amp;nbsp;에 접속하여 로그인합니다.&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;새로운 네트워크를 생성하고 설정에서 Settings - Basic - Name에서 이름을 변경합니다.&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;Network ID는 잘 기억해 두시거나 복사해 두시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C9UJh/btsQhwOMKob/rhKarNZQYuWhLVuDwwkRl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C9UJh/btsQhwOMKob/rhKarNZQYuWhLVuDwwkRl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C9UJh/btsQhwOMKob/rhKarNZQYuWhLVuDwwkRl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC9UJh%2FbtsQhwOMKob%2FrhKarNZQYuWhLVuDwwkRl0%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;390&quot; height=&quot;315&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Settings - Advanced에서 사용할 IP 대역을 선택합니다.&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;p data-ke-size=&quot;size16&quot;&gt;&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;1984&quot; data-origin-height=&quot;1412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGGKbB/btsQiyZCajx/dGGx4xUB9cClSD8p5zOXyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGGKbB/btsQiyZCajx/dGGx4xUB9cClSD8p5zOXyk/img.png&quot; data-alt=&quot;저는 10.144.0.0/16 대역 사용하겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGGKbB/btsQiyZCajx/dGGx4xUB9cClSD8p5zOXyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGGKbB%2FbtsQiyZCajx%2FdGGx4xUB9cClSD8p5zOXyk%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;422&quot; height=&quot;300&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;1412&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저는 10.144.0.0/16 대역 사용하겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Mikrotik에서 ZeroTier 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 이제 Winbox(GUI) 방식과 CLI(터미널) 방식을 혼용해서 설명합니다. 원하시는 방법으로 설정하시면 됩니다.&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;Winbox - ZeroTier - Instance 탭에서 zt1을 Enable 버튼을 눌러 활성화시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qdDZX/btsQhQGiZlH/4WA0CNtq6ZEOPiUStwVZJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qdDZX/btsQhQGiZlH/4WA0CNtq6ZEOPiUStwVZJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qdDZX/btsQhQGiZlH/4WA0CNtq6ZEOPiUStwVZJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqdDZX%2FbtsQhQGiZlH%2F4WA0CNtq6ZEOPiUStwVZJk%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;316&quot; height=&quot;300&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI&lt;/p&gt;
&lt;pre id=&quot;code_1756805468554&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/zerotier enable zt1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Winbox - ZeroTier - ZeroTier 탭에서&amp;nbsp;New 버튼을 눌러 새로운 네트워크를 생성합니다.&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;Name을 지정하고 Network에 아까 복사해 둔 Network ID를 넣습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6wMX/btsQhYxyqCX/3myHtO7on2QLl0S9G3ukoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6wMX/btsQhYxyqCX/3myHtO7on2QLl0S9G3ukoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6wMX/btsQhYxyqCX/3myHtO7on2QLl0S9G3ukoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6wMX%2FbtsQhYxyqCX%2F3myHtO7on2QLl0S9G3ukoK%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;500&quot; height=&quot;350&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI&lt;/p&gt;
&lt;pre id=&quot;code_1756805988486&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; /zerotier interface add network=[복사한 Network ID] instance=zt1 name=[설정할 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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. ZeroTier 설정 마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://my.zerotier.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://my.zerotier.com/&lt;/a&gt; 에서 설정한 네트워크를 다시 열어 Mikrotik 장비가 정상적으로 연결되었는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-42-29.png&quot; data-origin-width=&quot;1958&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VXR6b/btsQhp96zOJ/T5T2qXB5soojhk0Fogbyu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VXR6b/btsQhp96zOJ/T5T2qXB5soojhk0Fogbyu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VXR6b/btsQhp96zOJ/T5T2qXB5soojhk0Fogbyu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVXR6b%2FbtsQhp96zOJ%2FT5T2qXB5soojhk0Fogbyu0%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;1958&quot; height=&quot;190&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-42-29.png&quot; data-origin-width=&quot;1958&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Edit 아래의 아이콘을 눌러 승인 및 이름을 지정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-47-14.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TdCMo/btsQfxOKbYO/p8kIBcNL3NRngxQH4uYnKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TdCMo/btsQfxOKbYO/p8kIBcNL3NRngxQH4uYnKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TdCMo/btsQfxOKbYO/p8kIBcNL3NRngxQH4uYnKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTdCMo%2FbtsQfxOKbYO%2Fp8kIBcNL3NRngxQH4uYnKk%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;255&quot; height=&quot;453&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-47-14.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Save를 누르고 조금 기다린 후 Refresh 버튼을 누르면 IP가 자동으로 할당됩니다.&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;--&amp;gt; 만약 자동으로 할당된 IP가 마음에 안 드는 경우, IP Assignments에서 IP 대역에 맞게 수정하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-50-27.png&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chZTWB/btsQiRq59v5/WkzY9SVGlON3SSSy73FgaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chZTWB/btsQiRq59v5/WkzY9SVGlON3SSSy73FgaK/img.png&quot; data-alt=&quot;Management IPs가 할당된 IP&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chZTWB/btsQiRq59v5/WkzY9SVGlON3SSSy73FgaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchZTWB%2FbtsQiRq59v5%2FWkzY9SVGlON3SSSy73FgaK%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;1950&quot; height=&quot;184&quot; data-filename=&quot;Monosnap ZeroTier Central - Networks - 45b6e887e25e581a 2025-09-02 18-50-27.png&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Management IPs가 할당된 IP&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 할당된 IP를 기억하거나 복사해 두시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. Mikrotik에서 ZeroTier 설정 마무리&lt;/h3&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;Winbox - IP - Firewall - Filter Rules 탭에서 New 버튼을 눌러 새로운 방화벽 규칙을 생성합니다.&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;Comment: Allow ZeroTier Forward&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Chain: forward&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;In. Interface: [지정한 ZeroTier 인터페이스 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctIxrR/btsQiBoyM7t/NzMWhqe1HuB2h3mDSxbfuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctIxrR/btsQiBoyM7t/NzMWhqe1HuB2h3mDSxbfuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctIxrR/btsQiBoyM7t/NzMWhqe1HuB2h3mDSxbfuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctIxrR%2FbtsQiBoyM7t%2FNzMWhqe1HuB2h3mDSxbfuk%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;501&quot; height=&quot;339&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Action 탭의 Action을 accept로 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHBiGN/btsQhTiMEMc/eBuAduACwwMNQJquSdXax1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHBiGN/btsQhTiMEMc/eBuAduACwwMNQJquSdXax1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHBiGN/btsQhTiMEMc/eBuAduACwwMNQJquSdXax1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHBiGN%2FbtsQhTiMEMc%2FeBuAduACwwMNQJquSdXax1%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;500&quot; height=&quot;362&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OK로 저장합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Winbox&amp;nbsp;-&amp;nbsp;IP&amp;nbsp;-&amp;nbsp;Firewall&amp;nbsp;-&amp;nbsp;Filter&amp;nbsp;Rules&amp;nbsp;탭에서&amp;nbsp;New&amp;nbsp;버튼을&amp;nbsp;눌러&amp;nbsp;새로운&amp;nbsp;방화벽&amp;nbsp;규칙을&amp;nbsp;생성합니다.&lt;br /&gt;&lt;br /&gt;Comment: Allow ZeroTier Input&lt;br /&gt;Chain: input&lt;br /&gt;In.&amp;nbsp;Interface:&amp;nbsp;[지정한&amp;nbsp;ZeroTier&amp;nbsp;인터페이스&amp;nbsp;이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LPUSe/btsQhiXA0qB/XODCX9Olklo42Y6JWSKtNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LPUSe/btsQhiXA0qB/XODCX9Olklo42Y6JWSKtNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LPUSe/btsQhiXA0qB/XODCX9Olklo42Y6JWSKtNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLPUSe%2FbtsQhiXA0qB%2FXODCX9Olklo42Y6JWSKtNk%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;501&quot; height=&quot;339&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Action 탭의 Action을 accept로 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mNmAi/btsQgaFM7Ni/Wy1NyTVnppmIGUDtJhBBwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mNmAi/btsQgaFM7Ni/Wy1NyTVnppmIGUDtJhBBwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mNmAi/btsQgaFM7Ni/Wy1NyTVnppmIGUDtJhBBwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmNmAi%2FbtsQgaFM7Ni%2FWy1NyTVnppmIGUDtJhBBwk%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;500&quot; height=&quot;362&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1012&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OK로 저장합니다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우에는 Fasttrack 통계용 더미 규칙이 0번으로 고정이 되어있는 건지 더 위로 올릴 수는 없더라고요. 다만, 아래에 있는 CLI로는 정상적으로 처리할 수 있었으나 저대로 놔둬도 정상 작동했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr21i2/btsQjd8zwHn/lEDsktI0okrDeT8cDkV8p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr21i2/btsQjd8zwHn/lEDsktI0okrDeT8cDkV8p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr21i2/btsQjd8zwHn/lEDsktI0okrDeT8cDkV8p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr21i2%2FbtsQjd8zwHn%2FlEDsktI0okrDeT8cDkV8p0%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;1236&quot; height=&quot;238&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI&lt;/p&gt;
&lt;pre id=&quot;code_1756806872865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/ip firewall filter add action=accept chain=forward in-interface=[지정한 ZeroTier 인터페이스 이름] place-before=0 comment=&quot;Allow ZeroTier Forward&quot;
/ip firewall filter add action=accept chain=input in-interface=[지정한 ZeroTier 인터페이스 이름] place-before=0 comment=&quot;Allow ZeroTier Input&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 경우 설정이 자동으로 추가되지만, ZeroTier의 IP 대역을 수정하는 등의 작업을 진행하면 중복 IP가 생성되어 자동 생성이 제대로 안 되는 경우가 있는 것 같습니다. 이 경우 Winbox로 IP를 제대로 입력하더라도 로그인할 수 없으므로 IP를 다시 지정해야 합니다.&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;Winbox - IP - Addresses에서 ZeroTier에서 할당된 IP가 보인다면, 자동 설정이 생성된 것이므로 바로 사용할 수 있습니다.&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;Winbox - IP - Addresses&lt;span&gt;에서 ZeroTier에서 할당된 IP가 없다면, New 버튼을 눌러 할당된 IP를 입력합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnuHqj/btsQgdbq5rs/ebv7Ju0ink8IAEe0E3Glb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnuHqj/btsQgdbq5rs/ebv7Ju0ink8IAEe0E3Glb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnuHqj/btsQgdbq5rs/ebv7Ju0ink8IAEe0E3Glb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnuHqj%2FbtsQgdbq5rs%2Febv7Ju0ink8IAEe0E3Glb1%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;400&quot; height=&quot;246&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Comment: ZeroTier Network&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Address: [ZeroTier에서 할당된 IP]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Interface: [지정한 ZeroTier 인터페이스 이름]&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;CLI&lt;/p&gt;
&lt;pre id=&quot;code_1756809270746&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/ip address add address=[ZeroTier에서 할당된 IP] interface=[지정한 ZeroTier 인터페이스 이름] comment=&quot;ZeroTier Network&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6. Winbox 접속&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 접속 기기를 ZeroTier 네트워크에 연결하는 부분은 생략하겠습니다. 그리 어렵진 않으니 공식 문서를 확인하면서 ZeroTier 클라이언트를 다운로드하고 설치하고 설정하시면 됩니다. 위에서 설정한 것과 크게 다르지 않습니다.&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;a href=&quot;https://docs.zerotier.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.zerotier.com/&lt;/a&gt;&amp;nbsp;- 공식 문서&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;기기를 추가하고 Winbox의 IP에 할당된 IP를 입력하면 정상적으로 접속되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH도 설정하셨다면 당연히 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2146&quot; data-origin-height=&quot;1384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFQ4w/btsQhQ7oXc6/R8Lqk4bjA6iCkiaKewpeyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFQ4w/btsQhQ7oXc6/R8Lqk4bjA6iCkiaKewpeyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFQ4w/btsQhQ7oXc6/R8Lqk4bjA6iCkiaKewpeyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFQ4w%2FbtsQhQ7oXc6%2FR8Lqk4bjA6iCkiaKewpeyK%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;2146&quot; height=&quot;1384&quot; data-origin-width=&quot;2146&quot; data-origin-height=&quot;1384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위 이미지 상단의 창 제목 표시줄을 보면 아까 설정했던 10.144.40.237로 정상 접속한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레퍼런스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://help.mikrotik.com/docs/spaces/ROS/pages/83755083/ZeroTier&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://help.mikrotik.com/docs/spaces/ROS/pages/83755083/ZeroTier&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/60uIlyF8Z5s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/60uIlyF8Z5s&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.zerotier.com/mikrotik/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.zerotier.com/mikrotik/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HomeLAB/Mikrotik &amp;amp; 네트워크</category>
      <category>Mikrotik</category>
      <category>ZeroTier</category>
      <category>라우터</category>
      <category>미크로틱</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/19</guid>
      <comments>https://expbox77.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 2 Sep 2025 19:59:08 +0900</pubDate>
    </item>
    <item>
      <title>Mikrotik RB5009UG+S+IN 개봉기</title>
      <link>https://expbox77.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://expbox77.tistory.com/4&quot;&gt;https://expbox77.tistory.com/4&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거 Mikrotik RB2011U를 기글 하드웨어에서 나눔받은 적이 있다. 그 이후로 조금씩 설정하는 방법을 익히고 써보다가 결국에는 구형 제품의 한계를 느끼고 거의 찍먹 수준으로 그쳤다. 그리고 한 반년이 넘게 지났다. 서버쪽에 OPNsense를 사용하고 있었는데, 구형 X86 기반에 소프트웨어 방화벽이라서 전기도 많이 먹고 발열도 많아서 Mikrotik 제품을 구입하기로 결정했다.&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;a href=&quot;https://svrforum.com/blog?member_srl=908544&quot;&gt;서버포럼의 klayf님&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;처음에는 klayf님께서 자주 구입하시는 Getic에서 구입하려고 했으나,프로모션으로 9달러 배송비가 면제가 가능했고 빠르게 받아야하는 상황이 아니었기에 결제 방법, 반품/교환 등의 방법이 더 좋을 것 같아서 아마존에서 구입했다. 카드 수수료라던가 배송비 이것저것 했으면 조금 더 빨리 받긴 했겠으나 오히려 Getic이 더 비쌌을 가능성도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2771 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QM32y/btsPprVoZ5V/9mjTdus1x2BiT0kYod4Ock/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QM32y/btsPprVoZ5V/9mjTdus1x2BiT0kYod4Ock/img.jpg&quot; data-alt=&quot;받고 난 뒤의 패키지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QM32y/btsPprVoZ5V/9mjTdus1x2BiT0kYod4Ock/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQM32y%2FbtsPprVoZ5V%2F9mjTdus1x2BiT0kYod4Ock%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2771 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7월 11일 새벽쯤 구입했고 대충 22일 쯤 도착 예상이라 느긋하게 기다렸는데 7월 17일 도착하여 5영업일만에 꽤나 빠르게 왔다. 다만 패키징이 그냥 좀 질긴 종이 봉투에 아무런 완충재도 없이 그냥 넣어져있어서 굉장히 마음에 안들었다. 알리의 친환경 버전이라고 해야햐나.. 알리는 비닐에 넣어주는데 아마존은 종이에;; 사진으로 보다시피 덕분에 여러 방향에서 찌그러진 패키지를 받게 되었다. 여기서 기분이 살짝 나빠서 교환 받으려고 했는데 뭐.. 외관이 중요한 기기는 아니니까 그냥 DOA만 아니길 바랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2772 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgugO2/btsPqGDLFWu/J9Le8sikJVUu7QN9m7nPPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgugO2/btsPqGDLFWu/J9Le8sikJVUu7QN9m7nPPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgugO2/btsPqGDLFWu/J9Le8sikJVUu7QN9m7nPPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgugO2%2FbtsPqGDLFWu%2FJ9Le8sikJVUu7QN9m7nPPk%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2772 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2773 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yMAUs/btsPpQNMiCI/C6DuH55RtiQaxU2QGkU82K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yMAUs/btsPpQNMiCI/C6DuH55RtiQaxU2QGkU82K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yMAUs/btsPpQNMiCI/C6DuH55RtiQaxU2QGkU82K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyMAUs%2FbtsPpQNMiCI%2FC6DuH55RtiQaxU2QGkU82K%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2773 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 들어내면 어댑터와 본품이 있다. 어댑터는 100~240V 프리볼트, US플러그이고 24V 1.5A이다. RB2011U에 사용하던거보다 0.3A 밖에 안 높은 주제에 어댑터는 1.5배 커진 것 같다. 그 와중에 잘 고장난다는 이야기가 있으니 추후에 교환해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2774 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl0D9m/btsPpUvZC0A/F5U5k5kjKaL6w4enUgc3lk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl0D9m/btsPpUvZC0A/F5U5k5kjKaL6w4enUgc3lk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl0D9m/btsPpUvZC0A/F5U5k5kjKaL6w4enUgc3lk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl0D9m%2FbtsPpUvZC0A%2FF5U5k5kjKaL6w4enUgc3lk%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2774 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본품과 어댑터를 지지하던 내장재를 제거하면 기기 아래에 붙이는 고무발, 앵커볼트가 있다. 정말 친환경적인 패키지.. 애플도 한 수 배우고 가는거 아닐까 싶다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; 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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2775 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UEtBv/btsPpiYnkTg/AAKqvU0RiM7bUKGbY3DTuK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UEtBv/btsPpiYnkTg/AAKqvU0RiM7bUKGbY3DTuK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UEtBv/btsPpiYnkTg/AAKqvU0RiM7bUKGbY3DTuK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUEtBv%2FbtsPpiYnkTg%2FAAKqvU0RiM7bUKGbY3DTuK%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2775 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본품의 외관. 생각보다 작아서 놀랐고 작은데 철제 프레임이라 든든한 느낌이 든다. Like 작은 거인.. 실제로 내 네트워크 전체를 책임할 녀석이니 틀린 말은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2776 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZcJPS/btsPpfnpMcb/T9TIKWDJAmtV6lw0M6B2HK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZcJPS/btsPpfnpMcb/T9TIKWDJAmtV6lw0M6B2HK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZcJPS/btsPpfnpMcb/T9TIKWDJAmtV6lw0M6B2HK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZcJPS%2FbtsPpfnpMcb%2FT9TIKWDJAmtV6lw0M6B2HK%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2776 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;500ml 생수병과 비교하면 이렇다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2777 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQpai5/btsPqmZSkTR/p8HDuviduAQ1QKK3giJcY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQpai5/btsPqmZSkTR/p8HDuviduAQ1QKK3giJcY1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQpai5/btsPqmZSkTR/p8HDuviduAQ1QKK3giJcY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQpai5%2FbtsPqmZSkTR%2Fp8HDuviduAQ1QKK3giJcY1%2Fimg.jpg&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;640&quot; height=&quot;480&quot; data-filename=&quot;IMG_2777 중간.jpeg&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버랙에 넣을거라 랙이어를 구입해야하는데 정품&amp;nbsp;&lt;a href=&quot;https://mikrotik.com/product/rb5009_mount#fndtn-gallery&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;랙마운트 킷 K-79&lt;/a&gt;를 팔고 있었다. 무조건 이중화 할거라고 생각했는지 랙마운트 킷이 2/4개 기준으로 설계되어있다. 나 같은 사람은 어쩌라고.. 그래서 얼마 전에 3D 프린터에 입문한 형에게 입문할까 고민할 때쯤에 모델링 파일 찾아주면 뽑아줄 수 있느냐고 물어본 적이 있는데 흔쾌히 뽑아준다는 생각이 났다. 모델링 파일을 오픈해주는 사이트에서 좀 찾아봤더니 &lt;a href=&quot;https://www.thingiverse.com/thing:5222176&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지는 찌그러지고 난리났는데 대충 보아하니 겉부분은 문제 없는 것 같아서 그냥 교환 없이 쓰려고한다. 이제 세팅과의 지옥이 펼쳐질 예정이다. 펌웨어 업데이트를 끝내고 추가 패키지를 깔고 이것저것 만져봤는데 확실히 어렵다. 대신 MIPS 기반에 메모리도 128MB 밖에 안되는 RB2011U에서도 꽤나 많은 일을 할 수 있었는데 ARM에 1GB 메모리인 RB5009로 업그레이드되어서 그런지 그만큼 할 수 있는 부분이 더 많아져서 좋다. 일단 세팅을 좀 더 해보고 프린팅된 물건을 받으면 그때 서버에 장착해야겠다.&lt;/p&gt;</description>
      <category>HomeLAB/홈랩 잡담</category>
      <category>Mikrotik</category>
      <category>rb5009ug+s+in</category>
      <category>개봉기</category>
      <category>네트워크</category>
      <category>라우터</category>
      <category>서버</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/18</guid>
      <comments>https://expbox77.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 18 Jul 2025 18:34:22 +0900</pubDate>
    </item>
    <item>
      <title>이미지 검색 확장 프로그램 사용할 때 쓰는 URL</title>
      <link>https://expbox77.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 새로운 브라우저를 탐색하는 중인데 확장 프로그램을 찾다보니 Image Search Options 외 이미지 검색 관련한 확장 프로그램 중 일부 확장 프로그램에서는 지금은 사용하지 않는 URL을 사용해서 제대로 이미지 검색이 안되는 경우가 있었습니다. 따라서 제가 사용하는 URL을 좀 정리해봤습니다. 나중에 추가할 수도 있긴한데 이 정도만해도 찾을만한건 거진 다 찾기 때문에 더 추가할 일이 있을까 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20250309 최초 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;SauceNAO&amp;nbsp;Search&lt;br /&gt;https://saucenao.com/search.php?db=999&amp;amp;url=&lt;br /&gt;&lt;br /&gt;IQDB Search&lt;br /&gt;https://iqdb.org/?url=&lt;br /&gt;&lt;br /&gt;TinEye Search # 비활성화&lt;br /&gt;https://tineye.com/search/?url=&lt;br /&gt;&lt;br /&gt;Google Search(Lens)&lt;br /&gt;https://lens.google.com/uploadbyurl?url=&lt;br /&gt;&lt;br /&gt;Yandex Search&lt;br /&gt;https://yandex.com/images/search?rpt=imageview&amp;amp;url=&lt;br /&gt;&lt;br /&gt;Bing Search&lt;br /&gt;https://www.bing.com/images/search?view=detailv2&amp;amp;iss=sbi&amp;amp;q=imgurl:&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HomeLAB/간단팁</category>
      <category>이미지검색</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/17</guid>
      <comments>https://expbox77.tistory.com/17#entry17comment</comments>
      <pubDate>Sun, 9 Mar 2025 02:19:43 +0900</pubDate>
    </item>
    <item>
      <title>[Mac] llama.cpp 로컬에서 설치하고 간단하게 찍먹해보기</title>
      <link>https://expbox77.tistory.com/13</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;블로그용-llama.cpp 로컬에서 설치하고 간단하게 찍먹해보기.drawio.png&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp5Kmu/btsMrnPBGIi/KyTwWyxAbp1hRunXmT4pDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp5Kmu/btsMrnPBGIi/KyTwWyxAbp1hRunXmT4pDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp5Kmu/btsMrnPBGIi/KyTwWyxAbp1hRunXmT4pDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp5Kmu%2FbtsMrnPBGIi%2FKyTwWyxAbp1hRunXmT4pDK%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;1612&quot; height=&quot;300&quot; data-filename=&quot;블로그용-llama.cpp 로컬에서 설치하고 간단하게 찍먹해보기.drawio.png&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥북에서 로컬 LLM을 돌리는 프로그램으로 Ollama를 거쳐 LMStudio로 잘 사용하다가 나중에 GPU 서버에서 서빙하는 걸 연습도 해볼 겸 vLLM으로 알아보고 있었습니다. 하지만 맥의 GPU(Metal - MPS)를 사용할 수 없다는 결론이 나와서 llama.cpp로 알아보게 되었습니다.&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;제가 컨테이너 사랑꾼(...)이라 llama.cpp 또한 컨테이너로 실행하려고 했고 도커 이미지가 존재하기에 사용할 수 있었지만, 애플의 정책상 VM에서는 GPU 가속이 무슨 짓을 해도 안된다는 글을 발견해고 호스트에 설치하기로 생각했습니다. 원래는 가상 환경을 만들고 llama.cpp를 빌드해야 하지만, 따로 빌드할 필요 없이, brew로 빌드되어 있는 바이너리 파일을 간편하게 설치할 수 있었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 시스템 사양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple MacBook Pro 16&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CPU: M3 MAX&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RAM: 64GB&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OS: macOS Sequoia 15.2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;llama.cpp 버전: version: 4747 (c5d91a74) / built&amp;nbsp;with&amp;nbsp;Apple&amp;nbsp;clang&amp;nbsp;version&amp;nbsp;16.0.0&amp;nbsp;(clang-1600.0.26.6)&amp;nbsp;for&amp;nbsp;arm64-apple-darwin24.2.0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;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;1. homebrew 설치 - &lt;a href=&quot;https://brew.sh/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://brew.sh/&lt;/a&gt; 에 있는 설치 명령어를 터미널에 입력하여 설치하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 모델 준비 - &lt;a href=&quot;https://huggingface.co/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://huggingface.co/&lt;/a&gt; 에서 GGUF 모델을 찾아 다운로드합니다. (제가 이번 글에서 사용할 모델은 &lt;a href=&quot;https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-32B-Instruct-GGUF&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-32B-Instruct-GGUF&lt;/a&gt; 입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. homebrew로 llama.cpp 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, homebrew로 llama.cpp를 설치해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740135619272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# https://formulae.brew.sh/formula/llama.cpp
brew install llama.cpp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알아서 설치합니다. 설치가 완료된 뒤,&amp;nbsp;터미널에 llama- 까지 친 뒤, Tab을 눌러보면..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap expbox@ExpboxMacBookPro16 &amp;amp;mdash; ~ &amp;amp;mdash; 120&amp;amp;times;24 2025-02-21 20-02-50.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beryGq/btsMsUr4bBt/KD1eklp8wUArnO4NzWsqOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beryGq/btsMsUr4bBt/KD1eklp8wUArnO4NzWsqOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beryGq/btsMsUr4bBt/KD1eklp8wUArnO4NzWsqOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FberyGq%2FbtsMsUr4bBt%2FKD1eklp8wUArnO4NzWsqOK%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;1223&quot; height=&quot;579&quot; data-filename=&quot;Monosnap expbox@ExpboxMacBookPro16 &amp;mdash; ~ &amp;mdash; 120&amp;times;24 2025-02-21 20-02-50.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 다양한 llama.cpp에 있는 유틸리티가 설치된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. llama.cpp로 LLM 모델 써보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 Ollama 느낌인 llama-simple-chat으로 터미널에서 잠깐 사용해 볼 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740136722094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# llama-simple-chat 사용
# llama-simple-chat -m ./EXAONE-3.5-32B-Instruct-Q4_K_M.gguf
llama-simple-chat -m &amp;lt;모델 위치&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap llama-simple-chat -m .EXAONE-3.5-32B-Instruct-Q4_K_M.gguf &amp;amp;mdash; llama-simple-chat &amp;amp;mdash; 120&amp;amp;times;24 2025-02-21 20-16-00.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1kHv/btsMrwMvYuJ/hY5PauZI7xb2tiCWfflT90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1kHv/btsMrwMvYuJ/hY5PauZI7xb2tiCWfflT90/img.png&quot; data-alt=&quot;대부분의 모델들에게 처음에는 이거부터 물어봅니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1kHv/btsMrwMvYuJ/hY5PauZI7xb2tiCWfflT90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1kHv%2FbtsMrwMvYuJ%2FhY5PauZI7xb2tiCWfflT90%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;1696&quot; height=&quot;619&quot; data-filename=&quot;Monosnap llama-simple-chat -m .EXAONE-3.5-32B-Instruct-Q4_K_M.gguf &amp;mdash; llama-simple-chat &amp;mdash; 120&amp;times;24 2025-02-21 20-16-00.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;619&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap sudo macmon &amp;amp;mdash; macmon &amp;amp;mdash; 120&amp;amp;times;24 2025-02-21 20-22-55.png&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c120LT/btsMtnABO9U/RZfAY6YK35JKmZWWpF6JkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c120LT/btsMtnABO9U/RZfAY6YK35JKmZWWpF6JkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c120LT/btsMtnABO9U/RZfAY6YK35JKmZWWpF6JkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc120LT%2FbtsMtnABO9U%2FRZfAY6YK35JKmZWWpF6JkK%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;1691&quot; height=&quot;868&quot; data-filename=&quot;Monosnap sudo macmon &amp;mdash; macmon &amp;mdash; 120&amp;times;24 2025-02-21 20-22-55.png&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짧은 답변이라 GPU를 오래 사용하진 않았으나, 답변할 때마다 GPU 사용량이 100% 언저리에서 놉니다.&lt;/p&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. llama.cpp와 OpenWebUI로 LLM 모델 사용해 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전반적인 세팅은 &lt;a href=&quot;https://expbox77.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://expbox77.tistory.com/10&lt;/a&gt; 을 참고하시면 됩니다. 로컬에서 llama-server로 LLM 서빙, OpenWebUI에서 채팅한다고 보시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740137421140&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 포트는 기본 8080이나, 저는 따로 사용하고 있어 예시에는 변경되어있습니다.
# llama-server --port 12370 --model './EXAONE-3.5-32B-Instruct-Q4_K_M.gguf'
llama-server --model &amp;lt;모델 경로&amp;gt;&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;main: model loaded&lt;/b&gt;&lt;br /&gt;main: chat template, chat_template: {% for message in messages %}{% if loop.first and message['role'] != 'system' %}{{ '[|system|][|endofturn|]' }}{% endif %}{{ '[|' + message['role'] + '|]' + message['content'] }}{% if message['role'] == 'user' %}{{ '' }}{% else %}{{ '[|endofturn|]' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '[|assistant|]' }}{% endif %}, example_format: '[|system|]You are a helpful assistant[|endofturn|]&lt;br /&gt;[|user|]Hello&lt;br /&gt;[|assistant|]Hi there[|endofturn|]&lt;br /&gt;[|user|]How are you?&lt;br /&gt;[|assistant|]'&lt;br /&gt;&lt;b&gt;main: server is listening on http://127.0.0.1:12370 - starting the main loop&lt;/b&gt;&lt;br /&gt;&lt;b&gt;srv&amp;nbsp; update_slots: all slots are idle&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl로 모델이 제대로 로딩되었는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740137988299&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# curl --request GET \
# --url http://localhost:12370/health

curl --request GET \
--url http://localhost:&amp;lt;포트(기본 8080)&amp;gt;/health

# 결과
# {&quot;status&quot;:&quot;ok&quot;} --&amp;gt; 모델 로드 완료
# {&quot;status&quot;: &quot;error&quot;} --&amp;gt; 모델 로드 실패
# {&quot;status&quot;: &quot;loading model&quot;} --&amp;gt; 모델 로드 중&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 OpenWebUI랑 연결해 보겠습니다. &lt;b&gt;관리자 설정 - 설정 - 연결 - OpenAI API 연결 관리&lt;/b&gt;에서 연결 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OFlQU/btsMraCSYZC/kmGSn9qcRUjPKy2ONoB2T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OFlQU/btsMraCSYZC/kmGSn9qcRUjPKy2ONoB2T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OFlQU/btsMraCSYZC/kmGSn9qcRUjPKy2ONoB2T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOFlQU%2FbtsMraCSYZC%2FkmGSn9qcRUjPKy2ONoB2T0%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;458&quot; height=&quot;317&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenWebUI는 도커 컨테이너, llama-server는 로컬이니 이렇게 설정하시면 됩니다. Key는 아무것도 입력하지 않으면 저장이 안 됩니다. 하지만 api-key &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;설정을 안 해서&lt;/span&gt; 아무거나 입력해도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2tg13/btsMtEWonbm/RY0P7YWTQKBdaV4EyXfkQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2tg13/btsMtEWonbm/RY0P7YWTQKBdaV4EyXfkQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2tg13/btsMtEWonbm/RY0P7YWTQKBdaV4EyXfkQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2tg13%2FbtsMtEWonbm%2FRY0P7YWTQKBdaV4EyXfkQ1%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;1718&quot; height=&quot;368&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deGep8/btsMs6lxi1u/0k0SjecAJYuvUAtPPn9JKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deGep8/btsMs6lxi1u/0k0SjecAJYuvUAtPPn9JKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deGep8/btsMs6lxi1u/0k0SjecAJYuvUAtPPn9JKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeGep8%2FbtsMs6lxi1u%2F0k0SjecAJYuvUAtPPn9JKk%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;1396&quot; height=&quot;102&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰은 내용에 따라서 13~16 초당 토큰을 왔다 갔다 하는데 이번에는 좀 잘 나왔네요. 원래 쓰던 LM Studio보다 비슷하거나 살짝 떨어지는데 그렇게 큰 차이는 아닌 것 같기도 하고 성능 튜닝을 좀 하면 나을 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;레퍼런스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Mozilla-Ocho/llamafile/blob/main/llama.cpp/server/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Mozilla-Ocho/llamafile/blob/main/llama.cpp/server/README.md&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HomeLAB/Mac(OSX, macOS)</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/13</guid>
      <comments>https://expbox77.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 21 Feb 2025 20:53:27 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 도커로 Cloudflare Tunnel + Nginx Proxy Manager + Authelia 구성으로 포트 공개하지 않고 안전하게 외부로 서비스 공개하기</title>
      <link>https://expbox77.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 클라우드 Tree Tier에서는 생각보다 많은 컴퓨팅 자원을 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;무료로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;사용할 수 있습니다. AMD x86 시스템에서는 1 CPU + 1GB의 인스턴스 2개, Ampere ARM 시스템에서는 4 CPU + 24GB의 인스턴스 1개까지 만들 수 있습니다. 원하면 전부 가능하나 통합 200기가의 용량은 그리 넉넉하지는 않지만 원한다면 쪼개어 3개의 인스턴스를 모두 만들 수 있습니다. 자세한 건 오라클 클라우드의 상시 무료 사용을 확인해 보면 됩니다.&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;a href=&quot;https://www.oracle.com/kr/cloud/free/#always-free&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.oracle.com/kr/cloud/free/#always-free&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;저의 경우에는 Ampere ARM 시스템에 모두 몰아주어 4 CPU + 24GB + 200GB 인스턴스 1개를 운용하고 있습니다. 항상 인터넷과 연결되어 있는 클라우드 인스턴스 특성상 해킹과 여러 네트워크 공격에 노출되어 있습니다. 따라서 기존에는 NginxProxyManager에 80, 443 포트를 열어 리버스 프록시만 포트를 열어두는 것이었지만 좀 더 강력한 보호를 위해 Cloudflare Tunnel의 도움을 추가로 받기로 결정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;블로그용.jpg&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRfCW/btsMkc06Bdq/HEJnxvOAh67guQMroRaGP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRfCW/btsMkc06Bdq/HEJnxvOAh67guQMroRaGP0/img.jpg&quot; data-alt=&quot;기본적인 구조를 이미지로 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRfCW/btsMkc06Bdq/HEJnxvOAh67guQMroRaGP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRfCW%2FbtsMkc06Bdq%2FHEJnxvOAh67guQMroRaGP0%2Fimg.jpg&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;600&quot; height=&quot;268&quot; data-filename=&quot;블로그용.jpg&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;807&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker의 네트워크를 통해서 Host와 분리합니다. 인터넷에서 들어오는 요청을 Cloudflare Tunnel로 걸러냅니다. 이때, DDoS, 등의 Cloudflare의 고급 기능을 무료로 사용이 가능합니다. 그렇게 NginxProxyManager로 요청이 들어왔을 때 Authelia의 인증을 거쳐야 각 서비스 컨테이너로 접근이 가능해지는 방식입니다.&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.yaml 파일에 대한 ports 항목에 대한 부분은 전부 expose로 대체해야 하고 network 도 추가해야 합니다. 이러면 host에서는 바로 접근이 불가능하기에 주의하셔야 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 시스템 사양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Orlacle Cloud A1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU: 4 CPU&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAM: 24GB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS: Ubuntu 22.04&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;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;1. 도메인 - 단, 구입한 곳이 어디든 상관없이 Cloudflare 계정을 만들고 등록해야 합니다. duckdns 같은 서비스는 사용 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 공식 도커 엔진 설치 - &lt;a href=&quot;https://docs.docker.com/engine/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.docker.com/engine/install/&lt;/a&gt; 공식 문서 확인하고 설치하시면 됩니다. 아마 일반적으로 우분투/데비안의 경우에는 apt install docker.io docker-compose로 설치했을 건데 이 경우에는 저와 명령어가 같지 않아 제대로 호환되지 않을 수 있습니다.&lt;b&gt;(이 경우에는 docker compose 가 아닌 docker-compose로 명령어를 바꾸셔야 합니다.)&lt;/b&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 최종 아키텍처&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Cloudflare Nginx Authentik 보안 설정 2025-02-07 20-09-15.png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YoKHv/btsMh42DEt1/bFTPhkypNXtMSwzXr7PzVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YoKHv/btsMh42DEt1/bFTPhkypNXtMSwzXr7PzVk/img.png&quot; data-alt=&quot;ChatGPT로 해결할때 답변해준 부분 캡쳐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YoKHv/btsMh42DEt1/bFTPhkypNXtMSwzXr7PzVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYoKHv%2FbtsMh42DEt1%2FbFTPhkypNXtMSwzXr7PzVk%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;1520&quot; height=&quot;642&quot; data-filename=&quot;Monosnap Cloudflare Nginx Authentik 보안 설정 2025-02-07 20-09-15.png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ChatGPT로 해결할때 답변해준 부분 캡쳐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서도 간략하게 설명했지만, 한 번 더 설명합니다. 어떻게 작동할지 ChatGPT로 한창 삽질(..)할 때 답변받은 겁니다. 그림과 글로 두 번 보면 어떻게 작동할지 대략적으로 감이 오셨으리라 생각합니다. 원래는 Authentik을 사용하려고 생각했는데 이전부터 Authelia를 사용해서 변경되었습니다. 아마 사용 방법이 크게 다르진 않을 것으로 보입니다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. cloudflared 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudflared의 경우에는 docker-compose.yaml 파일을 먼저 작성하는 게 아니라 컨테이너에 있는 cloudflared로 명령을 보내 인증 파일과 터널의 정보가 담긴 json 파일을 생성해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739272154248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 디렉터리 생성 - 권한을 위해 777로 생성
mkdir -m 776 -p ./cloudflared/data

# cloudflare에 로그인하여 인증 파일 생성하기
docker run --rm -v ./cloudflare/data:/home/nonroot/.cloudflared cloudflare/cloudflared:latest tunnel login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증 파일 생성 시에는 아래와 같이 cloudflare 링크가 뜨는데, 이 링크에 아무 컴퓨터나 브라우저로 접속해서 인증하면 됩니다. 바로 링크로 접속했을 때 로그인 되어있지 않으면 로그인 진행 후 바로 대시보드로 이동합니다. 따라서 &lt;a href=&quot;https://dash.cloudflare.com&quot;&gt;https://dash.cloudflare.com&lt;/a&gt;에서 먼저 로그인 진행 후 링크에 접속하시는 것을 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap docker run --rm -v .cloudflareddatahomenonroot.cloudflared tunnel logi &amp;amp;mdash; docker &amp;amp;mdash; 120&amp;amp;times;24 2025-02-13 19-01-17.png&quot; data-origin-width=&quot;1695&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o92zT/btsMho1CK2y/YSoUr5Gn6mZmhqW05cUPS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o92zT/btsMho1CK2y/YSoUr5Gn6mZmhqW05cUPS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o92zT/btsMho1CK2y/YSoUr5Gn6mZmhqW05cUPS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo92zT%2FbtsMho1CK2y%2FYSoUr5Gn6mZmhqW05cUPS0%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;1695&quot; height=&quot;322&quot; data-filename=&quot;Monosnap docker run --rm -v .cloudflareddatahomenonroot.cloudflared tunnel logi &amp;mdash; docker &amp;mdash; 120&amp;times;24 2025-02-13 19-01-17.png&quot; data-origin-width=&quot;1695&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;blockquote data-ke-style=&quot;style3&quot;&gt;Leave cloudflared running to download the cert automatically.&lt;br /&gt;You have successfully logged in.&lt;br /&gt;If you wish to copy your credentials to a server, they have been saved to:&lt;br /&gt;/home/nonroot/.cloudflared/cert.pem&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Cloudflare Tunnel을 생성할 차례입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739441987352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cloudflare에 터널 생성하기
# 예시: docker run --rm -v ./cloudflared/data:/home/nonroot/.cloudflared cloudflare/cloudflared:latest tunnel create expbox
docker run --rm -v ./cloudflared/data:/home/nonroot/.cloudflared cloudflare/cloudflared:latest tunnel create &amp;lt;원하는 터널 이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어를 입력하고 조금만 기다리면 터널이 새로 생성됩니다. 터널이 새로 생성되면서 터널에 대한 정보가 담긴 json 파일을 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~cloudflared_npm_authelia &amp;amp;mdash; .._npm_authelia &amp;amp;mdash; 120&amp;amp;times;24 2025-02-13 19-02-21.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de2jST/btsMhOZ7Gnf/GkTchC7LVz6KEG6Bt3Ct00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de2jST/btsMhOZ7Gnf/GkTchC7LVz6KEG6Bt3Ct00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de2jST/btsMhOZ7Gnf/GkTchC7LVz6KEG6Bt3Ct00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde2jST%2FbtsMhOZ7Gnf%2FGkTchC7LVz6KEG6Bt3Ct00%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;1696&quot; height=&quot;253&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~cloudflared_npm_authelia &amp;mdash; .._npm_authelia &amp;mdash; 120&amp;times;24 2025-02-13 19-02-21.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 맨 마지막에 나오는 UUID를 기억해 두시거나 어딘가에 적어두시는 게 좋습니다. 이 UUID의 경우 추후에 사용할 cloudflared의 설정 파일에 사용됩니다. 하지만 잊어먹었더라도 cloudflared/data 디렉터리에 있는 json 파일의 이름을 확인하면 되니까 크게 걱정하지 않으셔도 됩니다.&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;터널까지 생성되었다면 서브 도메인을 입력할 차례입니다. 무료 사용자의 경우 인증서가 루트 도메인(example.net), 서브 도메인(service1.example.net)까지만 허용됩니다. aaa.service.example.net 같은 서브의 서브(?) 도메인까지 인증서를 사용하려면 월 10달러나 되는 인증서를 구입해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739442954262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cloudflare의 터널에서 CNAME 서브도메인 생성
# 예시: docker run --rm -v ./cloudflared/data:/home/nonroot/.cloudflared cloudflare/cloudflared:latest tunnel route dns expbox &quot;service.example.net&quot;
docker run --rm -v ./cloudflared/data:/home/nonroot/.cloudflared cloudflare/cloudflared:latest tunnel route dns &amp;lt;터널 이름&amp;gt; &quot;&amp;lt;원하는 서브 도메인&amp;gt;&quot;

# TMI
# 서버가 하나라서 굳이 서브 도메인을 나눌 필요가 없다면 &amp;lt;원하는 서브 도메인&amp;gt;을 와일드카드로 지정하셔도 됩니다.
# 와일드카드 --&amp;gt; *.example.net&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어를 입력하면 아래와 같이 CNAME으로 서브 도메인이 생성됩니다.&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;b&gt;NPM, Authelia에 사용할 도메인 2개를 생성해 주시면 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~cloudflared_npm_authelia &amp;amp;mdash; .._npm_authelia &amp;amp;mdash; 120&amp;amp;times;24 2025-02-13 19-38-39.png&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTJeCA/btsMhunfCyk/n15K6cWAuAKlZW5YsQcAjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTJeCA/btsMhunfCyk/n15K6cWAuAKlZW5YsQcAjK/img.png&quot; data-alt=&quot;쉘에 뜨는 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTJeCA/btsMhunfCyk/n15K6cWAuAKlZW5YsQcAjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTJeCA%2FbtsMhunfCyk%2Fn15K6cWAuAKlZW5YsQcAjK%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;1698&quot; height=&quot;140&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~cloudflared_npm_authelia &amp;mdash; .._npm_authelia &amp;mdash; 120&amp;times;24 2025-02-13 19-38-39.png&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쉘에 뜨는 내용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-14 16-04-11.png&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzcTsw/btsMjU7sjEH/oUwTifZUycgjjp4erBBiAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzcTsw/btsMjU7sjEH/oUwTifZUycgjjp4erBBiAK/img.png&quot; data-alt=&quot;웹의 Cloudflare DNS 레코드에서 확인한 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzcTsw/btsMjU7sjEH/oUwTifZUycgjjp4erBBiAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzcTsw%2FbtsMjU7sjEH%2FoUwTifZUycgjjp4erBBiAK%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;1584&quot; height=&quot;71&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-14 16-04-11.png&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹의 Cloudflare DNS 레코드에서 확인한 내용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브 도메인을 하나씩 추가할 때마다 이렇게 고생하면서 명령어를 쳐야 하는가?라고 하시면 그건 아닙니다. Cloudflare Dashboard에서도 추가가 가능합니다. 아래의 접은 글을 확인해 보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dash.cloudflare.com/&lt;/a&gt; - 구입한 도메인 - 왼쪽 사이드바에서 DNS를 순서대로 누르면 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-14 19-39-41.png&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8ARwt/btsMkCEpA57/U5dPP9iII3RRgirpFgKCHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8ARwt/btsMkCEpA57/U5dPP9iII3RRgirpFgKCHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8ARwt/btsMkCEpA57/U5dPP9iII3RRgirpFgKCHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8ARwt%2FbtsMkCEpA57%2FU5dPP9iII3RRgirpFgKCHK%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;1910&quot; height=&quot;298&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-14 19-39-41.png&quot; data-origin-width=&quot;1910&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&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;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;위와 같이 생성된 도메인을 볼 수 있습니다. 오른쪽의 편집 버튼을 누르면 &lt;/span&gt;이런 식으로 이름과 대상이 뜹니다. 이름의 경우 서브 도메인으로 되어있고 대상의 경우 &amp;lt;UUID&amp;gt;.cfargotunnel.com으로 지정이 되어있습니다. 여기서 대상의 URL을 가지고 새로운 서브도메인을 CNAME으로 만들면 됩니다.&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;레코드 추가를 누르고, 유형은 CNAME, 이름(서브도메인)은 원하는 대로, 대상은 아까 봤던&amp;nbsp;&amp;lt;UUID&amp;gt;.cfargotunnel.com으로 지정하고 저장하면 됩니다. 프록시 상태는 주황색으로 켜두면 됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 cloudflared 디렉터리 내에 있는 data 디렉터리에 config.yaml 파일을 생성하고 편집하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739516935447&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; vi cloudflared/data/config.yaml

# nano로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; nano cloudflared/data/config.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch로 config.yaml 파일을 생성하고 vi, nano 등으로 아래의 내용을 넣으면 됩니다. 서비스 주소는 도커 컨테이너의 서비스 이름 혹은 컨테이너 이름으로 넣으면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739516463854&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예시 UUID는 랜덤 생성기로 생성함
# tunnel: 7e3e754f-8642-455d-b550-ad57414fb91f
# credentials-file: /home/nonroot/.cloudflared/7e3e754f-8642-455d-b550-ad57414fb91f.json
tunnel: &amp;lt;UUID&amp;gt;
credentials-file: /home/nonroot/.cloudflared/&amp;lt;UUID&amp;gt;.json

ingress:
  # 예시
  # NPM
  # - hostname: npm.example.net
  #   service: http://npm:80
  #   originRequest:
  #     noTLSVerify: true
  
  # NPM
  - hostname: &amp;lt;NPM 서브 도메인&amp;gt;
    service: https://npm:81 # NPM 서비스 이름 + 관리용 81 포트
    originRequest:
      noTLSVerify: true
      
  - hostname: &amp;lt;Authelia 서브 도메인&amp;gt;
    service: https://authelia:9091 # Authelia 서비스 이름 + 접속용 9091 포트
    originRequest:
      noTLSVerify: true

  - service: http_status:404

loglevel: info&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 config.yaml의 경우 NPM의 초기 설정, Authelia의 정상 작동을 확인해야 하기에 일부러 컨테이너로 직결했습니다. 나중에 수정할 거니까 크게 개의치 마세요. 이제 cloudflared의 1차 설정을 끝냈습니다. 이제 다음 단계인 docker-compose.yaml 파일을 작성해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Docker Network 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cloudflared의 초기 설정과 이 과정인 network 생성과 서브넷 확인이 조금 복잡할 뿐이지 다음 과정부터 나오는 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;docker-compose.yaml 파일 작성은 그리 어렵지 않습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;cloudflared, NPM, Authelia가 내부에서 잘 작동하기 위해서는 같은 네트워크에 묶어야 합니다. 따라서 network를 생성하고 거기에 컨테이너를 연결하는 방법을 사용할 겁니다.&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;브리지 네트워크를 생성합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739691633152&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# bridge 네트워크 생성
# docker network create expbox
docker network create &amp;lt;네트워크 이름&amp;gt;&lt;/code&gt;&lt;/pre&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에서 사용할 서브넷의 정보를 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739691658002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 생성한 도커 네트워크의 서브넷 확인
# docker network inspect expbox | grep -i subnet
docker network inspect &amp;lt;네트워크 이름&amp;gt; | grep -i subnet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~ &amp;amp;mdash; ~ &amp;amp;mdash; 120&amp;amp;times;24 2025-02-16 01-15-57.png&quot; data-origin-width=&quot;1695&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGb8K9/btsMkx4WChb/dKzmSluItZlF1NZETRUvAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGb8K9/btsMkx4WChb/dKzmSluItZlF1NZETRUvAK/img.png&quot; data-alt=&quot;도커 네트워크의 서브넷 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGb8K9/btsMkx4WChb/dKzmSluItZlF1NZETRUvAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGb8K9%2FbtsMkx4WChb%2FdKzmSluItZlF1NZETRUvAK%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;1695&quot; height=&quot;72&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~ &amp;mdash; ~ &amp;mdash; 120&amp;times;24 2025-02-16 01-15-57.png&quot; data-origin-width=&quot;1695&quot; data-origin-height=&quot;72&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. cloudflared의 docker-compose.yaml 작성 및 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주의) 이 글에서는 docker-compose.yaml 파일을 각 서비스별로 따로 작성한다는 가정으로 작성되어 있습니다.&lt;/b&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;docker-compose.yaml 파일을 생성하고 편집합니다. docker-compose.yaml 파일은 cloudlflared 디렉터리 내부에 존재하는 기준으로 volumes를 작성했기에 앞으로 따라 하시는 부분에 주의가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739526259901&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch cloudflared/docker-compose.yaml &amp;amp;&amp;amp; vi cloudflared/docker-compose.yaml

# nano로 편집하기
touch cloudflared/docker-compose.yaml &amp;amp;&amp;amp; nano cloudflared/docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739526083521&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  cloudflared:
    image: 'cloudflare/cloudflared:latest'
    # container_name: Cloudflared-Tunnel
    container_name: &amp;lt;컨테이너 이름&amp;gt;
    restart: unless-stopped
    # command: tunnel --no-autoupdate run expbox
    command: tunnel --no-autoupdate run &amp;lt;tunnel 이름&amp;gt;
    volumes:
      - ./data:/home/nonroot/.cloudflared
    # 호스트에 프로그램이 실행되고 접근해야한다면, extra_hosts 부분의 주석을 삭제하세요.
    # extra_hosts:
    #   - host.docker.internal=host-gateway
    # networks:
    #   - expbox
    networks:
      - &amp;lt;네트워크 이름&amp;gt;

# networks:
#   expbox:
#     external: true
networks:
  &amp;lt;네트워크 이름&amp;gt;:
    external: true&lt;/code&gt;&lt;/pre&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;span style=&quot;color: #000000; text-align: start;&quot;&gt;이제 cloudflared의 준비가 끝났습니다. 아래의 명령어로 컨테이너를 실행시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739527240957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './cloudflared/docker-compose.yaml' up -d&lt;/code&gt;&lt;/pre&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 혹은 Authelia의 주소로 접속해 보면 아래와 같이 뜰 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap test-artemis.expbox.net 502 Bad gateway 2025-02-14 19-01-50.png&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;1292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VKM8t/btsMiJFcp9h/PnLPO0ZjxiqpSGt462kKBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VKM8t/btsMiJFcp9h/PnLPO0ZjxiqpSGt462kKBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VKM8t/btsMiJFcp9h/PnLPO0ZjxiqpSGt462kKBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVKM8t%2FbtsMiJFcp9h%2FPnLPO0ZjxiqpSGt462kKBK%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;1892&quot; height=&quot;1292&quot; data-filename=&quot;Monosnap test-artemis.expbox.net 502 Bad gateway 2025-02-14 19-01-50.png&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;1292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;다만 다르게 뜨면 설정을 다시 확인해 볼 필요가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. NginxProxyManager의 docker-compose.yaml 작성 및 실행&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주의) 이 글에서는 docker-compose.yaml 파일을 각 서비스별로 따로 작성한다는 가정으로 작성되어 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;docker-compose.yaml 파일을 생성하고 편집합니다. docker-compose.yaml 파일은 npm 디렉터리 내부에 존재하는 기준으로 volumes를 작성했기에 앞으로 따라 하시는 부분에 주의가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739527536259&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
mkdir npm &amp;amp;&amp;amp; touch npm/docker-compose.yaml &amp;amp;&amp;amp; vi npm/docker-compose.yaml

# nano로 편집하기
mkdir npm &amp;amp;&amp;amp; touch npm/docker-compose.yaml &amp;amp;&amp;amp; nano npm/docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739527675117&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 레퍼런스: https://nginxproxymanager.com/setup/#running-the-app
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    # container_name: NPM-TEST
    container_name: &amp;lt;컨테이너 이름&amp;gt;
    restart: unless-stopped
    # ports가 아님에 유의하세요.
    expose:
      - 80
      - 81
      - 443
    environment:
      # PUID/PGID의 경우, id -u, id -g 명령어로 확인 가능. 오라클 클라우드는 기본 1001.
      # root, 혹은 root 권한이 있는 계정이라면 권한 문제를 해결할 수 있기에 굳이 필요는 없습니다.
      # - PUID=1001
      # - PGID=1001
      - PUID=&amp;lt;PUID&amp;gt;
      - PGID=&amp;lt;PGID&amp;gt;
      - TZ=Asia/Seoul
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    # 호스트에 프로그램이 실행되고 접근해야한다면, extra_hosts 부분의 주석을 삭제하세요.
    # extra_hosts:
    #   - host.docker.internal=host-gateway
    # networks:
    #   - expbox
    networks:
      - &amp;lt;네트워크 이름&amp;gt;

# networks:
#   expbox:
#     external: true
networks:
  &amp;lt;네트워크 이름&amp;gt;:
    external: true&lt;/code&gt;&lt;/pre&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;span style=&quot;color: #000000; text-align: start;&quot;&gt;이제 NginxProxyManager의 준비가 끝났습니다. 아래의 명령어로 컨테이너를 실행시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739527899494&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './npm/docker-compose.yaml' up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 잘 따라오셨다면 NginxProxyManager가 실행되기까지 약 1분 정도 지난 뒤, NPM 주소로 접속해 보면 아래와 같이 뜰 겁니다. NPM의 로그인 화면이 나옵니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;1554&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c97RjZ/btsMiwMUht5/VfxP6T56pgD9yZXKeg1O71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c97RjZ/btsMiwMUht5/VfxP6T56pgD9yZXKeg1O71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c97RjZ/btsMiwMUht5/VfxP6T56pgD9yZXKeg1O71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc97RjZ%2FbtsMiwMUht5%2FVfxP6T56pgD9yZXKeg1O71%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;1554&quot; height=&quot;724&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본 어드민 계정은 아래와 같습니다. 꼭 변경해 주세요.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Email: admin@example.com&lt;br /&gt;Password: changeme&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. Authelia의 docker-compose.yaml 작성 및 실행&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주의) 이 글에서는 docker-compose.yaml 파일을 각 서비스별로 따로 작성한다는 가정으로 작성되어 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;docker-compose.yaml 파일을 생성하고 편집합니다. docker-compose.yaml 파일은 Authelia 디렉터리 내부에 존재하는 기준으로 volumes를 작성했기에 앞으로 따라 하시는 부분에 주의가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739528810316&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
mkdir -p authelia/config &amp;amp;&amp;amp; touch authelia/docker-compose.yaml &amp;amp;&amp;amp; vi authelia/docker-compose.yaml

# nano로 편집하기
mkdir -p authelia/config &amp;amp;&amp;amp; touch authelia/docker-compose.yaml &amp;amp;&amp;amp; nano authelia/docker-compose.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739529198873&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 레퍼런스: https://svrforum.com/svr/290217

services:
  authelia:
    image: 'authelia/authelia:latest'
    # container_name: Authelia
    container_name: &amp;lt;컨테이너 이름&amp;gt;
    # ports가 아닌 expose임에 주의!
    expose:
      - 9091
    volumes:
      - ./config:/config
    environment:
      # PUID/PGID의 경우, id -u, id -g 명령어로 확인 가능. 오라클 클라우드는 기본 1001.
      # root, 혹은 root 권한이 있는 계정이라면 권한 문제를 해결할 수 있기에 굳이 필요는 없습니다.
      # - PUID=1001
      # - PGID=1001
      - PUID=&amp;lt;PUID&amp;gt;
      - PGID=&amp;lt;PGID&amp;gt;
      - TZ=Asia/Seoul
    # networks:
    #   - expbox
    networks:
      - &amp;lt;네트워크 이름&amp;gt;

# networks:
#   expbox:
#     external: true
networks:
  &amp;lt;네트워크 이름&amp;gt;:
    external: true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성이 완료되었다고 해도 설정 파일이 없기에 제대로 작동되지 않습니다. 한 번 실행하고 나오는 configuration.yml 파일을 수정해도 되지만 작성한 뒤 사용해도 큰 문제가 없습니다. 많이 길어서 접어놨습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739531742838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; vi authelia/config/configuration.yml

# nano로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; nano authelia/config/configuration.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;pre id=&quot;code_1739530416810&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 레퍼런스: https://svrforum.com/svr/290217

# yamllint disable rule:comments-indentation
---
###############################################################################
#                           Authelia Configuration                            #
###############################################################################

theme: dark #light/dark
# jwt_secret: 1234567890abcdefghifjkl
jwt_secret: &amp;lt;jwt 토큰 키&amp;gt; #any text or number you want to add here to create jwt Token

# default_redirection_url: https://auth.example.net/
default_redirection_url: https://&amp;lt;authelia 접속 도메인&amp;gt; #where to redirect for a non-existent URL

server:
  host: 0.0.0.0
  port: 9091
  path: &quot;&quot;
  read_buffer_size: 4096
  write_buffer_size: 4096
  enable_pprof: false
  enable_expvars: false
  disable_healthcheck: false
  tls:
    key: &quot;&quot;
    certificate: &quot;&quot;

log:
  level: 'debug'


totp:
  # issuer: auth.example.net
  issuer: &amp;lt;authelia 접속 도메인&amp;gt; #your authelia top-level domain
  period: 30
  skew: 1

authentication_backend:
  disable_reset_password: false
  refresh_interval: 5m
  file:
    path: /config/users_database.yml #this is where your authorized users are stored
    password:
      algorithm: argon2id
      iterations: 3
      key_length: 32
      salt_length: 16
      memory: 65536
      parallelism: 4

# 주로 이 부분을 수정하면 됩니다.
access_control:
  default_policy: deny
  rules:
    ## bypass rule
    # Authelia 도메인은 바이패스하면 됩니다.
    - domain: 
        # - &quot;auth.example.net&quot; #This should be your authentication URL
        - &quot;&amp;lt;authelia 접속 도메인&amp;gt;&quot;
      policy: bypass
    # - domain: &quot;service1.example.net&quot; #example subdomain to protect
    #   policy: one_factor
    #    - domain: &quot;*.yourdomain.com&quot; #example to protect all subdomains under top-level domain
    #      policy: one_factor
    #add or remove additional subdomains as necessary. currenlty only supports ONE top-level domain
    #any time you add a new subdomain, you will need to restart the Authelia container to recognize the new settings/rules

session:
  # name: authelia_session
  # secret: unsecure_session_secret
  name: &amp;lt;원하는 session 이름&amp;gt;
  secret: &amp;lt;세션 토큰&amp;gt; #any text or number you want to add here to create jwt Token
  expiration: 3600  # 1 hour
  inactivity: 300  # 5 minutes
  # domain: example.net
  domain: &amp;lt;루트 도메인&amp;gt;  # Should match whatever your root protected domain is

regulation:
  max_retries: 3
  find_time: 10m
  ban_time: 12h

storage:
  local:
    path: /config/db.sqlite3 #this is your databse. You could use a mysql database if you wanted, but we're going to use this one.
  # encryption_key: 1234567890abcdefgdfasdfasdf
  encryption_key: &amp;lt;DB 비밀 키&amp;gt;

notifier:
  disable_startup_check: true #true/false
  smtp:
    username: youremail@gmail.com #your email address
    password: Y0uRp@55W0rD! #your email password
    host: smtp.gmail.com #email smtp server
    port: 587 #email smtp port
    sender: youremail@gmail.com
    identifier: localhost
    subject: &quot;[Authelia] {title}&quot; #email subject
    startup_check_address: youremail@gmail.com
    disable_require_tls: false
    disable_html_emails: false
    tls:
      skip_verify: false
      minimum_version: TLS1.2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀 키, 토큰의 경우 랜덤 문자열 생성기를 구글링 하셔서 적당히 50자 정도로 붙여 넣으시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739534231399&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 100자 생성
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 100&lt;/code&gt;&lt;/pre&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;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Authelia에서 사용할 유저 정보를 저장해 놓은 users_database.yml 파일이 필요합니다. 파일 작성하기 전, 비밀번호의 해시 값이 필요합니다. 요즘은 평문으로 비밀번호를 저장하는 것이 위험하기에 이렇게 단방향 해시값으로 비밀번호를 저장하는 경우가 많습니다. 아래의 사이트에서 생성할 수 있습니다.&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;a href=&quot;https://argon2.online/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://argon2.online/&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;1770&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTqH7/btsMjUy3gmE/dllskiQ6LXgRyZGZ5ZN9S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTqH7/btsMjUy3gmE/dllskiQ6LXgRyZGZ5ZN9S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTqH7/btsMjUy3gmE/dllskiQ6LXgRyZGZ5ZN9S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTqH7%2FbtsMjUy3gmE%2FdllskiQ6LXgRyZGZ5ZN9S0%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;1770&quot; height=&quot;456&quot; data-origin-width=&quot;1770&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 부분을 이미지와 같게 만든 후, Salt의 톱니바퀴를 누르고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Plain Test Input에 비밀번호를 입력하면 비밀번호의 해시값을 받을 수 있습니다.&lt;/span&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;span style=&quot;color: #333333; text-align: start;&quot;&gt; 하지만&lt;/span&gt; 아무래도 비밀번호라서 저런 외부 서비스보다는 로컬에서 해시값을 생성하는 게 더 안전할 수 있습니다. 따라서 docker에 명령어를 넣어서 해시값을 생성할 겁니다. 아래의 명령어를 사용하면 쉽게 생성이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739533164037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 -v argon2id --password &quot;authelia&quot;
docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 -v argon2id --password &quot;&amp;lt;원하는 비밀번호&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래처럼 $argon2id$ 로 시작하는 문자열을 확인했다면, 복사해서 아래의 user_database.yml의 password 부분에 붙여 넣으시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~ &amp;amp;mdash; ~ &amp;amp;mdash; 120&amp;amp;times;24 2025-02-14 20-39-37.png&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBy1Zk/btsMjR3n1ea/jKyl0sxW68YM061C8OfvyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBy1Zk/btsMjR3n1ea/jKyl0sxW68YM061C8OfvyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBy1Zk/btsMjR3n1ea/jKyl0sxW68YM061C8OfvyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBy1Zk%2FbtsMjR3n1ea%2FjKyl0sxW68YM061C8OfvyK%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;1698&quot; height=&quot;75&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~ &amp;mdash; ~ &amp;mdash; 120&amp;times;24 2025-02-14 20-39-37.png&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 users_database.yml 파일을 작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739531672041&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch authelia/config/users_database.yml &amp;amp;&amp;amp; vi authelia/config/users_database.yml

# nano로 편집하기
touch authelia/config/users_database.yml &amp;amp;&amp;amp; nano authelia/config/users_database.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739532594049&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# yamllint disable rule:line-length
---
###############################################################
#                         Users Database                      #
###############################################################

# This file can be used if you do not have an LDAP set up.

# users:
#   expbox77:
#     disaled: false
#     displayname: &quot;Expbox&quot;
#     password: &quot;$argon2id$v=19$m=65536,t=3,p=4$SUufn7Ttooc8T157AMBl5g$8fZ6BUJiabsSDRomsBNVGUYyjoNbS5hU+OhJQY0LkEQ&quot; # Password is 'authelia'
#     email: expbox77@gmail.com
#     groups:
#       - admins
#       - dev

users:
  &amp;lt;사용자 ID&amp;gt;:
    disaled: false
    displayname: &amp;lt;닉네임&amp;gt;
    password: &amp;lt;argon2id로 생성한 비밀번호 해시 값&amp;gt;
    email: &amp;lt;이메일&amp;gt;
    groups: # 그룹
      - admins
      - dev

        
# yamllint enable rule:line-length&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 Authelia의 준비가 끝났습니다. 아래의 명령어로 컨테이너를 실행시킵니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739535151205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './authelia/docker-compose.yaml' up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 설정이 잘 되었다면 Authelia가 실행되고 조금 뒤, Authelia 주소로 접속해 보면 아래와 같이 로그인 창이 뜹니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;828&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djsf9I/btsMkWbDYcx/RMpbL0RKlAD7yMLosPJPGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djsf9I/btsMkWbDYcx/RMpbL0RKlAD7yMLosPJPGK/img.png&quot; data-alt=&quot;로그인 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djsf9I/btsMkWbDYcx/RMpbL0RKlAD7yMLosPJPGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjsf9I%2FbtsMkWbDYcx%2FRMpbL0RKlAD7yMLosPJPGK%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;295&quot; height=&quot;336&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;944&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 해시값을 잘 넣었다면 아래와 같이 인증됨 아이콘이 뜨면서, &quot;안녕하세요 &amp;lt;닉네임&amp;gt;&quot;이 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5P0AE/btsMkahlN12/25HYxFg6PrI7Gn8FA2PKCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5P0AE/btsMkahlN12/25HYxFg6PrI7Gn8FA2PKCk/img.png&quot; data-alt=&quot;로그인 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5P0AE/btsMkahlN12/25HYxFg6PrI7Gn8FA2PKCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5P0AE%2FbtsMkahlN12%2F25HYxFg6PrI7Gn8FA2PKCk%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;305&quot; height=&quot;279&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아직 NPM의 리버스 프록시를 거치는 게 아니라서 나중에 전체적으로 수정할 예정입니다. 이대로 쓰시면 안 돼요.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; 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;a href=&quot;https://www.authelia.com/configuration/prologue/introduction/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.authelia.com/configuration/prologue/introduction/&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.authelia.com/reference/prologue/introduction/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.authelia.com/reference/prologue/introduction/&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위의 공식 문서를 확인해 보면 configuration.yml, users_database.yml 파일의 고급 설정이 가능합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;7. NginxProxyManager의 Authelia, NPM 매니지먼트 페이지 설정&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 본격적인 설정 부분입니다. cloudflared, NPM, Authelia의 서비스를 모두 띄웠으나 현재는 NPM을 통하는 게 아닌 Cloudflare Tunnel을 통해서 서비스가 외부와 통신되는 형태입니다. 이 상태에서 Authelia의 인증 서비스를 이용하려면 Cloudflare에서 Application으로 등록하는 등의 복잡한 과정을 거쳐야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 NPM을 사용하면 Authelia의 인증 서비스를 쉽게 사용할 수 있습니다. 보기에는 복잡할 수 있으나 프록시 호스트 설정 후 고급 설정 중 일부를 자신에게 맞게 바꾸고 붙여 넣기만 하면 끝나는 작업입니다. 먼저 NPM에 NPM 매니지먼트 페이지, Authelia를 등록하는 작업부터 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 4번에서 진행했던 NPM 주소로 접속, Host - Proxy Hosts - Add Proxy Host를 순서대로 눌러 서비스를 지정합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;970&quot; data-origin-height=&quot;1070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kZXQU/btsMjS2DRp4/NPP2o0v6rxxEiO7zeeA8r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kZXQU/btsMjS2DRp4/NPP2o0v6rxxEiO7zeeA8r0/img.png&quot; data-alt=&quot;NPM에서의 NPM 매니지먼트 페이지 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kZXQU/btsMjS2DRp4/NPP2o0v6rxxEiO7zeeA8r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkZXQU%2FbtsMjS2DRp4%2FNPP2o0v6rxxEiO7zeeA8r0%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;400&quot; height=&quot;441&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1070&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM에서의 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 NPM 매니지먼트 페이지부터 설정합니다. 위의 그림과 같이 설정하시면 됩니다. Domain Names에는 설정했던 NPM의 주소, Forward Hostname은 npm(NPM 컨테이너의 이름 혹은 서비스 이름), Forward Port에는 81(expose 포트)로 설정하면 됩니다. Websockets Support는 켜두는 게 좋다고 들어서 켰습니다. 딱히 큰 의미는 없습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Nginx Proxy Manager 2025-02-16 01-31-21.png&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MI4Qi/btsMlj5TGdt/5FJzg7RcqfwJiEDAxE3l1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MI4Qi/btsMlj5TGdt/5FJzg7RcqfwJiEDAxE3l1k/img.png&quot; data-alt=&quot;NPM에서의 Authelia 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MI4Qi/btsMlj5TGdt/5FJzg7RcqfwJiEDAxE3l1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMI4Qi%2FbtsMlj5TGdt%2F5FJzg7RcqfwJiEDAxE3l1k%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;400&quot; height=&quot;440&quot; data-filename=&quot;Monosnap Nginx Proxy Manager 2025-02-16 01-31-21.png&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM에서의 Authelia 설정&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그다음은 Authelia 설정입니다. NPM과 비슷하지만 Advanced 설정을 거쳐야 합니다. Domain Names에는 설정했던 Authelia의 주소, Forward Hostname은 authelia(Authelia 컨테이너의 이름 혹은 서비스 이름), Forward Port에는 9091(expose 포트)로 설정하면 됩니다. 여기서 Save를 눌러 나오지 말고 Advanced를 누릅니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;972&quot; data-origin-height=&quot;1180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8MbLM/btsMk3CnyNM/K6naCooTkGwQ1ekh4NdPb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8MbLM/btsMk3CnyNM/K6naCooTkGwQ1ekh4NdPb0/img.png&quot; data-alt=&quot;NPM에서의 Authelia Advanced 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8MbLM/btsMk3CnyNM/K6naCooTkGwQ1ekh4NdPb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8MbLM%2FbtsMk3CnyNM%2FK6naCooTkGwQ1ekh4NdPb0%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;400&quot; height=&quot;486&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;1180&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM에서의 Authelia Advanced 설정&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;빈칸에 아래의 내용을 자신에 맞게 수정 후 붙여 넣습니다. 맨 아래의 set_real_ip_from은 3번에서 생성 후 확인한 네트워크의 서브넷을 입력하면 됩니다. 길어서 접어놨습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;pre id=&quot;code_1739637913579&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 참조: https://svrforum.com/svr/290217

location / {
set $upstream_authelia http://authelia:9091; # This example assumes a Docker deployment 
proxy_pass $upstream_authelia;
client_body_buffer_size 128k;

#Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Advanced Proxy Config
send_timeout 5m;
proxy_read_timeout 360;
proxy_send_timeout 360;
proxy_connect_timeout 360;

# Basic Proxy Config
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Forwarded-Ssl on;
proxy_redirect  http://  $scheme://;
proxy_http_version 1.1;
proxy_set_header Connection &quot;&quot;;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
proxy_buffers 64 256k;

# If behind a reverse proxy, forwards the correct IP, assumes you're using Cloudflare. Adjust IP for your Docker network.
# set_real_ip_from 172.18.0.0/16;
set_real_ip_from &amp;lt;3번에서 확인한 도커 Network 서브넷&amp;gt;;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. cloudflared의 config.yaml 파일 수정 및 컨테이너 재시작&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NginxProxyManager의 프록시 설정이 끝났다면 cloudflared의 config.yaml 파일의 모든 서비스를 NPM 80 포트로 수정하고 재시작하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739700293346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; vi cloudflared/data/config.yaml

# nano로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; nano cloudflared/data/config.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739700342191&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;
  
  # NPM
  - hostname: &amp;lt;NPM 서브 도메인&amp;gt;
    service: https://npm:80 # NPM의 80포트
    originRequest:
      noTLSVerify: true
      
  - hostname: &amp;lt;Authelia 서브 도메인&amp;gt;
    service: https://npm:80 # NPM의 80포트
    originRequest:
      noTLSVerify: true

  - service: http_status:404

loglevel: info&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위처럼 수정이 완료되었으면, docker compose를 재시작하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739700656661&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './cloudflared/docker-compose.yaml' restart&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제는 주소로 접속하게 되면 Cloudflare Tunnel -&amp;gt; NPM 순으로 연결됩니다. 기본적인 세팅이 완료되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;9. 다른 컨테이너(서비스) 연결하기&amp;nbsp;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제는 NPM에서 Authelia를 적용할 다른 서비스들을 설정할 차례입니다. 나중에 부록으로 실습까지 할 예정이니 지금은 이렇게 하면 되는구나 하면서 읽어보시면 될 것 같습니다. 순서는 글에 적힌 대로 하셔도 되고 각 부분마다 순서를 다르게 하셔도 상관없습니다. 처음 Cloudflare에 도메인 주소를 추가하는 것은 내용이 중복되니 생략하겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1) 사용할 주소를 Cloudflare에 CNAME으로 등록합니다.&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--&amp;gt; 2번을 참고하셔서 등록하시면 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) cloudflared의 config.yaml 파일에 사용할 주소를 추가합니다.&lt;/h4&gt;
&lt;pre id=&quot;code_1739706185519&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; vi cloudflared/data/config.yaml

# nano로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; nano cloudflared/data/config.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739706228962&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

  # 와일드카드
  # - hostname: *.example.net
  #   service: https://npm:80 # NPM의 80포트
  #   originRequest:
  #     noTLSVerify: true

  # 서비스1
  - hostname: &amp;lt;추가할 서비스 서브 도메인&amp;gt;
    service: https://npm:80 # NPM의 80포트
    originRequest:
      noTLSVerify: true

  - service: http_status:404

loglevel: info&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위처럼 도메인의 추가가 완료되었으면, docker compose를 재시작하면 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739706286901&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './cloudflared/docker-compose.yaml' restart&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) NPM에서 사용할 주소와 서비스를 등록합니다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Nginx Proxy Manager 2025-02-16 01-33-12.png&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;1052&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmm0jt/btsMll3FlAZ/4sJ6K46dVxcZQzxOWlRYT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmm0jt/btsMll3FlAZ/4sJ6K46dVxcZQzxOWlRYT0/img.png&quot; data-alt=&quot;NPM에서의 각 서비스 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmm0jt/btsMll3FlAZ/4sJ6K46dVxcZQzxOWlRYT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmm0jt%2FbtsMll3FlAZ%2F4sJ6K46dVxcZQzxOWlRYT0%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;400&quot; height=&quot;437&quot; data-filename=&quot;Monosnap Nginx Proxy Manager 2025-02-16 01-33-12.png&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;1052&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Domain Names에는 설정할 주소, Forward Hostname은 컨테이너의 Forward Hostname은 도커 컨테이너의 이름 혹은 서비스 이름, Forward Port에는 expose 포트로 설정하면 됩니다. 여기서 Save를 눌러 나오지 말고 Advanced를 누릅니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위의 이미지는 아래의 docker-compose.yaml 예시를 보면 어떤 것인지 느낌이 오실 것으로 보입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739699250812&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Nginx 웹 서버 예시
services:
  web-app: # 서비스 이름
    image: nginx:latest
    container_name: my_nginx_web # 컨테이너 이름
    # ports:  # ports가 아닌 expose 사용
    #   - 80:80
    expose:
      - 80 # expose 포트

&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&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 run으로 실행한 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739699643629&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run -d --network expbox-test --expose 80 --name nginx-web nginx:latest
docker run -d --rm --network &amp;lt;네트워크 이름&amp;gt; --expose &amp;lt;expose 포트&amp;gt; --name &amp;lt;컨테이너 이름&amp;gt; &amp;lt;도커 이미지&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;960&quot; data-origin-height=&quot;1172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB113w/btsMkcmtY7w/S1FF4fSRsSLU6pqcSV2IDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB113w/btsMkcmtY7w/S1FF4fSRsSLU6pqcSV2IDK/img.png&quot; data-alt=&quot;NPM에서의 각 서비스의 Advanced 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB113w/btsMkcmtY7w/S1FF4fSRsSLU6pqcSV2IDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB113w%2FbtsMkcmtY7w%2FS1FF4fSRsSLU6pqcSV2IDK%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;400&quot; height=&quot;488&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1172&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NPM에서의 각 서비스의 Advanced 설정&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Advanced의 빈칸에 아래의 내용을 자신에 맞게 수정 후 붙여 넣습니다. &lt;b&gt;중간의 error_page 401 =302 부분에는 Authelia의 주소를 입력하고 맨 아래의 set_real_ip_from은 3번에서 확인한 네트워크의 서브넷을 입력하면 됩니다.&lt;/b&gt; 길어서 접어놨습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;pre id=&quot;code_1739641311482&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 참조: https://svrforum.com/svr/290217

location /authelia {
internal;
set $upstream_authelia http://authelia:9091/api/verify;
proxy_pass_request_body off;
proxy_pass $upstream_authelia;    
proxy_set_header Content-Length &quot;&quot;;

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
client_body_buffer_size 128k;
proxy_set_header Host $host;
# proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
proxy_set_header X-Original-URL https://$http_host$request_uri;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr; 
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Forwarded-Ssl on;
proxy_redirect  http://  $scheme://;
proxy_http_version 1.1;
proxy_set_header Connection &quot;&quot;;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
proxy_buffers 4 32k;

send_timeout 5m;
proxy_read_timeout 240;
proxy_send_timeout 240;
proxy_connect_timeout 240;
}

location / {
set $upstream_app $forward_scheme://$server:$port;
proxy_pass $upstream_app;

auth_request /authelia;
auth_request_set $target_url https://$http_host$request_uri;
auth_request_set $user $upstream_http_remote_user;
auth_request_set $email $upstream_http_remote_email;
auth_request_set $groups $upstream_http_remote_groups;
proxy_set_header Remote-User $user;
proxy_set_header Remote-Email $email;
proxy_set_header Remote-Groups $groups;

# error_page 401 =302 https://auth.exmaple.net/?rd=$target_url;
error_page 401 =302 https://&amp;lt;Authelia 주소&amp;gt;/?rd=$target_url;


client_body_buffer_size 128k;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

send_timeout 5m;
proxy_read_timeout 360;
proxy_send_timeout 360;
proxy_connect_timeout 360;

proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Forwarded-Ssl on;
proxy_redirect  http://  $scheme://;
proxy_http_version 1.1;
proxy_set_header Connection &quot;&quot;;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
proxy_buffers 64 256k;

# set_real_ip_from 172.18.0.0/16;
set_real_ip_from &amp;lt;3번에서 확인한 도커 Network 서브넷&amp;gt;;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) Authelia의 configuration.yml 파일에 주소와 인증 방법을 추가합니다.&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;configuration.yml 파일의 access_control: 부분에서 Authelia로 인증이 필요한 주소와 인증 방법을 추가합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739643009927&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; vi authelia/config/configuration.yml

# nano로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; nano authelia/config/configuration.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739642966829&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

access_control:
  default_policy: deny
  rules:
    ## bypass rule
    - domain: 
        - &quot;auth.example.net&quot; #This should be your authentication URL
      policy: bypass
    # 추가한 부분
    - domain: &quot;service1.exmaple.net&quot; #example subdomain to protect
      policy: one_factor
    - domain: &quot;service2.exmaple.net&quot;
      policy: one_factor

&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Authelia 컨테이너를 재시작합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739705563843&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './authelia/docker-compose.yaml' restart&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;부록 1. 파일 및 디렉터리 경로&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;계속 명령어로만 편집해서 파일과 디렉터리가 어떻게 되어있는지 감이 잘 안 오시는 분들을 위해서 준비했습니다. VS Code로 연결해서 확인해 봤습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap config.yaml &amp;amp;mdash; ubuntu [SSH artemis] 2025-02-16 04-37-48.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CHEft/btsMj7L8Ki8/WNC9i78TSSXLWkv718K5w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CHEft/btsMj7L8Ki8/WNC9i78TSSXLWkv718K5w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CHEft/btsMj7L8Ki8/WNC9i78TSSXLWkv718K5w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCHEft%2FbtsMj7L8Ki8%2FWNC9i78TSSXLWkv718K5w1%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;400&quot; height=&quot;430&quot; data-filename=&quot;Monosnap config.yaml &amp;mdash; ubuntu [SSH artemis] 2025-02-16 04-37-48.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;cloudflared_npm_authelia 디렉터리가 이번 글을 위해서 만든 디렉터리입니다. 이 내부에서 모든 디렉터리를 생성하고 편집했다고 보시면 될 것 같아요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;부록 2. 간단한 웹 서버로 실습&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 nginx 웹 서버 하나를 띄워서 Authelia의 인증을 거쳐서 접속하도록 할 겁니다. 아래의 명령어를 입력하면 nginx 웹 서버 컨테이너가 실행됩니다. 참고로 이때 SSH 연결을 계속 연결해두셔야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1) 도커 이미지를 다운로드하고 포그라운드에서 컨테이너를 실행합니다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어를 입력하고 쉘을 계속 띄워둡니다.&lt;/p&gt;
&lt;pre id=&quot;code_1739646336465&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker run --rm --network expbox-test --expose 80 --name nginx-web nginx:latest
docker run --rm --network &amp;lt;네트워크 이름&amp;gt; --expose 80 --name nginx-web nginx:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) Cloudflare에 주소 추가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dash.cloudflare.com/&lt;/a&gt; - 구입한 도메인 - 왼쪽 사이드바에서 DNS를 순서대로 눌러 접속합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-16 21-19-23.png&quot; data-origin-width=&quot;1474&quot; data-origin-height=&quot;874&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1msK/btsMlilQtMW/w6VKizBtZXiWf0ALKfWdd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1msK/btsMlilQtMW/w6VKizBtZXiWf0ALKfWdd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1msK/btsMlilQtMW/w6VKizBtZXiWf0ALKfWdd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1msK%2FbtsMlilQtMW%2Fw6VKizBtZXiWf0ALKfWdd1%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;1474&quot; height=&quot;874&quot; data-filename=&quot;Monosnap DNS 레코드 expbox.net ExpBox Cloudflare 2025-02-16 21-19-23.png&quot; data-origin-width=&quot;1474&quot; data-origin-height=&quot;874&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;레코드 추가를 눌러 CNAME 유형, 이름에 원하는 서브도메인, 대상을 &amp;lt;UUID&amp;gt;.cfargotunnel.com으로&lt;/span&gt; 지정하고 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) cloudflared의 config.yaml 파일에 사용할 주소를 추가합니다.&lt;/h4&gt;
&lt;pre id=&quot;code_1739708003183&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; vi cloudflared/data/config.yaml

# nano로 편집하기
touch cloudflared/data/config.yaml &amp;amp;&amp;amp; nano cloudflared/data/config.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739708057051&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

#  - hostname: web.example.net
  - hostname: &amp;lt;사용할 도메인&amp;gt;
    service: http://npm:80 # NPM 80 포트 
    originRequest:
      noTLSVerify: true

  - service: http_status:404

loglevel: info&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) NPM에서 사용할 주소를 등록합니다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmxGmF/btsMjSazx9x/3LWZ2hNspMOOxJcovcPKT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmxGmF/btsMjSazx9x/3LWZ2hNspMOOxJcovcPKT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmxGmF/btsMjSazx9x/3LWZ2hNspMOOxJcovcPKT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmxGmF%2FbtsMjSazx9x%2F3LWZ2hNspMOOxJcovcPKT1%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;400&quot; height=&quot;435&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Domain Names는 웹 서버에 연결할 도메인으로 지정해 주면 됩니다. 여기서 Save를 눌러 나오지 말고 Advanced를 누릅니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Advanced의 빈칸에 아래의 내용을 자신에 맞게 수정 후 붙여 넣습니다.&amp;nbsp;&lt;b&gt;중간의 error_page 401 =302 부분에는 Authelia의 주소를 입력하고 맨 아래의 set_real_ip_from은 3번에서 확인한 네트워크의 서브넷을 입력하면 됩니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;일부 생략되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739707815933&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

# error_page 401 =302 https://auth.exmaple.net/?rd=$target_url;
error_page 401 =302 https://&amp;lt;Authelia 주소&amp;gt;/?rd=$target_url;

&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

# set_real_ip_from 172.18.0.0/16;
set_real_ip_from &amp;lt;3번에서 확인한 도커 Network 서브넷&amp;gt;;
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) Authelia의 configuration.yml 파일에 주소와 인증 방법을 추가합니다.&lt;/h4&gt;
&lt;pre id=&quot;code_1739647201420&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# vi로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; vi authelia/config/configuration.yml

# nano로 편집하기
touch authelia/config/configuration.yml &amp;amp;&amp;amp; nano authelia/config/configuration.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 생략했습니다. access_control: 부분에서 도메인을 추가하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739647267263&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;

access_control:
  default_policy: deny
  rules:
    ## bypass rule
    - domain: 
        - &quot;auth.example.net&quot; #This should be your authentication URL
      policy: bypass
    - domain: &quot;web.exmaple.net&quot;
      policy: one_factor

&amp;lt;&amp;lt; 생략 &amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Authelia 컨테이너를 재시작합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739708522175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f './authelia/docker-compose.yaml' restart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) 웹 페이지에 접속해서 확인합니다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJR3Dy/btsMljygyWu/Wl88SBdBwvXGo6cfyF7MxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJR3Dy/btsMljygyWu/Wl88SBdBwvXGo6cfyF7MxK/img.png&quot; data-alt=&quot;접속 시 보게되는 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJR3Dy/btsMljygyWu/Wl88SBdBwvXGo6cfyF7MxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJR3Dy%2FbtsMljygyWu%2FWl88SBdBwvXGo6cfyF7MxK%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;400&quot; height=&quot;424&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;948&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 시 https://Authelia의 주소/?rd=https%3A%2F%2F접속하려는 주소%2F 링크로 리다이렉트 되며 위의 이미지와 같은 Authelia 로그인 페이지를 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Welcome to nginx! 2025-02-16 04-42-01.png&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSbLWh/btsMlyWhvjf/5se1hGVjSllghgkew7EAeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSbLWh/btsMlyWhvjf/5se1hGVjSllghgkew7EAeK/img.png&quot; data-alt=&quot;로그인 이후 리다이렉트 된 링크에서 보게되는 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSbLWh/btsMlyWhvjf/5se1hGVjSllghgkew7EAeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSbLWh%2FbtsMlyWhvjf%2F5se1hGVjSllghgkew7EAeK%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;600&quot; height=&quot;241&quot; data-filename=&quot;Monosnap Welcome to nginx! 2025-02-16 04-42-01.png&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;444&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 로그인하게 되면 원하는 서브도메인으로 리다이렉트 되면서 Nginx의 기본 화면을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap docker run --rm --network expbox-test --expose 80 --name nginx-web nginx &amp;amp;mdash; docker &amp;amp;mdash; 120&amp;amp;times;24 2025-02-16 21-56-57.png&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eqkmgY/btsMksQhUZe/Py07QLpPGwVgy8ZKr6Tg60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eqkmgY/btsMksQhUZe/Py07QLpPGwVgy8ZKr6Tg60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eqkmgY/btsMksQhUZe/Py07QLpPGwVgy8ZKr6Tg60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeqkmgY%2FbtsMksQhUZe%2FPy07QLpPGwVgy8ZKr6Tg60%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;1691&quot; height=&quot;102&quot; data-filename=&quot;Monosnap docker run --rm --network expbox-test --expose 80 --name nginx-web nginx &amp;mdash; docker &amp;mdash; 120&amp;times;24 2025-02-16 21-56-57.png&quot; data-origin-width=&quot;1691&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 nginx 도커 컨테이너에서도 제대로 로그가 찍힙니다.&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;예시로 띄워둔 웹 서버 도커 컨테이너는 Ctrl + C(윈도우) 혹은 control + C(맥)으로 종료할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;레퍼런스&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://svrforum.com/svr/290217&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://svrforum.com/svr/290217&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/selfhosted/comments/wpvy8c/using_cloudflare_tunnel_with_nginx_proxy_manager/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.reddit.com/r/selfhosted/comments/wpvy8c/using_cloudflare_tunnel_with_nginx_proxy_manager/&lt;/a&gt;&lt;/p&gt;</description>
      <category>HomeLAB/Linux</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/12</guid>
      <comments>https://expbox77.tistory.com/12#entry12comment</comments>
      <pubDate>Sun, 16 Feb 2025 21:44:40 +0900</pubDate>
    </item>
    <item>
      <title>드디어 해결! Cloudflare Tunnel + NPM + Authelia</title>
      <link>https://expbox77.tistory.com/11</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;블로그용.jpg&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQmUC7/btsMjUl4SoL/KQbMDOe4xNn6HsFVXWi4z0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQmUC7/btsMjUl4SoL/KQbMDOe4xNn6HsFVXWi4z0/img.jpg&quot; data-alt=&quot;이런 방식으로 연결된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQmUC7/btsMjUl4SoL/KQbMDOe4xNn6HsFVXWi4z0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQmUC7%2FbtsMjUl4SoL%2FKQbMDOe4xNn6HsFVXWi4z0%2Fimg.jpg&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;600&quot; height=&quot;268&quot; data-filename=&quot;블로그용.jpg&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;807&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 3일간 삽질한 것 같다.. 해결하고 나니 왜 이 방법을 먼저 시도하지 않았던 건지 스스로가 한심해진다. 설정 자체는 생각보다 간단해서 놀랍기도 하고 김새는 느낌이기도 하고.. 복잡 미묘하다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여하튼 대부분의 Cloudflare Tunnel + NPM의 가이드 글과 ChatGPT가 찾아내서 정리해 주는 글의 경우, Cloudflare Tunnel을 서비스에 직접 연결하는 느낌이 강했다. 그런데 직접 연결할 거면 NPM은 왜 쓰나? Cloudflare Tunnel이 알아서 리버스 프록시까지 해주는데; 자원 낭비라고 볼 수 있다. 근데 그걸 Cloudflare Tunnel과 NPM을 같이 쓰는 가이드라고 글을 적어놨으니 아무리 봐도 이해를 못 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RQ7Pf/btsMcQ37BK1/LCyNlKzD6YExKs4euw8onk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RQ7Pf/btsMcQ37BK1/LCyNlKzD6YExKs4euw8onk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RQ7Pf/btsMcQ37BK1/LCyNlKzD6YExKs4euw8onk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRQ7Pf%2FbtsMcQ37BK1%2FLCyNlKzD6YExKs4euw8onk%2Fimg.jpg&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;630&quot; height=&quot;357&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 계속 의심했다. 그리고 원하는 답이 나올 때까지 삽질하기로 마음먹었다. 마치 도자기를 만드는 장인의 마음으로 제대로 된 Cloudflare Tunnel과 NPM의 완전한 결합을 원했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇게 삽질 3일 차에 문득 NPM에 Cloudflare Tunnel을 연결하면 되는 거 아닌가?라는 생각이 스쳐 지나갔다. 물론 이 부분을 처음에도 생각했으나 제대로 설정을 안 해놓는 바람에 안 되는 줄 알았다. 하지만 NPM에 기존처럼 리버스 프록시 설정을 해주고 cloudflared의 config.yml 파일에 모든 주소를 NPM 80 포트로 연결해 주니 모든 게 잘 작동하기 시작했다. 로그도 잘 찍힌다. 443 포트를 쓰면 400 에러가 뜨면서 제대로 안되던데 SSL이 두 번 적용돼서 그런 것으로 추측된다. 아마 쓸 일 없겠지.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 왜 이 삽질을 했느냐고 물어보면..(물어볼 사람도 없겠지만) 오라클 무료 A1 서버를 사용하는지라 과금을 최대한 막기 위해서 네트워크 보안이 필요했다. 거기에 서버라면 로그인 없이도 이것저것 공개되어 있는 서비스가 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;1280&quot; data-origin-height=&quot;316&quot;&gt;&lt;a href=&quot;https://github.com/MauriceNino/dashdot&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVoWrn/btsMcZ0Wofl/wPCzFm0qpji0sDCTPiK6b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVoWrn%2FbtsMcZ0Wofl%2FwPCzFm0qpji0sDCTPiK6b1%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;1280&quot; height=&quot;316&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;간단한 서버 모니터링 대시보드인 Dash. 클릭 시 깃허브 레포로 이동한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내가 쓰는 서비스 중에서 Dash. 이 있는데 로그인 없이 그냥 막 들어갈 수 있다. 이런 부분을 &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;Authelia의 인증 서버를 거치게 하면서 이중 보안을 챙기기 위함이다. &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;하지만 Authelia를 처음 구축할 때 썼던 방식 그대로 했더니 인증 후 원 URL로 돌아가야 하는데 무한 리다이렉트 되는 오류가 있어서 NPM의 Advanced 부분을 ChatGPT를 이용해 적절히 수정하니까 이 부분도 멀쩡히 잘 돌아간다. 이제 2차 인증도 무사히 잘 되는 것을 확인했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 기분 좋게 잠들 수 있을 것 같다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TMI)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내가 구축한 오라클 서버에는 모든 도커 컨테이너가 docker compose로 실행되는데, docker-compose.yaml 파일 구성을 보면 모든 컨테이너에 ports로 포트를 오픈해 놓은 것이 아닌 expose를 사용해서 컨테이너-호스트조차 포트를 오픈해놓지 않고 있다. 그 부분을 뒤늦게 깨닫고 cloudflared의 도커 이미지도 공식 배포되고 있으니 컨테이너화 시켰다. 새로운 서비스 배포 할 때는 config.yml 파일 수정하고 docker compose restart만 하면 되니까 나름 편리한 것 같은데 그냥 서비스에 등록하고 쓰는 게 훨씬 낫지 않았나 싶기도 하다. 이게 초기 설정하는 게 좀 귀찮은데 그리 어렵지 않은 방법을 곧 찾지 않을까 싶다.&lt;/p&gt;</description>
      <category>HomeLAB/홈랩 잡담</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/11</guid>
      <comments>https://expbox77.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 10 Feb 2025 03:46:06 +0900</pubDate>
    </item>
    <item>
      <title>[Mac] Open Webui + LM Studio 설정하기</title>
      <link>https://expbox77.tistory.com/10</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;111.jpg&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAhH8r/btsL4QQLXzs/5Hje3h68JTcR6OcMkkQDc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAhH8r/btsL4QQLXzs/5Hje3h68JTcR6OcMkkQDc0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAhH8r/btsL4QQLXzs/5Hje3h68JTcR6OcMkkQDc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAhH8r%2FbtsL4QQLXzs%2F5Hje3h68JTcR6OcMkkQDc0%2Fimg.jpg&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;450&quot; height=&quot;250&quot; data-filename=&quot;111.jpg&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥북에서 LLM을 구동시키기 위한 여러 가지 프로그램이 있지만 모델 다운로드부터 멀티 모달 모델까지 한 번에 올인원으로 사용 가능한 부분이 마음에 들어 Ollama를 사용했습니다. Open Webui 같은 API를 사용 가능한 프로그램이 거진 필수인 것까지는 괜찮은데 제대로 사용하려면 터미널에서 사용해야 하고 로그를 확인하는 것이 불편했으며 LLM 모델 관리가 잘 안 돼서 요즘은 LM Studio를 주로 사용하고 있습니다.&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;LM Studio 자체로도 훌륭한 프로그램이지만, 좀 더 많은 활용을 위하여 Open Webui를 사용해 볼 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lmstudio.ai/docs/api/endpoints/openai&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://lmstudio.ai/docs/api/endpoints/openai&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크를 확인해 보면 LM Studio API는 OpenAI API와 호환되게끔 만들어져 있어서 Open Webui에서도 OpenAI API의 URL만 로컬로 수정해 놓으면 사용할 수 있습니다.&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;기본적인 구성은 맥북의 호스트에서 LM Studio를 실행시키고 Docker로 Open Webui를 실행시켜서 API 주소를 변경하는 방법을 사용합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 시스템 사양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple MacBook Pro 16&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU: M3 MAX&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAM: 64GB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS: macOS Sequoia 15.2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LM Studio 버전: 0.3.8&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. LM Studio(Host) 세팅&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 20-39-28 2.jpg&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7fopO/btsL4KpEbrL/NqDoTtCabgP1DNFYh5pCjK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7fopO/btsL4KpEbrL/NqDoTtCabgP1DNFYh5pCjK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7fopO/btsL4KpEbrL/NqDoTtCabgP1DNFYh5pCjK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7fopO%2FbtsL4KpEbrL%2FNqDoTtCabgP1DNFYh5pCjK%2Fimg.jpg&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;852&quot; height=&quot;157&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 20-39-28 2.jpg&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 LM Studio의 세팅을 진행합니다. 먼저 왼쪽 아래에 있는 유저 타입을 변경합니다. 기본 설정이 Power User로 되어있어서 그대로 해도 되지만, 저는 Developer로 변경해 줄 겁니다. 변경하지 않아도 딱히 크게 문제는 없습니다. 다만, User로 설정만 안 해놓으면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-15-20.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qOnLT/btsL3lxRxmD/y8hEU9CxRSiGLntVeoCcPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qOnLT/btsL3lxRxmD/y8hEU9CxRSiGLntVeoCcPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qOnLT/btsL3lxRxmD/y8hEU9CxRSiGLntVeoCcPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqOnLT%2FbtsL3lxRxmD%2Fy8hEU9CxRSiGLntVeoCcPK%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;2132&quot; height=&quot;1750&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-15-20.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;/&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-15-24 2.png&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwdevq/btsL4HT7aFO/qir9GCRTFjUlAK5mTOpkV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwdevq/btsL4HT7aFO/qir9GCRTFjUlAK5mTOpkV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwdevq/btsL4HT7aFO/qir9GCRTFjUlAK5mTOpkV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwdevq%2FbtsL4HT7aFO%2Fqir9GCRTFjUlAK5mTOpkV0%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;1346&quot; height=&quot;880&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-15-24 2.png&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 앱 언어를 한국어(Beta)로 변경했는데 영어이신 분들은 위치 확인해 보고 설정하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Settings에서 Server Port가 1234로 기본 설정 되어있습니다. 저는 기본 포트를 사용하는걸 별로 안 좋아해서 서버 포트를 변경해 줬습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥북을 서버로 사용하고 싶다면 '로컬 네트워크에서 제공' 설정을 켜면 됩니다. 요즘 M4 맥미니가 가성비로 나와서 그런지 서버로 사용하시려는 분들이 많더라고요. 그런 경우에는 이 옵션을 켜야 다른 컴퓨터에서 API를 사용할 수 있습니다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-16-14.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMcDDC/btsL3QRKofU/d6hoVMOK9hPHTgCbNLTPkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMcDDC/btsL3QRKofU/d6hoVMOK9hPHTgCbNLTPkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMcDDC/btsL3QRKofU/d6hoVMOK9hPHTgCbNLTPkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMcDDC%2FbtsL3QRKofU%2Fd6hoVMOK9hPHTgCbNLTPkk%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;2132&quot; height=&quot;1750&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 21-16-14.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Status 부분의 스위치를 누르면 서버가 시작됩니다. 이러면 LM Studio의 설정이 끝납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Open Webui(Docker) 세팅&lt;/h3&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;아래는 docker-compose.yaml 구성입니다.&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;pre id=&quot;code_1738414054229&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 참고: https://docs.openwebui.com/getting-started/quick-start/

services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - 3000:8080
    volumes:
      - ./open-webui-data:/app/backend/data
    extra_hosts:
      - &quot;host.docker.internal:host-gateway&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;extra_hosts 가 중요한데 이 부분이 있어야 호스트 서버에 접속할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738414277009&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 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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Open WebUI 2025-02-01 21-53-52.png&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncN41/btsL37yX70j/X6qcKbjQaSbQaFpKuQKFAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncN41/btsL37yX70j/X6qcKbjQaSbQaFpKuQKFAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncN41/btsL37yX70j/X6qcKbjQaSbQaFpKuQKFAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FncN41%2FbtsL37yX70j%2FX6qcKbjQaSbQaFpKuQKFAK%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;272&quot; height=&quot;377&quot; data-filename=&quot;Monosnap Open WebUI 2025-02-01 21-53-52.png&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Open Webui를 실행하고 나면 오른쪽 위에 아이콘이 있는데 누르면 관리자 패널이 있습니다. 관리자 패널로 들어가면 각종 여러 가지 설정이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-52-39.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qbovj/btsL4MHLpyt/9OqsjJYl0FLVfKxR9CATAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qbovj/btsL4MHLpyt/9OqsjJYl0FLVfKxR9CATAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qbovj/btsL4MHLpyt/9OqsjJYl0FLVfKxR9CATAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqbovj%2FbtsL4MHLpyt%2F9OqsjJYl0FLVfKxR9CATAk%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;1720&quot; height=&quot;784&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-52-39.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설정 - 연결&lt;/b&gt;로 들어가 보면 OpenAI API 설정이 있습니다. 여기에서 OpenAI API 연결 관리의 오른쪽에서 + 버튼을 누릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-52-50.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yA8NW/btsL3AO1qet/OcjrCOh3IonbdJiOV08tF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yA8NW/btsL3AO1qet/OcjrCOh3IonbdJiOV08tF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yA8NW/btsL3AO1qet/OcjrCOh3IonbdJiOV08tF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyA8NW%2FbtsL3AO1qet%2FOcjrCOh3IonbdJiOV08tF1%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;930&quot; height=&quot;654&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-52-50.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;blockquote data-ke-style=&quot;style3&quot;&gt;URL: http://host.docker.internal:46652/v1&lt;br /&gt;# Key는 아무렇게나 적어도 상관없는 것 같습니다.&lt;br /&gt;Key: lm-studio&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-53-08.png&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2fBxq/btsL2yEfmDk/5C3lPd5UxrweI1JUTAdZZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2fBxq/btsL2yEfmDk/5C3lPd5UxrweI1JUTAdZZ1/img.png&quot; data-alt=&quot;이렇게 뜨면 성공입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2fBxq/btsL2yEfmDk/5C3lPd5UxrweI1JUTAdZZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2fBxq%2FbtsL2yEfmDk%2F5C3lPd5UxrweI1JUTAdZZ1%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;270&quot; height=&quot;84&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 21-53-08.png&quot; data-origin-width=&quot;270&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 뜨면 성공입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 22-03-44.png&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKGI4Z/btsL5mhwDPq/xq4VtFG1HdJDPQGcDcZY5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKGI4Z/btsL5mhwDPq/xq4VtFG1HdJDPQGcDcZY5k/img.png&quot; data-alt=&quot;이렇게 뜨면 설정 다시 체크해보세요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKGI4Z/btsL5mhwDPq/xq4VtFG1HdJDPQGcDcZY5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKGI4Z%2FbtsL5mhwDPq%2Fxq4VtFG1HdJDPQGcDcZY5k%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;418&quot; height=&quot;78&quot; data-filename=&quot;Monosnap 관리자 패널 Open WebUI 2025-02-01 22-03-44.png&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;78&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap 한국어 대화   Open WebUI 2025-02-01 22-08-33.png&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bquJ7r/btsL5CLcaA3/XRHzJ5MGgMlKHBufUVUx50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bquJ7r/btsL5CLcaA3/XRHzJ5MGgMlKHBufUVUx50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bquJ7r/btsL5CLcaA3/XRHzJ5MGgMlKHBufUVUx50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbquJ7r%2FbtsL5CLcaA3%2FXRHzJ5MGgMlKHBufUVUx50%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;1734&quot; height=&quot;466&quot; data-filename=&quot;Monosnap 한국어 대화   Open WebUI 2025-02-01 22-08-33.png&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 22-08-20.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHDPj4/btsL3pz3j05/cK9V6lHkGEpwiYdeZX0fMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHDPj4/btsL3pz3j05/cK9V6lHkGEpwiYdeZX0fMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHDPj4/btsL3pz3j05/cK9V6lHkGEpwiYdeZX0fMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHDPj4%2FbtsL3pz3j05%2FcK9V6lHkGEpwiYdeZX0fMk%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;2132&quot; height=&quot;1750&quot; data-filename=&quot;Monosnap LM Studio 2025-02-01 22-08-20.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;1750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 LM Studio에서 모델이 로딩되고 사용할 수 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;레퍼런스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://svrforum.com/software/1964820&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://svrforum.com/software/1964820&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>HomeLAB/Mac(OSX, macOS)</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/10</guid>
      <comments>https://expbox77.tistory.com/10#entry10comment</comments>
      <pubDate>Sat, 1 Feb 2025 22:15:06 +0900</pubDate>
    </item>
    <item>
      <title>[Linux]Nginx Proxy Manager(NPM)에서 DB 오류 날때 해결 방법</title>
      <link>https://expbox77.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 클라우드를 사용하면서 Nginx Proxy Manager(NPM)를 잘 사용하고 있습니다. 홈랩 쪽은 OPNsense에서 HAProxy를 리버스 프록시로 사용하지만, 오라클 클라우드는 ARM에 CLI로 conf 파일을 설정해야 하는 게 좀 귀찮아서 NPM을 Docker로 설치해서 사용하고 있습니다. 올리고 싶은 서비스의 docker-compose.yaml 파일에 대충 네트워크만 맞춰주고 컨테이너 올려주고 웹에서 &quot;딸깍&quot; 몇 번만 하면 그리 어렵지 않게 설정할 수 있어 많은 사람들이 사용하는 리버스 프록시 프로그램입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap Spark - expbox77@gmail.com 2025-01-17 21-33-42.jpg&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpSjDV/btsLWw5oIUf/tTr2UNv73l6fKRmIr95JSK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpSjDV/btsLWw5oIUf/tTr2UNv73l6fKRmIr95JSK/img.jpg&quot; data-alt=&quot;Let's Encrypt 인증서가 6일 이내에 만료된다는 이메일 - 현재는 해결했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpSjDV/btsLWw5oIUf/tTr2UNv73l6fKRmIr95JSK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpSjDV%2FbtsLWw5oIUf%2FtTr2UNv73l6fKRmIr95JSK%2Fimg.jpg&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;1348&quot; height=&quot;534&quot; data-filename=&quot;Monosnap Spark - expbox77@gmail.com 2025-01-17 21-33-42.jpg&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Let's Encrypt 인증서가 6일 이내에 만료된다는 이메일 - 현재는 해결했다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM에서는 자동으로 인증서를 갱신하기에 딱히 신경 쓸 필요는 없습니다. 그런데 얼마 전에 Let's Encrypt 측에서 인증서가 곧 만료된다는 메일이 왔는데, 왜 이런 메일이 왔는가 싶어서 확인해 봤습니다. 확인해 보니 오랜 기간 도커 이미지의 업데이트를 못해서 컨테이너 내부에 Certbot 패키지 버전을 사용할 수 없게 되면서 인증서를 재발급받을 수 없게 되는 것이 원인인 것으로 결론을 내렸습니다. 그런데 작년에 최신 버전으로 업데이트를 시도했다가 DB 오류로 실패하고 원복 했는데, 이제 인증서를 갱신하지 못하면 잘 돌아가던 서비스를 전부 사용할 수 없게 되니 어쩔 수 없이 업데이트를 미룰 수 없게 되었습니다.&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;그 시도 중에 하나를 해결하면 문제가 하나 생겨서 2가지 문제를 해결했다. 검색해 보니까 선발대가 Github에 잘 정리해 놔서 생각보다 빠르게 해결할 수 있었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 시스템 사양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 클라우드 Ampere&amp;nbsp;A1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU: ARM 4 Core vCPU&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAM: 24GB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS: Ubuntu 22.04 LTS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 기존의 NPM의 docker-compose.yaml 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM은 역사와 전통의 X86 시스템뿐만이 아니라 ARM 시스템도 지원합니다. yaml 파일이 좀 길어서 접어놨는데 잘못된 파일이라서 볼 필요는 없습니다. 나중에 수정된 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 서비스는 메인 NPM과 MariaDB로 구동됩니다.&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;pre id=&quot;code_1737460333883&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3.1&quot;
services:
  npm:
    image: 'jc21/nginx-proxy-manager:${NPM_VERSION}'
    container_name: NPM_main
    restart: unless-stopped
    ports:
      - '80:80'            # http
      - '443:443'          # https
      - '81:81'            # management page
    environment:
      DB_MYSQL_HOST: &quot;npm_db&quot;
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: ${NPM_USER}
      DB_MYSQL_PASSWORD: ${NPM_PASSWD}
      DB_MYSQL_NAME: ${NPM_DBNAME}
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - artemis_net
      - npm_net
    depends_on:
      - npm_db

  npm_db:
    image: 'jc21/mariadb-aria:${DB_VERSION}'
    container_name: NPM_DB
    tty: true
    expose:
      - 3306
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${NPM_ROOT_PASSWD}
      MYSQL_DATABASE: ${NPM_DBNAME}
      MYSQL_USER: ${NPM_USER}
      MYSQL_PASSWORD: ${NPM_PASSWD}
      MARIADB_AUTO_UPGRADE: 1
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm_net

networks:
  artemis_net:
    external: true
  npm_net:
    external: true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.env 파일에 나머지 구성을 저장했습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 문제 상황 해결 방법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) npm 'Can\'t create table `NPM_DB`.`migrations`&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 yaml 파일에서 NPM과 MariaDB의 버전을 최신 버전으로 업데이트하기 위해 버전 부분만 &quot;latest&quot;로 지정하고 &lt;b&gt;docker copmose pull &amp;amp;&amp;amp; docker compose up으로&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; 도커 컨테이너를 실행했을 때 만난 문제입니다. 상세 내역은 아래의 이미지를 참고해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap docker compose -f docker-compose-test.yaml up &amp;amp;mdash; 212✕48 &amp;amp;mdash;&amp;amp;nbsp;Fixed-width window 2025-01-21 19-39-17.jpg&quot; data-origin-width=&quot;3421&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3snuG/btsLVvlXuNN/oXTk2rpYS2TdJifVvXNKz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3snuG/btsLVvlXuNN/oXTk2rpYS2TdJifVvXNKz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3snuG/btsLVvlXuNN/oXTk2rpYS2TdJifVvXNKz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3snuG%2FbtsLVvlXuNN%2FoXTk2rpYS2TdJifVvXNKz1%2Fimg.jpg&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;3421&quot; height=&quot;763&quot; data-filename=&quot;Monosnap docker compose -f docker-compose-test.yaml up &amp;mdash; 212✕48 &amp;mdash;&amp;nbsp;Fixed-width window 2025-01-21 19-39-17.jpg&quot; data-origin-width=&quot;3421&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 로그가 NPM에서 나타나게 되는데, 이 오류는 NPM 웹은 열리나 제대로 된 인증 정보를 넣더라도 로그인이 불가능한 문제가 생깁니다. DB를 마이그레이션 할 수 없는 문제인 것으로 파악했습니다. 해결 방법을 찾아보니 이 부분은 DB가 버전 마이그레이션을 못하는 게 아니라 DB 파일에 대한 권한 문제인 것이라며 권한을 컨테이너 내부에서 수정하는 방법을 사용했습니다.&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;a href=&quot;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1499#issuecomment-1493057879&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;방법&lt;/a&gt;을 사용한 결과 해결은 했으나 컨테이너를 새로 시작하는 순간 문제가 다시 발생했습니다. 그래서 해결 방법에 관해서 좀 더 살펴본 결과 아예 DB 디렉터리를 NPM 디렉터리에서 분리해야 한다고 했습니다. 즉, &lt;b&gt;제 docker-compose.yaml 파일에는 NPM 컨테이너에 할당되어 있는 디렉터리 경로 내부에 DB 컨테이너의 디렉터리가 포함되어 있었고 DB 컨테이너가 실행되면서 DB 파일의 권한을 수정한다고 해도 &lt;b&gt;depends_on으로 NPM이&lt;/b&gt; 다시 그 DB 파일의 권한을 수정해 버렸던 것&lt;/b&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;제가 예전에 어떤 글을 참고해서 docker-compose.yaml 파일을 작성했는지는 잘 모르겠지만, 혹시나 싶어 확인해 본&amp;nbsp;&lt;a href=&quot;https://nginxproxymanager.com/setup/#using-mysql-mariadb-database&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;&amp;nbsp;&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;a href=&quot;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1499#issuecomment-1494593464&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1499#issuecomment-1494593464&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM 컨테이너에 할당되어 있던 디렉터리 내부에 DB 컨테이너에 할당된 디렉터리가 있는데 그 디렉터리를 외부로 이동시키고 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;&lt;b&gt;디렉터리 이동&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737700489296&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 도커 컨테이너에서 생성된 디렉터리라서 root 권한으로 실행해야함.
sudo mv data/mysql ./&lt;/code&gt;&lt;/pre&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;b&gt;NPM 컨테이너 볼륨 할당&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737462885418&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt&lt;/code&gt;&lt;/pre&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;b&gt;MariaDB 컨테이너 볼륨&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737462934225&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    volumes:
      - ./mysql:/var/lib/mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) npm&amp;nbsp;Incorrect&amp;nbsp;definition&amp;nbsp;of&amp;nbsp;table&amp;nbsp;mysql.column_stats:&amp;nbsp;expected&amp;nbsp;column&amp;nbsp;'hist_type'&amp;nbsp;at&amp;nbsp;position&amp;nbsp;9&amp;nbsp;to&amp;nbsp;have&amp;nbsp;type&amp;nbsp;enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'),&amp;nbsp;found&amp;nbsp;type&amp;nbsp;enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 파일의 권한 문제를 해결했지만 아직 문제는 남아있었습니다. 로그인은 잘 되나 로그인할 때 DB에 로그가 쌓이기 시작했습니다. 상세 내역은 아래 이미지를 참고해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~npm-docker 2025-01-17 21-22-11.jpg&quot; data-origin-width=&quot;3413&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/leCqt/btsLZ2EACCF/8WTIBcuGeuIMd4X7UVepGk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/leCqt/btsLZ2EACCF/8WTIBcuGeuIMd4X7UVepGk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/leCqt/btsLZ2EACCF/8WTIBcuGeuIMd4X7UVepGk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleCqt%2FbtsLZ2EACCF%2F8WTIBcuGeuIMd4X7UVepGk%2Fimg.jpg&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;3413&quot; height=&quot;117&quot; data-filename=&quot;Monosnap ubuntu@artemis-arm~npm-docker 2025-01-17 21-22-11.jpg&quot; data-origin-width=&quot;3413&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 로그가 DB에서 나타나게 되는데, 이 오류는 작동 자체는 제대로 되는데 로그인할 때마다 로그가 계속 쌓이게 되는 부분도 있고 억지로 돌아가는 느낌이라 더 큰 문제가 생기기 전에 잡으면 좋을 것 같았습니다. 해결 방법을 찾아보니 DB 버전이 꽤나 구버전이라 그런지 DB를 수동으로 업그레이드시켜줘야 하는 것으로 보입니다.&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;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3428#issuecomment-1885421270&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3428#issuecomment-1885421270&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행되어 있는 DB 컨테이너에 명령어를 날려서 DB를 수동으로 업그레이드시키면 됩니다.&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;DB는 중요하니까 꼭 백업을 해놔야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737701974160&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# DB는 중요하니까 꼭 백업을 해놓고 시도하세요.
# 명령어
docker exec -it [DB 컨테이너의 이름] mysql_upgrade -u root -p [DB 이름]

# 제 시스템의 경우
docker exec -it NPM_DB mysql_upgrade -u root -p npm_db&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 겪었던 문제의 경우에는 대부분 DB에 관련된 문제였습니다. 이 부분을 좀 더 잘 살피고 제대로 했다면 좋았을 텐데 해결 방법을 찾기가 그리 어렵지 않았고 해결이 100% 안 되는 경우도 가끔 있는데 이 문제는 완전하게 해결할 수 있어서 다행이었습니다.&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.yaml 파일&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;pre id=&quot;code_1737703079345&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: &quot;3.1&quot;
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: NPM_main
    restart: unless-stopped
    ports:
      - '80:80'            # http
      - '443:443'          # https
      - '81:81'            # management page
    environment:
      DB_MYSQL_HOST: &quot;npm_db&quot;
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: ${NPM_USER}
      DB_MYSQL_PASSWORD: ${NPM_PASSWD}
      DB_MYSQL_NAME: ${NPM_DBNAME}
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - artemis_net
      - npm_net
    depends_on:
      - npm_db

  npm_db:
    image: 'jc21/mariadb-aria:latest'
    container_name: NPM_DB
    tty: true
    expose:
      - 3306
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${NPM_ROOT_PASSWD}
      MYSQL_DATABASE: ${NPM_DBNAME}
      MYSQL_USER: ${NPM_USER}
      MYSQL_PASSWORD: ${NPM_PASSWD}
      MARIADB_AUTO_UPGRADE: 1
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - npm_net

networks:
  artemis_net:
    external: true
  npm_net:
    external: true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.env 파일은 별도 작성되었습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;레퍼런스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1499&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1499&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3428&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3428&lt;/a&gt;&lt;/p&gt;</description>
      <category>HomeLAB/Linux</category>
      <author>expbox77</author>
      <guid isPermaLink="true">https://expbox77.tistory.com/9</guid>
      <comments>https://expbox77.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 24 Jan 2025 16:24:37 +0900</pubDate>
    </item>
  </channel>
</rss>