参考とさせてもらったサイト
本家のサイト
https://github.com/drogonframework/drogon
上記のサイトを参考にすればローカルLAN環境で動かすところまではいけるはず。
インストール
rocky linuxの標準パッケージのC++(g++)のバージョンは8.5.0。
以下のコマンドで言語規格をサポートしているか確認
$ g++ -v --help 2>/dev/null | grep -E "^\s+\-std=.*$"
C++17も大丈夫そう。
必要になる外部ライブラリは以下を参考に適宜インストールする。
jsoncpp libuuid-devel zlib-devel openssl-devel
$ git clone https://github.com/drogonframework/drogon
$ cd drogon
$ git submodule update --init
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
コアとなる実行モジュールdrogon_ctlがインストールされる。
インストール先はデフォルト/usr/local/bin
プロジェクトの生成
以下のサイトを参考に
main.ccでlistenするアドレスを指定できるので127.0.0.1、ポートは未使用ポート5555とする。
外部公開の方法
どこにも記載がないんだけど、とりあえずnginxのリバースプロキシでいけた。
location / {
proxy_pass http://127.0.0.1:5555/;
}
データベース
config.jsonの記載を変更する。
main.ccのconfig.jsonを読み込むソースを有効にする。
config.jsonの変更点
mariadb/mysqlならrdbmsはmysql
portは3306。
client_encodingを指定しないと日本語が文字化け(「?」となる)するため
明示する必要があるっぽい。UTF-8ならutf8
デバッグログのタイムスタンプがUTC
config.jsonのlogセクション内の"display_local_time"をtrueにする。
リバースプロキシー内で接続元のIPが取得できない。
getPeerAddr()で取得すると127.0.0.1となる。
nginx側の設定でX-Forworded-Forなどのヘッダーをカスタマイズして受け渡す。
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:5555/;
}
これでアクセスするとリクエストのheader情報に以下が追加される
host: yyyy.com
x-forwarded-host: yyyy.com
x-real-ip: xxxx.xxx.xxxx.xxxx
x-forwarded-for: xxxx.xxx.xxxx.xxxx
DBで使うplaceholder
サンプルは基本postgresqlなのでSQLの構文に注意。
postgresqlは$1,$2らしいがmysqlは?である。
公式にも書いてあった。
不明点
LOG_DEBUGとかのログファイル周りは高機能ではないので別途自前で用意したほうがいいか。
プロセス終了時にリネームされるので常時tailコマンドで監視できない。
以下、随時追記