@nuxtjs/pwaが3.2.1でstart_urlをpreCachingに勝手に追加するようになる
Nekotter開発中、/latestページの挙動が変になったので検証した所、preCacheが悪さをしていることがわかった。
でも何か設定した覚えはないのでバージョンアップしたライブラリのchengelogを眺めていたら原因がわかった。
結構大胆な仕様変更だけど他に影響出てないのかな...?って思ってissue見てみると何件か建っているので、動向を見守りつつダウングレードして対応。
PM2+GitHub ActionsでNodeアプリを本番環境で運用する。
前回までの記事でサーバーの構築とSSL通信関係の設定は終わっているので、本題のNodeアプリの動作環境を構築します。ついでにGithub Actionsを使って自動デプロイできるようにします。
前回記事はこちら
PM2をインストール
# npm install -g pm2
Nodeアプリ準備してPM2で起動する
# mkdir /etc/nodeapps # cd /etc/nodeapps # git clone https://github.com/takashun/Nekotter # cd Nekotter # npm install # npm run build # pm2 start npm --name Nekotter -- start
ヨシ!
Github Actionsの設定
デプロイの方法にも色々ありますが、今回はGithub Actionsを使います。
仕組みとしては簡単で、自動でSSHにログインして所定のコマンドを実行させるだけです。
.github/workflowsにdeploy.ymlを作成して以下の内容を書き込みます。
name: Deploy on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - name: ssh env: SECRET_KEY: ${{ secrets.SECRET_KEY }} SSH_USER: ${{ secrets.SSH_USER }} SSH_ADDR: ${{ secrets.SSH_ADDR }} SSH_PORT: ${{ secrets.SSH_PORT }} SSH_COMMAND: ${{ secrets.SSH_COMMAND }} run: | echo "$SECRET_KEY" > secret_key chmod 600 secret_key ssh -oStrictHostKeyChecking=no ${SSH_USER}@${SSH_ADDR} -p $SSH_PORT -i secret_key "$SSH_COMMAND"
(-oStrictHostKeyChecking=noオプションは中間者攻撃を可能にしてしまうので注意)
そしてGitHubでSettings > Secrets > New Secretから環境変数を設定してください。必要なのは上記のenv下にある5つで、SSH_COMANDには下記の内容を設定しました。
sudo pm2 stop Nekotter && cd /etc/nodeapps/Nekotter && git pull && npm install && npm run build && sudo pm2 start npm --name Nekotter -- start
適切に設定できていれば、下記のようにデプロイが成功するはずです。
3回失敗してるやん
まとめ
Github Actionsすごい便利。
-oStrictHostKeyChecking=noオプションを使わない方法を今度試してみようと思います。
CentOS8+Let's Encrypt(certbot)でCloudflareで管理しているドメインのワイルドカード証明書を取得する。
前回までの記事でサーバーの導入は終了しているので、今回は証明書の取得とNginxへのドメインの設定を行います。
前回記事はこちら
余談:Cloudflareの設定
Cloudflareの設定を見てみると、暗号化モードの中に「フル」というものがあります。これはサーバーの証明書が所謂オレオレ証明書(もしくは期限切れ)でもエラーが出ずに接続することができるモードですが、今回は「フル(厳密)」に設定して証明書を更新し続ける環境を目指します。
certbotの導入
Let's Encryptのクライアントはいくつかありますが(acme.shとか)、今回は公式のオススメクライアントである「certbot」を使用します。
# dnf install python38 git -y #Python3.8とgitをインストール # cd /usr/local/src/ #適当なディレクトリに移動 # git clone https://github.com/certbot/certbot.git # cd /usr/local/src/certbot/certbot # python3 setup.py install #インストールを実行
certbot-dns-cloudflareの導入
# cd /usr/local/src/certbot/certbot-dns-cloudflare # python3 setup.py install
Global API Keyをhttps://www.cloudflare.com/a/profileから取得して保存します。
# mkdir /root/.cloudflare # chmod 700 /root/.cloudflare # echo "dns_cloudflare_email = (メールアドレス)" > /root/.cloudflare/credentials # echo "dns_cloudflare_api_key = (Global API Key)" >> /root/.cloudflare/credentials # chmod 600 /root/.cloudflare/credentials
コマンドを実行して証明書を取得します。色々聞かれるので適切な回答をしてください。
# certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /root/.cloudflare/credentials \ --dns-cloudflare-propagation-seconds 30 \ -d example.com \ -d *.example.com
成功したら/etc/letsencrypt/live/example.comに証明書が保存されています。
Nginxの設定
あとはNginxの設定を書くだけです。
※/etc/nginx/conf.dにdefault.confが存在しますが、削除するか下記内容で上書きすることをおすすめします。
#cd /etc/nginx/conf.d #vim example.com.conf
server { listen 80; server_name example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS; location / { root /usr/share/nginx/html/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
firewallの設定を忘れずに。
#firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --reload
動作確認
ヨシ!
自動更新の設定
# crontab -e
00 05 01 * * /usr/local/bin/certbot renew && /usr/bin/systemctl restart nginx
まとめ
設定しながら書いたのでなぐりがきにもほどがありますが許して下さい。
次回はnodeアプリを実行してnginxをリバースプロキシとして動作させます。
CentOS8でNginx+MariaDB環境を構築する。
nodeアプリを実行するサーバーを用意したいので新しく構築してみる。
リバースプロキシとしてnginx、DBはMariaDBを導入します。
KAGOYA VPSでインスタンス作成
今回は2コア/2GB/30GBを選択しときます。
構築作業
CentOS8からはyumではなくdnfというパッケージ管理システムが用いられている...が、基本的にyumを置き換えるだけで動く。(というかエイリアスが設定されてるので置き換えなくても動く)
# dnf update -y #いつもの
Nginxを公式リポジトリからインストールする。
Nginxはバージョンが奇数だと開発版、偶数だと安定版ということになっています。
CentOS8.2のAppStreamからインストールされるのは1.14.1ですが、今回は公式リポジトリから1.18.xをインストールします。
# vi /etc/yum.repos.d/nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key
dnf --disablerepo=AppStream install -y nginx
Nginx起動・確認
# systemctl start nginx # systemctl enable nginx #自動起動設定
# nginx -v nginx version: nginx/1.18.0
# dnf info nginx Last metadata expiration check: 0:03:54 ago on Thu Jun 18 17:11:00 2020. Installed Packages Name : nginx Epoch : 1 Version : 1.18.0 Release : 1.el8.ngx Architecture : x86_64 Size : 3.6 M Source : nginx-1.18.0-1.el8.ngx.src.rpm Repository : @System From repo : nginx-stable Summary : High performance web server URL : http://nginx.org/ License : 2-clause BSD-like license Description : nginx [engine x] is an HTTP and reverse proxy server, as well as : a mail proxy server.
MariaDBを公式リポジトリからインストール
Nginxと同様こちらも公式リポジトリからインストールしてみます。
# vi /etc/yum.repos.d/MariaDB.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos8-amd64 module_hotfixes=1 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
dnf install -y MariaDB-server
MariaDB起動・確認
# systemctl start mariadb # systemctl enable mariadb #自動起動設定
# rpm -qa | grep -i mariadb MariaDB-common-10.4.13-1.el8.x86_64 MariaDB-shared-10.4.13-1.el8.x86_64 MariaDB-client-10.4.13-1.el8.x86_64 MariaDB-server-10.4.13-1.el8.x86_64
# dnf info MariaDB-server Installed Packages Name : MariaDB-server Version : 10.4.13 Release : 1.el8 Architecture : x86_64 Size : 124 M Source : MariaDB-server-10.4.13-1.el8.src.rpm Repository : @System From repo : mariadb Summary : MariaDB: a very fast and robust SQL database server URL : http://mariadb.org License : GPLv2 Description : MariaDB: a very fast and robust SQL database server : : It is GPL v2 licensed, which means you can use the it free of : charge under the conditions of the GNU General Public License : Version 2 (http://www.gnu.org/licenses/). : : MariaDB documentation can be found at https://mariadb.com/kb : MariaDB bug reports should be submitted through : https://jira.mariadb.org
MariaDBの文字セットをutf8mb4に設定する
記事冒頭で書いたnodeアプリはTwitterのツイートを表示する機能があるのですが、文字セットの設定を適切に行わないと絵文字の表現に失敗して情報が欠落してしまうので対処します。(寿司ビール問題とか言われているらしい)
# vi /etc/my.cnf.d/server.cnf
[mariadb] character-set-server = utf8mb4 [client-mariadb] default-character-set = utf8mb4
上記のように設定して保存します。
※10.4.13インストール時点では[mariadb]項には何も書かれておらず、[client-mariadb]項はそもそも存在しなかったので追加しました。
# systemctl restart mariadb
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 10.4.13-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.002 sec) MariaDB [(none)]> show variables like 'coll%'; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+ 3 rows in set (0.001 sec) MariaDB [(none)]> exit; Bye
動作確認OK
まとめ
設定ファイルを書き換えるときはバックアップを取ってからの方が事故が防げて良いかも。
次回はドメインとLet's Encryptの設定を行う予定です。
Synergy v1.10.x を日本語キーボードに対応させる(サーバーがWindowsの場合)
マウスとキーボードを異なるOS間で共有するソフトウェアKVMである「Synergy」ですが、JISキーボードに優しくない設計になっています。
幸いにもSynergyはGPLv2でライセンスされているオープンソースソフトウェアなので自分で対応させてみました。
変更箇所は以下の通りです。
- 変換キーをかなキー、無変換キーを英数キーに割り当てました
- 半角・全角キーでWinっぽく入力モードを切り替えられるようにしました
利用方法
ビルドした物の配布は後日やります。
ビルド方法は本家リポジトリWikiのこのページに従って下さい。
また、ビルド時はv1.10.2-patchedというブランチになっているか確認して下さい。
備考:Qtのバージョンは両OSとも5.9.5で統一しました。また、Win版はVisual Studio 2017 Communityでもビルドできました。