ローカルlinuxをubuntu24にバージョン上げて様子見しながら、google cloudのも準備。
Google cloudのubuntu
ちゃんとubuntu24LTSのイメージもgoogle cloudにあった。
intel系のだけやなくarmもあんねんな。
macosとかwindowsとか出始めは「バグ多いから出始めは使ったらアカン」みたいな人多いけど、ベータ版とか極端な危険の懸念とかないかぎり、必要機能が使えるって判断したらすぐ利用開始に着手するで。
linuxでもwindowsでもOSは新規インストール一択。
パーティション新規作成して入れる。
windows98もwindows11でもアップグレードしてインストールしたらうまくいかんこと多かったな。
今はvmあるんやから、新規でvm作ってデータパーティションだけマウントしたらええ。
新OSを準備
「noble numbat」って名前長い。
端的に「numbat」でええ。
nobleの意味は「高貴で尊い」ってなってて、あんまり好かん。
フクロアリクイの絵柄が王冠みたいになってた壁紙とかイヤやなぁ。
ubuntu22はjelly-fslinuxってつけて作ってたから、24はnumbat-fslinuxってつける。
やることは前と同じ。
google cloudのコンソールで、まずは外部IPと内部IPを準備・特定しとく。
次にネットワーキングにファイアウォールのタグつけて、ネットワークとサブネットワークの設定つけたら鍵ファイル作って設定。
1回作っておさらいしながらやっておいて潰す。
2回目に点検しながら作ってまう。
teraterm接続できてssh転送が終わってdocker入れる直前まで、E2シリーズのマシンタイプにしとこ。
uid=1000のユーザ名を変更
今更なんやけど、osインストールしたらユーザidが1000としてubuntuって名前のユーザが元からある。
以下、赤い背景がubuntu22(jammy jellyfish)で水色のがubuntu24(noble numbat)。
ローカルlinuxのubuntu24は、centosの頃から使ってるファイル類があるから、uid=1000は自分のユーザでないと困んねん。
特にgoogle cloudでファイル維持してるものをローカルlinuxに持ってきたとき、uidが変わってたらgit管理してるファイルがいっつも全更新みたいな感じになる。
一時的に別ユーザ作っておいて、ubuntuユーザを削除して作り直してく。
ユーザidの操作メモを書いてくれてる人がいた。ロックする方法もあった。
作者さんありがとう。
変更する方法ってのもあるのね。
作り直した結果はこうなった。
naritomitsukasa@gcp-numbat-fslinux:~$ cat /etc/passwd | grep nari
naritomitsukasa:x:1101:1101::/home/naritomitsukasa:/bin/bash
nari:x:1000:1000::/home/nari:/bin/bash
naritomitsukasa@gcp-numbat-fslinux:~$
ログインしといたまま、次に実施するssh鍵作った後で$HOME/.ssh/authorized_keysに最終的に作った鍵ファイルの内容を入れてく。
ssh鍵作成とtera term接続
ubuntu22へのバージョン切り替えのときはブラウザのssh画面開いてみたけど、全然使わんからいきなりteraterm接続してく。
ローカルのubuntu24で鍵ファイル作る。
nari@nafslinux-ubu24:~$ ssh-keygen -t rsa -b 4096 -C "nari@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nari/.ssh/id_rsa): /home/nari/id_rsa_nari.txt
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nari/id_rsa_nari.txt
Your public key has been saved in /home/nari/id_rsa_nari.txt.pub
The key fingerprint is:
SHA256:k7PodHLzgpNc8u2HpXxnScdV+3iarBriDYXGWiFzKJM nari@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
| |
| . . .|
| Z + o o|
| o = + ..|
| T . oo|
| .=.= . o =|
| .=*Go.+ o * |
| o==o*=.o B |
| ...o=+.+ |
+----[SHA256]-----+
nari@nafslinux-ubu24:~$
そういえばmacでも作れるんかな。モジュール使えるみたいやけどやったことないな。
作ったキーをgoogle cloudのコンソールから登録するときはこのへんから登録できる。
手動でauthorized_keys作るんやったらパーミッションは700にしとかなアカン。
teratermで使えるようにしてく。
include 'Y:_connect\connect\teraIni\gvis.ini'
; --- 接続 --------------
keyfile=Y:_connect\connect\GCP\key191018-privateKEY /F=Y:_connect\connect\teraIni\blue.ini'
conSTR = 'yy.yy.yy.yy /ssh /auth=publickey /user=nari /passwd='
strconcat conSTR gvis_gcp_nari
strconcat conSTR ' /keyfile='
strconcat conSTR gvis_KY6
strconcat conSTR ' /F='
strconcat conSTR gvis_iPTH
strconcat conSTR 'Blue.ini '
strconcat conSTR '/timeout='
strconcat conSTR gvis_TOUT
; ---debug --------------
; messagebox conSTR 'info'
connect conSTR
if result <> 2 goto end
wait gvis_wS1
sendln "df -h | grep -v tmpfs"
wait gvis_wS1
sendln "w"
:end
つながるとこうなる。
ローカルlinuxとuidそろえるの面倒やね。
入ってるモジュールの確認
OSバージョンがubuntu24なのはローカルlinuxと同じ。
aptでモジュールをリストして眺める。
左がgoogle cloud、右がローカルのubuntu24。
右はdocker入ってたりgnomeとか入ってるから、左はグレー箇所多いわな。
モジュールのリストはこんなふうに取る。
root@gcp-numbat-fslinux:~# apt list --installed | more
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Listing...
adduser/noble,now 3.137ubuntu1 all [installed,automatic]
apparmor/noble,now 4.0.0-beta3-0ubuntu3 amd64 [installed,automatic]
:(中略)
google特有のんとかあるけど、不要そうなのはなさそう。
最初にローカルlinuxをubuntu24に変更したときみたいな問題はsystemctl status systemd-networkd-wait-online.service
で見ても出てへんかった。
もう使わんようになったから、今年からsambaはaptでインストールせん。
apacheとdocker入れてデータパーティション使えるようにしたらゴールや。
スクリプトの流し込み
フォルダ構造をteratermの画面2つ開いて見比べながらマネして作る。
作業のルートは/gvis
でここに全部集めて展開してく。
細かいコマンドラインを毎回ポチポチ入力するのイヤやからスクリプト使う。
最後には別ディスクをマウントさせて使ってく。
まずは普段使いの一般ユーザとrootの.bashrcにエイリアス書き足しとく。
scriptを直近のバックアップから持ってきてgitbashからtar.gzで固めたものをscp転送で展開する。
エイリアスきいてる状態で確認してく。
nari@gcp-numbat-fslinux:/gvis$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias dc='cd /gvis/nari/nariDocs/Docker'
alias dff='df -h | grep -v DockerSys | grep -v "dev/loop"'
alias doc='cd /gvis/nari/nariDocs'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alFh --time-style="+%Y-%m-%d %H:%M:%S"'
alias ls='ls --color=auto'
alias rmgomi='removegomi'
alias sc='cd /gvis/script'
alias tree='pwd;find . | sort | sed '\''1d;s/^\.//;s/\/\([^/]*\)$/|--/;s/\/[^/|]*/| /g'\'''
nari@gcp-numbat-fslinux:/gvis$ sc
nari@gcp-numbat-fslinux:/gvis/script$ cd ..
nari@gcp-numbat-fslinux:/gvis$ tree | more
/gvis
|--script
| |--000_serviceStart.sh
| |--001_sysBackup.sh
| |--002_makeTar.sh
| |--002_makeTar.sh.org
| |--006_mount_ext4.sh
| |--006_mount_smb.sh
| |--007_umount_ext4.sh
| |--007_umount_smb.sh
| |--008_mailTest.sh
:(中略)
| | |--onlchk
| | |--onlchk.conf
| | |--smb_chk.conf
| | |--syslogchk
| | |--syslogchk.conf
| | |--syslogchk.dat
| | |--syslogchkEx.conf
| | |--syslogchkReset
| | |--vino_chk.conf
| | |--xrdp_chk.conf
次にリンク作る。
いっつもやり方忘れるのがリンクの作成。
リンク先とリンク元の書き方をほぼ100%入力を間違う。
/nariってフォルダはローカルlinuxにあるから揃えて作ってる。
コマンドラインでln -s
って書いた後、パラメータのどっちがどっちやったか思い出せんから書いとく。
lnの引数の1つ目にリンク先、2つ目にリンクを書いて、次に作りたいリンク名を書くのねって、いっつも忘れる。
年に1回も使わんもんな。
リンク作成とルートにあるフォルダはこんな感じ。
nari@gcp-numbat-fslinux:/$ sudo ln -s /gvis/nari /nari
nari@gcp-numbat-fslinux:/$ ls -l /
total 80
lrwxrwxrwx 1 root root 7 Apr 22 13:08 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Feb 26 12:58 bin.usr-is-merged
drwxr-xr-x 5 root root 4096 Jun 7 08:54 boot
drwxr-xr-x 16 root root 3880 Jun 13 19:37 dev
drwxr-xr-x 102 root root 4096 Jun 13 20:27 etc
drwxr-xr-x 6 root root 4096 Jun 13 21:12 gvis
drwxr-xr-x 4 root root 4096 Jun 12 22:03 home
lrwxrwxrwx 1 root root 7 Apr 22 13:08 lib -> usr/lib
drwxr-xr-x 2 root root 4096 Apr 8 14:37 lib.usr-is-merged
lrwxrwxrwx 1 root root 9 Apr 22 13:08 lib64 -> usr/lib64
drwx------ 2 root root 16384 Jun 7 08:52 lost+found
drwxr-xr-x 2 root root 4096 Jun 7 08:50 media
drwxr-xr-x 2 root root 4096 Jun 7 08:50 mnt
lrwxrwxrwx 1 root root 10 Jun 13 21:24 nari -> /gvis/nari ⭐️lnでこれができとる!!
drwxr-xr-x 2 root root 4096 Jun 7 08:50 opt
dr-xr-xr-x 168 root root 0 Jun 13 19:37 proc
drwx------ 4 root root 4096 Jun 13 20:54 root
drwxr-xr-x 26 root root 820 Jun 13 20:59 run
lrwxrwxrwx 1 root root 8 Apr 22 13:08 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Mar 31 09:00 sbin.usr-is-merged
drwxr-xr-x 6 root root 4096 Jun 7 08:54 snap
drwxr-xr-x 2 root root 4096 Jun 7 08:50 srv
dr-xr-xr-x 13 root root 0 Jun 13 20:43 sys
drwxrwxrwt 11 root root 4096 Jun 13 21:10 tmp
drwxr-xr-x 12 root root 4096 Jun 7 08:50 usr
drwxr-xr-x 13 root root 4096 Jun 12 21:32 var
nari@gcp-numbat-fslinux:/$
これでディスクマウントしたらデータが使える。
リンク元はdockerコンテナの永続化領域で、リンク先は親ホストがgoogle driveへ保管するときのバックアップ対象や。
あとはスクリプトの動作調整をやってく。
テストメール
過去メモ見ながらやってく。
テスト用スクリプトの内容をjellyからnumbatに書き換えてメール飛んでくる。
文字化けもないし、快調でええねぇ。
Content-Type: text/plain; charset=UTF-8
Subject: auto-testMail-gcp-gvis-dkLinuxTestMail-numbat
User-Agent: mail (GNU Mailutils 3.17)
Date: Fri, 14 Jun 2024 19:50:40 +0000
Message-Id: <20240614195040.F2C234088F@gcp-numbat-fslinux.intra.gavann-it.com>
From: root <root@gcp-numbat-fslinux.intra.gavann-it.com>
////// gcp-gvis-naLinux report start //////
////// gcp-gvis-naLinux レポートテスト //////
////// gcp-gvis-naLinux report end //////
OS起動時にメール飛ばすようにしてるから、OS再起動して飛んでくるか確認。
Content-Type: text/plain; charset=UTF-8
Subject: auto-Start_gcp-numbat-fslinux
User-Agent: mail (GNU Mailutils 3.17)
Date: Sat, 15 Jun 2024 07:41:18 +0900
Message-Id: <20240614224118.EEF1C40462@gcp-numbat-fslinux.intra.gavann-it.com>
From: root <root@gcp-gvis-dklinux.phy.lolipop.jp>
gcp-numbat-fslinux.intra.gavann-it.com just has begun.
////// gcp-gvis-numbat-fslinux Started //////
rcloneで使うユーザ
rclone使わせてもらってて、バックアップはrsyncしてtar.gzとzipで作った後にgoogle driveにアップロードしてる。
権限とか狂ったらイヤやから、ubuntu22で使ってたuidとシェルを揃えてOSユーザ作る。
useradd -m -s /bin/sh -u 1005 gavannitsales
rcloneの設定ファイルもscp転送しておいとく。
手動で毎回googleのアカウント設定せんでええから楽。
root@gcp-numbat-fslinux:/gvis/script# ls -l /home/gavannitsales/.config/rclone/
合計 4
-rw------- 1 gavannitsales gavannitsales 494 6月 12 07:24 rclone.conf
root@gcp-numbat-fslinux:/gvis/script#
設定入れてlsl
したらファイルのリスト表示してくれる。
結果は21万行もあって長いからカット。
root@gcp-numbat-fslinux:/gvis/script# rclone --config /home/gavannitsales/.config/rclone/rclone.conf lsl gvisDrive:/ | wc -l
21347
root@gcp-numbat-fslinux:/gvis/script#
データディスクのマウント
ubuntu22をOS停止してからデータディスク外しとく。
外したらubuntu24にデータディスク足す。
こっちはOS停止せんでええ。
centosの頃から使ってるext4の「標準永続ディスク」やから、ホンマは「バランス永続ディスク」に作り変えしたいけど性能と費用検討終わってへんから今はガマン。
マウント対象になってるか確認。
後ろのほうに322GBでext4の/dev/sdbが見えとるやん。
root@gcp-numbat-fslinux:/gvis/script# parted -l
モデル: Google PersistentDisk (scsi)
ディスク /dev/sda: 32.2GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
:(中略)
モデル: Google PersistentDisk (scsi)
ディスク /dev/sdb: 322GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: loop
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム フラグ
1 0.00B 322GB 322GB ext4
root@gcp-numbat-fslinux:/gvis/script#
マウントして見えてるかどうか確認。昔のスクリプトやから、fsckを3回やってからマウントしてる。
google cloudのコンソールでは300GB、partedは322GB、dfしたら295GBって見えるのなんとかならんのかなぁ。
root@gcp-numbat-fslinux:/gvis/script# sh ./006_mount_ext4.sh
fsck from util-linux 2.39.3
e2fsck 1.47.0 (5-Feb-2023)
/dev/sdb: clean, 578681/19660800 files, 24061202/78643200 blocks
fsck from util-linux 2.39.3
e2fsck 1.47.0 (5-Feb-2023)
/dev/sdb: clean, 578681/19660800 files, 24061202/78643200 blocks
fsck from util-linux 2.39.3
e2fsck 1.47.0 (5-Feb-2023)
/dev/sdb: clean, 578681/19660800 files, 24061202/78643200 blocks
root@gcp-numbat-fslinux:/gvis/script# dff
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 2.8G 26G 10% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 783M 992K 782M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs 56K 24K 27K 48% /sys/firmware/efi/efivars
/dev/sda16 881M 61M 759M 8% /boot
/dev/sda15 105M 6.1M 99M 6% /boot/efi
tmpfs 392M 12K 392M 1% /run/user/1000
/dev/sdb 295G 87G 209G 30% /gvis/nari
root@gcp-numbat-fslinux:/gvis/script#
awsやったらefsっていうnfsのサービスがある。
なんと、課金は使った領域のサイズ。
ec2でマウントしたとき、空き容量が8エクサバイト=800万テラバイトって表示されたときはのけぞった。
一時的に大きなデータ置きたいなってときは、こっちのほうがええ。
googleにも似たようなのでfilestoreがある。
課金は確保した分なのが苦しいところで、awsと同じように使った領域のサイズってなってくれたらええのに・・・。
apache2とdocker稼働
親ホストとしてはapache2とdockerが動けばええ。
永続化領域にリンク作って使うようになったからsambaは使わん。
ホンマはapache2やめてnginxに変えてもええんやけど、業務でapache使うことがあるし、やっぱり設定ファイルには時々触れといたほうがええから今回も使い続ける。
apache2はスンナリ
ローカルでやったことをほぼそのままやるだけ。
djangoのアプリケーションと、gitlabへのリンクがあるhtmlを表示させれたらOK。
dockerはそのままではアカン
ubuntu22で使ってたデータディスクには業務データも入ってるんやけど、dockerのシステムデータが入ってる。
システムデータってのはイメージとコンテナね。
データディスクをちゃんとマウントできたら、ビルドすっ飛ばしてコンテナが即時で動く(そんなに甘くないんやけど)。
docker本体のサービス定義が書いてある/usr/lib/systemd/system/docker.service
を書き換えてsystemctl daemon-reload
しとく。
## ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock --storage-driver=overlay2 --data-root /gvis/nari/nariDocs/Docker/nariDockerSys
イメージとコンテナの確認。
行けるかな。
root@gcp-numbat-fslinux:/gvis/script# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce 16.8.0-ce.0 2ba59b135b48 4 months ago 2.95GB
sv_django 4 d47b4e9d61f5 9 months ago 1.01GB
ubu 22gvis 45bc047bf0c0 9 months ago 3.74GB
mariadb 1011 0d20f8668756 15 months ago 401MB
steveltn/https-portal 1 52ea65ae915a 16 months ago 348MB
gitlab/gitlab-ce 15.7.0-ce.0 414f0330d57c 18 months ago 2.8GB
mariadb 10.5.7 1b3986d60f13 3 years ago 414MB
root@gcp-numbat-fslinux:/gvis/script#
root@gcp-numbat-fslinux:/gvis/script# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a03e8a387e39 gitlab/gitlab-ce:16.8.0-ce.0 "/assets/wrapper" 4 months ago Exited (137) About an hour ago docker-SVgitlab2024-1
e47605f264ed sv_django:4 "supervisord -n" 4 months ago Exited (137) About an hour ago docker-sv_django-1
f1416ef7b30f steveltn/https-portal:1 "/init" 4 months ago Exited (0) About an hour ago docker-sv_https-portal-1
bc958d69a5a1 ubu:22gvis "/usr/bin/run.sh" 4 months ago Exited (0) About an hour ago docker-cl_ubu22-1
be7c55df3436 mariadb:1011 "docker-entrypoint.s…" 4 months ago Exited (0) About an hour ago docker-sv_mariadb1011-1
root@gcp-numbat-fslinux:/gvis/script#
おお、イメージとコンテナ見えてOKやん。
永続化領域もそのまま存在するからdocker compose -d
ってするとコンテナ動かせる。
gitとdjangoとmariadb動いてくれるやろか。
結論としては、コンテナ全部作り直さなアカンかった。
root@gcp-numbat-fslinux:/gvis/nari/nariDocs/Docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a03e8a387e39 gitlab/gitlab-ce:16.8.0-ce.0 "/assets/wrapper" 4 months ago Up 8 seconds (health: starting) 22/tcp, 443/tcp, 0.0.0.0:10881->80/tcp, :::10881->80/tcp docker-SVgitlab2024-1
e47605f264ed sv_django:4 "supervisord -n" 4 months ago Up 6 seconds 0.0.0.0:48080->8080/tcp, :::48080->8080/tcp docker-sv_django-1
f1416ef7b30f steveltn/https-portal:1 "/init" 4 months ago Up 8 seconds (health: starting) 0.0.0.0:40080->80/tcp, :::40080->80/tcp, 0.0.0.0:40443->443/tcp, :::40443->443/tcp docker-sv_https-portal-1
bc958d69a5a1 ubu:22gvis "/usr/bin/run.sh" 4 months ago Up 7 seconds 0.0.0.0:30022->22/tcp, :::30022->22/tcp, 0.0.0.0:33389->3389/tcp, :::33389->3389/tcp docker-cl_ubu22-1
be7c55df3436 mariadb:1011 "docker-entrypoint.s…" 4 months ago Up 8 seconds 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp docker-sv_mariadb1011-1
root@gcp-numbat-fslinux:/gvis/nari/nariDocs/Docker#
nmonで見たら、めっちゃ頑張って動こうとしてるやん。
ここまで来たら、e2-mediumでvCPU2つと4GBのメモリ動かしてたマシンリソースをグレード上げてこか。
lnmonq16pqqqqqq[H for help]qqqHostname=gcp-numbat-fsRefresh= 2secs qqq06:53.20qqqqqqqqqqqqqqqqqqqqqk
x CPU Utilisation qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x---------------------------+-------------------------------------------------+ x
xCPU User% Sys% Wait% Idle|0 |25 |50 |75 100| x
x 1 64.1 15.7 20.2 0.0|UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssssssWWWWWWWWWW> x
x 2 83.4 12.1 4.5 0.0|UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUssssssWW> x
x---------------------------+-------------------------------------------------+ x
xAvg 73.7 14.0 12.3 0.0|UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUsssssssWWWWWW> x
x---------------------------+-------------------------------------------------+ x
x Memory and Swap qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x PageSize:4KB RAM-Memory Swap-Space High-Memory Low-Memory x
x Total (MB) 3913.3 0.0 - not in use - not in use x
x Free (MB) 133.6 0.0 x
x Free Percent 3.4% 0.0% x
x Linux Kernel Internal Memory (MB) x
x Cached= 1101.9 Active= 1599.0 x
x Buffers= 81.8 Swapcached= 0.0 Inactive = 1723.0 x
x Dirty = 0.5 Writeback = 0.0 Mapped = 611.1 x
x Slab = 306.1 Commit_AS = 9696.1 PageTables= 28.0 x
x Disk I/O qq/proc/diskstatsqqRequested KB/sqqqqWarning:may contains duplicatesqqqqqqqqqqqqqqqqqqqqx
xDiskName Busy Read Write |0 |25 |50 |75 100| x
xsdb 52% 928.3 69.9|RRRRRRRRRRRRRRRRRRRRRRRRRW x
xTotals Read-MB/s=0.9 Writes-MB/s=0.1 Transfers/sec=224.6 x
xqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
dockerコンテナ動かすと、たとえvcpuが2つでも無理くり動こうとする。
webとかデータベースとかコンテナの挙動がおかしくなって反応せんようになる。
リソースは気づいたら早めに調整。特にメモリは多く割り当てる。
今回のnumbatにvcpu=8コア/メモリ=32GB割り当てて、古いほうのjellyfishのホストはvcpu=2コア/メモリ=4GBに変更。
gitlabのコンテナ動かして、大きめの変更をマージしたらすぐメモリ使い切るんよな。
宅内DNSの変更
宅内ルータにあるDNS定義も新しいほうのstaticip見るように変更。
+----------------+ +---------------------------------------------+ +-----------------+
|windows11 | |Router | |GCP |
| +------------+ | | +-----------------------------------------+ | | +-------------+ |
| |vm ubuntu24 | | | |DNS | | | | jelly-fish | |
| +------------+ | -> | | gcp-gvis-dkLinux.intra.gavann-it.com = | | => | | xx.xx.xx.xx | |
| +------------+ | | | yy.yy.yy.yy | | | +-------------+ |
| |vm windows11| | | +-----------------------------------------+ | | +-------------+ |
| +------------+ | | | | | numbat | |
+----------------+ +---------------------------------------------+ | | yy.yy.yy.yy | |
| +-------------+ |
+-----------------+
接続先はgcp-gvis-dkLinux.intra.gavann-it.com
って定義してるから、向き先をxx.xx.xx.xxからyy.yy.yy.yyに変更する。
これでteratermとかの接続が全部新しいほうのホスト向いてくれる。
dockerのcompose.ymlに書いた環境書き換えた
google cloudのlinuxホストで動かしてるコンテナは、ローカルlinuxを通じたssh転送使って接続してる。
最初そのまま接続してしもたんやけど、コンテナのmariadbとrdpホストにつながらんことに気づいた。
なんか内部エラーみたいなのが出てた。
最初はなんでか思いつかんかったけど、mariadbのコンテナ使ってどこまで動いてるか確認してった。
途中でgcloudの引数の修正漏れと、compose.ymlの中のextra_hostsをcompose.ymlに書いてるのを見落としてた。
それぞれ定義書き換えてコンテナ作り直したらつながった。
mariadbのコンテナで動作確認
コンテナには最初から入ってるけど、mariadbに接続するクライアントはapt install mysql-client
でnumbatに入れとく。
永続化領域が見えてるかの確認やからshow databases
ってやって自分の業務データベースが見えるかを確認。
ssh転送できてへんように見えたから、まずはコンテナにdocker exec
して確認。
コンテナの中やからポートは3306ね。
nari@gcp-gvis-dklinux:/$ docker exec -it docker-sv_mariadb1011-1 bash
root@svmariadb1011:/# mysql -u nari -p -h localhost -P 3306
Enter password:
:(中略)
MariaDB [(none)]> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| nariDB_1st | ⭐️コンテナでは見えとるやん!
+--------------------+
2 rows in set (0.001 sec)
MariaDB [(none)]>
コンテナ内では永続化領域に置いたデータベースが使えてるってことね。
次は親ホストのubntu24からコンテナの公開ポート13306に接続できるか確認。
nari@gcp-gvis-dklinux:~$ docker ps | grep maria
ed34cac8e6b8 mariadb:1011 "docker-entrypoint.s…" 23 hours ago Up 23 minutes 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp docker-sv_mariadb1011-1
nari@gcp-gvis-dklinux:~$ mysql -u nari -p -h `uname -n` -P 13306
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'gcp-gvis-dklinux:13306' (111)
nari@gcp-gvis-dklinux:~$
あれ?
ここがアカンのや。
composeの中のextra_hosts書いてる
dockerイメージあるし、コンテナは動いてるように見えるけど、大事なこと忘れてた。
dockerの内部ネットワークのこと。
extra_hostsを書いとくとコンテナから親ホストに接続できる。
nginxやったかapacheやったか忘れたけど、コンテナ内のアクセスログにホスト名で表記してくれる。
djangoのコンテナにあるnginxのログ見るとURLにホスト名が見える。
172.18.0.4 - - [18/Jun/2024:05:17:01 +0900] "GET /gvisWebApp/gvis_504_KeihiUpdate/11257/ HTTP/1.0" 200 15105 "https://gcp-gvis-dklinux.intra.gavann-it.com:40443/gvisWebApp/gvis_500_KeihiKensaku/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0"
172.18.0.4 - - [18/Jun/2024:05:17:55 +0900] "POST /gvisWebApp/gvis_504_KeihiUpdate/11257/ HTTP/1.0" 302 0 "https://gcp-gvis-dklinux.intra.gavann-it.com:40443/gvisWebApp/gvis_504_KeihiUpdate/11257/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0"
172.18.0.4 - - [18/Jun/2024:05:17:55 +0900] "GET /gvisWebApp/gvis_500_KeihiKensaku/ HTTP/1.0" 200 121019 "https://gcp-gvis-dklinux.intra.gavann-it.com:40443/gvisWebApp/gvis_504_KeihiUpdate/11257/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0"
172.18.0.4 - - [18/Jun/2024:05:32:40 +0900] "POST /gvisWebApp/logout/ HTTP/1.0" 200 5063 "https://gcp-gvis-dklinux.intra.gavann-it.com:40443/gvisWebApp/home/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0"
実際はコンテナの起動時に/etc/hostsに書いてくれるおまじないがある。
extra_hosts:
- gcp-gvis-dkLinux.intra.gavann-it.com:192.168.100.218
- naFSlinux.intra.gavann-it.com:172.16.17.118
構成は前と変わってるからIP書き換える。
二行目はローカルのubuntu24のことやけど、VPN接続はもうやってへんからホンマはいらん。
extra_hosts:
- gcp-gvis-dkLinux.intra.gavann-it.com:192.168.100.118
- naFSlinux.intra.gavann-it.com:192.168.1.118
最初に接続失敗してた理由の1つはこのextra_hostsを書き換え忘れてたから。
コンテナを全部潰して、ついでにイメージも潰してdocker system prune
で全部キレイにしてからビルドとコンテナ起動やりなおしたら、dockerのシステムデータ置き場スッキリした。
gcloudが絡む修正忘れてた
もう1つ忘れもの。
gcloudへのssh転送で設定して日々の利用で追加してった記述には、前に作ったデータベース引っ越し用の転送設定とか残ってたから潰す。
運用スクリプトが使う鍵ファイルも置き換えしとこ。単にコピーするだけやなく、オーナーはgcloud設定してるユーザにしてパーミッションは700にしとかなエラー出る。
接続先ホストもgoogle cloudコンソールで定義した名前見ながら変えとく。
< gcloud compute ssh numbat-fslinux \
---
> gcloud compute ssh jelly-fslinux \
sshトンネルの接続確認とrcloneでバックアップ
google cloudにあるnumbatのホストへローカルlinuxからsshトンネルして、ローカルlinuxで確認するとこうなる。
nari@nafslinux-ubu24:/gvis/script$ ps -ef | grep ssh | awk '{print $29 "\n" $31 "\n" $33 "\n" $35 }' | grep gcp
nafslinux.intra.gavann-it.com:53306:gcp-gvis-dklinux.intra.gavann-it.com:13306
nafslinux.intra.gavann-it.com:53389:gcp-gvis-dklinux.intra.gavann-it.com:33389
nari@nafslinux-ubu24:/gvis/script$
ポートの転送やっとるね。
53306ポートはmariadbのポートで、53389ポートはxrdpのポート。
ローカルのwindowsからa5sqlで53306ポートにつないでみる。
ローカルホストの53306ポートへmysqlクライアントで接続すると、google cloud側の13306ポートへ転送される。
a5sqlの中でいくつかsql発行させてて2つ目のmax_allowed_packetの確認で見えてる数値は、djangoのweb処理からmariadbに向かってデータ入れるときに発行するsqlに影響する。
永続化領域のmariadbの設定ファイルに512MBって書いてるから、数値を割り算するとピッタリ!!
536870912byte ÷ 1024 ÷ 1024 = 512MB
あとはバックアップ処理で接続に使ってる鍵ファイル指定を変更してバックアップ動かす。
google cloud側はコピー処理をrootからsudoして実行してるから、rcloneの設定ファイルと実行処理のパーミッションに気を付ける。
処理時間5分ぐらいで前と変わらず。
dockerの永続化領域(Docker.zip)、apache2とdockerの設定ファイル(gvis_conf.zip)、ログ(log.zip)、スクリプト(script.zip)、業務ファイル(nariDocs.zip)が全部持ってこれてるからgoogle driveに入れた結果もOK。
ほんで、これをcyberduckでローカルの保管先にダウンロードしてく。
google driveは日によって速度にバラつきあるけど10分ぐらいで終わる。
バックアップからローカルlinuxへクローン
cyberduckでダウンロードしたファイルにはgoogle cloudで動かしてたファイル類とmariadbのデータ領域が入ってる。
これをローカルに展開してく。
mariadbのデータ展開してコンテナ動かしてみる。
さっきのmariadbの設定ファイルはローカルlinuxは512MBやなくて、1GBにしてて、ちゃんとテーブル類だけがクローンできてる。
このへんはローカルの処理やからバッチ処理は特に変更せんでええ。
クローンしたら、更新したデータだけが差異出てくれる。
意図したファイルだけが更新できてた。
zipの問題は残ってるけど、仮の対策したから問題は回避。
VMの後始末とか片づけとか
数日して問題なさそうやったら、旧ホストと確保したグローバルIPの予約を潰す。
ディスクとグローバルIPは確保し続けたら費用かかるもんな。
2年ほどやったけど、jellyfishは色々役に立ってくれた。
長いこと頑張ってくれてありがとー。さらば!!
旧OSの削除とグローバルIPの開放
解放しとく。
ubuntu24のrdpコンテナ
google cloudにubuntu24のホスト作れたから、一緒に作る。
dockerfileとcompose.ymlの整理と更新もする。
dockerfileはローカルlinuxで作ったubuntu24のxrdpとほぼ同じ。
違うのはchromeのインストールしてgoogle driveを使えるようにしてること。
ビルド途中はCPUけっこう使う。
ビルドは427秒=7分ぐらいかかった。
最初の起動はこんな感じ。
windowマネージャにフォントの指定とか壁紙設定して、ブラウザに設定入れて、vscodeの起動オプションとか入れる。
ローカルlinuxはminikube用にGUI設定後のイメージ作るけどgoogle cloudはkubernetes使ってるわけやないからコンテナで維持。
自分用にGUIでの設定してコンテナ使ったらこうなる。
vscodeでgitgraph見えるやん!
もちろんlibreofficeとか入ってるからofficeドキュメントも開けるし、pdfも確認できる。
2408Mbpsとは表示されてるけど、去年に比べたらなんかインターネットの速度下がっとるな。
おまけ(iphoneから接続)
たまにしか使わんけど、iphoneから接続。
Termiusってのを使ってる。
まずは鍵ファイル持ってきてインポートしとく。
次に接続設定を書き換える。
んじゃつないでみよか。
ssh接続選ぶ。
はい、つながった。