説明する
- 序文:最近、Biz Station Code Godの道路でSpringBootトレーニングプロジェクトを行いました。最初の操作、特に展開部分で多くの困難と問題に遭遇しました。ここでは、自分の展開を書き留めます。参考までに、貴重なコメントを投稿することもできます。
- ビープステーションコードの神のビデオリンク:https://www.bilibili.com/video/BV1Gb4y1d7zb?p = 36
- 私のウェブサイト:www.zhangshidi.space(しばらくすると他のコンテンツに更新される可能性があります〜)
- 作成するのは簡単ではありません。皆さんが通りかかって、親指を立ててください。
- 一部の手順が間違っている可能性があります。手動で実行できます(たとえば、私が読んだチュートリアルでは、mkdirを使用してblog.confなどのファイルを作成していますが、ファイル形式に問題があり、常にサフィックスが付いていますblog.conf.swpなど次に、左側のファイルディレクトリに手動で新しいファイルを作成しましたが、後でタッチで新しいファイルを正常に作成できることがわかりました。mkdirの方がフォルダを作成するのに適しています)
事前知識
- 以下の知識ポイントは、あなたが最初に検索して読んで、一般的な理解を持っていることを望んでいます。
- Linuxとは何ですか?Linuxをマスターするためのいくつかの基本的な手順。
- Docker展開の原則であるDockerとは
- nginxとは
- 何しようか
- Vueフロントエンドプロジェクトをクラウドサーバーにパッケージ化します
- springbootバックエンドプロジェクト(メインWebページ、以下アプリと呼びます)(バックエンド管理システム、以下管理者と呼びます)をクラウドサーバーにパッケージ化します。
- dockerを使用して、mysql、redis、ngix、app、adminをデプロイします。次に、docker-composeを使用してサービスの手配を実行し、プロジェクトが順番に開始されるようにします。
ファイルディレクトリ
- 私の考えに完全に従っている場合は、私のファイルディレクトリをチェックして、ファイルが正しくないかどうかを確認できます。
1環境の準備:サーバーの購入(およびドメイン名)
- 基本環境(クラウドサーバーとドメイン名)–事前に行ってください!
- 私のクラウド構成:AlibabaCloud1コア2GiBサーバー+TencentCloudドメイン名。
- クラウドサーバーは2台目のコンピューターに相当しますが、クラウド内にあります。クラウド内での関係により、自由に嫌がらせをすることができます。さらに厄介な問題が発生した場合は、システムを損傷することなく直接再インストールできます。私たちのコンピュータ自体に影響を与えます。
- まず、クラウドサーバーが必要です。次にクラウドサーバーを購入する必要があります。ドメイン名が必要な場合は、ドメイン名を購入し、ドメイン名とクラウドサーバーIPの間のバインド(解決)を完了する必要があります。住所。ドメイン名なしで一時的にIPアドレスを使用することも可能です。
- 事前にこれを行う理由:ドメイン名を提出する必要があるため、提出期間は1週間ほどかかると言われています。私の(Tencent Cloudで購入した通常のドメイン名-10年180)は問題ありません。ファイリングは1日で完了します。クラウドサーバーは、昨年2021年にダブルイレブンで開催されたAlibabaCloudイベントで購入されました。どちらがいいのか、どちらが悪いのかはほぼ同じだと思いますので、安いものを選んで購入しました。
- サーバーを購入したら、サーバーにLinuxシステムをインストールする必要があります。私はcentoS7.8バージョンを選択しました。
- 次に、このクラウドサーバーを使用するために、クラウドサーバーに直接指示を入力するか、Xshellなどのサードパーティツールを使用できます。(私はバグが少なく、より流暢なxshellを使用しています)
- 上記の手順を自分で検索してください。
- これらの手順を完了した後、非常に重要なことはポートを開くことです。AlibabaCloudの場合、ポート8888、redisポート、データベースポートなど、セキュリティグループルールの構成に含まれます。そうでない場合は、アクセスできません。
2Dockerのインストール
- 私のdockerの理解では、dockerはコンテナーとして理解できます。これは、さまざまな環境と構成をデプロイできる、よりミニチュアのLinuxシステムに相当します。
- Dockerのより具体的な知識については、次の記事を参照してください:https://blog.csdn.net/weixin_46628200/article/details/106668209
インストールを開始します
- 最初にクラウドサーバー管理パネル(リモート接続)に入ります。このような空のページが表示されます。次に、ここにさまざまなコマンドを入力します。-左上隅に2つの記号があります。1つは[新しいコマンドウィンドウ]、もう1つは[Visual View File]で、通常のファイルの表示とほぼ同じです。怠惰すぎてコピーコマンドを使用できない場合は、ファイル内を直接移動できることがあります。
Dockerのインストール
- 次の一連のコマンドをコマンドウィンドウに段階的に入力します
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
#启动docker
/bin/systemctl start docker.service
Dockerイメージをプルします
- Dockerイメージは通常のイメージとして理解でき、DockerイメージはDockerコンテナーを作成するために使用されます。
- それでもコマンドウィンドウに次のコマンドを入力します
docker pull nginx
docker pull redis:5.0.3
docker pull java:8
docker pull mysql:5.7
3 docker configure mysql
- 次に、クラウドサーバーをまとめてホストと呼びます。
アイデア:MySQLを構成するためのDockerを構築し、MySQLデータファイルをホストに配置します。これは少し面倒ですが、セキュリティは向上しています。
mysqlを構成する前に、まず自分のホストにMySQLをインストールし、Linuxでのnannyレベルのmysqlインストールチュートリアルに従うことを願っています。
これは、mysqlデータをホストマシンに保存したいので、dockerにmysql環境のみが構成されているためです。データベースファイルがdockerに保存されている場合は、コンテナーが削除されたら(rmコマンドを使用) 、すべてのデータファイルが消えます。、非常に危険です。
- ホスト上にMySQLディレクトリを作成します(フォルダコマンドmkdirを作成します。cdはディレクトリの切り替えコマンドです)
mkdir -p /mnt/docker/mysql
cd /mnt/docker/mysql
- 先に進み、コマンドウィンドウで次のコマンドを実行します
- これ
run
は、mysqlコンテナを[作成して実行]する役割を果たします - -pは、ホスト3307ポートとコンテナ3306ポートの間のマッピングを確立するためのものです。
- -vは、マウントディレクトリを生成します。マウントは、ファイルディレクトリの共有/同期と理解できます。コロンの前のディレクトリはホストディレクトリであり、コロンの後のディレクトリはドッカーのMySQLデータディレクトリです。ドッカーが削除された場合でも、データは引き続きホストに保持できます。ホストのディレクトリにあります。
- Code Godのメモには、構成ファイル、ログ、データファイルの3つのディレクトリがマウントされていることに注意してください。実際の操作ではログにエラーが発生し続けるので、最も重要なデータファイルのみを構成します
- 次のステップは、ホストMySQLのデフォルトのパスワードを指定することです。デフォルトのパスワードが設定されていない場合、エラーが報告される場合があります。
- これ
docker run -id \
-p 3307:3306 \
--name=mysql \
-v /mnt/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
次に、コンテナを入力して権限を開く必要があります
docker ps
コンテナがすでに実行されているかどうかを確認します- mysql5.7コンテナがすでに実行されていることを確認する必要があります
- コンテナに
docker exec -it mysql bash
- コンテナへのMYSQL
mysql -uroot -p
- 上記のようにパスワードを入力します。rootとして設定します。直接入力するだけです。(インターフェイスに空白が表示されますが、パスワードはすでに入力されています。Enterキーを押して確認してください。)
- 次の手順は、上記のホストmysqlをインストールする手順10と同様 です。
show databases;
use mysql ;
show tables;
select user,host from user;
(SQLエラーが報告される場合があります。「パッケージフィールド」を追加するだけです)- rootユーザーに対応するホストは%ではないことがわかります。アクセス許可を開くには、ホストを%に変更する必要があります。
update user set host ='%'where user ='root';
update user set host ='%'where user ='root' and host='localhost';
- 両方の文を実行するのが最善です。当時の私の状況では、2人のルートユーザーがいました。実行の結果、ホストに対応する1つのルートが空になり、もう1つのホストが%になりました。
- (高度な権限を開くこともできます
grant all privileges on *.* to root@'%' identified by 'root' with grant option;
) - 権限の更新
flush privileges;
exit
MySQLをexit
終了してから、MySQLコンテナを終了します
mysqlのDockerコンテナが正常に構成されているかどうかを確認し、公開されているDockerIPアドレスを表示します
- これ
docker logs -f mysql
を使用して、構成が成功したかどうかを確認します docker inspect mysql
→対応するmysqldockerコンテナのIPアドレス172.17.0.2を確認してください。このアドレスを覚えておいてください。これは、以下のパッケージングバックグラウンドアプリケーションに必要です。
環境が適切になったら、データベースファイルblog.sqlをインポートする必要があります
- 前述のように、ホスト
/mnt/docker/mysql/data
ディレクトリと/var/lib/mysql
Dockerコンテナのアドレスの間のマッピングを実装しました。したがって、blog.sqlファイルをホストのこのディレクトリにインポートすると、blog.sqlはdockerの対応するディレクトリにも表示されます。 。以下の具体的な操作は次のとおりです。
cd /mnt/docker/mysql/data
rz
- その中で、cdはディレクトリを切り替えることを意味し、rzはファイルをアップロードすることを意味します。この時点で、blog.sqlをインポートできます。次に、ファイルがDockerコンテナに表示されるかどうかを確認します
- コンテナに
docker exec -it mysql bash
- マウントディレクトリに移動します
cd /var/lib/mysql
- このディレクトリ内のすべてのファイルを見ると、
ls
理論的にはblog.sqlもこのディレクトリにあることがわかります。 - 次に、DockerでSQLを実行します。
mysql -uroot -p
、パスワードを入力して、Dockerにデータベースを入力します- データベースを作成する
create database blog;
- コンテナに戻る
exit
- ファイルをデータベースにインポートします
mysql -uroot -p blog < blog.sql;
- スイッチデータベース
use blog;
- SQLを実行してデータベースを保存します
source blog.sql;
- 結果チェック
use blog;
show tables;
select * from ms_admin;
- 結果を見つけることができれば(下の図に示すように)、展開が成功したことを意味します。
- 実際の展開では、リンク障害、アクセス拒否、jdbc接続障害など、データベースに最も多くの時間を費やしています。これは、データベースのアクセス許可が原因である可能性があります。ルートに対応するホスト権限がこれらであるかどうかを確認してください。
- Code Godのメモに書かれたデータベース構成ファイルもあります。ここでは書きませんでした。とりあえず、デフォルトの構成を使用してください。
4 docker configureredis
- これは非常に簡単で、1つのコマンドで実行できます
docker run -id --name=redis -p 6379:6379 redis:5.0.3
- 試験
- docker ps現在実行中のコンテナーを表示します。理論的には、mysqlとredisの両方が実行されていることがわかります。
- docker ps -aすべてのコンテナーを表示します(実行されていない場合を含む)
docker inspect redis
後でプロジェクトをパッケージ化するときに使用されるredisdockerに対応するIPアドレスを確認する必要があります。ここでは172.17.0.3です。
5Dockerfileはバックエンドイメージを構築します
- MySQLやredisなどのミラーを直接プルすることはできますが、バックエンドプロジェクトのミラーは、自分でパッケージ化して構築する必要があります。
- Dockerfileのコード神の説明は次のとおりです
- Dockerfileはテキストファイルです
- コマンドが含まれています
- 各命令は、ベースイメージに基づいてレイヤーを構築し、最後に新しいイメージを構築します
- 開発者向け:開発チームに完全に一貫した開発環境を提供できます
- テスターの場合:開発中にビルドされたイメージを直接取得するか
、Dockerfileファイルを介して新しいイメージをビルドして作業を開始できます - 運用および保守担当者の場合:展開中にアプリケーションのシームレスな移行を実現できます
まず、アイデアとパッケージのパラメーターを構成する必要があります
- 接続パラメータの設定-
- クロスドメイン構成に関するパラメータもあります。以下を参照することもできます。独自のドメインを通過させる必要があります。その後、クロスドメイン構成が教師によって作成されたものから2番目の構成に変更されます。その理由は図のとおりですので、どうぞよろしくお願いします!-jarパッケージをパッケージ化して生成します
- ローカルファイルを見つけて、それを見つけるのに適した場所に置き、後でディレクトリにインポートする準備をします
次に、jarパッケージを/ mnt / docker / appディレクトリにインポートし、イメージの構成ファイルをビルドして、イメージを実行する必要があります。
- 最初に新しいディレクトリを作成します
mkdir /mnt/docker/app
- アップロード機能を使用できる構成
yum -y install lrzsz
- このディレクトリに切り替えます
cd /mnt/docker/app
- ファイルをアップロードする
rz
- 名前を変更する
mv blog-api-1.0-SNAPSHOT.jar blog_api.jar
- イメージを構築するための構成ファイルを構成します
- 新しいファイルを作成する
touch blog_dockerfile
- ファイルの内容を変更する
vim blog_dockerfile
- 次のコンテンツを貼り付けます(個人パラメータを自分で変更します)
- 新しいファイルを作成する
FROM java:8
MAINTAINER zhangshidi <[email protected]>
ADD ./blog_api.jar /app.jar
CMD java -jar /app.jar --spring.profiles.active=prod
- 実行イメージ
docker build -f ./blog_dockerfile -t app .
- チェック
docker images
すると、アプリのDockerがすでに実行されていることがわかります。
6フロントエンドイメージを構築します
フロントエンドの構成、パッケージ化、アップロードを変更し、ファイルの場所を微調整します。
-
正面に行こう
- IPを変更
-
プロジェクトをビルドすると、彼は自動的にプロジェクトを生成してdistし、ファイルを手動で圧縮してクラウドサーバーに送信します。
-
コマンドウィンドウインターフェイスに戻り、解凍機能をインストールする必要があります
#获取安装列表 yum安装列表中搜索zip/unzip是否存在
yum list | grep zip/unzip
#执行安装支持zip命令 根据提示输入y允许安装
yum install zip
#执行安装支持unzip命令 根据提示输入y允许安装
yum install unzip
- 対応するフォルダを作成します
mkdir /mnt/zhang
mkdir /mnt/zhang/blog
- ブログディレクトリに切り替えます
cd /mnt/zhang/blog
-アップロードrz
、フロントエンドのdist圧縮パッケージをアップロードします - 解凍
unzip dist.zip
- 次に、ファイルの場所を/ mnt / zhang / blogの下に移動します
ls
。これは、dist.zip、index.html、staticの3つのファイルである必要があります。実際、有用なファイルはindex.htmlおよびstaticである必要があります。- 移動方法は、左側のファイルディレクトリに直接ドラッグしました。対応するコマンドもあります。
- 移動方法は、左側のファイルディレクトリに直接ドラッグしました。対応するコマンドもあります。
7Docker-composeサービスオーケストレーション
- サービスオーケストレーションは主にDockerComposeを使用して、springbootとnginxをバッチで開始します
- Springbootは私たち自身のパッケージプロジェクトです
- nginxの役割:①サーバー上の静的ファイル(HTML、画像など)は、HTTPプロトコルを介してクライアントに表示されます。②リバースプロキシサーバー。nginxプロキシはフロントエンドリソースクライアントであり、HTTPプロトコルを介してWebサイトアプリケーションサーバーに直接アクセスできます。Webサイト管理者は途中でNginxを追加し、クライアントはNginxを要求し、Nginxはアプリケーションサーバーを要求します。結果はクライアントに返されます。プロキシのレイヤーを追加すると、負荷分散、仮想ホスティング、その他の効果を実現できます。(詳細はこちらをご覧ください)
まず、DockerComposeをインストールします
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
対応するディレクトリを作成し、docker-compose.yml構成ファイルを書き込みます
vim
ファイルを変更することを意味します
mkdir /mnt/docker/docker-compose
cd /mnt/docker/docker-compose
touch docker-compose.yml
vim docker-compose.yml
- 次のコンテンツをdocker-compose.ymlにコピーします。書き込み後、Escキーを押して編集モードを終了し、Enterキーを押すと、
:wq
保存して終了できます〜
version: '3'
services:
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
- 443:443
links:
- app
depends_on:
- app
volumes:
- /mnt/docker/docker-compose/nginx/:/etc/nginx/
- /mnt/zhang/web:/zhang/web
- /mnt/zhang/blog:/zhang/blog
network_mode: "bridge"
app:
image: app
container_name: app
expose:
- "8888"
network_mode: "bridge"
- このファイルには
depends_on
ディレクトリを配置する機能があります。このマウントディレクトリについては、自分のディレクトリの順序に注意してください。さまざまなチュートリアルに従うときは、ディレクトリの順序と自分のディレクトリの順序を区別する必要があります。以下は私のディレクトリの順序です。
次に、nginxファイルディレクトリと関連する内部構成ファイルを構成する必要があります
- まず、
nginx.conf
ファイルを取得する必要があります
mkdir -p ./nginx
cd /mnt/docker/nginx
touch nginx.conf
vim nginx.conf
- 次のコンテンツをコピーします
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
}
- 新しいconf.dフォルダーを作成してから、新しい
blog.conf
ファイルを作成します
mkdir conf.d
cd conf.d
touch blog.conf
vim blog.conf
blog.conf
構成を変更し、次のファイルをに入れます
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_vary off;
upstream appstream{
server app:8888;
}
server{
# 监听端口
listen 80;
# 主机名称/地址
server_name www.zhangshidi.space zhangshidi.space;
index index.html;
# 前端服务
location / {
root /zhang/blog/;
# 刷新页面后跳转到当前页面
try_files $uri $uri/ /index.html;
index index.html;
}
# 后端api
location /api {
proxy_pass http://appstream;
}
location ~* \.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$ {
root /zhang/blog/;
index index.html;
add_header Access-Control-Allow-Origin *;
}
}
- コード神の構成にはssl/tsl構成もあります。必要に応じて、申請してから構成することができます。ここでは省略します。
- というファイルもあることがわかります
mime.types
mime.types
これはnginxの必需品です。インターネットからnginxをダウンロードしてファイルを取り出してrz
入力しました。また、新しいファイルを作成してコードをコピーすることもできます。コードは次のとおりです。
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
- チェック、使用
ls
説明書
8テストを実行します
-
この時点で、デプロイメントは基本的に完了しています。
-
また
docker ps
、4つのコンテナが実行されていることを確認してください -
docker-composeディレクトリに切り替えて、コンテナを起動します。コンテナを起動および停止するための一般的な手順は次のとおりです。
docker-compose up #直接启动
docker-compose up -d #代表后台启动
docker-compose down #停止并删除容器
docker-compose start #启动已有容器
docker-compose stop #停止运行的容器
- 一般的に
docker-compose up
、ウェブサイトに問題がないか直接確認します。問題がある場合は、次の2つのコマンドを使用して改善します。- ngixログを確認してください。
docker logs nginx
- バックエンドログを表示する:
docker-compose logs
- ngixログを確認してください。
- デプロイが完全に完了したと感じたら、バックグラウンドでdocker-compose up -dを起動して、サーバーの電源をオフにして実行できるようにします。
- 最後に、私が参照した2つの記事のアイデアに感謝します。どちらもよく書かれていますが、ここで実装するのが難しい詳細もあります。また、CodeGod氏の努力にも感謝したいと思います。それらを比較してください、私はそれらがあなたを助けると信じています。
- 別の質問があります。なぜバックグラウンド管理の展開がないのかと疑問に思うかもしれません。
- バックグラウンド管理を詳しく見てみましょう。SpringSecurityの場合としか言えず、バックグラウンド管理の役割はまったく果たしていません...展開されていても意味がありません。
ご来店ありがとうございました。文章が良いと思われる場合は、いいねと励ましをお願いします。ご不明な点がございましたら、メッセージを残してください。問題点をご指摘ください。
- また、自分でフラグを設定し、Spring Cloudを学び、githubで最も多くのスターを獲得してモールプロジェクトを征服します