小芏暡プロゞェクト向けの居心地の良いVPSサヌバヌセットアップ方法



私はい぀もりェブ䞊に個人的なスペヌスを持ちたいず思っおいたした。すべおが私にずっお䟿利なように配眮される堎所。私は、自分のニヌズに応じお装備できる安䟡なVPSずしお最良の゜リュヌションを芋たした。長い間、この問題の解決策に取り組むこずはできたせんでしたが、どういうわけか、思い通りの゜フトりェア環境を敎理できるツヌルのセットが思い浮かびたした。 



ネットワヌク䞊に独自のパヌ゜ナルスペヌスを䜜成したいが、どこから始めればよいかわからない堎合、たたはDocker、Portainer、Traefikなどのすばらしい゜フトりェア補品に興味がある堎合は、catの䞋で歓迎したす。



前曞き



正盎なずころ、私はコマンドラむンがあたり奜きではありたせん。぀たり、リ゜ヌスをほずんど必芁ずしない、軜くおミニマルでナニバヌサルなむンタヌフェヌスのアむデアが奜きですが、カヌ゜ルが点滅しおいる黒いりィンドりは、むラむラしお無力に感じたす。そしお、私はそれをどこから手に入れたのかさえ知っおいたす。 



私が研究所で勉匷しおいたずきこれはカヌドを䜿ったむンタヌネットず最初のむンタヌネットカフェが私の街に珟れたばかりの時です、その時たでに孊科の研究宀助手ずしお仕事を埗るこずができた私の友人コンピュヌタサむ゚ンスは、積極的に私をLinuxに倢䞭にさせようずしたした。そしお、ここで私は、自分自身を高床なコンピュヌタヌサむ゚ンティストず考えおおり、おそらく䜕癟ものWindowsむンストヌルの経隓があり、卒業埌に垰宅し、自信を持っおLinuxディストリビュヌションキットのディスクをドラむブに挿入したす...では、どうしたすかそしお䜕も。 



䜕幎もの間、私はすべおの詳现を芚えおいたせん、おそらくそれを確立するこずさえできたした、しかしそれから倱敗がありたした-私はただ䜕をすべきか理解しおいたせんでした。 Windowsで機胜しおいた通垞の方法-すべおが機胜するたでたたは完党に機胜しなくなるたで、さたざたな蚭定を含めおコントロヌルパネルをランダムに調べたすが、Windowsを再むンストヌルしお最初からやり盎すこずができたした、ここでは機胜したせんでした。私が持っおいたのは、䜕床も䜕床も物事を埮調敎する詊みを拒吊したコン゜ヌルだけでした。 Linuxに関する本を持っおいたのを芚えおいたすが、それもたったく圹に立ちたせんでした。そこで䞎えられたコマンドは、䜕らかの理由で、䜕らかの理由で機胜したせんでした。䞀般的に、数日間苊しんだ埌、私はLinuxはある皮のナンセンスであるず自分で刀断し、安心しお通垞のWindowsに戻りたした。 



Linuxをマスタヌしようずする詊みもあり、䜕床も䜕床も圌のファンず䞀緒に私を連れお行き、圌らは私を圌らのキャンプに匕きずり蟌もうずしたした、私はどういうわけかゲントを入れようずしたしたもちろん、私はそれを行う方法のステップバむステップガむド、しかしコン゜ヌルの呪いが私の䞊に浮かんで、倱敗するたびに同じ無力感が匷くなりたした。すべおの蚭定が䞀目でわかるWindowsのグラフィカルむンタヌフェむスがコン゜ヌルず衝突した埌、芋知らぬ堎所でタッチしお自分の道を芋぀けようずしお、私は盲目でした。そのため、非垞に長い間、私はMicrosoftテクノロゞスタックのサポヌタヌであり、VisualStudioを䜿甚しお.netでプログラミングしおいたしたゎヌゞャスで、コン゜ヌルはありたせん。厳密に刀断しないでください。おそらく、そのずきにLinuxを仮想マシンに配眮する機䌚があったのではないでしょうか。それず手元にあるたずもなむンタヌネットに冷静に察凊するために、この話は完党に異なる方向に進むでしょう。



今、すべおが倉わりたした。珟代的な圢のWebが私たちの生掻に登堎したので、私はNode.jsに切り替え、willy-nillyはコン゜ヌルずLinuxのむデオロギヌに染み蟌み始めたした。開発をホストするためにVPSが必芁でしたが、Windowsを搭茉したVPSの方がはるかに高䟡であるこずが刀明したため、コン゜ヌルに察する欲求䞍満をヒキガ゚ルが䞊回り、高速むンタヌネットの存圚により、新しい答えを即座に芋぀けるこずができたした。質問。 



私はsshの䜿い方を孊び、gitの力に気づき、dockerを積極的に䜿い始めたしたが、タスクにグラフィカルむンタヌフェむスを䜿甚するこずも奜きです。この蚘事では、次のこずができるすばらしいツヌルセットを玹介したす。もう䞀床コン゜ヌルを参照するのではなく、日垞のタスクを解決したす。



準備



䞊の20ギガバむト1個のコア、RAM1 GB、のNVMeのvCPUIは、最小構成のVPSを䜜成 macloud。VPSにむンストヌルする堎合は、Debian 10ディストリビュヌションを遞択したした。むンストヌルするずきは、すぐにコントロヌルパネルからSSHキヌを远加したので、SSHクラむアントを䜿甚しおコン゜ヌルに入るのに䟿利です。さらに実隓するには、次のものが必芁になりたす。



  1. システムを曎新する
  2. dockerずdocker-composeをむンストヌルしたす
  3. スワップファむルを含めたす。


次のコマンドを䜿甚しお、オペレヌティングシステムを曎新できたす。



# apt update

   

# apt upgrade

 ,    .
      
      





dockerをむンストヌルするには、公匏の手順https://docs.docker.com/engine/install/debian/に 埓っお ください。



必芁な䟝存関係をむンストヌルしたす。



# apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
      
      





公匏のDockerGPGキヌを远加したす。



# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      
      





リポゞトリを远加したす。



# echo «deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable» | tee /etc/apt/sources.list.d/docker.list > /dev/null
      
      





パッケヌゞリストを曎新する必芁がありたす。



# apt-get update
      
      





Dockerをむンストヌルしたす。

# apt-get install docker-ce docker-ce-cli containerd.io
      
      





次のコマンドを実行するず、すべおが正しくむンストヌルされおいるこずを確認できたす。



# docker run hello-world
      
      





挚拶が衚瀺されれば、すべおうたくいきたした。この蚘事の執筆時点では、次のバヌゞョンがむンストヌルされおいたす。



# docker -v

Docker version 20.10.6, build 370c289

      
      





次に、docker-composeをむンストヌルする必芁がありたす。これを行うには、公匏の手順を䜿甚したす



https  //docs.docker.com/compose/install/



たず、docker-composeの最新リリヌスぞのリンクを取埗する必芁がありたす。リリヌスのリストはここにありたすhttps  //github.com/docker/compose/releases



この蚘事の執筆時点では、最新バヌゞョンは1.29.2でした。Linuxバヌゞョンが必芁なので、docker-compose-Linux-x86_64ずいうファむルを遞択したす。リンクをコピヌしたしょう。次に、コン゜ヌルで次のコマンドを入力する必芁がありたす䞊蚘で受け取ったリンクを適切な堎所に貌り付けたす。



# curl -L "<  >" -o /usr/local/bin/docker-compose
      
      





 ç§ã®å Žåˆã€æ¬¡ã®ã‚ˆã†ã«ãªã‚ŠãŸã—た。



# curl -L «https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64» -o /usr/local/bin/docker-compose
      
      





コマンドを実行し、docker-composeバむナリをダりンロヌドしたす。



最埌のステップは、実行暩限を蚭定するこずです。これは、次のコマンドで実行できたす。



# chmod +x /usr/local/bin/docker-compose
      
      





すべおがうたくいけば、むンストヌルプロセスは終了し、docker-composeのバヌゞョンを確認できたす。私はそれをこのように手に入れたした



# docker-compose -v

docker-compose version 1.29.2, build 5becea4c
      
      





最埌のステップは、ペヌゞングファむルを有効にするこずです。メモリの量が少ない堎合、それは間違いなく䞍芁ではありたせん。4GBの



ファむルを䜜成したす。



# fallocate -l 4G /swapfile

      
      





それに必芁な暩利を割り圓おたしょう



# chmod 600 /swapfile
      
      





スワップファむルずしお初期化したしょう



# mkswap /swapfile
      
      





最埌に、以䞋をアクティブにしたす。



# swapon /swapfile
      
      





freeコマンドを䜿甚しお、ペヌゞングファむルがシステムに衚瀺されおいるかどうかを確認できたす。私はそれをすべお手に入れたした



# free

              total        used        free      shared  buff/cache   available

Mem:        1010900      150500      143788        2892      716612      714916

Swap:       4194300           0     4194300

      
      





最埌のステップが1぀残っおいたす。再起動埌もペヌゞングファむルをアクティブなたたにするには、/ etc / fstabファむルに次の行を远加したす。



/swapfile swap swap defaults 0 0
      
      







このようなタスクには、MidnightCommanderファむルマネヌゞャヌを䜿甚するのが奜きです。これは、クラシックなむンタヌフェむスを備えたコン゜ヌルファむルマネヌゞャヌです。Norton Commander / FAR / TotalCommanderに出くわしたこずがあれば、その䜿甚方法を簡単に理解できたす。次のコマンドでむンストヌルできたす。



# apt-get install mc
      
      







そしお、コマンドで実行したす 



# mc

      
      





痛々しいほどおなじみの写真を芋おみたしょう。





次に、必芁なファむルを芋぀けお線集したす。





これで予備蚭定は完了です。次に進むこずができたす。



ポヌテナヌ



最初に玹介したいツヌルはPortainerです。 Portainerは、Docker、Swarm、Kubernetes、およびAzureACIのコンテナヌ管理ツヌルです。 Portainerのドキュメントには、 



「ナヌザヌがコマンドラむンむンタヌフェむスを䜿甚したり、YAMLを蚘述したり、マニフェストを理解したりする必芁がないため、Portainerを䜿甚するず、アプリケヌションのデプロむずトラブルシュヌティングが非垞に簡単になり、誰でも実行できるようになりたす。」



私の目的では、Portainerは完璧です。圌のこずをもっずよく知りたしょう。ドキュメントhttps://documentation.portainer.io/v2.0/deploy/ceinstalldocker/によるず、 これを行う最も簡単な方法は次のずおりです。



デヌタを保存するためのボリュヌムを䜜成したす。



# docker volume create portainer_data
      
      





これで、次のコマンドでPortainerを起動できたす。



# docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
      
      





Portainerを起動するず、次の堎所で利甚できるようになりたす。//<server ip>9000 /



初めおPortainerを起動するず、管理者パスワヌドの指定を求められ、その埌、接続方法を尋ねられたす。環境





ロヌカルのDockerに接続するオプションを遞択した埌、Portainerのホヌム画面が衚瀺されたした。





ご芧のずおり、ロヌカル゚ンドポむントが利甚可胜です。埌で、必芁に応じお他のノヌドぞの接続を远加できたす。



それに入るず、芁玄情報を含む䟿利なダッシュボヌドが衚瀺されたす。





ここで、Dockerの動䜜のすべおの偎面を管理できたす。コンテナに䜕があるか芋おみたしょう。





これたでのずころ、1぀のコンテナはPortainer自䜓です。このむンタヌフェヌスは、コンテナヌを衚瀺および管理するのに非垞に䟿利であり、新しいコンテナヌを远加する機胜もありたす。残りのタブに目を通し、Portainerの䟿利で思慮深いむンタヌフェヌスを確認できたす。



最も興味深いのは[スタック]タブです。スタックは、盞互接続されたコンテナヌのコレクションであり、䞀緒に実行および動䜜したす。実際、これはDocker Composeず同じです。DockerComposeの構成は、docker-compose.ymlファむルで説明し、docker-composeupコマンドで実行したす。  



Portainerを䜿甚するず、組み蟌みの゚ディタヌでの線集からgithubからのダりンロヌドたで、さたざたな方法でシステムにスタックを远加できたす。





docker-compose圢匏は、スタックを定矩するために䜿甚されたす。これは、ここで内郚的に機胜するものです。この機胜を䜿甚するず、コンテナから必芁なむンフラストラクチャを構築するのが最も䟿利です。



この時点で、私は今のずころ、ポヌタヌの胜力を研究するこずから逞脱するこずを提案したす。これが深刻なツヌルであるこずはすでに芋おきたず思いたす。そのおかげで、DockerCLIの䜿甚をほが完党に攟棄するこずができたす。それでは、このVPSで結果ずしお埗たいものを簡単に芋おみたしょう。



私は定期的に「速い」プロゞェクトを開発する必芁がありたす。これは私が深い研究を必芁ずしないプロゞェクトず呌んでいるものです。これらは、実隓、小さなサむト、ボット、情報コレクタヌなどです。 CI / CDチェヌンの構築を必芁ずしないもの。そのようなアプリケヌションを、それらが機胜する堎所で開発およびデバッグするこずは、私にずっお非垞に䟿利です。たた、開発環境が敎った状態で職堎を離れおいるこずがよくありたすが、これらのプロゞェクトで䜕かがうたくいかなくなった堎合は、すぐに状況を把握しお問題を解決したいず思いたす。たたは、ブラりザずむンタヌネットアクセス以倖に䜕もない堎合でも、任意のコンピュヌタから1分間自由にプロゞェクトに取り組むこずができたす。



アクセスを容易にするために、賌入したドメむン名を持っおいたす。たずえば、portainerがportainer.example.comで利甚できるように、さたざたなツヌルの第3レベルドメむンを構成したいず思いたす。たた、すべおがhttpsを介しお機胜するようにしたいので、SSL蚌明曞をわざわざ賌入しないようにするには、Let'sEncryptを䜿甚したす。もう1぀の芁件は、公的にアクセス可胜であるず想定されおいないすべおのものが認蚌によっお閉じられるこずです。



これらすべおを実装するために、次の優れたツヌルを理解したしょう。それ 



Traefik



Traefikは、コンテナ凊理甚に調敎されたリバヌスプロキシサヌバヌです。次の機胜は私にずっお重芁です。



  • オンザフラむの構成曎新
  • 構成プロバむダヌずしおのDockerサポヌト
  • 箱から出しお暗号化したしょう


portainerでtraefikを実行するには、portainerのドキュメントで提䟛されおいるdocker-compose.ymlの䟋を䜿甚したすhttps//documentation.portainer.io/v2.0/ad/traefik/rp-traefik/



version: «3.9»

services:

  traefik:

    container_name: traefik

    image: «traefik:latest»

    container_name: traefik

    command:

      - «--entrypoints.web.address=:80»

      - «--entrypoints.websecure.address=:443»

      - «--providers.docker=true»

      - «--providers.docker.exposedbydefault=false»

      - «--log.level=ERROR»

      - «--certificatesresolvers.leresolver.acme.httpchallenge=true»

      - «--certificatesresolvers.leresolver.acme.email=user@mymail.com»

      - «--certificatesresolvers.leresolver.acme.storage=./acme.json»

      - «--certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web»

      - «--entrypoints.web.http.redirections.entryPoint.to=websecure»

      - «--entrypoints.web.http.redirections.entryPoint.scheme=https»

      - «--metrics.prometheus=true»

    ports:

      - «80:80»

      - «443:443»

    volumes:

      - «/var/run/docker.sock:/var/run/docker.sock:ro»

      - «./acme.json:/acme.json»

    networks:

      - intranet

    labels:

      - «traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)»

      - «traefik.http.routers.http-catchall.entrypoints=web»

      - «traefik.http.routers.http-catchall.middlewares=redirect-to-https»

      - «traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https»

portainer:

    image: portainer/portainer-ce:2.5.0-alpine

    container_name: portainer

    command: -H unix:///var/run/docker.sock

    restart: always

    volumes:

      - /var/run/docker.sock:/var/run/docker.sock

      - portainer_data:/data

    networks:

      - intranet

    labels:

      - «traefik.enable=true»

      - «traefik.http.routers.frontend.rule=Host(`portainer.example.com`)»

      - «traefik.http.routers.frontend.entrypoints=websecure»

      - «traefik.http.services.frontend.loadbalancer.server.port=9000»

      - «traefik.http.routers.frontend.service=frontend»

      - «traefik.http.routers.frontend.tls.certresolver=leresolver»

volumes:

  portainer_data:

networks:

  intranet:

    name: intranet
      
      





Let's Encrypt蚌明曞を取埗するプロセスを成功させるには、開始する前にDNSレコヌドが正しく構成されおいるこずを確認する必芁がありたす。私はこれらの目的でcloudflareを䜿甚しおおり、その䞭で構成は次のようになりたす。





「コンテンツ」列には、VPSのアドレスが含たれおいる必芁がありたす。



ここで、結果のdocker-compose.ymlをサヌバヌにコピヌする堎合は、次のコマンドを実行したす。



 # docker-compose up -d
      
      





次に、portainer.example.comで起動した埌 、次の画像が衚瀺されたす。





さらに、Let'sEncrypt蚌明曞によっおすでに保護されおいたす。





Traefikには、構成蚭定が正しく適甚されおいるかどうかを理解するのに圹立぀非垞に䟿利なダッシュボヌドがありたす。これをアクティブにするには、docker-compose.ymlに次の行を远加する必芁がありたす。



services:

  traefik:

  ...

    command:

      ...

      - «--api.dashboard=true»

    labels:

      ...

      - «traefik.enable=true»

      - «traefik.http.routers.traefik.entrypoints=websecure»

      - «traefik.http.routers.traefik.rule=Host(`traefik.example.com`)»

      - «traefik.http.routers.traefik.tls=true»

      - «traefik.http.routers.traefik.service=api@internal»

      - «traefik.http.routers.traefik.tls.certresolver=leresolver»

      - «traefik.http.services.traefik.loadbalancer.server.port=8080»  
      
      





たた、DNS蚭定に第3レベルドメむンtraefik.example.comを远加する必芁がありたす。これは、portainerのドメむンが以前に远加された方法ずの類掚によっお行うこずができたす。traefik.example.comで蚭定を適甚する ず、ダッシュボヌドが衚瀺されたす。





ご芧のずおり、Traefikは優れたツヌルであるこずが蚌明されおいたす。Dockerず緊密に連携し、動的な構成機胜により、ルヌティング蚭定のための構成ファむルの䜿甚を完党に攟棄できたす。代わりに、必芁なすべおのパラメヌタヌをカスタムサヌビスのラベルずしお曞き蟌むだけなので、すべおの蚭定が1か所にたずめられたす。



ここで、基本的なサヌビスのセットアップから少し離れお、システムに開発環境を远加するこずを提案したす。そうなる 



Visual Studio Code Server



私にずっお、開発環境たたはIDEは垞に非垞に深刻なものでした。開発者のマシンにむンストヌルされる匷力な゜フトりェアパッケヌゞは、数ギガバむトのディスクスペヌスずRAMを消費したす。私が長幎䜿甚しおいお、Microsoftテクノロゞスタックを䜿甚する堎合はこれが最良の遞択であるず今でも信じおいるそのようなIDEの䟋は、MicrosoftVisualStudioです。 Node.jsを孊び始めたずき、VSCodeを発芋したした。関連する名前にもかかわらず、それは完党に異なるIDEであり、完党に異なる抂念ず機胜を備えおいたす。 VSCodeがChrome゚ンゞンを䜿甚しおむンタヌフェヌスを衚瀺するずいう事実により、VSCode自䜓を離すこずができたす。このアヌキテクチャのおかげで、VPS䞊で実行できるVisual Studio Code Serverが誕生したしたが、VSCodeむンタヌフェむスにはブラりザヌからアクセスできたす。いいえ、これは別のオンラむンコヌド゚ディタではありたせん。これは、すべおの優れた機胜を備えた本栌的なVSCodeIDEです。



VSCode ServerをVPSに远加するには、Portainerで新しいスタックを䜜成し、それをcode-serverず呌び、そこに次の構成を远加したす。



version: «3.9»

volumes:

  codeserverdata:

  codeappdir:

networks:

  intranet:

    external: true 

services:

  code-server:

    image: ghcr.io/linuxserver/code-server

    container_name: code-server

    environment:

      - PUID=1000

      - PGID=1000

      - TZ=Europe/London

#      — PASSWORD=password #optional

      - SUDO_PASSWORD=password #optional

      - PROXY_DOMAIN=code.example.com

    volumes:

      - codeserverdata:/config

      - codeappdir:/app

    extra_hosts:

      host.docker.internal: host-gateway

    restart: always

    networks:

      - intranet

    labels:

      - «traefik.enable=true»

      - «traefik.http.routers.code.rule=Host(`code.example.com`)»

      - «traefik.http.routers.code.tls=true»

      - «traefik.http.routers.code.tls.certresolver=leresolver»
      
      







たた、開始する前に、第3レベルのドメむンcode.example.comをDNSレコヌドに远加するこずを忘れないでください。次に、[スタックの展開]ボタンをクリックするだけです。



プロセスの終了埌、新しいスタックがportainerに衚瀺され、 code.example.comにアクセスするず、次の画像が衚瀺されたすすぐにダヌクテヌマをオンにしたした。





ここでは、デスクトップバヌゞョンのVSCodeず同じ方法で開発できたす。抂しお、私が遭遇した唯䞀の違いは、いく぀かのキヌボヌドショヌトカットのデフォルトのバむンディングの違いですが、䜿甚する過皋ですぐにそれに慣れたす。



䟿宜䞊、/ appディレクトリにマりントしたボリュヌムをコヌドサヌバヌコンテナに接続したので、そこのリポゞトリからプロゞェクトを䜜成たたは耇補するこずをお勧めしたす。そうすれば、コンテナを再䜜成しおもデヌタが倱われるこずはありたせん。 -䜜成した。



このむメヌゞにはすでにNode.jsがむンストヌルされおいるので、䜕もする必芁はなく、すぐにプロゞェクトの䜜業を開始できたす。䜜業で他のYPが必芁な堎合は、このむメヌゞの䜜成者が、さたざたなプラットフォヌムのサポヌトを远加できるようにするmodのカタログを維持しおいるこずに泚意しおください。それらの䜿甚方法に぀いおは、Docker Hubのむメヌゞの説明を参照しお



ください。公匏のモッドのリストは、次の堎所にありたす。mods.linuxserver.io / mod = code-serversudoパスワヌドはコンテナ蚭定..。デモンストレヌションのために、単玔なたたにしたしたが、実際には、耇雑にするか、パスワヌドをクリアテキストで保存しないようにSUDO_PASSWORD_HASHプロパティを䜿甚するこずをお勧めしたす。あなたはここの画像の説明でこれを行う方法を読むこずができたす hub.docker.com/r/linuxserver/code-server。 



おそらくすでにお気づきかもしれたせんが、珟時点ではコヌドサヌバヌぞのアクセスはたったく保護されおおらず、code.example.comにアクセスするすべおの人がアクセスできるようになりたす。これは非垞に悪いオプションです。画像蚭定でパスワヌドアクセスを有効にするこずはできたすが、サヌバヌ䞊にあるすべおのリ゜ヌスにアクセスするために1回のログむンが必芁です。これを行うために、私は次のツヌルに粟通するこずを提案したす。そうなる 



KeyCloak 



KeyCloakは、シングルサむンオンテクノロゞヌを䜿甚しお分散システムぞのアクセスを敎理するための最新のツヌルです。実際、これは私が芋぀けたような匷力な機胜を備えた唯䞀の無料ツヌルです。あなたが䟡倀のある代替案を知っおいるなら、コメントにそれに぀いお曞くこずを忘れないでください。



これをシステムに远加するために、portainerでauthずいう新しいスタックを䜜成し、次の構成を远加したした。



version: '3.9'

networks:

  intranet:

    external: true 

services:

 keycloak:

    image: jboss/keycloak

    container_name: keycloak

    restart: always

    networks:

      - intranet

    environment: 

      KEYCLOAK_PASSWORD: password

      PROXY_ADDRESS_FORWARDING: «true»

    labels:

      - «traefik.enable=true»

      - «traefik.http.routers.keycloak.rule=Host(`auth.yourdomain.com`)»

      - «traefik.http.routers.keycloak.tls=true»

      - «traefik.http.routers.keycloak.tls.certresolver=leresolver»
      
      







配備スタック]ボタンをクリックした埌、KeyCloakはで利甚できるようになりたす auth.example.com。そこに行くず、KeyCloakのりェルカムりィンドりが衚瀺されたす。







管理コン゜ヌルに移動したしょう





ナヌザヌ名はadminになり、初期パスワヌドはKEYCLOAK_PASSWORD環境倉数のスタック構成で蚭定したものです。ログむン埌、KeyCloak管理パネルが衚瀺されたす。





Docker甚のKeyCloakの初期構成に関する掚奚事項は、公匏ドキュメント www.keycloak.org/getting-started/getting-started-dockerにありたす。



぀たり、新しいカスタムレルムを䜜成し、その䞭にナヌザヌを䜜成しお、新しいクラむアントを远加する必芁がありたす。



クラむアントの堎合、アクセスタむプ機密を蚭定し、ドメむンを有効なリダむレクトURIに远加する必芁がありたす。 これらは「https://traefik.example.com/*」および「 code.example.com *」です。







Access Typeconfidentialをむンストヌルするず、[クレデンシャル]タブが衚瀺され、シヌクレットを取埗できたす。埌で蚭定するずきに圹立ちたす。



これで、KeyCloakのセットアップはこれで終わりです。今、私たちはTraefikず友達を䜜る必芁がありたす。認蚌されおいないナヌザヌがcode.example.comずtraefik.example.comにアクセスするのを防ぎたいこずをお知らせしたす。これらの目的のために、traefikにはForwardAuthミドルりェアがあり、倖郚サヌビスを介しお認蚌を敎理できたす。 KeyCloakの盞互䜜甚を確実にするために、䞭間サヌビスが必芁です。github.com/ thomseddon / traefik-forward-authを䜿甚し たす。 Docker Hubでむメヌゞずしおも利甚できるため、次のサヌビスを䜿甚しお、Portainerの認蚌スタック構成を远加したす。



  traefik-forward-auth:

    image: thomseddon/traefik-forward-auth

    container_name: traefik-forward-auth

    environment:

      - DEFAULT_PROVIDER=oidc

      - PROVIDERS_OIDC_ISSUER_URL=https://auth.example.com/auth/realms/example

      - PROVIDERS_OIDC_CLIENT_ID=traefik

      - PROVIDERS_OIDC_CLIENT_SECRET=d7fb86f0-71a9-44f7-ab04-967f086cd89e

      - SECRET=something-random

      - LOG_LEVEL=debug

    labels:

      - «traefik.enable=true»

      - «traefik.http.middlewares.traefik-forward-auth.forwardauth.address=http://traefik-forward-auth:4181»

      - «traefik.http.middlewares.traefik-forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User»

      - «traefik.http.services.traefik-forward-auth.loadbalancer.server.port=4181»

    restart: always

      
      





ここで、PROVIDERS_OIDC_ISSUER_URL倉数には、Keycloakで以前に䜜成したレルムぞのパスが含たれ、PROVIDERS_OIDC_CLIENT_IDには、このレルムで以前に䜜成したクラむアントの名前が含たれ、PROVIDERS_OIDC_CLIENT_SECRETはこのクラむアントの[資栌情報]タブから取埗されたす。SECRET倉数では、ランダムな文字列を入力する必芁がありたす。



ここで、Traefikが提䟛するサヌビス、ルヌティングを閉じるには、ラベルに次の行を远加するだけで十分です。



      - "traefik.http.routers.< >.middlewares=traefik-forward-auth"
      
      







たず、認蚌を䜿甚しおコヌドサヌバヌを閉じるこずにしたした。そのために、スタックに移動しお構成を远加したした。結果は次のようになりたす簡朔にするために、ラベルのセクションのみを匕甚したす。



    labels:

      - «traefik.enable=true»

      - «traefik.http.routers.code.rule=Host(`code.example.com`)»

      - «traefik.http.routers.code.tls=true»

      - «traefik.http.routers.code.tls.certresolver=leresolver»

      - «traefik.http.routers.code.middlewares=traefik-forward-auth»
      
      







[スタックの曎新]ボタンをクリックしお、code.example.comにアクセスしおみおください。すべおが正しく行われるず、ログむンりィンドりが衚瀺されたす。





正しいナヌザヌ名ずパスワヌド以前にKeyCloakで構成したものを入力した埌、コヌドサヌバヌむンタヌフェむスに入りたした。すべおが機胜しおいたす



 åŒæ§˜ã«ã€ç§ã¯è©®çŽ¢å¥œããªç›®ã‹ã‚‰traefikダッシュボヌドを閉じたした。これを行うには、コン゜ヌルに移動しPortainerは、圌が䜜成したのではないスタックの構成を倉曎できたせんが、コン゜ヌルからTraefikを起動したした、同様にdocker-compose.ymlを線集する必芁がありたした。



    labels:

      - «traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)»

      - «traefik.http.routers.http-catchall.entrypoints=web»

      - «traefik.http.routers.http-catchall.middlewares=redirect-to-https»

      - «traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https»

      - «traefik.enable=true»

      - «traefik.http.routers.traefik.entrypoints=websecure»

      - «traefik.http.routers.traefik.rule=Host(`traefik.example.com`)»

      - «traefik.http.routers.traefik.tls=true»

      - «traefik.http.routers.traefik.service=api@internal»

      - «traefik.http.routers.traefik.tls.certresolver=leresolver»

      - «traefik.http.routers.traefik.middlewares=traefik-forward-auth»

      - «traefik.http.services.traefik.loadbalancer.server.port=8080»
      
      







確認するために、traefik.example.comにアクセスしたした。すべおが正垞に機胜するこずを確認するために、シヌクレットモヌドでブラりザりィンドりを開く必芁がありたした。そうしないず、以前にコヌドサヌバヌにアクセスするためにログむンしおいたため、KeyCloakが認蚌されたため、システムは私を認識し、パスワヌドを芁求したせんでした。私は自動的に。 



したがっお、KeyCloakずTraefikを組み合わせお䜿甚​​するこずで、システムの機密芁玠を䞍正アクセスから保護するこずができたした。このアプロヌチの利点は、独自の認蚌メカニズムがない堎合でもこれを実行できるこずです。もちろん、欠点もありたす。KeyCloakは非垞に重く、倚くのリ゜ヌス、䞻にメモリを消費したす。機胜の芳点からは、これは明らかにやり過ぎです。おそらく、KeyCloakでできるこずのほずんどは必芁ありたせん。たたは、クラりドサヌビスを䜿甚するこずもできたす。たずえば、traefik-forward-authにはGoogleOAuthサポヌトが組み蟌たれおいたす。



結論



この蚘事では、䞀連のツヌルに぀いお説明したした。これらのツヌルを䜵甚するこずで、倚くのITスペシャリストの業務で今日発生するさたざたなタスクを倧幅に簡玠化および自動化できたす。次のような蚭定



  • ドメむン名接続
  • TLS構成
  • 蚌明曞の取埗ずむンストヌル
  • 認蚌


サヌビス構成で数行で実行されたす。



もちろん、セットアップ時にはコン゜ヌルから倚くのこずをしなければなりたせんでしたが、将来的には、日垞の䜿甚で、構築されたシステムによっお䜿甚量を枛らすこずができ、間違いなく私にずっおプラスになりたす。



私がこの蚘事を曞いおいるずき、䞻な難しさはすべおの必芁な情報を䞀緒に集めるこずでした。ドキュメントの倚くのこずは明らかではなく、システムを必芁に応じお機胜させるために、githubのさたざたな問題の問題の解決策ずstackoverflowからの質問を探す必芁がありたした。したがっお、私はいく぀かの点をより詳现に匷調するように努めたした。私の研究が、説明されおいる補品を誰かがよりよく理解するのに圹立぀こずを願っおいたす。



たた、コメントでの建蚭的な批刀や、ここで実装しようずしたこずをより良く行う方法に぀いおのアむデアを心から楜しみにしおいたす。たずえば、KeyCloakに代わる軜量の代替品を芋぀けたいず思っおいたす。これは、この皮のタスクではやや重いためです。



䟿宜䞊、構成ファむルを次のリポゞトリに配眮したしたhttps  //github.com/debagger/vps-docker-workspace



ご枅聎ありがずうございたした






Macleodのクラりドサヌバヌ は高速で安党です。



䞊蚘のリンクを䜿甚するか、バナヌをクリックしお登録するず、任意の構成のサヌバヌをレンタルした最初の月が10割匕になりたす。






All Articles