2023年の抱負とか

2022年はいろんなことがあったので備忘録として残そうと思う。振り返るとそんなことあったよね的な感じで。(※2022年は本厄だった)

2022年のSummary

  1. 採用活動
  2. 開発の進捗
  3. kubernetesを諦めた

1に関してはミスマッチだったり、選考フローだったり、本当に望む人、ビジョンとかが希薄なまま活動してたと思う。ここは何のために働くとか言語化が必要なんだなと改めて思った。 個人的にはスキル面だけじゃなくずっと長く働きつづける環境とは?を追求したいと思う。 メモとして、米国ではレイオフが至るところでニュースになってる。

2に関しては、やっぱりドメイン知識というか、本当に欲しい物は何だ?をいかに具現化できるかが課題だった気がする。いわゆるビルド&スクラップなんだけど、個人的にはビルド&ビルドでブレずに良くしていく方がメンタル的にもいいのかなと思うのでそうなるように考えたい。

3に関しては、kubernetes今必要?というところもあるが、いざ勉強して見ると、yaml力というか、技術力というよりも知識力が圧倒的に必要な気がした。当然コンテナのベースの知識も必要なんだが、周辺ツールの多さと常に進化していく感じで、やっぱり今じゃないな。という結論に至った。Jenkins Xはとてもパワフルでブルーグリーン・デプロイメントがgithubでマージするだけで実現できる世界を自力で構築できるというのは、色々進歩しているんだなと思った。

タイミング的なものもあるが、コアな人が見つかったのは良かった。今はまだお手伝いベースなのだが。

今年なにするか

技術スタックは仕事を通して高いレベルを目指すとして、それ以外の目標をおくとすれば、

SKKに入門する

ずっとskkを使っている人いわく、もう戻れないIME。 最近は言語化に力を入れよう(=文章を書く)と思っていて、変換含めてスムーズにタイピングできるようになりたいなーと思ってる。 ubuntuだとaptでさくっとインストールできたからこれから辞書含めて一生の付き合いになるように指で覚えて育てて行こうと思う。

10kg減量

昨年末からGYMにちゃんと行き始めたので2023年は体を仕上げる年にしたい。 1ヶ月-1kgを守り続ける。ということを意識しようと思う。

自分のベストを知る

自分は何時間寝れば調子がいい、昨晩何食べたから調子がいい、集中できる時間帯は何時だ。とか、自分で自分の事を知らないのをどうにかしたい。 これは日々メモを続けることでなんとなく知れそうな気がするので豆につけていこうと思う。

人間的な成長が実感できる1年にしたいと思う。

gunicornをsystemdで動かした

gunicorn(19.9)をsystemdで動かした場合に色々と嵌ったのでメモ。

docs.gunicorn.org

https://github.com/benoitc/gunicorn/blob/master/docs/source/deploy.rst#systemd

最終的に動いた設定

/etc/systemd/system/app.socket:

[Unit]
Description=gunicorn app socket

[Socket]
ListenStream=/run/app.sock
User={{ app_user }}
Group={{ app_group }}

[Install]
WantedBy=sockets.target

/etc/systemd/system/app.service:

[Unit]
Description=gunicorn app service
Requires=app.socket
After=network.target

[Service]
PIDFile=/run/gunicorn/app.pid
RuntimeDirectory=gunicorn
User={{ app_user }}
Group={{ app_group }}
ExecStart=/path/to/venv/bin/gunicorn \
        --workers 2 \
        --pid /run/gunicorn/app.pid \
        --access-logfile /var/log/app/access.log \
        --error-logfile /var/log/app/error.log \
        --capture-output \
        --log-level info \
        app.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

どこにはまったかのか

まず公式のドキュメント通りに動かなかった。なんかソケットが消えてしまう。

https://github.com/benoitc/gunicorn/issues/1524

を見る感じドキュメントを更新したとのことでmasterのドキュメントを参考にしてみた。

これが良くなかったんだけども。

こんな感じにpidの指定はいらないのか−と思ってたりType=notifyってなに?🤔と思いつつ設定してみた。

[Unit]
Description=gunicorn app service
Requires=app.socket
After=network.target

[Service]
Type=notify
User={{ app_user }}
Group={{ app_group }}
ExecStart=/path/to/venv/bin/gunicorn \
        --workers 2 \
        --access-logfile /var/log/app/access.log \
        --error-logfile /var/log/app/error.log \
        --capture-output \
        --log-level info \
        app.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStartSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

アプリは立ち上がるんだけどもapp.serviceのステータスがloadedのままで90秒で強制的にプロセスが終了。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-Managing_Services_with_systemd-Unit_Files#Overriding_Unit_Mod-Change-timout-limit

なんで終了されるのかは、Type=notifyの場合はコード側で起動した事を知らせる必要があるみたいなんだけど、そもそも19.9とmasterではコードが異なってたので19.9ではその処理が入って無かった。

https://github.com/benoitc/gunicorn/blob/19.9.0/gunicorn/systemd.py

https://github.com/benoitc/gunicorn/blob/master/gunicorn/systemd.py

90秒で強制的に終了するというのは

1.リクエストが来る=>2.起動してなければ起動する=>1から90秒立つ=>落ちる=>1に戻る

なのでリクエストが来るたびに起動はするので動いてるようには見えるんだけど、処理のかかるリクエストだと途中で処理が終わって404が返ってきた。

初期データのcsvインポートが大量にあったので気づいたんだけども。

最終的にはapp.serviceをstopしてもリクエストを投げたタイミングで起動してactiveになって強制終了されることはなくなった。

結果として

  • 19.9ではpidの指定が必要 gunicornにbindの指定は不要
  • masterブランチではpidの指定は不要 gunicornにbindの指定は不要(多分)

に至ったんだけどもgunicorn次はいつリリースされるんだろう...

nginx

    location / {
        proxy_pass http://unix:/run/app.sock;
    }

systemdの知識が少し深まったけどsocketの知識も深めないと...

はてなブログに引っ越した

引っ越したことを残すメモ。

最初はWordPressで運用してて、途中でBloggerに移動して、 でもデザインがアレだったのでCSSとかはレンサバにおいてたりして、 で、レンサバもつかってないので解約したりして、、

そこから更新が滞ってたわけだけども、

そろそろ何かアウトプットする場所が無いとなーと思っていた。

なんとなくはてなブログにインポートしてみようかなーと思ったらあっさり終わった。

参考URL: https://naonaorange.hatenablog.com/entry/2018/11/05/072241

被リンクも無い記事だったのでリダイレクトとかはせずに削除した。

XSERVERでwp-cliを動かす方法

とあるサイトをXSERVERに引っ越した。

せっかくなのでphp7でwordpressを動かしてみる。=>動いたので問題ない。

URLの変更とかパスの変更はwp-cliでやろうと思って、

参考URL: エックスサーバーに wp-cli を導入する

を試してみたけど、PHP5.3で動いているのでarray syntaxでエラーが出て動かなかった。

php5.4で動かしていたのでテーマとかプラグインのarray syntaxは[]に変えた。

調べると、/opt/php-7.0.3/に色々あったので、

alias 'wp=/opt/php-7.0.3/bin/php ~/bin/wp-cli'

にした。

ちなみに、/opt配下にその他のバージョンもあった。

php-5.4.13
php-5.4.25
php-5.4.26
php-5.4.35
php-5.4.45
php-5.5.0
php-5.5.10
php-5.5.19
php-5.5.30
php-5.5.9
php-5.6.15
php-5.6.18
php-7.0.0
php-7.0.3

今後バージョンアップしてもこの/optのパスに変えれば良さそう。

XSERVERでCakePHP3を動かす方法

XSERVERでCakePHP3を動かすとintlがないよ。ってエラーになりました。

/opt配下にphpizeとかあったので、追加で入れれるんじゃないのかな?って思ったらできました。

以下その手順。バージョンはphp7

icuをインストール

wget http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz
tar -zxvf icu4c-57_1-src.tgz
cd icu/source/
./configure -prefix=$HOME
make
make install

php-configを複製

cp /opt/php-7.0.3/bin/php-config ~/php7-config
vi ~/php7-config
extension_dir='/home/アカウント/php_extension' #intl.soの保存先変更

phpのソースをダウンロードする

wget https://github.com/php/php-src/archive/php-7.0.3.tar.gz
tar zxvf php-7.0.3.tar.gz

コンパイルしてインストール

cd php-src-php-7.0.3/ext/intl
/opt/php-7.0.3/bin/phpize
./configure --enable-intl --with-php-config=/home/アカウント/php7-config
make
make install

設定反映

vi ~/ドメイン/xserver_php/php.ini
extension=/home/アカウント/php_extension/intl.so #追記

WordPressのDB接続エラーをカスタマイズする方法

wp-content/db-error.phpを作る。これだけ。

DBエラー時に呼ばれる、関数 dead_db() で定義されてる。

 // Load custom DB error template, if present.
if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
require_once( WP_CONTENT_DIR . '/db-error.php' );
die();
}

最近のレンタルサーバーは安いと思った

とあるサイトをリニューアルした時に、管理が変わるのでサーバーをどれにするか探した結果、ValueServerがコスパがいいのではという結論に至った。

正直ValueServerとCoreServerの違いがわからないんだけど、 ValueServerを使ってみていいと思った点。

  • 年間2000円(エコプラン)
  • SSH接続ができる
  • 固定IPがついてる
  • 独自証明書が使える

と、非常にコスパがいいなと。

さらに独自証明書も使えるので、ssl-storeでCOMODO証明書をとった。

ドメイン合わせても年間コストは5000円程度なので一番安いのではないだろうか。。。

ドメインとサーバーのセットが今ならお得らしい。。 【まるっとプラン】