20201011のdockerに関する記事は27件です。

【Next.js】Next プロジェクトを Dockernize する

k8s 環境に Next.js プロジェクトをデプロイすることになったので、いろいろ書いてみた。
今回は npm ではなく、yarn を使用している。

環境

  • ubuntu 20.04.1
  • Docker 19.03.13
  • Next.js 9.5.4

また、npm スクリプトはこんな感じ。

{
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start"
  }
}

Docker 上で開発を行う

Docker 内の Node で開発を行う場合。ローカルの Node のバージョンを気にせず開発は行えるが、ローカルのエディタでは型定義などを読み込めず面倒ではある。

  • Dockerfile
    開発用なので、ベースイメージは通常のものにした。
FROM node:12.18.4

WORKDIR /app
# npmパッケージのインストールに必要なファイルをコピー
COPY package.json yarn.lock ./
# npmを使用している場合は、以下のようにする
# COPY package*.json ./
RUN yarn install
EXPOSE 3000
CMD ["yarn", "dev"]
  • Docker build
docker build --rm -t next_dev:latest -f path/to/Dockerfile
  • Docker run
    プロジェクトのフォルダで実行する。(-v の引数にプロジェクトフォルダを絶対パスで指定すれば OK)
docker run -p 3000:3000 -v $PWD:/app -it next_dev:latest

Production 向けにビルドする

ここからは、本番向けにイメージを作成する。

とりあえず作ってみる

いつも通り作ってみる。本番向けなので alpine イメージを使う。
ビルドコンテキスト(Docker build 時に Docker デーモンへ送信されるファイルの場所)はプロジェクトフォルダ。

FROM node:12.18.4-alpine

WORKDIR /app
# ローカルのソースを全てコピー
COPY . /app
# npmパッケージのインストール、production向けにビルド
RUN yarn install && NODE_ENV=production yarn build
EXPOSE 3000

CMD ["yarn", "start"]
  • ビルド&実行

ビルドにはプロジェクトフォルダで以下のコマンドを実行。

$ docker build --rm -t next_prod:latest -f path/to/Dockerfile

デーモンとして動かすには以下のコマンドを実行。

$ docker run -d -p 3000:3000 next_prod:latest

これでサーバー自体は動くが、このままでは Docker イメージのサイズが 900MB あるので、もう少しスリムにしたいところ。
(もちろん、イメージのサイズは Next.js プロジェクトの中身による)

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
next_prod         latest              d211c6246173        6 minutes ago       899MB

multi stage build する

multi stage build により、Docker イメージの容量を削減する。

  • Dockerfile
FROM node:12.18.4-alpine AS base

# パッケージのインストールを行う
WORKDIR /base
COPY . .
RUN yarn install

# Production向けビルドを行う
FROM base AS build
WORKDIR /build
COPY --from=base /base ./
RUN NODE_ENV=production yarn build

# ビルド成果物をコピーし、サーバーを起動
FROM node:12.18.4-alpine AS production
ENV NODE_ENV=production
WORKDIR /app
# ビルド成果物のみをコピーしてやる
COPY --from=build /build/package.json /build/yarn.lock ./
COPY --from=build /build/.next ./.next
COPY --from=build /build/public ./public
# node_modules以下がこのイメージにないので、next.jsのサーバーを動かすために必要
RUN yarn add next

EXPOSE 3000
CMD ["yarn", "start"]
  • ビルド&実行
$ docker build --rm -t next_prod:msb -f path/to/Dockerfile
$ docker run -d -p 3000:3000 next_prod:mdb

これにより、イメージはかなりスリムになった。各イメージの容量はこんな感じ。

$ docker images
REPOSITORY          TAG           SIZE
next_prod           msb           574MB    # production multi stage build
next_prod           latest        899MB    # production build
next_dev            latest        1.44GB   # dev

おわりに

DockernizeなのかDockerizeなのかよくわからない。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPバージョンアップ時にphp7compatibilityを使ってコード互換性を確認する

PHPバージョンアップ時にphp7compatibilityを使うと互換性を簡単にチェックする事ができます。
php7compatibilityを使う時、環境セットアップに多少準備が必要になるのですが、docker環境なら、すでに作成済みのdockerイメージが公開されているので、だいぶお手軽に環境を構築して確認する事ができます。

例えば以下はPHP7.1に対しての互換性を確認する際のコマンド例。
--ignore=vendorでvender配下をチェックから除外する事が出来ます。

docker run --rm -v $(pwd):/app vfac/php7compatibility 7.1 --extensions=php --ignore=vendor .

参考

vfalies/php7compatibility

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu上のZabbixで同ホストのDockerコンテナとSystemDプロセスを監視する。

環境

もの Version
Ubuntu 20.04 LTS
Zabbix 5.0.4
zabbix-agent2 不明,now 1:5.0.4-1+focal amd64
Docker 19.03.12
MariaDb Ver 8.0.21-0ubuntu0.20.04.4 for Linux on x86_64 ((Ubuntu))

Zabbix5のインストール

https://www.zabbix.com/jp/download?zabbix=5.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=nginx

こちらの手順でインストール

Zabbix-Agent2のインストール

apt install zabbix-agent2

zabbix-agentの停止

systemctl stop zabbix-agent.service
systemctl disable zabbix-agent.service

Docker sockファイルを読み取れるようにする

zabbixユーザーをdockerグループに追加する。

gpasswd -a zabbix docker

参考:Zabbixエージェント2を使用したDockerの監視


ここまでで、Zabbix-Web-Server --> Zabbix-Server --> Zabbix-Agent2の疎通が出来ているはず。

Zabbix Agent2によるSystemd Service監視について

https://tech-lab.sios.jp/archives/18664

Zabbix Agent2 Discovery

以下の公式参照
7 DISCOVERY OF SYSTEMD SERVICES

Zabbix Agent2 Metrics

以下の公式参照

ZABBIX AGENT 2 / ITEM KEYS

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerでのcomposerのインストールエラーの対処

発生したエラー

$ docker-compose up -d
 ...
ERROR: Service 'web' failed to build: The command '/bin/sh -c php composer-setup.php' returned a non-zero code: 1

修正前のDockerFile

# install composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"

修正後のDockerFile

# install composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Elasticsearch > dockerで構築、Twitter情報を取得しKibanaで可視化

2020/10/11

以下を目指します。
- Dockerで構築
- Elasticsearch: 3ノードで起動
- Logstash: Twitterデータ取得
- Kibana: Twitterデータ可視化

スクリーンショット 2020-10-11 23.22.20.png

最終形のソースは以下に保存しています。

https://github.com/sugasaki/elasticsearch-multinode-docker

準備

以下に沿って進みます

Install Elasticsearch with Docker | Elasticsearch Reference [7.9] | Elastic

メモリの割り当て

Make sure Docker Engine is allotted at least 4GiB of memory. In Docker Desktop, you configure resource usage on the Advanced tab in Preference (macOS) or Settings (Windows).

DockerEngineに少なくとも4GiBのメモリが割り当てられていることを確認してください。
Docker Desktopでは、[設定](macOS)または[設定](Windows)の[詳細設定]タブでリソースの使用を構成します。

割当メモリが少ないとノードの起動に失敗したりします。

スクリーンショット 2020-10-11 13.12.50.png

Elasticsearch

シングルノードの開始

他にも、いろんな紹介記事があるので、割愛します。

dockerでElasticSearch立ち上げとお試し操作 - Qiita

DockerのKibana日本語化 - Qiita

マルチノードの開始

DockerComposeを使用して3ノードのクラスター稼働します。

1. docker-compose.ymlの作成

作業用フォルダを用意し直下にdocker-compose.ymlを作成します。

3ノードのElasticsearchクラスターを起動します。
ノードes01はlocalhost:9200でリッスンし、es02とes03はDockerネットワークを介してes01と通信します。

docker-compose.yml
version: "2.2"
services:
  # 1st node port=9200
  elasticsearch01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
    healthcheck:
      interval: 20s
      retries: 10
      test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"'

  # 2nd node
  elasticsearch02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data02:/usr/share/elasticsearch/data
    networks:
      - elastic

  # 3rd node
  elasticsearch03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  elasticsearch_multinode_data01:
    driver: local
  elasticsearch_multinode_data02:
    driver: local
  elasticsearch_multinode_data03:
    driver: local

networks:
  elastic:
    driver: bridge

※この構成では、ポート9200が公開され、パブリックにアクセス可能であることに注意してください。
ポート9200を公開せず、代わりにリバースプロキシを使用する場合は、docker-compose.ymlファイルで9200:9200を127.0.0.1:9200:9200に置き換えます。 Elasticsearchは、ホストマシン自体からのみアクセスできるようになります。

※ ボリュームelasticsearch_multinode_data01〜03は再起動後も保持されます。
それらがまだ存在しない場合は、クラスターを起動したときにdocker-composeによって作成されます。

起動

elasticsearch起動

docker-compose up

稼働確認

ヘルスチェック

$ curl -X GET "localhost:9200/_cat/health?v&pretty"

epoch      timestamp cluster           status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1602390892 04:34:52  es-docker-cluster green           3         3      0   0    0    0        0             0                  -                100.0%

各ノードのステータス確認

$ curl -X GET "localhost:9200/_cat/nodes?v&pretty"

ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.19.0.4           37          63  47    2.44    1.47     1.18 dilmrt    -      es03
172.19.0.3           18          63  46    2.44    1.47     1.18 dilmrt    *      es01
172.19.0.2           24          63  48    2.44    1.47     1.18 dilmrt    -      es02

ボリュームが作成されたことを確認

$ docker volume ls

DRIVER              VOLUME NAME
local               docker_elasticsearch_multinode_data01
local               docker_elasticsearch_multinode_data02
local               docker_elasticsearch_multinode_data03

data01の詳細確認

$ docker volume inspect docker_elasticsearch_multinode_data01

[
    {
        "CreatedAt": "2020-10-11T04:20:26Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "docker",
            "com.docker.compose.version": "1.27.4",
            "com.docker.compose.volume": "elasticsearch_multinode_data01"
        },
        "Mountpoint": "/var/lib/docker/volumes/docker_elasticsearch_multinode_data01/_data",
        "Name": "docker_elasticsearch_multinode_data01",
        "Options": null,
        "Scope": "local"
    }
]

さらに、ボリュームの中を確認

ターミナルを立ち上げて、以下のコマンドでdockerの中に入って確認する

$ docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

lsコマンドで確認

/ # ls -ll /var/lib/docker/volumes/
total 44
drwxr-xr-x    3 root     root          4096 Oct 11 04:20 docker_elasticsearch_multinode_data01
drwxr-xr-x    3 root     root          4096 Oct 11 04:20 docker_elasticsearch_multinode_data02
drwxr-xr-x    3 root     root          4096 Oct 11 04:20 docker_elasticsearch_multinode_data03
-rw-------    1 root     root         65536 Oct 11 04:20 metadata.db

満足したらexitコマンドで終了

参考

データの作成

customerというIndexを作成しデータ投入して確認します。
途中でElasticsearchを終了した後、再実行してデータが永続化されているかも確認します。

index 作成

curl -X PUT "localhost:9200/customer?pretty&pretty"

確認

$ curl -X GET "localhost:9200/_cat/indices?v&pretty"

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   customer FIT3eS3YSR2UEE0np3BnwA   1   1          0            0       416b           208b

データ投入

_id を1指定でデータを投入します

以下をひとまとめで実行します
curl --include -XPOST "http://localhost:9200/customer/_doc/1?pretty" \
-H 'Content-Type: application/json' \
-d '{
  "name": "John Doe",
  "message": "The night was young, and so was he. But the night was sweet, and he was sour."
}'

確認

$ curl -X GET 'localhost:9200/customer/_doc/1?pretty'

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe",
    "message" : "The night was young, and so was he. But the night was sweet, and he was sour."
  }
}

データの永続化確認

Elasticsearchを終了して再度実行します。

$ docker-compose down
$ docker-compose up

データの永続化確認

$ curl -X GET "localhost:9200/_cat/indices?v&pretty"

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   customer oD3E_VXqSWy7I0F1NSIlyQ   1   1          1            0      9.6kb          4.8kb


$ curl -X GET 'localhost:9200/customer/_doc/1?pretty'

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe",
    "message" : "The night was young, and so was he. But the night was sweet, and he was sour."
  }
}

kibanaの追加

参考: Install Kibana with Docker | Kibana Guide [7.9] | Elastic

設定追加

docker-compose.ymlのVolumesセクションの上らへんに以下を追加します。

docker-compose.yml
  # kibana
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://es01:9200 # container_nameを参照する
      - "I18N_LOCALE=ja-JP" # 日本語表示にする
    depends_on:
      - elasticsearch01
      - elasticsearch02
      - elasticsearch03
    networks:
      - elastic
    healthcheck:
      interval: 10s
      retries: 20
      test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status
    restart: always    

environmentに日本語かの設定も追加しています。

参考:DockerのKibana日本語化 - Qiita

実行

$ docker-compose up

確認

以下へアクセスする
http://localhost:5601/

ブラウザでKibana画面が表示されます

スクリーンショット 2020-10-11 14.35.45.png

確認

kibanaメニュー > Management > Stack管理

データメニューからインデックス管理を選択します。

先ほど作成したcustomerインデックスが表示されていると思います。

スクリーンショット 2020-10-11 14.42.52.png

ひとしきり満足したらElasticsearchを終了してLogstashに移ります。

Logstash

参考: Running Logstash on Docker | Logstash Reference [7.9] | Elastic

設定追加

docker-compose.ymlの、Kibanaの設定の後ろ、Volumesセクションの上らへんに以下を追加します。

docker-compose.yml
  # logstash
  logstash:
    image: docker.elastic.co/logstash/logstash:7.9.2
    container_name: logstash
    networks:
      - elastic
    depends_on:
      - elasticsearch01
      - elasticsearch02
      - elasticsearch03
    restart: always

実行

$ docker-compose up

確認

起動しているか確認してみる

$ docker ps

CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS                    PORTS                              NAMES
072d509e37f0        docker.elastic.co/kibana/kibana:7.9.2                 "/usr/local/bin/dumb…"   16 minutes ago      Up 16 minutes (healthy)   0.0.0.0:5601->5601/tcp             kibana
7bd68ec00995        docker.elastic.co/logstash/logstash:7.9.2             "/usr/local/bin/dock…"   16 minutes ago      Up 16 minutes             5044/tcp, 9600/tcp                 logstash
7bff0bddb7e1        docker.elastic.co/elasticsearch/elasticsearch:7.9.2   "/tini -- /usr/local…"   16 minutes ago      Up 16 minutes             9200/tcp, 9300/tcp                 es02
e32fcf67c1c3        docker.elastic.co/elasticsearch/elasticsearch:7.9.2   "/tini -- /usr/local…"   16 minutes ago      Up 16 minutes             9200/tcp, 9300/tcp                 es03
60f489bf0dc8        docker.elastic.co/elasticsearch/elasticsearch:7.9.2   "/tini -- /usr/local…"   16 minutes ago      Up 16 minutes (healthy)   0.0.0.0:9200->9200/tcp, 9300/tcp   es01

Twitter開発者登録

Twitter APIの開発者登録がまだの人は以下で登録

https://developer.twitter.com/en/apps/

以下を参考にして登録しました。

2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説 | 新宿のホームページ制作会社 ITTI(イッティ)

以下からアプリを追加し、consumer_key等を控えます

Twitter Developers

Logstash設定追加

フォルダ構成

以下のようなフォルダ構成になるように進めていきます。

$ tree --charset=C

.
|-- docker-compose.yml
|-- logstash
|   |-- config
|   |   |-- logstash.yml
|   |   |-- pipelines.yml
|   `-- pipeline
|       `-- twitter.conf

logstashの設定を以下のようにvolumesを追加する。

docker-compose.yml
  logstash:
    image: docker.elastic.co/logstash/logstash:7.9.2
    container_name: logstash
    volumes:
      - ./logstash/pipeline/:/usr/share/logstash/pipeline/
      - ./logstash/config/:/usr/share/logstash/config/
    networks:
      - elastic
    depends_on:
      - elasticsearch01
      - elasticsearch02
      - elasticsearch03
    restart: always

./logstash/config/ フォルダを作成し、配下に以下を置く

  • logstash.yml
./logstash/config/logstash.yml
pipeline.ordered: auto
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: ["http://es01:9200"]
  • pipelines.yml
./logstash/config/pipelines.yml
- pipeline.id: twitter_pipeline
  path.config: "/usr/share/logstash/pipeline/twitter.conf"
  queue.type: persisted

パイプライン設定

  • twitter.conf
./logstash/pipeline/twitter.conf
input {
  twitter {
    consumer_key => "<your_consumer_key>" ← TwitterAPI管理画面で取得したキーを設定
    consumer_secret => "<your_consumer_secret>" 
    oauth_token => "your_oauth_token"
    oauth_token_secret => "your_oauth_token_secret"
    keywords => ["前澤さん", "前澤社長"]
    ignore_retweets => true
    full_tweet => true
  }
}

output {
  elasticsearch {
    hosts => ["http://es01:9200/"]
    index => "twitter_maezawa"
  }
}

参考:Sentiment analysis on twitter data with ELK | Clément’s blog

2020/10/11現在、「前澤さん」というキーワードがツイッターのトレンド入りになっていたので、Twitterから取得するキーワードに["前澤さん", "前澤社長"]を設定しています。
インデックス名も"twitter_maezawa"としてみました。

スクリーンショット 2020-10-11 11.42.07.png

実行

docker-compose up

確認

Kibanaにアクセスします。

インデックス管理に以下のようにIndexが追加されていれば成功です。

http://localhost:5601/app/management/data/index_management/indices

スクリーンショット 2020-10-11 15.58.46.png

インデックスパターンの作成

集まったデータを閲覧するために、インデックスパターンを作成します。
http://localhost:5601/app/management/kibana/indexPatterns/create

インデックスパターン名にtwitter_maezawaと入れて次のステップを押します。

スクリーンショット 2020-10-11 16.07.37.png

時間フィールドは@timestampを選択して、インデックスパターンを作成を押します。

スクリーンショット 2020-10-11 16.09.39.png

データの詳細確認

Discover を開くとデータの詳細が確認できます。

スクリーンショット 2020-10-11 16.12.45.png

可視化 (タグクラウド)

Visualizeメニューから作成

スクリーンショット 2020-10-11 16.18.07.png

スクリーンショット 2020-10-11 16.15.14.png

ダッシュボードに追加されました。

スクリーンショット 2020-10-11 16.20.50.png

プラグインの追加

日本語形態素解析エンジン

せっかくなので、日本語形態素解析エンジン「kuromoji」と「icu」も入れてみる。

elasticsearchフォルダを作成し、その配下にDockerfileを作成します。
ついでにelasticsearch.ymlも読み込むようにしてみます。

elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:7.9.2

COPY ./config/elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml

# remove plugin ↓既に入っているエラーが表示されたら有効にする
# RUN elasticsearch-plugin remove analysis-icu
# RUN elasticsearch-plugin remove analysis-kuromoji

# install plugin
RUN elasticsearch-plugin install analysis-icu
RUN elasticsearch-plugin install analysis-kuromoji

docker-compose.yml修正

docker-compose.ymlの

  elasticsearch01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2

  ↓へ変更する

  elasticsearch01:
    build: ./elasticsearch/

同様に、elasticsearch02、elasticsearch03も変更します。

elasticsearch.yml

elasticsearch/configフォルダ配下にelasticsearch.ymlを作成します。中身はからっぽでOK

.
|-- docker-compose.yml
|-- elasticsearch
|   |-- Dockerfile
|   `-- config
|       `-- elasticsearch.yml

実行

build

docker-compose build

起動

docker-compose up

確認

各ノードのステータス確認

為念確認します。

$ curl -X GET "localhost:9200/_cat/nodes?v&pretty"

ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.24.0.2           73          81  51    2.27    2.20     1.23 dilmrt    -      es03
172.24.0.3           58          81  52    2.27    2.20     1.23 dilmrt    *      es02
172.24.0.4           49          81  52    2.27    2.20     1.23 dilmrt    -      es01

プラグイン確認

以下コマンドでプラグインが入っているかを確認します。

$ curl -X GET "http://localhost:9200/_nodes/es01/plugins?pretty"

...省略
      },
      "plugins" : [
        {
          "name" : "analysis-icu",
          "version" : "7.9.2",
          "elasticsearch_version" : "7.9.2",
          "java_version" : "1.8",
          "description" : "The ICU Analysis plugin integrates the Lucene ICU module into Elasticsearch, adding ICU-related analysis components.",
          "classname" : "org.elasticsearch.plugin.analysis.icu.AnalysisICUPlugin",
          "extended_plugins" : [ ],
          "has_native_controller" : false
        },
        {
          "name" : "analysis-kuromoji",
          "version" : "7.9.2",
          "elasticsearch_version" : "7.9.2",
          "java_version" : "1.8",
          "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
          "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
          "extended_plugins" : [ ],
          "has_native_controller" : false
        }
      ],

Elasticのフォーラムを可視化してみよう - Qiita

画面確認

ダッシュボードで確認します。

タグクラウドで可視化ができました。

スクリーンショット 2020-10-11 16.53.13.png

docker compose ファイル

最終的には以下のようになりました。

version: "2.2"
services:
  # 1st node port=9200
  elasticsearch01:
    # image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    build: ./elasticsearch/
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
    healthcheck:
      interval: 20s
      retries: 10
      test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"'

  # 2nd node
  elasticsearch02:
    # image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    build: ./elasticsearch/
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data02:/usr/share/elasticsearch/data
    networks:
      - elastic

  # 3rd node
  elasticsearch03:
    # image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    build: ./elasticsearch/
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticsearch_multinode_data03:/usr/share/elasticsearch/data
    networks:
      - elastic

  # kibana
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://es01:9200 # container_nameを参照する
      - "I18N_LOCALE=ja-JP"
    depends_on:
      - elasticsearch01
      - elasticsearch02
      - elasticsearch03
    networks:
      - elastic
    healthcheck:
      interval: 10s
      retries: 20
      test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status
    restart: always

  # logstash
  logstash:
    image: docker.elastic.co/logstash/logstash:7.9.2
    container_name: logstash
    volumes:
      - ./logstash/pipeline/:/usr/share/logstash/pipeline/
      - ./logstash/config/:/usr/share/logstash/config/
    networks:
      - elastic
    depends_on:
      - elasticsearch01
      - elasticsearch02
      - elasticsearch03
    restart: always

volumes:
  elasticsearch_multinode_data01:
    driver: local
  elasticsearch_multinode_data02:
    driver: local
  elasticsearch_multinode_data03:
    driver: local

networks:
  elastic:
    driver: bridge

フォルダ階層

$ tree --charset=C

.
|-- docker-compose.yml
|-- elasticsearch
|   |-- Dockerfile
|   `-- config
|       `-- elasticsearch.yml
`-- logstash
    |-- config
    |   |-- logstash.yml
    |   |-- pipelines.yml
    `-- pipeline
        `-- twitter.conf

後片付け

Elasticsearch終了

以下のコマンド

docker-compose down

ボリュームも消す

ボリュームも消す時は以下

docker-compose down --volumes

全て消す

全て消す時は以下(コンテナ、イメージ、ボリュームそしてネットワーク、全て)

docker-compose down --rmi all --volumes

ボリュームの削除

docker volume prune

参考

初めてのElasticsearch with Docker - Qiita

ElasticStack環境をDocker上で構築して、「コロナ」に関するツイートをタグクラウド化した話 - Qiita

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[wip] サーバで、快適に自由にサーバサイド開発をする

概要

悩み

  • エンジニアMac(MacBookPro:i7,Mem16GB)が火を吹いてて辛い
    • オンライ会議ソフト(zoom)や、オンライホワイトボード(miro)など、重量級のソフトCPUを食い潰すようになった
    • サーバサイドエンジニア(Rails/AWS)のMacでは各種開発用サーバをdockerで動かしているが、
      もともと重かったdockerと相まって笑えるほど遅い

develop_with_remote.mkd-Page-1 (3).jpg

やりたいこと

  • Macの負荷を下げるため、手元のMacからできるだけプロセスを外部のサーバに(AWS EC2)に投げたい。 develop_with_remote.mkd-Page-1 (2).jpg

不安と期待

  • 今までローカルで完結してた開発環境をリモートに切り離すにはいろいろ不安がある、 またはリモートだからこその期待がある。
    • 快適に開発できるのか
      • 「sshでつなげてVimで開発は流石に嫌だよ? VSCode 使いたい」
    • 安全に開発できるのか
      • 「通信ダダ漏れとかありえない」
    • 自由にどこでも開発できるようになるのか
      • 「カフエとかドーナツ屋さんで仕事したい」
    • 自由にどんな端末でも開発できるようになるのか
      • 「旅行にパソコン持って行きたくない!!!、ipadとかスマホで仕事したい!!」
    • 無駄なコストが発生しないか
      • 「使ってない月に、ン万円以上コストがかかるのは生理的に無理」

計画

フェーズ分け

  • いきなり全部やるとしんどそうだったので、以下のようにフェーズ分けしてます。

    • Phase1. 予め決まった拠点(オフィス、家など)から、PCで開発環境につなぐ develop_with_remote.mkd-Page-1 (5).png
    • Phase2. 任意の場所から、PCで開発環境につなぐ develop_with_remote.mkd-Page-1 (6).png
    • Phase3. 任意の場所から、任意の(自身の)端末で開発環境につなぐ develop_with_remote.mkd-Page-1 (8).png
    • Phase4. コスト最適化
      • ?

この記事は

  • 現在進行形の「ここはこうしよう」、「ここはこうしようかな」というメモを晒している記事です。

構成設計・調査メモ

  • 選定した内容、選定した意図、簡単な比較、設定内容など

構成: Phase1

develop_with_remote.mkd-Page-1 (5).png

  • 概要
    • 普段の開発環境から、開発用サーバ(docker)とVSCodeのCPU負荷をEC2に追い出すことができた
    • コスト: 月$20ほど
    • インフラ: 主にAWS(Route53,EC2など)を使用
    • IDE: VSCode Remote Development
    • 独自ドメイン
    • 通信を暗号化(SSH/HTTPS)

リモートサーバ

  • 必須条件
    • SSH可能 -> Linux
    • 公開できる -> ドメイン繋げられる(HTTPS)
  • 歓迎条件
    • コストを抑えられる、抑える手段がある
  • 結論: AWS EC2
    vscode_remote.png

    • 必要なときは性能のスケールアウトが可能
      • ただし一旦停止は必要
    • spot instanceでコストを抑えられる
      • vCPU:2,Mem:4GB (t3.medium)で 月大体$15ほど
        • (インスタンス稼働コスト+ストレージなど諸費用)
    • この記事を書いた人が慣れているため * 仕事でAWS使ってる人多いすよね。。。
  • 他の選択肢

  • 設定内容

    • security groupの設定
      • HTTPS: 「マイIP」で予め決まった拠点(オフィス、家など)のIPアドレスを設定する
      • SSH: 「マイIP」で予め決まった拠点(オフィス、家など)のIPアドレスを設定する

リモート開発環境

  • 必須条件
    • コードの編集・実行ができる
    • クライアントとサーバが暗号通信すること
  • 歓迎条件
    • プラグインが豊富で活発
    • ブラウザだけで動くと尚良
  • 結論: VSCode + Remote Developmentプラグイン
    vscode_remote.png

    • VSCodeはいわずもがな2020年のサーバサイド開発のスタンダードになってるIDE
    • Remote DevelopmentはSSHした先のLinuxサーバ上でIDEを実行できる機能
  • 他の選択肢

暗号通信

[WIP] VPN

[WIP] いつでも開発するために

  • 必須条件
    • Windows/Mac/ChromeOS/Android/iOSで稼働すること
  • 歓迎条件

    • ブラウザのみで稼働する
      • OculusQuestとか独自カスタマイズ系のOSでも開発できると嬉しい
  • 調査中

[WIP]起動していないときにサーバを止める

  • herokuみたいなことをしたい
    • 「踏み台サーバ」へSSH portfowardingの接続要求が発生
    • 認証完了
    • 「踏み台サーバ」は「開発環境サーバ」を起動する
      • 30秒ぐらい?
    • 接続する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails新規開発時のスピードを極限まで高めるテンプレートを公開してみた

これはなに?

Rails の初期設定ってめんどくさくないですか?
rails new してからの単純作業。

せっかくスピード感があるフレームワークなのに最初の単純作業はほぼ同じことを毎回していますし、地味に時間もかかるので嫌でした。
今や Docker を使ってサクッと環境を構築するのは当然ですが、それでもやっぱり面倒。

特に、

  • RSpecのセットアップ
  • devise の設定
  • お決まりの Gem を入れる手間

この辺が嫌いでしたし、皆さんにもやって欲しくない!!

そうだ、テンプレートを作ろう

んで、どうせなら皆さんにも公開して是非使って頂こう、あわよくば改善案も貰ってしまおうという非常に厚かましい企画となっております。
ちなみに他にもテンプレートを公開されている方はいらっしゃいましたが少し古くなっていますし、Docker を使っていないことも多かったです。

今回は Docker を使って爆速で Rails 開発を始められるテンプレートを丸ごと公開します!!

バージョンなど

  • ruby:2.6.6
  • rails 6.0.3
  • postgresql:12.3

こららのモダンな環境をサクッと構築してすぐに開発に取り掛かれます!!

どんな人におすすめか

主に個人開発や簡単なRailsアプリをサクッと作りたい場面で有用だと思います。
逆にメジャーとは言え、使わない Gem も入ることになると思うので(最初に取り除けば全く問題ありませんが)、スピード重視じゃない場合には合わないかもしれません。

行った設定等の解説

リポジトリはこちらです ?
https://github.com/tatsuro-m/rails_base_app

基本的には README に手順が書いてあるので問題なく使えると思います。
手順が多いようにも見えますが、本当にすぐに終わります。

  • devise の初期設定(rails generate devise:install を実行。viewの生成はしていない。)
  • rspec のセットアップ(システムスペックを含む)
  • test ディレクトリの削除(使わないので)
  • database.yml の編集(postgresコンテナに設定した環境変数と合わせてあります)
  • .env.gitignore への追加
  • webpack-dev-server の設定

こんな感じで Docker イメージをビルドして起動 + 最低限必要なコマンドを何個か打つ
ぐらいでサクッと Web アプリケーションの開発が始められると思います。

んで、 Gem 何入れたの?

Gemfiile
gem 'devise'
gem 'devise-i18n'
gem 'dotenv-rails'
gem 'ransack'
gem 'kaminari'
gem 'carrierwave'
gem 'mini_magick'
gem 'fog-aws'
gem 'rails-i18n'
gem 'draper'
gem 'pundit'

デフォルトのものに加えて、こちら入れました。どれも定番ですね。必要な Gem があれば Gemfile に書き込んでから docker-compose build でももちろん大丈夫です。

今後の改善案など

  • CircleCI で rubocop と RSpec を走らせる設定ファイルはもう定番だし入れても良いかもしれない(不要なら消せば良いだけですし) 。。。
  • rails が動いているコンテナの中に SystemSpec 起動用の chrome を入れているけど、コンテナを分けるべきかもしれない

他にも何かあればコメントください。PR もお待ちしてます!!


どなたかのお役に立てたら幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-slim前後のdockerfileの差異を比較

手順

  # サンプルnode.jsアプリのDockerイメージを作成する
~ $ git clone https://github.com/docker-slim/examples.git

  # node_ubuntuのDockerfileがあるディレクトリに移動
~ $ cd examples/node_ubuntu/

  # Dockerfileをビルドし,イメージを作成
~ $ docker build -t my/sample-node-app .

  # 作成したイメージに対して,docker-slimを適用する
~ $ docker-slim build my/sample-node-app

サイズ削減度合いは??

~ $ docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    my/sample-node-app.slim   latest              b2c7843a52fa        3 hours ago         14MB
    my/sample-node-app        latest              3c6ddc217be2        4 hours ago         414MB

下が元のイメージ,上が最適化した後のイメージです.
docker-slimで最適化したイメージには「.slim」が後ろに追加されるようです.
サイズは414MBから14MBまで小さくなってます.
何が起きてるのか。。

dockerfileの比較

  • docker-slimを適応したイメージのdockerfileは以下のディレクトリにある
    • [docker-slim directory]/.images/[YOUR_APP_IMAGE_ID]/artifacts/
Dockerfile-before
FROM ubuntu:14.04
RUN apt-get update && \
        apt-get install -y curl software-properties-common python-software-properties && \
        add-apt-repository ppa:chris-lea/node.js && \
        apt-get update && \
        apt-get install -y build-essential \
        nodejs && \
        mkdir -p /opt/my/service
COPY service /opt/my/service
WORKDIR /opt/my/service
RUN npm install
EXPOSE 1300
ENTRYPOINT ["node","/opt/my/service/server.js"]
Dockerfile-after
FROM scratch
LABEL docker-slim.version="darwin|Transformer|1.32.0|10b628fc3cd9f903237b9c31a6aba5ac4e6bc9c8|2020-08-24_06:14:32AM"
ENV PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

ADD files.tar /
WORKDIR /opt/my/service
EXPOSE 1300/tcp
ENTRYPOINT ["node","/opt/my/service/server.js"]

FROM句が ubuntu:14.04 から scratch に変わっています.
FROM scratch はベースが無いということを意味していて,ベースOSの部分から書いているということを示しているようです.
OS部分は ADD ubuntuのファイルシステムを圧縮したものだと想定されるfiles.tarが担っているみたい.

参考リンク

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OpenLDAPサーバをDockerで立てる

これはなに?

OpenLDAPサーバをDockerで立てます。

やりかた

拙作ではありますが、Docker Hubにあるイメージをご利用ください。

docker pull sengokyu/openldap

ベースとなるDNを指定して起動します。今回はdc=example,dc=comにしています。

docker run -d -p 389:389 -e SUFFIX=dc=example,dc=com sengokyu/openldap

Apache Directory Studioから接続

Apache Directory Studioを起動します。

LDAP > New Connection... メニューを選択します。

image.png

Hostnameにlocalhostと入力して、Nextをクリックします。

image.png

Bind DN or userとパスワードを入力して、Finishをクリックします。

Bind DNにはRoot DNを入力します。
Root DNとパスワードが未指定の場合、以下の値で起動するようにしています。

DN
cn=root,(指定したSUFFIX)
(上の例では、cn=root,dc=example,dc=comになります)

パスワード
slappasswd

image.png

接続できました。

Dockerイメージについて

Fedoraをベースに作成してます。

2020年10月時点では、以下のバージョンになります。

  • Fedora release 32
  • OpenLDAP 2.4.47
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにdockerを使用したlaravelをデプロイ④

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

EC2インスタンス内にGitをクローン

Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。

root@ip:/home/ubuntu# git clone [任意のレポジトリURL]

Dockerコンテナの立ち上げ

cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。

root@ip:/home/ubuntu/awstest# docker-compose up -d
root@ip:/home/ubuntu/awstest# docker-compose ps
    Name                   Command               State           Ports        
------------------------------------------------------------------------------
awstest_app_1   docker-php-entrypoint php-fpm    Up      9000/tcp             
awstest_db_1    docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp  
awstest_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:10080->80/tcp

この様に立ち上がればOKです。

苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通り

root@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml
version: "3.3" ←3.8から3.3に変更

とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。

Laravel環境設定

Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。

root@ip:/home/ubuntu/awstest# docker-compose exec app bash

Laravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。

root@:/work# cp .env.example .env

.envを作成したらcomposer install、そしてAPP_KEYも発行します。

root@:/work# composer install

root@:/work# php artisan key:generate

プロジェクト内の権限変更

プロジェクト内のファイルに対する権限を変更します。

通常では storage/logs と vendor の権限を変更すればOKみたいです。

ここでもエラーが起き少し苦戦しました。

file_put_contentsエラーでViewが開かない

root@:/work# chmod 777 storage/logs vendor
root@:/work# chmod 777 storage/framework/views
root@:/work# chmod 777 storage/framework/sessions

ここまでやってようやくTOPページが開ました。

http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。

スクリーンショット 2020-10-11 13.54.08.png

この様に表示されればOKです。

前回の記事
AWSにdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上にdockerを使用したlaravelをデプロイ④

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

EC2インスタンス内にGitをクローン

Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。

root@ip:/home/ubuntu# git clone [任意のレポジトリURL]

Dockerコンテナの立ち上げ

cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。

root@ip:/home/ubuntu/awstest# docker-compose up -d
root@ip:/home/ubuntu/awstest# docker-compose ps
    Name                   Command               State           Ports        
------------------------------------------------------------------------------
awstest_app_1   docker-php-entrypoint php-fpm    Up      9000/tcp             
awstest_db_1    docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp  
awstest_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:10080->80/tcp

この様に立ち上がればOKです。

苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通り

root@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml
version: "3.3" ←3.8から3.3に変更

とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。

Laravel環境設定

Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。

root@ip:/home/ubuntu/awstest# docker-compose exec app bash

Laravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。

root@:/work# cp .env.example .env

.envを作成したらcomposer install、そしてAPP_KEYも発行します。

root@:/work# composer install

root@:/work# php artisan key:generate

プロジェクト内の権限変更

プロジェクト内のファイルに対する権限を変更します。

通常では storage/logs と vendor の権限を変更すればOKみたいです。

ここでもエラーが起き少し苦戦しました。

file_put_contentsエラーでViewが開かない

root@:/work# chmod 777 storage/logs vendor
root@:/work# chmod 777 storage/framework/views
root@:/work# chmod 777 storage/framework/sessions

ここまでやってようやくTOPページが開ました。

http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。

スクリーンショット 2020-10-11 13.54.08.png

この様に表示されればOKです。

マイグレーションを実行する

root@:/work# php artisan migrate
root@:/work# php aritsan db:seed

ここまでやればローカルで作成したアプリが動くと思います。

以上で「AWSにEC2上にdockerを使用したlaravelをデプロイ」を終了させていただきます。
ありがとうございました。

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上にdockerを使用したlaravelをデプロイ④(gitクローン〜デプロイ、マイグレーション)

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

EC2インスタンス内にGitをクローン

Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。

root@ip:/home/ubuntu# git clone [任意のレポジトリURL]

Dockerコンテナの立ち上げ

cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。

root@ip:/home/ubuntu/awstest# docker-compose up -d
root@ip:/home/ubuntu/awstest# docker-compose ps
    Name                   Command               State           Ports        
------------------------------------------------------------------------------
awstest_app_1   docker-php-entrypoint php-fpm    Up      9000/tcp             
awstest_db_1    docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp  
awstest_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:10080->80/tcp

この様に立ち上がればOKです。

苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通り

root@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml
version: "3.3" ←3.8から3.3に変更

とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。

Laravel環境設定

Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。

root@ip:/home/ubuntu/awstest# docker-compose exec app bash

Laravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。

root@:/work# cp .env.example .env

.envを作成したらcomposer install、そしてAPP_KEYも発行します。

root@:/work# composer install

root@:/work# php artisan key:generate

プロジェクト内の権限変更

プロジェクト内のファイルに対する権限を変更します。

通常では storage/logs と vendor の権限を変更すればOKみたいです。

ここでもエラーが起き少し苦戦しました。

file_put_contentsエラーでViewが開かない

root@:/work# chmod 777 storage/logs vendor
root@:/work# chmod 777 storage/framework/views
root@:/work# chmod 777 storage/framework/sessions

ここまでやってようやくTOPページが開ました。

http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。

スクリーンショット 2020-10-11 13.54.08.png

この様に表示されればOKです。

マイグレーションを実行する

root@:/work# php artisan migrate
root@:/work# php aritsan db:seed

ここまでやればローカルで作成したアプリが動くと思います。

以上で「AWSにEC2上にdockerを使用したlaravelをデプロイ」を終了させていただきます。
ありがとうございました。

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KUSANAGI Runs on Dockerでコンテナイメージをアップデートする

前回の記事『VultrでKUSANAGI Runs on Dockerが動くまで(その4)』ではVPC環境であるVultrにKUSANAGI RoD環境を構築し、リバプロサーバとしてhttps-portal環境を作りました。
今回はKUSANAGI Runs on Dockerのコンテナイメージをアップデートしたいと思います。

KUSANAGI RODで使っているコンテナのうち以下コンテナでアップデートがありました。

docker-compose.ymlファイルを更新します。

docker-compose.yml
version: '3'

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 9000
  shared-network:
    external: true

services:
  httpd:
    container_name: kusanagi01_httpd
    #image: primestrategy/kusanagi-nginx:1.17.9-r0
    image: primestrategy/kusanagi-nginx:1.19.3-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.httpd
    volumes:
      - kusanagi:/home/kusanagi
      #- kusanagi:/etc/letsencrypt
      #- kusanagi:/var/www/html/.well-known
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    #ports:
      #- "8080:8080"
      #- "8443:8443"
    extra_hosts:
      - "fqdn:127.0.0.1"
    networks:
      - shared-network

        #certbot:
        #container_name: kusanagi01_certbot
        #image: certbot/certbot:v1.6.0
        #restart: always
        #network_mode: "service:httpd"
        #env_file:
        #- .kusanagi.httpd
        #volumes:
        #- kusanagi:/var/www/html/.well-known
        #- kusanagi:/etc/letsencrypt
        #command:
        #- --version

## CONFIG
  config:
    container_name: kusanagi01_config
    restart: always
    build:
        context: ./wpcli
    user: "1000:1001"
    env_file:
      - .kusanagi
      - .kusanagi.wp
      - .kusanagi.db
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
    command: wp --version

  php:
    container_name: kusanagi01_php
    #image: primestrategy/kusanagi-php:7.4.8-r0
    image: primestrategy/kusanagi-php:7.4.9-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.php
      - .kusanagi.mail
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
      - ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

## MYSQL 
  db:
    container_name: kusanagi01_db
    #image: mariadb:10.5.4-focal
    image: mariadb:10.5.6-focal
    restart: always
    user: "999:999"
    env_file:
      - .kusanagi.mysql
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - database:/var/lib/mysql

## FTPD
  ftp:
    container_name: kusanagi01_ftp
    image: primestrategy/kusanagi-ftpd:1.0.2-r1
    restart: always
    network_mode: "service:httpd"
    env_file:
      - .kusanagi
      - .kusanagi.wp
    volumes:
      - kusanagi:/home/kusanagi


volumes:
  kusanagi:
  database:

dockerコマンドでコンテナを再作成します。

$ docker-compose stop
$ docker-compose up -d
Pulling httpd (primestrategy/kusanagi-nginx:1.19.3-r0)...
1.19.3-r0: Pulling from primestrategy/kusanagi-nginx
df20fa9351a1: Already exists
5af32d8d47ac: Pull complete
e55c96c86184: Pull complete
936d68b47fc1: Pull complete
a8c682723ffa: Pull complete
03145aaddb69: Pull complete
497c91cb4efa: Pull complete
639014dd9611: Pull complete
804c2b55bd45: Pull complete
8ba2747f59ab: Pull complete
2d3ef1c004b5: Pull complete
151010cd7bea: Pull complete
7368eee41ec2: Pull complete
054bb2aec8f7: Pull complete
c2cbc49740f5: Pull complete
Digest: sha256:00c7d727578796793afb9e02c006f631119f5f778c304b71d71308dc81661d8c
Status: Downloaded newer image for primestrategy/kusanagi-nginx:1.19.3-r0
Pulling php (primestrategy/kusanagi-php:7.4.9-r0)...
7.4.9-r0: Pulling from primestrategy/kusanagi-php
df20fa9351a1: Already exists
b358d6dbbdff: Already exists
0232d962484c: Already exists
0c1d3ac04d2a: Already exists
69251dafcb2d: Pull complete
f1f538119c59: Pull complete
cfbff98e6534: Pull complete
c2aadec4cc8c: Pull complete
b2ed7d8627c3: Pull complete
a5f68329b27f: Pull complete
e2a454f2222e: Pull complete
f3b64d79d270: Pull complete
11d91a2e79d9: Pull complete
86b38ba94154: Pull complete
928fdca444e9: Pull complete
37da8ddee44c: Pull complete
de5ab4f13129: Pull complete
7b2c6c5559bf: Pull complete
be5013ba038f: Pull complete
45921131dc11: Pull complete
d84b8c09a0dc: Pull complete
Digest: sha256:954b368151a8d255411e0722c246976dd79bb9cb2438584cca253978c542e4bc
Status: Downloaded newer image for primestrategy/kusanagi-php:7.4.9-r0
Pulling db (mariadb:10.5.6-focal)...
10.5.6-focal: Pulling from library/mariadb
d72e567cc804: Pull complete
0f3630e5ff08: Pull complete
b6a83d81d1f4: Pull complete
4bf2111ecf0e: Pull complete
9572d64978a0: Pull complete
bcc9953bffb3: Pull complete
de429570dda5: Pull complete
3652bc6ea9f9: Pull complete
6e4bf87041c8: Pull complete
96e489d6af27: Pull complete
baaf018282fc: Pull complete
1cca1ca0b2da: Pull complete
Digest: sha256:3e6a64c089460fb3403b5d3458ace9710d0be94f3dfdaaaeb74945dbb8e5671c
Status: Downloaded newer image for mariadb:10.5.6-focal
Starting kusanagi01_config  ... done
Recreating kusanagi01_httpd ... done
Recreating kusanagi01_php   ... done
Recreating kusanagi01_ftp   ... done
Recreating kusanagi01_db    ... done

$ docker-compose ps
      Name                     Command                 State            Ports       
------------------------------------------------------------------------------------
kusanagi01_config   docker-entrypoint.sh wp -- ...   Restarting                     
kusanagi01_db       docker-entrypoint.sh mysqld      Up                             
kusanagi01_ftp      /bin/sh -c /docker-entrypo ...   Up                             
kusanagi01_httpd    /docker-entrypoint.sh /usr ...   Up           8080/tcp, 8443/tcp
kusanagi01_php      /usr/local/bin/docker-entr ...   Up
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Pari gp containerを使ってみた

はじめに

PARI/GPについては
https://pari.math.u-bordeaux.fr/pub/pari/manuals/2.3.5/users.pdf
1.1 Introductionが参考になります。
ここではDockerでPARI/GPを利用する方法について書きます。

Dockerコンテナを起動

オプション-itでコンテナに入ることができます。
以下のようにgpをつけることで、コンテナ起動直後にPARI/GPを起動します。

docker run -it pascalmolin/parigp-small gp

またpascalmolin/parigp-fullもありますが、今回はsmallです。
以下のようにPARI/GPが起動します。
試しに1 + 1を計算しています。

                  GP/PARI CALCULATOR Version 2.11.4 (released)
          amd64 running linux (x86-64/GMP-6.2.0 kernel) 64-bit version
            compiled: Jul  8 2020, gcc version 9.3.0 (Alpine 9.3.0)
                            threading engine: single
               (readline v8.0 enabled, extended help not enabled)

                     Copyright (C) 2000-2018 The PARI Group

PARI/GP is free software, covered by the GNU General Public License, and comes
WITHOUT ANY WARRANTY WHATSOEVER.

Type ? for help, \q to quit.
Type ?17 for how to get moral (and possibly technical) support.

parisize = 8000000, primelimit = 500000
? 1 + 1
%1 = 2

停止したいときは\qコマンドを入力します。

? 1 + 1
%1 = 2
? \q
Goodbye!

再度コンテナに入るには、まず起動したいCONTAINER IDを見つけます。
docker ps -aは停止しているコンテナも含めて、一覧を表示します。

docker ps -a

以下のように一覧が表示されます。

CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS                          PORTS               NAMES
1831fe3cb55f        pascalmolin/parigp-small   "gp"                3 minutes ago       Exited (0) About a minute ago

コンテナを再起動します。

docker restart 1831fe3cb55f

コンテナに入ります。

docker exec -it 1831fe3cb55f sh

ファイル読み込み、書き込み

tmpディレクトリに移動し、そこにファイルを作ってみます。

/ # cd tmp

以下のようなtest.gpを作成しました。

/tmp # cat test.gp
forprime(p = 1, 20, write("output.txt", p))

以下のようにgpコマンドでPARI/GPを起動します。

/tmp # gp

ファイルを実行します。

? \r test.gp

PARI/GPを停止し、作成されたoutput.txtを見てみます。

/tmp # cat output.txt
2
3
5
7
11
13
17
19

参考記事

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにdockerを使用したlaravelをデプロイ③

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ②

EC2インスタンスにSSHでアクセスする

1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
スクリーンショット 2020-10-10 22.11.55.png

2:インスタンスに接続コード確認
「SSH クライアント」をクリック
スクリーンショット 2020-10-10 22.12.06.png

3:EC2インスタンスにSSHでアクセス
ターミナルを起動し

chmod 400 test-docker.pem
ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.com

test-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。

Gitのインストール

EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか

ubuntu@ip:~$ sudo su
root@ip:/home/ubuntu# 

行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。

1:aptの更新

root@ip:/home/ubuntu# apt-get update

2:Gitのインストール
Gitのインストールと初期設定を行います。

#gitインストール
root@ip:/home/ubuntu# apt-get install git

#git初期設定
root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名]
root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]

Docker,Docker-composeのインストール

ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。

root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88

root@ip:/home/ubuntu# add-apt-repository \
                      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
                      $(lsb_release -cs) \
                      stable"

root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io

#docker-composeのインストール
root@ip:/home/ubuntu# apt install docker-compose

前回の記事
AWSにdockerを使用したlaravelをデプロイ②

続きはこちら

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上にdockerを使用したlaravelをデプロイ③

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ②

EC2インスタンスにSSHでアクセスする

1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
スクリーンショット 2020-10-10 22.11.55.png

2:インスタンスに接続コード確認
「SSH クライアント」をクリック
スクリーンショット 2020-10-10 22.12.06.png

3:EC2インスタンスにSSHでアクセス
ターミナルを起動し

chmod 400 test-docker.pem
ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.com

test-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。

Gitのインストール

EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか

ubuntu@ip:~$ sudo su
root@ip:/home/ubuntu# 

行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。

1:aptの更新

root@ip:/home/ubuntu# apt-get update

2:Gitのインストール
Gitのインストールと初期設定を行います。

#gitインストール
root@ip:/home/ubuntu# apt-get install git

#git初期設定
root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名]
root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]

Docker,Docker-composeのインストール

ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。

root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88

root@ip:/home/ubuntu# add-apt-repository \
                      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
                      $(lsb_release -cs) \
                      stable"

root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io

#docker-composeのインストール
root@ip:/home/ubuntu# apt install docker-compose

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ②

続きはこちら
AWSにdockerを使用したlaravelをデプロイ④

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上にdockerを使用したlaravelをデプロイ③(SSH接続〜Docke-composeインストール)

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ②

EC2インスタンスにSSHでアクセスする

1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
スクリーンショット 2020-10-10 22.11.55.png

2:インスタンスに接続コード確認
「SSH クライアント」をクリック
スクリーンショット 2020-10-10 22.12.06.png

3:EC2インスタンスにSSHでアクセス
ターミナルを起動し

chmod 400 test-docker.pem
ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.com

test-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。

Gitのインストール

EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか

ubuntu@ip:~$ sudo su
root@ip:/home/ubuntu# 

行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。

1:aptの更新

root@ip:/home/ubuntu# apt-get update

2:Gitのインストール
Gitのインストールと初期設定を行います。

#gitインストール
root@ip:/home/ubuntu# apt-get install git

#git初期設定
root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名]
root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]

Docker,Docker-composeのインストール

ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。

root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88

root@ip:/home/ubuntu# add-apt-repository \
                      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
                      $(lsb_release -cs) \
                      stable"

root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io

#docker-composeのインストール
root@ip:/home/ubuntu# apt install docker-compose

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ②

続きはこちら
AWSにdockerを使用したlaravelをデプロイ④

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上でdockerを使用したlaravelをデプロイ②

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ①

Elastic IP取得

1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
スクリーンショット 2020-10-10 22.05.30.png

2:「割り当て」をクリック
スクリーンショット 2020-10-10 22.05.36.png

3:割り当てられたIPをクリック
スクリーンショット 2020-10-10 22.06.02.png

4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
スクリーンショット 2020-10-11 11.45.56.png

5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
スクリーンショット 2020-10-10 22.06.30.png

これで作成したインスタンスにElastic IPが紐付けられました。

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ①

続きはこちら
AWSにEC2上にdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上でdockerを使用したlaravelをデプロイ②(Elastic IP取得〜紐付け)

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ①

Elastic IP取得

1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
スクリーンショット 2020-10-10 22.05.30.png

2:「割り当て」をクリック
スクリーンショット 2020-10-10 22.05.36.png

3:割り当てられたIPをクリック
スクリーンショット 2020-10-10 22.06.02.png

4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
スクリーンショット 2020-10-11 11.45.56.png

5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
スクリーンショット 2020-10-10 22.06.30.png

これで作成したインスタンスにElastic IPが紐付けられました。

前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ①

続きはこちら
AWSにEC2上にdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにdockerを使用したlaravelをデプロイ②

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。

前回の記事
AWSにdockerを使用したlaravelをデプロイ①

Elastic IP取得

1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
スクリーンショット 2020-10-10 22.05.30.png

2:「割り当て」をクリック
スクリーンショット 2020-10-10 22.05.36.png

3:割り当てられたIPをクリック
スクリーンショット 2020-10-10 22.06.02.png

4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
スクリーンショット 2020-10-11 11.45.56.png

5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
スクリーンショット 2020-10-10 22.06.30.png

これで作成したインスタンスにElastic IPが紐付けられました。

前回の記事
AWSにdockerを使用したlaravelをデプロイ①

続きはこちら
AWSにdockerを使用したlaravelをデプロイ③

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker-composeコマンド メモ

dockerコマンドとの比較(docker-compose.ymlを書いている前提)

$ docker build <buildするファイルのパス> ↔︎ $ docker-compose build
$ docker run <docker image> ↔︎ $ docker-compose up //buildされていなければbuildもしてくれる
$ docker exec <コンテナ><command> ↔︎ $ docker-compose exec <service><command>

$ docker-compose down //  : stopしてrm
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上でdockerを使用したlaravelをデプロイ①

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。


前提条件

・Mac基準になります。
・gitにlaravelアプリがpushされている事。
・dockerがインストールされている事。
・AWSにログイン出来る事。


構築環境

・php7.4
・mysql8.0
・laravel6

dockerの構築は
@ucan-labさんの記事
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
を参考に作成しました。


変更点

version: "3.3" ←変更
services:
  app:
    build: ./infra/php
    volumes:
      - ./backend:/work

  web:
    image: nginx:1.18-alpine
    ports:
      - 10080:80
    volumes:
      - ./backend:/work
      - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /work

EC2インスタンス作成

スクリーンショット 2020-10-10 21.43.16.png

画面右上のリージョンは東京に指定して下さい。
画面左上のサービスを開きEC2を選択。
探せない場合はすべてのサーピスから「EC2」と打ち込んで検索して下さい。
EC2をクリックしアクセス。

1:Webサーバーの作成
インスタンスを起動をクリックし、選択画面が出たらそこもインスタンスの起動をクリック。
スクリーンショット 2020-10-11 0.47.24.png

2:AMIを選択
AMIは「ubuntu 18.04」を選択。スクリーンショット 2020-10-10 21.45.31.png

3:インスタンスタイプの選択
新規登録から1年間無料の利用枠「t2.micro」を選択。
スクリーンショット 2020-10-10 21.45.44.png

4:インスタンス詳細
標準のまま進みます。
スクリーンショット 2020-10-10 21.45.52.png

5:ストレージ追加
標準のまま進みます。
スクリーンショット 2020-10-11 0.47.57.png

6:タグの追加
タグを追加し値を任意の名前を付けます。
今回は「awstest」という名前を付けました。
1つ作ったら次へ。
スクリーンショット 2020-10-10 21.46.12.png

7:セキュリティーグループ設定
任意のセキュリティーグループ名、説明を設定する。
今回は「test-docker」という名前を付けました。
ルールの追加を行い「HTTP」「HTTPS」「カスタム TCP ルール」を追加。
カスタムTCPのみ ポート範囲を指定。
今回は「10080」を設定します。
ソースには「カスタム」「0.0.0.0/0, ::/0」を設定。
全て設定し終わってら次へ。
スクリーンショット 2020-10-10 21.47.41.png

8:インスタンス作成
起動ボタンをクリック。
スクリーンショット 2020-10-10 21.47.49.png

キーペアの作成

インスタンスの「起動」ボタンをクリックすると、キーペアの作成画面が表示されます。
スクリーンショット 2020-10-10 21.48.03.png
初めてEC2インスタンスを作成する方は
新しいキーペアの作成を選択し、任意の名前をキーペア名につけます。
キーペアのダウンロードを必ず行って下さい。
そしてインスタンス作成をクリック。

作成したインスタンスの確認

EC2の画面に戻ってみると作成したインスタンスがある事が確認できます。
Nameのところにタグの項目で付けた名前があります。
「実行中」「2/2のチェックに合格しました」となったら完了です。
スクリーンショット 2020-10-10 22.04.12.png

続き

続きはこちら
AWSにEC2上でdockerを使用したlaravelをデプロイ②

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにEC2上でdockerを使用したlaravelをデプロイ①(EC2インスタンス作成)

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。


前提条件

・Mac基準になります。
・gitにlaravelアプリがpushされている事。
・dockerがインストールされている事。
・AWSにログイン出来る事。


構築環境

・php7.4
・mysql8.0
・laravel6

dockerの構築は
@ucan-labさんの記事
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
を参考に作成しました。


変更点

version: "3.3" ←変更
services:
  app:
    build: ./infra/php
    volumes:
      - ./backend:/work

  web:
    image: nginx:1.18-alpine
    ports:
      - 10080:80
    volumes:
      - ./backend:/work
      - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /work

EC2インスタンス作成

スクリーンショット 2020-10-10 21.43.16.png

画面右上のリージョンは東京に指定して下さい。
画面左上のサービスを開きEC2を選択。
探せない場合はすべてのサーピスから「EC2」と打ち込んで検索して下さい。
EC2をクリックしアクセス。

1:Webサーバーの作成
インスタンスを起動をクリックし、選択画面が出たらそこもインスタンスの起動をクリック。
スクリーンショット 2020-10-11 0.47.24.png

2:AMIを選択
AMIは「ubuntu 18.04」を選択。スクリーンショット 2020-10-10 21.45.31.png

3:インスタンスタイプの選択
新規登録から1年間無料の利用枠「t2.micro」を選択。
スクリーンショット 2020-10-10 21.45.44.png

4:インスタンス詳細
標準のまま進みます。
スクリーンショット 2020-10-10 21.45.52.png

5:ストレージ追加
標準のまま進みます。
スクリーンショット 2020-10-11 0.47.57.png

6:タグの追加
タグを追加し値を任意の名前を付けます。
今回は「awstest」という名前を付けました。
1つ作ったら次へ。
スクリーンショット 2020-10-10 21.46.12.png

7:セキュリティーグループ設定
任意のセキュリティーグループ名、説明を設定する。
今回は「test-docker」という名前を付けました。
ルールの追加を行い「HTTP」「HTTPS」「カスタム TCP ルール」を追加。
カスタムTCPのみ ポート範囲を指定。
今回は「10080」を設定します。
ソースには「カスタム」「0.0.0.0/0, ::/0」を設定。
全て設定し終わってら次へ。
スクリーンショット 2020-10-10 21.47.41.png

8:インスタンス作成
起動ボタンをクリック。
スクリーンショット 2020-10-10 21.47.49.png

キーペアの作成

インスタンスの「起動」ボタンをクリックすると、キーペアの作成画面が表示されます。
スクリーンショット 2020-10-10 21.48.03.png
初めてEC2インスタンスを作成する方は
新しいキーペアの作成を選択し、任意の名前をキーペア名につけます。
キーペアのダウンロードを必ず行って下さい。
そしてインスタンス作成をクリック。

作成したインスタンスの確認

EC2の画面に戻ってみると作成したインスタンスがある事が確認できます。
Nameのところにタグの項目で付けた名前があります。
「実行中」「2/2のチェックに合格しました」となったら完了です。
スクリーンショット 2020-10-10 22.04.12.png

続き

続きはこちら
AWSにEC2上でdockerを使用したlaravelをデプロイ②

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSにdockerを使用したlaravelをデプロイ①

概要

・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。


前提条件

・Mac基準になります。
・gitにlaravelアプリがpushされている事。
・dockerがインストールされている事。
・AWSにログイン出来る事。


構築環境

・php7.4
・mysql8.0
・laravel6

dockerの構築は
@ucan-labさんの記事
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
を参考に作成しました。


変更点

version: "3.3" ←変更
services:
  app:
    build: ./infra/php
    volumes:
      - ./backend:/work

  web:
    image: nginx:1.18-alpine
    ports:
      - 10080:80
    volumes:
      - ./backend:/work
      - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /work

EC2インスタンス作成

スクリーンショット 2020-10-10 21.43.16.png

画面右上のリージョンは東京に指定して下さい。
画面左上のサービスを開きEC2を選択。
探せない場合はすべてのサーピスから「EC2」と打ち込んで検索して下さい。
EC2をクリックしアクセス。

1:Webサーバーの作成
インスタンスを起動をクリックし、選択画面が出たらそこもインスタンスの起動をクリック。
スクリーンショット 2020-10-11 0.47.24.png

2:AMIを選択
AMIは「ubuntu 18.04」を選択。スクリーンショット 2020-10-10 21.45.31.png

3:インスタンスタイプの選択
新規登録から1年間無料の利用枠「t2.micro」を選択。
スクリーンショット 2020-10-10 21.45.44.png

4:インスタンス詳細
標準のまま進みます。
スクリーンショット 2020-10-10 21.45.52.png

5:ストレージ追加
標準のまま進みます。
スクリーンショット 2020-10-11 0.47.57.png

6:タグの追加
タグを追加し値を任意の名前を付けます。
今回は「awstest」という名前を付けました。
1つ作ったら次へ。
スクリーンショット 2020-10-10 21.46.12.png

7:セキュリティーグループ設定
任意のセキュリティーグループ名、説明を設定する。
今回は「test-docker」という名前を付けました。
ルールの追加を行い「HTTP」「HTTPS」「カスタム TCP ルール」を追加。
カスタムTCPのみ ポート範囲を指定。
今回は「10080」を設定します。
ソースには「カスタム」「0.0.0.0/0, ::/0」を設定。
全て設定し終わってら次へ。
スクリーンショット 2020-10-10 21.47.41.png

8:インスタンス作成
起動ボタンをクリック。
スクリーンショット 2020-10-10 21.47.49.png

キーペアの作成

インスタンスの「起動」ボタンをクリックすると、キーペアの作成画面が表示されます。
スクリーンショット 2020-10-10 21.48.03.png
初めてEC2インスタンスを作成する方は
新しいキーペアの作成を選択し、任意の名前をキーペア名につけます。
キーペアのダウンロードを必ず行って下さい。
そしてインスタンス作成をクリック。

作成したインスタンスの確認

EC2の画面に戻ってみると作成したインスタンスがある事が確認できます。
Nameのところにタグの項目で付けた名前があります。
「実行中」「2/2のチェックに合格しました」となったら完了です。
スクリーンショット 2020-10-10 22.04.12.png

続き

続きはこちら
AWSにdockerを使用したlaravelをデプロイ②

**間違い等ございましたらご指摘お願い致します**

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

今更Docker(-compose)の便利さを知る(使うにあたって参考にした情報リスト)

きっかけ

もともと仕事でdocker-composeを使っていたけど、誰かの作った設定を「こういうコマンドで使ってね」という感じだった。

ふと思い立ち、Wordpressを新たに作ろう/grafanaも立てたい/node-redとかも必要かもとなった。

初めはせっかくHyper-V使えるんだから、Hyper-V上の1イメージに作ればいいかとか思ったけど、ネットワーク的におかしい。
(githubのhttpsアクセスが拒否られる……)
もう解決策も分らんくなったのであきらめた。

docker-composeは、使いたいアプリ/システムをダウンロードして使えるんやでってことはなんとなく知ってたので、「じゃぁdocker-composeでやってみるか」となった。

相変わらず深くまでちゃんと分かっているわけではないが、参考にした情報をメモしておく。

WindowsにDockerのインストール

  • ググってDocker-for-Windowsにたどり着いてインストーラーでインストール
  • 前はHyper-V上に構成してたので、Win10 ProとHomeではインストール手順が違っていたはずだが、今はWSLを使う(パフォーマンスもこっちの方が良いらしい)っぽいのでHomeでも同じかもしれない
    • Hyper-V・・・もう要らんか・・・?
  • WSLが入っていないとインストール後にDocker-Desktopの設定の時に「WSLをインストールするまで動かへんで」と言ってくるので、ダイアログに従ってWSLをインストールする

docker-compose.ymlを作成する

とりあえず、docker-compose.ymlを書けば、ダウンロードしてきてビルドされることは知っていたので書こうとする。
が、何を書いていいのかわからない。

参考しにした情報

docker起動

Power Shell を管理者権限で起動して

> docker-compose up -d

これは仕事で使っているので知っている。

docker落とす

Power Shell を管理者権限で起動して

> docker-compose down

ボリューム(設定とかが記憶されているところ。DBにボリュームの指定が無いと、dockerを落とすたびにデータが消される)ごと落とす場合は

> docker-compose down -v

そして、Wordpressの言語設定が保存されないことに気づく。

volumesの設定について

先述のWordpressの指定は以下の通り。

docker-compose.yml
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

「あーdbのvolumesのdb_dataが、volumesのdb_dataに紐づいて保存されるんだな」と理解。

docker-compose.yml
version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - wordpress_html:/var/www/html

volumes:
  db_data:
  wordpress_html:

上記の指定は、ボリュームのパスがwindowsのパスからは分かりづらい指定。
参考にしたサイトでは

  wordpress:
    volumes:
      - ./wordpress/html:/var/www/html

とだけ指定して、wordpressと同レベルのvolumesは使っていない。
これは、指定したパスにボリュームの共有ディレクトリを作るか、Dockerが自動的にどっかにボリュームを作ってくれるのを信用するか違いだと思い込んでる。
(上記をしていたら何回かやっているうちに、DBにアクセスできなくなったのでやめた。。多分ディレクトリ内のファイルが壊れたりなんかしたのだろう・・・)

参考しにした情報

その後、grafanaやらを組み込んだ時に参考にしたもの

所感

Hyper-VではWordpressの1環境作るのにhttpsが通らないと何日も詰まっていたのに、docker-composeでは4コンテナを2時間で作れた。
これはdocker-composeに惚れてまう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker くん

compose構成
https://note.com/koushikagawa/n/nc63a8ae2e810
https://qiita.com/nemui_/items/f911be7ffa4f29293fd5
https://carametal.hatenablog.com/entry/2020/01/15/225637

version: '3' # docker-composeのバージョンを指定
services:
nginx: # サービス名
container_name: "nginx" # コンテナ名
image: nginx:1.14 # image名を指定。ここではDockerHub上のnginxイメージを指定している。
links: # ここで指定したサービス名とのリンクを作成する
- php # サービス名”php”と”nginx”を関連付ける
php:
container_name: "php"
image: php:7.2-apache
ports:
- '80:80'
volumes:
- ./html:/var/www/html

https://techplay.jp/column/613

同期
http://mashiroyuya.hatenablog.com/entry/dockerphp

僕たちのさくら
https://knowledge.sakura.ad.jp/13265/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker

compose構成
https://note.com/koushikagawa/n/nc63a8ae2e810
https://qiita.com/nemui_/items/f911be7ffa4f29293fd5
https://carametal.hatenablog.com/entry/2020/01/15/225637

version: '3' # docker-composeのバージョンを指定
services:
nginx: # サービス名
container_name: "nginx" # コンテナ名
image: nginx:1.14 # image名を指定。ここではDockerHub上のnginxイメージを指定している。
links: # ここで指定したサービス名とのリンクを作成する
- php # サービス名”php”と”nginx”を関連付ける
php:
container_name: "php"
image: php:7.2-apache
ports:
- '80:80'
volumes:
- ./html:/var/www/html

https://techplay.jp/column/613

同期
http://mashiroyuya.hatenablog.com/entry/dockerphp

僕たちのさくら
https://knowledge.sakura.ad.jp/13265/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む