0
0

C++ web framework drogonを触ってみる(Rocky linux 8)

Last updated at Posted at 2024-01-17

参考とさせてもらったサイト

本家のサイト
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のリバースプロキシでいけた。

nginx.conf
    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などのヘッダーをカスタマイズして受け渡す。

nginx.conf
    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情報に以下が追加される

log
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コマンドで監視できない。

以下、随時追記

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0