Portfolioサイトのアップロード


以前に作成したノード私はjsベースの製品組合せサイトを持っています.修正してjenkinsに登録して使用したいです.

🐋Dockerネットワークの作成


フロントプロジェクトはできるだけawsに行きます.まずネットワークを再設定します.
docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 portfolio

🐋Dockerfileの作成

FROM node:slim

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . /app

EXPOSE 3000

CMD [ "npm", "run", "start"]
dockerはjavaとは異なり、jarだけを投げ出すのではなく、ソースコード全体を取得する必要があります.したがってpackageを移動してインストールし、すべてのソースコードをコピーするしかありません.
node_modules
package-lock.json
また、nodeは初期インストール時に生成されたファイルで、これらのファイルを一緒に移動するとエラーが発生します..dockerignoreファイルをCOPY時に除外するように設定します.
docker build -t ililil9482/portfolio:1.0 .
画像が生成され、正常に動作していることを確認できます.
以前はhubにファイルをプッシュするのはjenkinsで行われていましたがawsとwindowの間で衝突は起こらないのでlocalからhubに直接プッシュしました.
docker push ililil9482/portfolio:1.0
波止場まで押す

正常に上昇した.

🐋docker-compose.ymlの作成

version: '3.7'
  
services:
    portfolio:
        image: "ililil9482/portfolio:1.0"
        container_name: portfolio
        expose:
            - 3000
networks:
    default:
        external:
            name: portfolio
awsサーバにymlファイルを作成します.

🤵‍♂️Jenkins設定


awsキーを追加します.

awsの名前で追加します.
pipeline {
    agent any

    stages {
        stage('Down') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /project/portfolio && sudo docker-compose down',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }

        stage('Pull') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'sudo docker pull ililil9482/portfolio:1.0',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }

        stage('Up') {
            steps {
sshPublisher(publishers: [
  sshPublisherDesc(configName: 'aws',
  transfers: [
    sshTransfer(cleanRemote: false,
    excludes: '',
    execCommand: 'cd /project/portfolio && sudo docker-compose up -d',
    execTimeout: 120000,
    flatten: false,
    makeEmptyDirs: false,
    noDefaultExcludes: false,
    patternSeparator: '[, ]+',
    remoteDirectory: '',
    remoteDirectorySDF: false,
    removePrefix: '',
    sourceFiles: '')
  ],
  usePromotionTimestamp: false,
  useWorkspaceInPromotion: false,
  verbose: false)
])
            }
        }
        
        
    }
}
パイプラインの作成後:

コンテナが稼働していることを確認できます.

追加Nginx

FROM nginx:latest

COPY nginx.conf /etc/nginx/nginx.conf

CMD ["nginx", "-g", "daemon off;"]

EXPOSE 80
Dockerfileを作成します.
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen 80;

        location / {
            proxy_pass http://portfolio:3000;
        }
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;
}
nginx.confファイルを作成することもできます.
version: '3.7'
  
services:
    nginx:
        container_name: nginx
        image: my-nginx:1.0
        ports:
            - 80:80

networks:
    default:
        external:
            name: portfolio
最後のdocker-composeymlファイルを作成して実行します.
http://3.38.251.117/
接続が良好であることが確認できます.