20211124のdockerに関する記事は5件です。

Elixirで作ったSlackアプリをHacobuneでイゴかす (2021/12/14)

2021/12/14(火)の回です。 はじめに Elixirを楽しんでいますか 「ElixirでSlack botを作って楽しむ」と題して、作ったSlackボットアプリをさくらインターネットさんのHacobuneでイゴかしてみます1 What is Hacobune ? Hacobuneは、当社が「インフラを意識しない世界を実現する」をビジョンに開発したPaaS型クラウドサービスです。スタートアップ企業や少人数でのサービスの開発を行うお客さまなど、スモールスタートでの開発に適しています。Hacobuneを利用することで、インフラの構築が不要となり、お客さまはアプリケーションの開発およびアップデートのみに専念することができ、サービスリリースのサイクルを加速させることが可能となります。 (https://www.sakura.ad.jp/information/announcements/2021/08/12/1968207782/) ハイライト Dockerfileをつくればでデプロイできちゃいます ソースコード Dockerfile のガイドを参考にしています。 Dockerfile ARG MIX_ENV="prod" FROM hexpm/elixir:1.12.3-erlang-24.1.4-alpine-3.13.6 as build # install build dependencies RUN apk add --no-cache build-base git python3 curl # prepare build dir WORKDIR /app # install hex + rebar RUN mix local.hex --force && \ mix local.rebar --force # set build ENV ARG MIX_ENV ENV MIX_ENV="${MIX_ENV}" # install mix dependencies COPY mix.exs mix.lock ./ RUN mix deps.get --only $MIX_ENV RUN mkdir config # copy compile-time config files before we compile dependencies # to ensure any relevant config change will trigger the dependencies # to be re-compiled. COPY config/config.exs config/$MIX_ENV.exs config/ RUN mix deps.compile COPY priv priv # note: if your project uses a tool like https://purgecss.com/, # which customizes asset compilation based on what it finds in # your Elixir templates, you will need to move the asset compilation # step down so that `lib` is available. COPY assets assets RUN mix assets.deploy # compile and build the release COPY lib lib RUN mix compile # changes to config/runtime.exs don't require recompiling the code COPY config/runtime.exs config/ # uncomment COPY if rel/ exists # COPY rel rel RUN mix release # start a new build stage so that the final image will only contain # the compiled release and other runtime necessities FROM alpine:3.13.6 AS app RUN apk add --no-cache libstdc++ openssl ncurses-libs ARG MIX_ENV ENV USER="elixir" WORKDIR "/home/${USER}/app" # Creates an unprivileged user to be used exclusively to run the Phoenix app RUN \ addgroup \ -g 1000 \ -S "${USER}" \ && adduser \ -s /bin/sh \ -u 1000 \ -G "${USER}" \ -h "/home/${USER}" \ -D "${USER}" \ && su "${USER}" # Everything from this line onwards will run in the context of the unprivileged user. USER "${USER}" COPY --from=build --chown="${USER}":"${USER}" /app/_build/"${MIX_ENV}"/rel/slack_doorman ./ ENTRYPOINT ["bin/slack_doorman"] # Usage: # * build: sudo docker image build -t elixir/slack_doorman . # * shell: sudo docker container run --rm -it --entrypoint "" -p 127.0.0.1:4000:4000 elixir/slack_doorman sh # * run: sudo docker container run --rm -it -p 127.0.0.1:4000:4000 --name my_app elixir/slack_doorman # * exec: sudo docker container exec -it slack_doorman sh # * logs: sudo docker container logs --follow --tail 100 slack_doorman CMD ["start"] たぶん に該当することをしているのだとおもいます。 Hacobuneへのデプロイ 公式ドキュメントです。 事前準備 デプロイ方法は次の3種類とのことです。 ①パブリックのDockerイメージを使用 ②プライベートのDockerイメージを使用 ③GitHubレポジトリをHacobuneに接続して使用(Dockerfileが必須) ①パブリックのDockerイメージを使用を説明します。 dockerhubを使う例で書きます。 $ docker build -t slack_doorman . $ docker tag slack_doorman <your_username>/slack_doorman $ docker login $ docker push torifukukaiou/slack_doorman Hacobune に従ってすすめるとよいです。 こんな感じです。 ポートは4000です。 外部公開は有効にします(SlackからHTTP Postしてもらうため) あとは環境変数の設定を行ってください。 先述のslack_doormanでは次の3つの環境変数を設定する必要があります。 SLACK_SIGNING_SECRET SLACK_BOT_TOKEN SECRET_KEY_BASE mix phx.gen.secret で作成 たったこれだけで、しかもいまなら無料!!! で、Slackアプリをイゴかすことができます $\huge{Thank\ you\ very\ much!!!}$ Wrapping up Enjoy docker!!! Enjoy Slack!!! Enjoy Hacobune!!! 人間五十年 下天の内をくらぶれば、夢幻のごとくなり。一度生を得て滅せぬ者のあるべきか 時は今あめが下知る五月かな 露と落ち露と消えにしわが身かななにはのことも夢のまた夢 親思ふ心にまさる親心 今日のおとづれ何と聞くらん おまけ Elixirを始めてみよう! とおもった、あなたに参考情報(クリスマス?プレゼント)を贈ります。 思い立ったが吉日です!!! オススメの書籍 プログラミングElixir(第2版) -- オーム社 Elixir実践ガイド -- インプレス アルケミスト 夢を旅した少年 -- 角川文庫 Webアプリケーションを楽しむなら Phoenix IoTを楽しむなら Nerves AIを楽しむなら Nx + Livebook コミュニティ elixir.jp Slack workspaceに参加してみてください マヂ、やさしい人ばっかりのコミュニティ あなたの困ったをきっと解決してくれるでしょう NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します たくさんのコミュニティがあります @kn339264 さん作の素敵な資料をご紹介します Elixirコミュニティ の歩き方〜国内オンライン編〜 @piacerex さん作 「動かしてみます」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針2イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg=  ↩ 大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。 ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

メモ〜Docker-composeとは

Docker-composeとは 複数のコンテナからなるサービスを効率的に作成するための設定ファイル、およびそれを実行するためのコマンド。 一つのサービスは複数のコンテナからなる場合がほとんどであり、例えばWordPressでブログを運用する場合にはWordPress用と記事を保管するMySQLようで最低でも2つのコンテナが必要になる。 この場合、本来であれば コンテナを収容するDockerネットワークを作成する。 WordPressとDockerそれぞれのコンテナを作成する。 両者を作成済みのネットワークに追加する。 WordPressとMySQLで使用する環境変数を設定する。 などの作業が必要になり、その都度ターミナルコマンドを発行することになる。 しかしこの手順をdocker-compose.ymlというファイルに記述して実行することで一連の処理が自動で行われるので、サービスを効率的に構築することができる。 Docker-composeを利用したサービス構築の手順 Linux用のdocker-composeのインストール docker-compose.ymlの作成 docker-compose.ymlの実行 Linux用のdockercomposeのインストール windows, macに関してはdocker desktopをインストールした時点でdocker-composeが実行可能になりますが、linuxに関してだけは別途でインストールが必要です。 docker-composeのインストール % sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # curlは指定したurlにアクセスするためのコマンド # 書式はcurl url -o アウトプットの出力先 # -Lはリダイレクトがある場合にそちらに遷移するためのオプション # 上記例では、指定したurlもしくはそのリダイレクト先からdocker-composeのファイルをダウンロードして # /usr/local/bin/docker-composeに保存している 実行権限の付与 % sudo chmod +x /usr/local/bin/docker-compose # chmodはコマンドの権限を操作するためのコマンド # 上記例では全てのユーザーにdocker-composeの実行権限を付与(+x)している docker-compose.ymlの作成・実行 version: '3.3' services: httpd: image: httpd:2.4.43 ports: - "80:80" 上記のようにファイルを作成し % docker-compose up [-d] # -dをつけるとバックグラウンドで実行される と唱えるとhttpd:2.3.43というイメージをもとにしたコンテナ(apacheサーバー)が作成され、ホストOSの80番ポートへのアクセスがapacheの80番ポートに転送されるようになる docker-compose.ymlの解説 docker-compose.ymlとは、ネットワークに所属するコンテナの設定を記述していくためのファイル 。 このファイル内では一つ一つのコンテナをサービスと呼んでおり、 services: サービス名1: 項目名1:値1 項目名2:値2 項目名3:値3 .... サービス名2: 項目名1:値1 項目名2:値2 項目名3:値3 .... としていくことでネットワーク内に作成するサービスが定義される。 なお、services:とサービス名、サービス名と項目名の間にはそれぞれ半角スペースが必要。 1行目 # docker-compose.ymlのフォーマットのバージョン指定 version: '3.3' # 現時点では3.3が安定版とのこと 2行目 services: # この部分に書かれたものがサービスの内容になる 3行目 # サービス名の定義 # 分かればなんでも良い httpd: # もとにするイメージの指定 image: httpd:2.4.43 # ポート転送の設定 ports: - "80:80" このファイルを実行した状態でホストPCからlocalhost/にアクセスするとIt Worksと表示される(80番ポートにアクセスするとIt Worksと表示されるというのは、apacheのデフォルト設定)。 なお、この際に作成されるネットワーク名は docker-compose.ymlのディレクトリ名_サービス名_数字 になる。 おまけ〜imageの代わりにDockerfileを指定する 上記の例ではdocker-compose.ymlの中でベースとなるdockerイメージを指定したが、イメージの代わりにDockerfileを指定することも可能。 以下のようにファイルを書き換える(コメントアウトしている部分が削除箇所)。 version: '3.3' services: httpd: # image: httpd:2.4.43 # 以下の2行を追加 build: context: "Dockerファイルのディレクトリへの相対パス" # 同じディレクトリなら.でOK ports: - "80:80" Dockerfile内でベースイメージを指定しているはずなので、そこを経由してベースイメージの情報が取得される。 おまけその2〜複数のサービスの連携 同一ネットワーク内で複数のサービスを起動させる場合には以下のように記述する。 version: '3' services: mysql: image: mysql:8.0.20 platform: linux/x86_64 restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - mysql image: wordpress:php7.4-apache platform: linux/x86_64 ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress 以下、個別解説です。 プラットフォームの指定 platform: linux/x86_64 dockerイメージはプラットフォームに合わせて複数用意されていることが多く、基本的にはホストOSに合わせたものがダウンロードされる。 しかしdockerイメージの中にはM1Mac対応版(=arm64版)が存在しないものも多い。 そのような場合には以下のようなエラーが出るので、platformとしてlinux/x86_64版を指定する。 no matching manifest for linux/arm64/v8 in the manifest list entries x86_64というのはIntelMac用のバージョンだが、Docker上であれば問題なく動作する。 restartオプション restart: always # ホストOSやデーモンの起動時にサーバーが自動で起動される 環境変数 environment: 変数名: 値 依存関係の規定 depends_on: - mysql mysqlの後にwordpressサービスの作成が開始されるように指定している。 WORDPRESS_DB_HOST: mysql:3306 wordpressのDBホストとして、mysqlサービスの3306番ポートを指定している。 おまけその3〜volumesの作成 上記の例ではDBのデータがコンテナ内に保存されるようになっているが、この方法ではコンテナを削除した際にデータがすべて消えてしまう。 しかし、docker-compose.ymlの中にvolumesという項目を作成し、そのパスとしてホストOSのディレクトリを指定することでDBの内容をホストOSに保存することができるようになる。 version: '3' services: mysql: image: mysql:8.0.20 platform: linux/x86_64 # 以下の2行を追加 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - mysql image: wordpress:php7.4-apache platform: linux/x86_64 ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress # 以下の2行を追加 volumes: db_data: まず volumes: db_data: でdb_dataという名前のvolumesを作成し volumes: - db_data:/var/lib/mysql でdb_dataというvolumesのパスを指定している。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

メモ〜Dockerfileとは

概要 Dockerイメージだけでは不足している情報をコンテナに付け足すための設定ファイル。 コンテナ上でのプロセス作成を効率化するために用いられる。 例えば「dockerを用いてCentOSベースのコンテナを作り、その上にapacheサーバーを立ててphpでhogeと表示する」ことを考えた場合、Dockerイメージに含まれているのはCentOSの情報のみであり、apacheとphpのインストールやサーバーの起動、phpファイルのコンテナへのコピーなどといった作業は手動で行うことになる。 しかし、これらの作業の手順を記したDockerfileを作成しておき、そこからコンテナを作成することで、上記の作業を全て自動で実行することができる。 Dockerファイルを用いたコンテナ作成の手順 Dockerファイルの作成 必要なファイル(今回でいえばhogeと出力するためのphpファイル)の用意 DockerファイルからDockerイメージを作成 コンテナの作成 Dockerファイルの作成〜具体例 Dockerfile FROM centos:centos7 RUN yum -y install httpd php COPY test.php /var/www/html/ CMD ["/usr/sbin/httpsd","-DFOREGROUND"] =========注意============= Dockerファイルのファイル名はDockerファイルとしてください。 Dockerファイルはホームディレクトリ以外に作成してください。通っているパスの関係でdockerイメージの作成(後述)に支障が出る場合があります。 =========注意終わり========= Dockerファイルの作成〜具体例の解説 1行目 FROM centos:centos7 centos:centos7というdockerイメージをベースにしてコンテナを作ることを宣言。 2行目 RUN yum -y install httpd php apacheとphpのインストール。 FROMで指定したイメージに対して行う作業にはRUNコマンドをつける必要がある。 3行目 COPY test.php /var/www/html/ test.phpというファイル(hogeと表示するためのファイル)を/var/www/html/というディレクトリにコピーする。 /var/www/html/はdockerコンテナにデフォルトで用意されているファイルの一つ。 apacheの初期設定ではこの/var/www/html/以下に置かれたファイルがWebサイト上で表示されるようになっている。 4行目 CMD ["/usr/sbin/httpsd","-DFOREGROUND"] コマンドの起動。 `["実行するコマンド", "引数"]とすることで、指定した形式でコマンドが実行される。 今回は作成したapacheサーバーをバックグラウンドで実行している。 Dockerファイルの作成補足〜RUN, COPYとCMDの違い RUNやCOPYなどのコマンドを直接Dockerfileに記述する場合とCMDコマンドの引数として指定する場合では、コマンドの実行タイミングに違いが出る。 直接記述したコマンドに関してはDockerファイルからDockerイメージを作成する際に実行されるのに対し、CMDの引数に指定したコマンドに関してはDockerコンテナ作成時に実行される。 上記の例ではベースとなったdockerイメージに追加してほしい要素、すなわちapacheのインストールなどはコマンドを直接記述してイメージ作成時に実行されるようにし、サーバーの起動に関してはコンテナ作成時に実行されるようにCMDコマンドで指定している。 Dockerイメージの作成 Dockerファイルが存在するディレクトリにて以下のコマンドを入力する。 % docker build -t dockerイメージの名前:タグ名 . 末尾のコロンはDockerファイルのパス。 タグ名は省略可能(省略した場合はlatestになる)。 Dockerファイル関連のコマンド達 # ベースイメージを指定 # 公式 FROM イメージ名:タグ名 # 例 FROM centos:centos7 # ベースイメージに対するインストール # 公式 RUN -y install xxx # 例 RUN -y install httpd php # -yをつけることで、ダウンロードファイル容量確認後の処理を継続するかどうかの選択をスキップすることができる # ここを-tにしてしまうとyes/no選択の部分で処理が中断してしまうので、必ず"-y"をつける # ファイルのコピー # 公式 COPY ファイル名 コピー先のディレクトリ # 例 COPY test.php /var/www/html/ # ファイルの追加 # 公式 ADD コピー元のパス コピー先のイメージのパス # 例 ADD https://wwww.xxx.com /tmp # COPYとは異なりURLの指定が可能。また、圧縮ファイルの展開も自動で行われる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【随時更新】メモ〜Dockerとコンテナ【自分用】

コンテナとは OSの中に別のOSを作成する技術の一つ。 似たような概念として仮想化があげられる。 仮想化とコンテナの違い 仮想化ではホストOS上で仮想化ソフトを起動し、その上に立てられたゲストOSの中でプロセスが起動する。 この際、ライブラリ・コマンド・カーネルなどは全てゲストOS上に専用のものが作成され、プロセスからはそちらが参照される。 一方コンテナにおいてはライブラリやコマンドは都度作成されるものの、カーネルに関してはホストOSのものが参照される。 仮想化とコンテナを比較すると前者はホストOS>仮想化マシン>ゲストOS>プロセスという4段階になっているのに対し、後者ではホストOS>ライブラリやコマンド>プロセスという3段階となっている。 すなわち仮想化マシンを挟まないために処理が早くなるという特徴がある。 ライブラリ・コマンド・カーネルとは コマンドとはlsやcdなどのターミナルコマンドのことを指す。 ライブラリはプロセスが起動するためのライブラリ群で、MacであればLibraryディレクトリに格納されている。 カーネルはコンピュータの基本的な操作を行うための機能を格納したライブラリ群であり(システムコールと呼ばれる)、コマンドに応じて呼び出され処理を行う。 つまり、プロセスが起動した際にはまずコマンドやライブラリが呼び出され、最終的にはシステムコールが実行されることになる。 Dockerとは コンテナを簡単に作成するための機能の一つ。 通常であればコンテナの作成のためにはそのコンテナで使用されるコマンドやライブラリを定義・作成する必要がある。 Dockerと呼ばれるツールをインストールしDockerコマンドを使うことで、コンテナの作成に必要なコマンド・ライブラリの導入を簡単に行うことができる。 DockerHubとは コンテナを作成するのに必要なコマンドやライブラリのセット(OSイメージ)が保管されているリポジトリのこと。 例えばLinuxOSであればCentOSやDebianなどのディストリビューションごとにOSイメージが用意されている。 Dockerfileとは DockerHubから取り寄せたDockerイメージに追加の情報を付与するためのファイル。 例えばDocker上でCenstOSのコンテナを作りその中でphpアプリを走らせることを考えた場合、本来であれば以下の作業が必要になる。 CentOSのDockerイメージをもとにコンテナを作成する コンテナの中に入る サーバー(apacheなど)をインストールする phpをインストールする サーバーを起動する 適当なphpファイルを作ってコンテナ上にコピーする 8080番ポートにアクセスして動作確認をする つまり、Dockerイメージにはコンテナの情報しかないため、実際の開発の際には追加で様々なプログラムが必要になりその都度ターミナルを走らせることになる。 Dockerファイルはこれらの一連のコマンドをファイルに記録したものであり、これをイメージ化してそれをもとにコンテナを作成することで必要な手順が全て自動で実行されるようになる。 詳細は以下。 Dockerコマンド達 dockerイメージのpull % docker pull centos7:centos7 コンテナの作成 % docker run -it --name centos7 centos:centos7 # M1Macで実行するときには以下のようにプラットフォームの指定が必要 % docker run -it -d --platform=linux/amd64 --name centos7 centos:centos7 # 必要なdockerイメージがpullされていなければ自動ダウンロードが入る # --name centosは省略可能(コンテナ名をつけているだけ) # -dはコンテナをデーモン(バックグラウンド)で起動するためのオプション(省略可能) # 公式は docker run [オプション] --name コンテナ名 [イメージ名][タグ名] [コンテナ起動後に実行するコマンド] コンテナに入る % docker exec -it centos7 /bin/bash # 成功するとプロンプトが以下のように変化する [root@8d8ca2646e59 /]# # @以下はコンテナID "/"はディレクトリ、"#"がプロンプト 起動しているコンテナの確認 % docker ps # 結果 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d8ca2646e59 centos:centos7 "/bin/bash" 50 minutes ago Up 50 minutes centos7 # -aオプションをつけることで停止中のコンテナも確認できるようになる CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS        NAMES 8d8ca2646e59 centos:centos7 "/bin/bash" 54 minutes ago Exited (137) 19 seconds ago centos7 コンテナの停止 % docker stop コンテナ名またはID コンテナの再開 % docker start コンテナ名またはID dockerイメージの作成 % docker commit コンテナ名 イメージ名 >> sha256:33fd144ef6171206b545f23cafe6bb7c877df2386618c53e2e6011e0214b6284 dockerイメージの一覧表示 % docker images >> REPOSITORY TAG IMAGE ID CREATED SIZE test1 latest 33fd144ef617 11 seconds ago 204MB コンテナの削除 % docker rm コンテナ名もしくはID Dockerイメージの作成・削除 # DockerfileというファイルからDockerファイルが作られる % docker build -t dockerイメージ名 dockerイメージのパス # イメージの削除 % docker rmi イメージ名
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Bolt for Pythonを利用して作ったSlackアプリをHacobuneでイゴかす (2021/12/13)

2021/12/13(月)の回です。 前の日は、@kaizen_nagoyaさんによる『あなたもdocker, 私もdockerから5ヶ月。』でした。 私は $\huge{どっかーら}$ やってこうかしら。 そうだ! Slackアプリをイゴかしてみよう1!!! はじめに dockerを楽しんでいますか Slackを楽しんでいますか Hacobuneを楽しんでいますか 「Bolt 入門ガイド(Bolt for Python)」はとてもすぐれたガイドです。 こちらを一周することで、Slackアプリの制作を完全に理解2できます。 さてどこでイゴかそう1かとお悩みの方はいらっしゃいませんか そんな、あなたに、さくらインターネットさんのHacobuneをご紹介します。 2021/11/24 現在、オープンβ版とのことで無料で使わせていただけます! What is Hacobune ? Hacobuneは、当社が「インフラを意識しない世界を実現する」をビジョンに開発したPaaS型クラウドサービスです。スタートアップ企業や少人数でのサービスの開発を行うお客さまなど、スモールスタートでの開発に適しています。Hacobuneを利用することで、インフラの構築が不要となり、お客さまはアプリケーションの開発およびアップデートのみに専念することができ、サービスリリースのサイクルを加速させることが可能となります。 (https://www.sakura.ad.jp/information/announcements/2021/08/12/1968207782/) ハイライト Dockerfileをつくればでデプロイできちゃいます 「Bolt 入門ガイド(Bolt for Python)」をまだやっていない方は一周やってみてください。 タイポレベルですが日本語訳の誤りは私がプルリク出して、マージしてもらっていますから、な〜んにも迷うところはありません。 私が出して取り込んでもらったプルリク https://github.com/slackapi/bolt-python/pull/507 https://github.com/slackapi/bolt-python/pull/508 https://github.com/slackapi/bolt-python/pull/519 マージされたとおもったら即座に日本語サイトの内容が更新されていたことに感動しました 世界を相手にしているスピード感はさすがだと感服いたしました。 用意するもの ここからは用意するものを書いておきます。 app.py 「Bolt 入門ガイド(Bolt for Python)」に記載のソースコードそのままです。 あなたのアプリケーションをご用意ください。 app.py import os from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler # ボットトークンと署名シークレットを使ってアプリを初期化します app = App(token=os.environ.get("SLACK_BOT_TOKEN")) # 'hello' を含むメッセージをリッスンします @app.message("hello") def message_hello(message, say): # イベントがトリガーされたチャンネルへ say() でメッセージを送信します say( blocks=[ { "type": "section", "text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"}, "accessory": { "type": "button", "text": {"type": "plain_text", "text":"Click Me"}, "action_id": "button_click" } } ], text=f"Hey there <@{message['user']}>!" ) @app.action("button_click") def action_button_click(body, ack, say): # アクションを確認したことを即時で応答します ack() # チャンネルにメッセージを投稿します say(f"<@{body['user']['id']}> clicked the button") # アプリを起動します if __name__ == "__main__": SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start() Slackアプリ ガイドの通りに、Slackアプリの各種設定を行っておいてください。 そもそもこれをきちんと設定しないと、SLACK_APP_TOKENやSLACK_BOT_TOKENをもらえませんからね〜 Dockerfile Dockerfile FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [ "python", "./app.py" ] に記載の通りそのままです。 requirements.txt requirements.txt slack_bolt [Hacobune(https://www.sakura.ad.jp/information/announcements/2021/08/12/1968207782/)へのデプロイ さ〜ていよいよお待ちかね、デプロイの時間ですよ。 Deploy Time! この記事のハイライトです。 公式ドキュメントです。 事前準備 デプロイ方法は次の3種類とのことです。 ①パブリックのDockerイメージを使用 ②プライベートのDockerイメージを使用 ③GitHubレポジトリをHacobuneに接続して使用(Dockerfileが必須) ①パブリックのDockerイメージを使用を説明します。 dockerhubを使う例で書きます。 $ docker build -t first-bolt-app . $ docker tag first-bolt-app <your_username>/first-bolt-app $ docker login $ docker push torifukukaiou/first-bolt-app Hacobune に従ってすすめるとよいです。 こんな感じです。 ソケットモードを利用する場合、外部公開はOFFでよく、アプリケーションのポートは適当でよいです。 あとは環境変数の設定を行ってください。 先述のapp.pyでは次の2つの環境変数を設定する必要があります。 SLACK_BOT_TOKEN SLACK_APP_TOKEN たったこれだけで、しかもいまなら無料!!! で、Slackアプリをイゴかすことができます $\huge{Thank\ you\ very\ much!!!}$ Wrapping up Enjoy docker!!! Enjoy Slack!!! Enjoy Hacobune!!! 「動かそう」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針3イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg=  ↩ 例の完全に理解した: https://twitter.com/ito_yusaku/status/1042604780718157824 ↩ 大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。 ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む