DjangoサイトをAL2からAL2023に移設
2025/02 の作業
AL2 から AL2023 に移設
ついでにパッケージも新しいのに更新
・基本的にdnfでいれる
・Libreoffice はレポジトリに無いのでダウンロードしていれる
・各パッケージの設定は(旧サーバ)のものを基本に設定
・代表的なものは、
Libreoffice 7.2 -> 24.8 Postgresql 13 -> 16 Python 3.9 -> 3.12 Django 3.2 -> 4.2 nginx 1.22 -> 1.26
AL2のデータを吸い上げ
postgresqlのデータ
$ su - postgres $ pg_dump --verbose -Fc -f old_db.dump appdb
必要なファイル
$ sudo su - appuser $ find ./appsite \( -path "./appsite/massive1" -o -path "./appsite/massive2" \) -prune -o -type f -not -name '*.pyc' -print0 | xargs -0 -r tar -zcvf /tmp/appsite.tar.gz
全部だとでかいので、上記の様に不要ファイルを除外して固めようとしたけど、xargs はファイルのリストをバッファに展開するらしく、多すぎるとバッファを上書きするのでファイルが消えるので注意。
結局、必要なディレクトリを個別に固める事にした。
gzip で固めてたけど、最近は zstd の方が良いみたい。
AL2023インスタンス(x86_64)作成と移設
swapの作成
/tmpがAL2023からtmpfsになって、メモリの半分しかなくて小さいから増やす(今回は1G)。
# swap用のブロックを作成 $ sudo dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.60108 s, 163 MB/s # ブロックをswap領域にする $ sudo mkswap /var/swap.1 mkswap: /var/swap.1: insecure permissions 0644, fix with: chmod 0600 /var/swap.1 Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=cc06cbf1-174c-4fba-a236-ce404ed97315 # swap領域を有効にする $ sudo swapon /var/swap.1 swapon: /var/swap.1: insecure permissions 0644, 0600 suggested. # 再起動時に有効になる様に fstab に設定 $ echo '/var/swap.1 none swap sw 0 0' | sudo tee -a /etc/fstab /var/swap.1 none swap sw 0 0
こんな感じになる
# 作成前 $ free -m total used free shared buff/cache available Mem: 904 245 160 36 498 486 Swap: 0 0 0 # 作成後 $ free -m total used free shared buff/cache available Mem: 904 240 64 36 599 490 Swap: 1023 0 1023
LibreOffice
レポジトリに無いので、ダウンロードしてインストール。
LibreOffice(この時点の長くテストされていますバージョン LibreOffice_24.8.4_Linux_x86-64_rpm.tar.gz)を/tmpにダウンロード。
# インストール $ cd /tmp $ tar zxvf LibreOffice_24.8.4_Linux_x86-64_rpm.tar.gz $ cd LibreOffice_24.8.4.2_Linux_x86-64_rpm/RPMS/ $ sudo rpm -Uvh *.rpm # 動作確認(エラーいっぱい) $ libreoffice24.8 --help # 足りないライブラリを入れる $ sudo dnf install libXinerama.x86_64 $ sudo dnf install cairo.x86_64 $ sudo dnf install libxslt.x86_64$ sudo dnf install cups.x86_64 $ sudo dnf install libX11-xcb.x86_64 # 動作確認 LibreOffice 24.8.4.2 bb3cfa12c7b1bf994ecc5649a80400d06cd71002 ・・・・ $ libreoffice24.8 --headless --convert-to pdf --outdir /tmp /tmp/test.xlsx javaldx: Could not find a Java Runtime Environment! Warning: failed to read path from javaldx convert /tmp/test.xlsx as a Calc document -> /tmp/test.pdf using filter : calc_pdf_Export # 日本語フォント入れ # /usr/local/share/fonts/ に日本語フォント xx.ttc 等を入れる
postgresql
# インストールからの初期設定 $ sudo dnf install postgresql16.x86_64 postgresql16-server.x86_64 # ・・・・ # 他いろいろ初期設定は過去の内容を参照 # AL2のpostgresqlのデータをインポート $ su - postgres $ pg_restore --verbose -d appdb -Fc /tmp/old_db.dump
git
# クライアントインストール $ sudo dnf install git.x86_64 # ssh の秘密鍵(~/.ssh/鍵)と設定(~/.ssh/config)を移設。権限に気を付けて。
python3.12
$ sudo dnf install python3.12.x86_64
Django
# venv 作って $ python3.12 -m venv app_venv # 必要なものを pip $ source app_venv/bin/activate (app_venv)$ pip install -r requirements.txt # AL2のファイルを展開 # 今回のソースの変更は、tmpfs になった事に対するrenameの修正、不要になったアプリの削除などなどしたソースをpull $ git pull # モジュールをチェック (app_venv)$ python manage.py check --settings appsite.settings.production # マイグレーション (app_venv)$ python manage.py makemigrations --settings appsite.settings.production
$ sudo dnf install nginx.x86_64 # 設定をもろもろ移設 # 設定値をチェック $ sudo nginx -t
# 必要なライブラリ $ sudo dnf install augeas-libs # certbot 用の venv 作って $ sudo python3.12 -m venv certbot_venv (certbot_venv)$ sudo pip install certbot certbot-nginx # 証明書取得 $ sudo certbot --nginx
今まで、certbot のサイトを参考に、内容をコピペしてたけど、その内容をシェルにして、そのシェルについでにログも削除する様にしておいた(logrotateでいい感じにできなかった)。
$ sudo dnf install gcc.x86_64 python3.12-devel.x86_64 (app_venv)$ pip install uwsgi # 設定をもろもろ移設
# supervisor 用の venv 作って $ sudo python3.12 -m venv supervisor_venv (supervisor_venv)$ sudo pip install supervisor # 設定をもろもろ移設。systemdの設定も。
これまで設定したものを起動や、サービスに登録
postgresql、nginx、supervisor、certbot辺り
# サービス登録 $ sudo systemctl enable xxxx # サービス起動 $ sudo systemctl start xxxx
nginx、supervisor の設定を移設
# 強制的にログローテして、ちゃんと動くか確認 $ sudo logrotate -f /etc/logrotate.d/nginx $ sudo logrotate -f /etc/logrotate.d/supervisor
スケジューラの設定
cron が標準ではなくなったので、systemd.timer に移行
$ vi /etc/systemd/system/xxx.service $ vi /etc/systemd/system/xxx.timer # スケジューラ有効化 $ sudo systemctl enable xxx.timer # スケジューラ開始 $ sudo systemctl start xxx.timer # スケジュール一覧の確認 $ sudo systemctl list-timers # 設定編集後の再読み込み $ sudo systemctl daemon-reload # 動作ログの確認 $ journalctl -e
大まかな設定は以上でおしまい。