VPSでcgiを動作させるメモ
作業の流れ
今回はytsheetの導入のために実施したためて順はそれに対応しています。導入するcgiに応じて必要な部分を変更して実施してください
動作環境はUbuntuです
対象のリポジトリをgit cloneする
cgiを動作できる状態にして権限を付与
動作に必要なperlライブラリの追加
cgiを動作させるためのソフトウェアをインストール
使用するドメインでAレコードを設定
nginxでアクセスできるようなconfを設定する
ytsheet独自の対応
リポジトリをgit clone
リポジトリに記載されている指示に従って使用したい機能のconfig.cgi.defaultをconfig.cgiに変更。今回はソドワでしたのでsw2.5フォルダ内のconfigを変更
chmod -R 705 などでフォルダ全体にパーミッションを設定
動作に必要なperlライブラリの追加(他にもあるかも。適宜追加で)
code:command
sudo apt install libcgi-modules-perl libcgi-pm-perl
sudo apt-get install libwww-perl
fcgiwrapのインストール
インストールして起動するだけでよさそう
code:command
sudo apt install fcgiwrap
sudo systemctl enable fcgiwrap
sudo systemctl start fcgiwrap
ドメイン側のAレコード設定
ドメイン側でAレコードを使って公開するためのサブドメインなどを決めてアクセスさせたいVPSのIPアドレスを指定
nginxの設定
メインのSharkeyでSSL使ってるのでその設定に準じて設定ファイルも設定します
ssl_certificateはmisskey等やってるならそっち側の設定にもパスが書いてると思うんでそれを設定しましょう
やってない場合Let's Encryptを調べるなどしてpemを発行してください
今回はhtpasswdでアクセス制限をしたいのでそれも設定します(アクセス制限不要ならここはいらない)
code:command
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd ユーザー名
複数追加したい場合は更に以下のコマンドで追加できる
sudo htpasswd /etc/nginx/.htpasswd ユーザー名
code:command
server {
listen 443 ssl;
server_name 公開したいドメイン名;
ssl_certificate ここにfullchain.pem;
ssl_certificate_key ここにprivkey.pem;
auth_basic "Restricted"; //ここはアクセス制限用使わないなら削除
auth_basic_user_file /etc/nginx/.htpasswd; //ここはアクセス制限用使わないなら削除
root /設置パス/ytsheet2/sw2.5/;
index index.cgi index.html;
# --- 静的ファイル専用のlocationを追加(クエリ文字列対策を含む) ---
# /_core/ で始まるURLパスへのリクエストを処理します。
location /_core/ {
# 'alias' は指定されたURLパスを、実際のファイルシステムのパスに置き換えます。
# 例: /_core/foo.css -> /フォルダへのパス/_core/foo.css
alias /フォルダへのパス/ytsheet2/_core/;
# クエリ文字列を無視してファイルを探します。
# $uri はクエリ文字列を含まないリクエストURIです。
# $uri/ はディレクトリを指す場合に利用します。
try_files $uri $uri/ =404; # ファイルが見つからない場合は404を返します
access_log off; # これらの静的ファイルへのアクセスログを記録しない(任意)
expires 30d; # ブラウザでのキャッシュ期間を設定(任意)
}
location / {
index index.cgi index.html;
}
location ~ \.cgi$ {
gzip off;
root /設置パス/ytsheet2/sw2.5/;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
}
}
上記設定で行けてそうならnginxに構文エラー出てないかだけ確認してコマンド後、エラーが出てないのを確認したらreloadします
code:command
sudo nginx -t
sudo systemctl reload nginx
この後表示されたサイトで初回はなんかCSSとかうまく適用されてなかったんですが
ドメイン名_core/skin/_common/css/base.css?1.26.100
のこの?1.26.100みたいなクエリストリングつきのURLが初回は上手く表示されないためです
開発者コンソールでドメインにアクセスしネットワークタブを開いて上記のクエストリング付きで404が表示されてるアドレスに直接アクセスしてリロードしてアクセスするとNot foundではなく中身が表示されるようになります
多分初回上手く読み込めてないとかそんなんっぽいです
なのでこれらを終わらせると普通に表示されるはず?
雰囲気で設置してるので行けるか不明ですがこんなんです メモ用