「サーバ - REST API」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
120行目: 120行目:
   
   
  # SUSE
  # SUSE
  sudo zypper install ca-certificates python3-certbot
  sudo zypper install python3-certbot python3-certbot-nginx
   
   
  # Raspberry Pi
  # Raspberry Pi

2025年1月1日 (水) 14:49時点における版

概要


REST APIサーバを構築・運用する場合は、以下に示す事柄に注意する。

  • 定期的なバックアップの実施
  • セキュリティアップデートの適用
  • アクセスログの監視
  • レート制限の実装
  • 適切なエラーハンドリング
  • データベースの最適化
  • APIドキュメントの作成と管理



サーバ環境のインストール

まず、システムを更新を行う。

# RHEL
sudo dnf update

# SUSE
sudo zypper update

# Raspberry Pi
sudo apt update
sudo apt upgrade


次に、Linuxサーバに必要な基本環境をインストールする。

# RHEL
sudo dnf install curl wget git

# SUSE
sudo zypper install curl wget git

# Raspberry Pi
sudo apt install curl wget git build-essential



開発言語とフレームワークの選択

Python + FastAPIを使用する場合

Pythonと仮想環境をインストールする。

# RHEL
sudo dnf install python3 python3-pip python3-venv

# SUSE
sudo zypper install python3 python3-pip python3-virtualenv

# Raspberry Pi
sudo apt install python3 python3-pip python3-venv


Pythonと仮想環境の設定を行う。

python3 -m venv venv


vi ~/.profile


# ~/.profileファイル

source venv/bin/activate


必要なPythonライブラリをインストールする。

pip install fastapi uvicorn sqlalchemy


Node.js + Expressを使用する場合

Node.jsをインストールする。
Node.jsの詳細なインストール手順は、インストール_-_Yarnを参照すること。

プロジェクトディレクトリを作成する。

mkdir <任意のディレクトリ  例: ~/my-api>
cd    <作成したディレクトリ  例: ~/my-api>


プロジェクトに必要なJavaScriptライブラリをインストールする。

npm init
npm install express body-parser cors



データベースの設定

PostgreSQLを使用する場合

PostgreSQLをインストールする。

# RHEL
sudo dnf install postgresql libpq5

# SUSE
sudo zypper install postgresql libpq5

# Raspberry Pi
sudo apt install postgresql postgresql-contrib


データベースを作成する。

sudo -u postgres createdb myapi_db
sudo -u postgres createuser myapi_user



APIの基本的な実装

Python + FastAPIを使用する場合

 # main.pyファイル
 
 from fastapi import FastAPI
 from pydantic import BaseModel
 
 app = FastAPI()
 
 class Item(BaseModel):
    name: str
    description: str = None
 
 @app.get("/items")
 async def read_items():
    return {"items": []}
 
 @app.post("/items")
 async def create_item(item: Item):
    return item




HTTPS対応

Let's Encryptを使用する場合

Certbotをインストールする。

# RHEL
sudo dnf install ca-certificates python3-certbot

# SUSE
sudo zypper install python3-certbot python3-certbot-nginx

# Raspberry Pi
sudo apt install certbot python3-certbot-nginx


SSL証明書を取得する。

sudo certbot --nginx -d <ドメイン名  例: example.com>



リバースプロキシの設定

Nginxを使用する場合

 # /etc/nginx/sites-available/myapiファイル
 
 server {
    listen 80;
    server_name yourdomain.com;
 
    location / {
       proxy_pass http://localhost:8000;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
    }
 }



Systemdサービスファイルの作成

 # /etc/systemd/system/<任意のサービス名>.serviceファイル
 
 [Unit]
 Description=<サービスファイルの説明>
 After=network.target
 
 [Service]
 User=<実行する任意のユーザ名>
 WorkingDirectory=<REST APIのプロジェクトディレクトリ  例: /home/<ユーザ名>/my-api>
 ExecStart=/<uvicorn実行ファイルのパス> main:app --host <ホスト名またはIPアドレス> --port <ポート番号>
 # 例: ExecStart=/home/myapi_user/my-api/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
 Restart=always
 
 [Install]
 WantedBy=multi-user.target



ファイヤーウォールの設定

Firewalldの場合

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload


UFWの場合

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

sudo ufw enable



監視とログ管理

PrometheusのGithubにアクセスして、Prometheusをインストールする。
ダウンロードしたファイルを解凍する。

tar xf prometheus-<バージョン>.tar.gz


Grafanaをインストールする。

sudo apt install apt-transport-https
sudo apt install software-properties-common

sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key



CI/CD環境の構築

GitLabを使用する場合

 # .gitlab-ci.ymlファイル
 
 stages:
   - test
   - deploy
 
 test:
   stage: test
   script:
     - pip install -r requirements.txt
     - pytest
 
 deploy:
   stage: deploy
   script:
     - ssh user@yourserver 'cd /path/to/api && git pull && systemctl restart myapi'
   only:
     - master