Wordpressを導入し、独自テーマを作り、docker化する

最終目標 dockerコマンドで一発でワードプレスを展開可能 独自テーマを導入している。 可能であれば、フォーム送信などもしたい。つまり、独自のapiとのやり取りを可能にしたい。 まず知りたいのが、独自テーマを使うと、フロントエンドも自分の好きなように改変できるのか?という話。これは気になる。 dockerでワードプレスを使えるようにする。 まずは、公式docker hubこちらになります。 ふむふむ。簡単だな。こちらののdocker composeコマンドで一発で行けるか?? version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql volumes: wordpress: db: docker composeが使えないdockerもあるのよね。これが一番だるい。dockerの公式サイトからインストールするのが一番いい。 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin で、あとは、適当に、 ...

August 8, 2024 · 3 min · 576 words · Me

サイトの切り替え

背景 10年前に作ったサイトをまだ使っているということで、かなりPVが落ちてきているんだよね。 そこで、ワードプレスなどで作った新しいサイトに移行をしたいと思っている。 端的にいうと、名前解決先を新しいIPと紐づければ良さそうに感じるが、本当にそれでいいのだろうか? ここではサイトの引越しの際に気をつけるべきポイントを徹底的に考察する サイト引越しの際に気をつけるべきポイント 引っ越す方法 とりあえず、ワードプレスで同じサイトを作る 301でリダイレクトってなんだ? Lets ecryptで暗号化する場合、cronで自動的に更新できるようにしないとな。

August 8, 2024 · 1 min · 11 words · Me

Master_ansible

背景 業務で必要なansibleをマスターしたい。 ansibleとは ansibleとは、Infrastructure as Codeを実現するための構成管理ツールである。 例えば、middlewareをデプロイする際に、ある程度の複雑さでのデプロイを可能にするツールである。 ansibleの特徴 可読性を意識した設定ファイル 柔軟性がないとも言える 豊富なモジュール群 これは柔軟性の高い(=可読性が低い)ことの裏返しだと思う 冪等性の担保 何度ファイルを実行しても、対象の結果は変わらない agentlessなツール ローカルホストで実行し、sshで各サーバにログインして設定をする。構成管理をしたいサーバに別途ソフトを導入する必要などはない。 用途が似たツールにterraformがある。それとの違いに関してはまた今度としよう。 ansibleのアーキテクチャ ansiblでは、コマンドを実行する「コントロールノード」と処理の対象となる「ターゲットノード」に分かれる。設定ファイルに書かれたモジュールをコントロールノード側でPythonのコードに変換し、sftpでターゲットノードに転送し、そこでPythonコードを実行する流れになっている。そのため、コントロールノード、ターゲットノードのどちらにもPythonがインストールされている必要がある。 ansibleの用語 インベントリ:ターゲットノードの一覧が書かれた設定ファイルである。ターゲットノードをグループ化することも可能である。 プレイブック:実行するモジュールが書かれた設定ファイルである。 モジュール:「ファイルの転送」や「サービスの起動、停止」などの処理の単位。Ansible側で用意されたモジュールを使って構成管理をする。(では、逆にansibleのモジュールにない設定を反映させたい場合にはどうするのか?ーー>自分でモジュールを開発することもできる) プラグイン:Ansibleの基本機能を拡張してくれる。モジュールはタスクとして実行されるが、プラグインは、Ansible コアを拡張してくれる感じです。 コレクション: ansibleのインストール方法 apt install ansible-core インストールを確認 ray@delta:~$ ansible-playbook --version ansible-playbook [core 2.12.0] config file = None configured module search path = ['/home/ray/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible ansible collection location = /home/ray/.ansible/collections:/usr/share/ansible/collections executable location = /usr/bin/ansible-playbook python version = 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] jinja version = 3.0.3 libyaml = True 設定ファイル ~/.ansible/ansible.cfg配下におくといいです。このファイルに以下の設定を書き込みましょう ...

August 4, 2024 · 1 min · 194 words · Me

Master_DNS

DNSはrequestとresponseが同じ系形式のUDPパケットでやり取りされるプロトコルである。 で、実はdigがdnsプロトコルのパケット内容を忠実に再現しているのです。だから、これマスターするDNSがほぼ分かったということになります。 関連ドキュメント ハンズオンの ハンズオンを紹介しているやつ rfsの読み方を説明している資料 ルートDNSの場所 digコマンドでの遊び方 digでの遊び方 dnsの全体像 dig関連 digの基本的なオプション +noedns : tcpで問い合わせ +norec : 非再起問い合わせを強制する。 qr : queryレスポンス rd : recursion desired : 再起問い合わせ要求。(Set by the sender of the request if the server should attempt to resolve the query recursively if it does not have an answer readily available.) ra : recursion available : 再起問い合わせ対応が可能か?(Set by the server to indicate whether or not recursive queries are allowed.) 基本的に、名前解決と言ったら8.8.8.8などのDNSキャッシュサーバが再起問い合わが実行して返してくれる。 しかし、権威DNSは再起問い合わせができないからね。 rdがついてもraがなかったら非再起問い合わせができないということになります。いくつかみてみましょうか? いくつかDNSレコードを送ってみましょうか? dig @1.1.1.1 +norec blog.ingenboy.com ; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> @1.1.1.1 +norec blog.ingenboy.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21079 ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;blog.ingenboy.com. IN A ;; Query time: 1 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) ;; WHEN: Thu Aug 22 09:05:47 JST 2024 ;; MSG SIZE rcvd: 46 +norecをつけたのでDNSサーバは非再起問い合わせで名前解決ができません。そのため、answer sectionがないわけですね。 つまり、名前解決できなかったわけです。それにもかかわらずGot answerって書いているのはタチが悪いよね。 ...

August 4, 2024 · 4 min · 757 words · Me

Telegraf + InfluxDBでシステムモニタリング

参考文献 Telegraf grafana prometheus 最終成果物 influx_dbのダッシュボード 背景 業務でnginxの運用に携わっているのだが、nginxのrpsやレスポンスステータスごとの返却数など、どうやってモニタリングしているのか気になっていた。telegrafを使っていたのはわかったんだけど、実際にどうやってデータを取って、それをどうやってデータサーバで保存して、可視化をしていたのか、非常に気になっていたのです。それが今日解決しました。Telegraf、grafana、そして、prometheus,結構使えそうです。この記事では、メトリクスを可視化するためのツールを揃えていこうと思います。 Telegrafの概要 Telegraf is an agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 他にもTelegrafこういう感じのTelegrafの説明もあります。僕はこっちの方が好きだった Telegraf, a server-based agent, collects and sends metrics and events from databases, systems, and IoT sensors. Written in Go, Telegraf compiles into a single binary with no external dependencies–requiring very minimal memory. らしいですね。 collecting and writingなので、データをどこからか取ってきて、どこかに送るというわけです。そうです、inputとoutputを決められるわけですね。それも膨大な数のInputとoutputがあります。正直これは驚きました。こんなにあるんかとね。すごいです。ちょっと使えそうなinputとoutputを何個かpickupしておきたいと思います。 input Apache Input Plugin BIND 9 Nameserver Statistics Input Plugin Ceph Storage Input Plugin CGroup Input Plugin Conntrack Input Plugin CouchDB Input Plugin CPU Input Plugin Disk Input Plugin DNS Query Input Plugin Docker Input Plugin Kernel Input Plugin Kubernetes Input Plugin Lustre Input Plugin MySQL Input Plugin Nginx Input Plugin って感じで本当になんでもある。これはえぐい。 16. nvidia-smi 17. postgres 18. proxmox 19. prometheus ...

August 1, 2024 · 7 min · 1380 words · Me

2024Aug_TODO

2024/08/1時点でのタスクリスト 開発関係 nginx + telegraf + grafana + prometheusで、外部から可視化したい!!ここにはめちゃめちゃ技術が詰め込まれていますからね。いいですねーーー! –>結局influxDBとtelegrafを使ってシステムモニタリングすることにした。これは楽しいですね。しかし、血胸知識なんですよね。知恵は使ってない。知恵を振り絞ってこそ楽しいのではないか。 早めにインターネット回線を契約しよう 自宅のraspiでK8Sクラスタを展開してくれ。でtelegrafでk8sのシステムをモニタリングして、可視化しよう。可視化は多分そこまで難しくないと思う。頑張ってくれ!! NISA口座を開設 JC_booking_centerを早く稼働させてくれ、同時にjc_licence_translationを早く作ってくれ。とりあえずは、予約を承って、承った旨をメールで送信し、こちらからもみられるようなシステムが作れるといいかな。はい、そんな感じ。 –> 作らずに解決することにした。 自宅のK8S上にecho-serverを立てて、proxyを複数立てて、さらにvipを立てて、vegetaで負荷試験ができるようにしたい。そして、様々なメトリクスが取れるようにしたい。どうやるんだろうか。 I and shiraki-san decided to develop GSLB using go lang. It is going to be funny Learn DNS (こっちはかなりいい感じで進んでいる。) Learn How to write packer parser using Go on TCP Layer. It is also going to be funny. 例の競馬システムを動かす時が来た。自宅のk8sで動かせるようにmanifestファイルを書いてください。よろぴくお願いしますです。 Go言語でdistributed file systemを作ってくれ!このyoutubeを見てでもいいし、goで分散システムを作ろうって入ってきたあの本でもいい。どっちでもいい。ただ、後者だとk8s上に作った分散システムを展開するので、上のやつとも親和性が高い気がしています。はい。 ISUCONの過去問を解きましょう。今年のISUCONにおそらく白木さんと出ることになります。足を引っ張りたくないので頑張ります。 ーー>isucon14の申し込みが始まったという話です。頑張りましょう。 ...

August 1, 2024 · 1 min · 73 words · Me

リンクレイヤーで使われるネットワークコマンドをまとめる

リンクレイヤー MACアドレスですねー。実際に通信をする相手を指定するときはMACアドレスを指定しますね。 Network deviceがMACアドレスを持っていて、OSはIPとMACの対応表をARPテーブルに持っているんですね。 IPからMACを知ることをARP (address resolution protocol) って言いますね。 脆弱性 正直、ARPは脆弱性まみれに見える。 というのも完全に性善説に基づいているから。 「xxのIPアドレスを持っている機器はどこにありますかーー??」に対して、「おれですー」ってやってくるやつが、本当にそうだと信じてしまう。 だからARP spoofingが簡単にできてしまうということだ。ちょっと実験してみたいよね。 kickthemout LAN内のほかのノードを締め出すツール 実験していましょうか。 sudo apt install git git clone https://github.com/k4m4/kickthemout.git sudo apt install nmap cd kickthemout sudo apt install pip sudo -H pip3 install -r requirements.txt arpspoof こっちの方が簡単だね。 arpspoof

July 29, 2024 · 1 min · 44 words · Me

Learn_k8s_3

k8s構築日記その3。 過去の奮闘記録。 構築日記その1 構築日記その2 実は今まで一回もK8S上でアプリを動かしたことがないという。 これは正直恥ずかしいですね。構築はしたが、動かせはしていないという話だな。勿体無い!! ってことで、今回は、K8S構築日記その3ということで、構築日記その1と構築日記その2を振り返りつつ、 ちゃんとアプリをクラスタ上で動かせるようにしたいと思います。はい。動かすアプリは、そうです、例の競馬アプリです。 そして、外部に公開して、しかも、インターネットから見えるようにしたいと思う。これができるとまじで最高だぜへへ。 まずは構築から昔の俺が残してくれた手順に従って構築をやります。 クラスター情報 master : controle plane gamma : worker zeta : worker でやりたいと思います。ちなみにマスターのosはraspbianです。 バージョン情報 このサイト を参考にバージョンを決めた。 k8s (kubelet : kubeadm) : 1.27 containerd : 1.7.0 + なので、1.7.2でインストールする。 containerdのarmバイナリ k8sを導入するまとめ 1. containerdを導入。 k8sのv1.25以降は、コンテナエンジンにdockerエンジンを使えません。(理由は、dockerがcriを満たしていないから)。criを満たしてるcontainerdをインストールする必要があります。 containerdのインストールは、githubのリポジトリからできます。同時に、runcとcniもインストールしてださい。 ちなみに、cniは、container network interfaceで、まあ、コンテナのネットワークを操るためのapiですね。 で、そのapiを操るのが、cniプラグイン。で、cniプラグインには、calicoだったり、flannelだったりがあるわけですね。で、プラグインには、3種類のモードがあって、オーバーレイと、ルーティングと、アンダーレイですね。オーバレイを使うことで、別のホスト上にいるコンテナ同士が同じセグメントにいるようになります。 で、だけど、/etc/cni/net.dにはデフォルトのやつ、おかなくて結構です。まったく問題ありませんので、お気になさらず。ということで。 ちなみに、これにはruncも入っているので安心してインストール/ダウンロードしてください。全く問題ないです。 wget https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-arm64.tar.gz mkdir containerd_dir mv cri-containerd-cni containerd_dir tar xvfz cri sudo mkdir /etc/containerd 必要なものを必要なディレクトリに置いてくれるように以下のスクリプトを実行 #!/bin/bash # Define the paths to your installation directories CONTAINERD_BIN_DIR="/usr/local/bin" CONTAINERD_SBIN_DIR="/usr/local/sbin" CONTAINERD_ETC_DIR="/etc/containerd" CONTAINERD_SYSTEMD_DIR="/etc/systemd/system" CONTAINERD_OPT_DIR="/opt/" # Define the source directory where you extracted the Containerd files SOURCE_DIR="/home/ray/containerd_dir" # Move binary files to /usr/local/bin cp -r "$SOURCE_DIR/usr/local/bin/"* "$CONTAINERD_BIN_DIR/" # Move sbin files to /usr/local/sbin cp -r "$SOURCE_DIR/usr/local/sbin/"* "$CONTAINERD_SBIN_DIR/" # Move etc files to /etc/containerd cp -r "$SOURCE_DIR/etc/"* "$CONTAINERD_ETC_DIR/" # Move systemd service file to /etc/systemd/system cp "$SOURCE_DIR/etc/systemd/system/containerd.service" "$CONTAINERD_SYSTEMD_DIR/" # move cni and other utils to opt cp -r "$SOURCE_DIR/opt/containerd" "CONTAINERD_OPT_DIR" cp -r "$SOURCE_DIR/opt/cni" "CONTAINERD_OPT_DIR" # Reload systemd to recognize the new service systemctl daemon-reload echo "Containerd installed successfully." nerdctlも一緒にいんすとる ...

July 27, 2024 · 7 min · 1455 words · Me

ルータ+DHCPサーバ+DNSサーバ+K8Sコントロールプレーン on Raspi 5 with 8GB RAM(下書き)

背景 ついにインフラエンジニアになった。インフラエンジニアになったのであれば、インフラ関係を一通りこなせないと話にならないだろう! というお話です。ということで、クラスタ作って、クラスタがいい感じに運用できるようにいろいろとインフラを構築していこうと思う。 さらに言うと、業務でansibleを使っているので、IaC(インフラストラクチャasコード)を実現したいと思っている。これができればいつでもそのインフラが再現可能になるからね。練習も込みで。 要件 完全に独立したネットワークを構築したいと思っている。そのため、 ルータ が必要。この時、内部ネットワークから外部にアクセスする必要がないよね。だから、natでいいわけだね。 次に、サブネット内でDHCPをしつつ、アドレスの固定を一括で管理したい。 それの実現方法がDHCPを使って、macアドレスとipを対応付けるという方法。 さらに、ネットワーク内で、ipアドレスではなく、ドメイン名でアクセスができるようにしたいので、DNSサーバも立てたい。 最後、K8Sのコントロールプレーンだね。これは作りたい。 K8Sサーバに何を立てるかだけど、とりあえずechoサーバを立てて負荷試験をやってみたい。そうだね。将来的には配信サーバなどを立てられるといいのだけれど 後は、prometheus + graphanaで、負荷を可視化できるとなおいいよね。時系列でどれくらい負荷がかかっているのかが見れると最高だと思います。 各サーバにいちいち入るのは面倒くさいので一括でsshしたいと思っています。これを可能にする方法を岡田さんが考えてくれました。 msshですね。 各物理サーバ(ラズパイ)のハードウェアスペック router : raspi 5. RAM 8G. Storage 128G beta : raspi 4. RAM 1G. Storage 32G delta: raspi4. RAM 4G Storage 64G phi (f): raspi4. RAM 8G. Storage 32G gamma: raspi4. RAM 8G Storage 128G omega: raspi4. RAM 1G storage 32G zeta: raspi4. RAM 8G ここから使える奴だけ選抜する。 router, delta, phi, gamma, zeta の5台。一台は、router + dhcp + dnsの役割を持たせる。 容量的にdeltaがよさそう。そのほかは、k8sクラスタになる。頑張ってくれ。 k8sちゃんと動いてくれ!! ちなみに、 ...

July 27, 2024 · 12 min · 2518 words · Me

Great_ssh

背景 openVPNを使うことでsite2siteルーティングができるようになった。 しかし、そのネットワークに参加するためにはopenVPNで発行されるクライアント証明書が不可欠である。 それが面倒くさいという話だ。 実際のアプリではL7でのやり取りが多いから、L4まで権限は必要ない。 そこで、sshを使ってhttpレイヤーでトンネルを構築しようという話だ。 もうチャットGPUにききますね My Question 手元のラップトップー>踏み台サーバー>webサーバ があったとします。 この時、webサーバの80番ポートでhttp通信を待ち受けているサーバがいます。 手元のラップトップー>webサーバ にアクセスしたいです。 やり方を教えてください。 chatGPTの回答 結論 ssh -L 8080:192.168.1.2:80 user@bastion.example.com 8080はローカルマシンのポート番号 192.168.1.2はWebサーバのIPアドレス 80はWebサーバのポート番号 userは踏み台サーバのユーザー名 bastion.example.comは踏み台サーバのホスト名またはIPアドレスです。 ssh -Lオプションとはなんなのか? これは後で調べます。

July 23, 2024 · 1 min · 29 words · Me