クラウドサーバへの導入に関して - kisapapa1227/retrek-ui_V2 GitHub Wiki
環境
- uname -a Linux instance-20250410-065246 6.1.0-34-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.135-1 (2025-04-25) x86_64 GNU/Linux
- docker -v Docker version 28.1.1, build 4eba377
リソース
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 6 6 16.99GB 7.834MB (0%)
Containers 6 6 17.76MB 0B (0%)
Local Volumes 2 2 207.3MB 0B (0%)
Build Cache 22 0 6.525kB 6.525kB
df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 8181412 0 8181412 0% /dev
tmpfs 1638632 1184 1637448 1% /run
/dev/sda1 102956608 23460548 75187220 24% /
tmpfs 8193148 0 8193148 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/sda15 126678 11840 114838 10% /boot/efi
tmpfs 1638628 0 1638628 0% /run/user/1002
overlay 102956608 23460548 75187220 24% /var/lib/docker/overlay2/6c9d01569fdca828a08904b5517e8e3c00ad7b97890cbaca73e0c157908c1b95/merged
...
free
total used free shared buff/cache available
Mem: 16386296 2034188 5903404 67140 8857456 14352108
Swap: 0 0 0
特別な注意
ユーザ管理のデータベース(デフォルト、いわゆる、テスト用)サーバーが、sail up で起動後半日程度で、SHUTDOWN される。
docker ps -a
7267129a0d89 mysql/mysql-server:8.0 "/entrypoint.sh mysq…" 2 days ago Exited (0) 47 hours ago retrek-ui_v2-mysql-1
docker logs 7267129a0d89
[Entrypoint] MySQL Docker Image 8.0.32-1.2.11-server
[Entrypoint] Starting MySQL 8.0.32-1.2.11-server
2025-05-23T07:14:04.522389Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2025-05-23T07:14:04.523610Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.32) starting as process 1
2025-05-23T07:14:04.532553Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-05-23T07:14:04.743718Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-05-23T07:14:04.979991Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2025-05-23T07:14:04.980028Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2025-05-23T07:14:05.003947Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2025-05-23T07:14:05.004070Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.32' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
2025-05-24T02:37:38.103894Z 2485 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.32).
2025-05-24T02:37:39.380805Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL.
フロントで立ち上げて、ターミナルを残しておくと回避できる。HUP でも行ってるのでしょう。実害として、shudown に伴い、保存先が消され、ユーザー情報が初期化される。http 通信だから、port scan の後に、DDOS されてるのでは? https にしたいが、CA証明書が必要で、メンテの割が合わない。
「【Docker】https-portalを使ってHTTPS化 & Let’s encryptの自動化」などを参照にすれば可能かもしれない
2025/05/29 mysql が落ちる前提で再起動の手順の確認
下記手順(laravel レベルでの volumeの書き戻し)は、保存データと同じ日に書き戻すと問題ないが、別の日になると読めない。認証にタイムスタンプが含まれているのかと思われる。姑息的対処は不毛なので、データベースレベルでの書き戻しに変更。
ここから没手順
- 動作確認
- コンテナ id を取得する: docker ps -a | grep mysql | awk '{print $1}' で id を取得する。
- 状態を複製する: cp -r -p /var/lib/docker/volumes/retrek-ui_v2_sail-mysql /home/kisa/work/backup
- 通常操作 (browser)でユーザを追加する。
- mysql コンテナを止める: docker stop $id <-- 落ちてる状態の再現
- 状態を書き戻す:cp -r -p /home/kisa/work/backup/retrek-ui_v2_sail-mysql /var/lib/docker/volumes
- mysql コンテナーを起動する: sh mySqlctl.sh start/stop/log
- 条件の判定:言葉 server と data
- 一度 login すれば、その後に data が消されても問題ない(cache かな?)、ただし、logout できない。
- 当然、data が無いと、login できない。
- server が落ちてると、login できない。
- data が無いと、server は立ち上がらない。
- 判定1:data/retrek があって、server が動いていれば、cp -rup data backup
- 判定2:data/retrek がなければ、cp -rup backup data
- 判定3:server が動いていなければ、docker start server
- (想定外)server が動いていて、data がなかった時(再起動するか、放置するか)
- crontab -e
- */5 * * * * sh /home/kisa/work/mySqlWatcher.sh
- docker を作り直したときに、前のデータベースを引き継ぐ手順
- InstallStep3.sh に、touch /home/kisa/work/initialized を追加
- mySqlWatcher で if [ -e initialized ] で、backup から data を書き戻す。
ここまで没手順
2025/06/13 mysql の再起動、及び、ユーザー管理用データベースのリストア
- サーバーに mysql のクライアントをインストールする。
- docker ps -a で mysql の状態の確認
- shutdown されていれば、再起動 docker start #mysql (1分起動待ち)
- mysql にテーブル一覧を要求し、ユーザー管理テーブルの存在を確認する。
- ユーザ管理テーブルが無ければ、作成して、バックアップデータをリストアする。
- あれば、テーブル内容を要求し、差分があれば、バックアップデータを更新する。
- crone で回しておく。また、せっかくなので who で部外者が login してないかも確認。
tmux の利用
- tmux new -s retrek # 新規
- C-b % # 左右に分ける
- C-b カーソル # 移動する
- tmux a -t retrek # 再接続
これで運用するが、mysql shutdown 問題は解決しない。8時間程度で落ちる。
tmux 上でsail をフロント起動にする。
cd hoge;sudo su
sh InstallStep4.sh;sh InstallStep3.sh;cd retrek;./vendor/bin/sail down
./vendor/bin/sail up