ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
デプロイ方式の選択肢
| 方式 | 向いている場面 | 難易度 |
|---|---|---|
| WAR + Tomcat 手動配置 | 少人数・既存環境 | ★ |
| Tomcat Manager (HTTP API) | 権限のあるオペレータ操作 | ★★ |
| Spring Boot jar + systemd | 1 ホストに 1 アプリ、シンプル | ★★ |
| Docker + docker-compose | 小〜中規模、PaaS 風 | ★★★ |
| Kubernetes | マルチアプリ / オートスケール | ★★★★ |
| AWS Elastic Beanstalk / ECS | マネージドにオフロード | ★★★ |
方式 1: WAR を Tomcat に配置
# 1. ビルド
mvn clean package
# → target/myapp-1.0.war
# 2. サーバへ転送
scp target/myapp-1.0.war user@prod:/tmp/
# 3. Tomcat の webapps に配置(自動展開)
ssh user@prod
sudo cp /tmp/myapp-1.0.war /opt/tomcat/webapps/myapp.war
sudo chown tomcat:tomcat /opt/tomcat/webapps/myapp.war
# 数秒待つと /opt/tomcat/webapps/myapp/ に展開
# 4. アクセス
curl http://prod:8080/myapp/
方式 2: Tomcat Manager API でデプロイ
# tomcat-users.xml に manager-script ロールを持つユーザを用意
#
# デプロイ
curl --upload-file target/myapp.war \
"http://deployer:password@prod:8080/manager/text/deploy?path=/myapp&update=true"
# アンデプロイ
curl "http://deployer:password@prod:8080/manager/text/undeploy?path=/myapp"
# 再ロード
curl "http://deployer:password@prod:8080/manager/text/reload?path=/myapp"
方式 3: Spring Boot jar + systemd
mvn clean package -DskipTests
scp target/app-1.0.jar deploy@prod:/opt/app/# /etc/systemd/system/app.service
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
User=app
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar /opt/app/app-1.0.jar \
--spring.profiles.active=prod \
--server.port=8080
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now app
# ヘルスチェック
curl http://localhost:8080/actuator/health
# {"status":"UP"}
方式 4: Docker でデプロイ
# Dockerfile (multi-stage)
FROM eclipse-temurin:17-jdk AS build
WORKDIR /app
COPY pom.xml mvnw ./
COPY .mvn .mvn
RUN ./mvnw dependency:go-offline
COPY src src
RUN ./mvnw clean package -DskipTests
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget -q -O- http://localhost:8080/actuator/health || exit 1
ENTRYPOINT ["java","-jar","app.jar"]# ビルド
docker build -t myapp:1.0 .
# レジストリへ push
docker tag myapp:1.0 registry.example.com/myapp:1.0
docker push registry.example.com/myapp:1.0
# 本番で pull & run
ssh prod
docker pull registry.example.com/myapp:1.0
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
--restart=unless-stopped \
registry.example.com/myapp:1.0
方式 5: GitHub Actions で CI/CD
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- run: mvn clean package -DskipTests
- name: Deploy via SCP
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.PROD_HOST }}
username: deploy
key: ${{ secrets.SSH_KEY }}
source: target/*.jar
target: /opt/app/
- name: Restart service
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST }}
username: deploy
key: ${{ secrets.SSH_KEY }}
script: |
sudo systemctl restart app
sleep 5
curl -f http://localhost:8080/actuator/health
無停止デプロイの戦略
| 戦略 | 仕組み | 難易度 |
|---|---|---|
| Rolling Update | k8s 等で 1 Pod ずつ置換、常に最低 N 個稼働 | k8s 標準 |
| Blue-Green | 旧 (Blue) と新 (Green) を同時起動 → LB で切替 → Blue 廃止 | 中 |
| Canary | 新版に 1% トラフィック → 5% → 25% → 100%、異常で即戻し | 高 |
| Feature Flag | デプロイ ≠ リリース。コード内フラグで段階公開 | 中 |
必ず用意するもの
- ヘルスチェック:
/actuator/health/ 独自/healthz - レディネス vs ライブネス: 起動完了 vs 死活
- ロールバック手順: 1 コマンドで前バージョンへ(タグ運用)
- DB マイグレーション: Flyway / Liquibase で SQL 履歴管理
- ログ集約: CloudWatch / ELK / Loki
- 監視: Prometheus + Grafana / Datadog / Mackerel
FAQ
Q: war と jar、どちらが本番向き?
A: 新規は jar (Spring Boot)。既存資産が WAR ベースで動いているなら無理に変えなくて良い。
Q: デプロイのたびにセッションが切れる
A: Redis / DB セッションストアで外出し。Spring Session が定番。
Q: 環境ごとの設定どう分ける?
A: application-{profile}.yml + 環境変数(12-factor)。秘密情報は Vault / AWS Secrets Manager。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?