Skip to content

Commit 22e0009

Browse files
committed
update docker deploying nextjs
1 parent 12cbc7a commit 22e0009

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

content/posts/docker-deploying-nextjs.mdx

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ NextJS 官方提供了多种部署方式,包括:
1212
- 静态导出部署
1313
- 传统服务器部署
1414

15-
你可以查看[官方文档](https://nextjs.org/docs/app/building-your-application/deploying)了解更多信息
15+
你可以查看[官方文档](https://nextjs.org/docs/app/building-your-application/deploying)了解更多的信息
1616

1717
本文我将重点介绍如何使用 Docker 进行容器化部署。
1818

@@ -23,25 +23,25 @@ NextJS 官方提供了多种部署方式,包括:
2323
- 生产服务器准备和配置
2424
- Nginx 配置代理与 HTTP/2
2525
- 手动部署
26-
- 使用 Github Actions 实现自动化部署
26+
- 使用 Github Actions 自动化部署
2727

2828
### 准备
2929

3030
在开始之前,你需要准备以下资源:
3131

3232
**一台 Linux 服务器**
3333

34-
国内推荐使用 [腾讯云](https://cloud.tencent.com/product/cvm) 或者 [阿里云](https://www.aliyun.com/product/ecs) 的云服务器,操作系统建议使用主流的 Linux 发行版, Ubuntu 或 CentOS,配置建议最少使用 2 核 2G 以上的配置。
34+
国内推荐使用 [腾讯云](https://cloud.tencent.com/product/cvm) 或者 [阿里云](https://www.aliyun.com/product/ecs) 的云服务器,操作系统建议使用主流的 Linux 发行版,比如 Ubuntu 或 CentOS,配置方面建议最少使用 2 核 2G 以上的配置。
3535

3636
本网站目前使用的是阿里云的 ESC 云服务器,操作系统为 Ubuntu 22.04 LTS,配置为 2 核 2G。
3737

3838
**一个域名**
3939

4040
国内推荐使用 [腾讯云](https://dnspod.cloud.tencent.com) 或者 [阿里云](https://wanwang.aliyun.com) 的域名服务。
4141

42-
本网站目前使用的是阿里云的域名服务
42+
需要注意的是,国内域名必须通过备案才能使用,备案时间一般在 30 天左右。并且域名是跟随云服务器的,也就是说,你在阿里云备案的域名,只能绑定阿里云的云服务器
4343

44-
需要注意的是,国内域名需要备案才能使用,备案时间通常在 30 天左右。并且域名是跟随云服务器的,也就是说,你在阿里云备案的域名,只能绑定阿里云的云服务器
44+
本网站目前使用的是阿里云的域名服务
4545

4646
**一个 Github 仓库**
4747

@@ -80,11 +80,13 @@ export default nextConfig;
8080

8181
### Docker 配置
8282

83+
如果你还不熟悉 Docker,可以点击[这里](/posts/docker-getting-started)
84+
8385
首先,你需要确保本地已经安装了 Docker 环境。
8486

8587
Mac 环境可以使用 [Docker Desktop](https://www.docker.com/products/docker-desktop) 或者 [OrbStack](https://orbstack.dev) 来安装 Docker。如果你更习惯使用 Docker 命令而非图形化界面,那么我更推荐你使用 OrbStack,因为它启动更快,内存占用更小。
8688

87-
Windows 环境只能使用 [Docker Desktop](https://www.docker.com/products/docker-desktop) 来安装 Docker。如果你是家庭版系统,可能没法顺利安装 Docker,你需要自行搜索解决方案。
89+
Windows 环境只能使用 [Docker Desktop](https://www.docker.com/products/docker-desktop) 来安装 Docker。如果你是家庭版系统,可能没法顺利安装,你需要自行搜索解决方案。
8890

8991
准备好 Docker 环境后,我们就可以开始编写 Dockerfile 了。
9092

@@ -162,7 +164,7 @@ ENV HOSTNAME="0.0.0.0"
162164
CMD ["node", "server.js"]
163165
```
164166

165-
如果你还不清楚 Dockerfile 的语法,可以点击[这里](/posts/docker-dockerfile)
167+
如果你还不熟悉 Dockerfile 的语法,可以点击[这里](/posts/docker-dockerfile)
166168

167169
我们使用了多阶段去构建 Docker 镜像,这样能充分的利用层缓存,提升构建速度,并减少镜像大小。
168170

@@ -190,29 +192,29 @@ Dockerfile
190192

191193
#### 本地运行测试
192194

193-
你需要确保本地已经启动了 Docker Desktop 或者 OrbStack。
195+
首先,你需要确保本地已经启动了 Docker Desktop 或者 OrbStack。
194196

195-
然后,在项目根目录下运行以下命令在本地构建镜像
197+
然后,在项目根目录下执行以下命令开始构建镜像
196198

197199
```bash
198200
docker build -t nextjs-app .
199201
```
200202

201-
构建成功后,你可以运行以下命令在本地启动容器
203+
构建成功后,你可以执行以下命令在本地启动容器
202204

203205
```bash
204206
docker run -p 3000:3000 nextjs-app
205207
```
206208

207-
访问 [http://localhost:3000](http://localhost:3000),如果看到 NextJS 应用的页面,那么说明本地构建和运行成功
209+
访问 [http://localhost:3000](http://localhost:3000),如果看到 NextJS 应用的页面,那么说明在本地构建和运行成功
208210

209211
### 生产服务器的准备和配置
210212

211-
在生产环境的云服务器上,我们需要完成以下四个关键步骤:
213+
生产环境的云服务器上,我们需要完成以下四个关键步骤:
212214

213215
#### 开启远程登录
214216

215-
首先,你需要确保云服务器允许远程登录,后续我们会通过远程连接在服务器进行操作
217+
首先,你需要确保云服务器允许远程登录,后续我们会通过远程连接在服务器上进行操作
216218

217219
这里,我们以阿里云 Ubuntu 22.04 LTS 为例:
218220

@@ -242,7 +244,7 @@ PermitRootLogin yes
242244
sudo systemctl restart sshd
243245
```
244246

245-
- 设置 root 用户密码如果尚未设置,可以使用以下命令:
247+
- 设置 root 用户密码如果尚未设置,可以使用以下命令:
246248

247249
```bash
248250
sudo passwd root
@@ -293,7 +295,7 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
293295
sudo docker run hello-world
294296
```
295297

296-
此时,Docker 会下载测试镜像并在容器中运行,运行成功后它会打印一条确认消息并退出。
298+
执行命令后,Docker 会下载测试镜像并在容器中运行,运行成功后它会打印一条确认消息并退出。
297299

298300
现在,我们已经在服务器上完成了 Docker 的安装。
299301

@@ -361,6 +363,8 @@ scp file-name.key root@your-server-ip:/etc/nginx/certs/
361363
打开该文件,并修改为以下内容:
362364

363365
```nginx
366+
# 需要将 **your-domain** 替换为你的域名,**file-name** 替换为你的证书文件名。
367+
364368
server {
365369
# SSL configuration
366370
#
@@ -403,11 +407,9 @@ server {
403407
}
404408
```
405409

406-
注意,配置中的 **your-domain** 需要替换为你的域名,**file-name** 需要替换为你的证书文件名。
407-
408410
我们在配置中监听了 80 端口(http 协议的默认端口),和 443 端口(https 协议的默认端口)。
409411

410-
80 端口主要用于将 http 请求重定向到 443 端口,443 端口用于处理请求
412+
80 端口主要用于将 http 请求重定向到 443 端口,443 端口主要用于处理请求
411413

412414
在 443 端口,我们配置了 HTTPS 和 HTTP/2 支持。并在 **location /** 配置项中,将请求代理到本地 3000 端口,之后我们会在这个端口上运行 Docker 容器。
413415

@@ -426,7 +428,7 @@ nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
426428
nginx: configuration file /etc/nginx/nginx.conf test is successful
427429
```
428430

429-
接着,我们重启 Nginx 服务:
431+
最后,我们重启 Nginx 服务:
430432

431433
```bash
432434
sudo systemctl restart nginx
@@ -436,19 +438,19 @@ sudo systemctl restart nginx
436438

437439
### 手动部署
438440

439-
你可以在本地构建镜像,然后上传到服务器,接着在服务器上运行镜像
441+
你可以在本地构建镜像,并上传到服务器,然后在服务器上运行容器
440442

441443
#### 本地构建镜像
442444

443-
在项目根目录下,运行以下命令
445+
在项目根目录下,执行以下命令
444446

445447
```bash
446448
docker build -t nextjs-app .
447449
```
448450

449451
#### 导出镜像
450452

451-
构建完成后,通过 **docker save** 命令将镜像导出至本地
453+
构建完成后,执行以下命令将镜像导出至本地
452454

453455
```bash
454456
docker save -o nextjs-app.tar nextjs-app
@@ -461,20 +463,19 @@ docker save -o nextjs-app.tar nextjs-app
461463
接着,我们通过 **scp** 命令将镜像上传到服务器:
462464

463465
```bash
466+
# 需要将 your-server-ip 替换为你的服务器公网 IP
464467
scp nextjs-app.tar root@your-server-ip:/var/www/nextjs-app
465468
```
466469

467-
注意,你需要将 **your-server-ip** 替换为你的服务器公网 IP。
468-
469470
#### 载入镜像
470471

471-
上传完成后,我们在服务器上,通过 **docker load** 命令将镜像载入
472+
上传完成后,我们在服务器上,执行以下命令将镜像载入
472473

473474
```bash
474475
docker load -i /var/www/nextjs-app/nextjs-app.tar
475476
```
476477

477-
载入完成后,你可以通过 **docker images** 命令查看镜像是否载入成功
478+
载入完成后,你可以执行以下命令查看镜像是否载入成功
478479

479480
```bash
480481
docker images
@@ -484,19 +485,19 @@ docker images
484485

485486
#### 运行容器
486487

487-
载入完成后,我们就可以通过 **docker run** 命令来运行容器
488+
载入完成后,我们就可以执行以下命令来运行容器
488489

489490
```bash
490491
docker run -d --name nextjs-app -p 3000:3000 nextjs-app
491492
```
492493

493-
运行成功后,你可以通过 **docker ps** 命令查看容器是否运行成功
494+
运行完成后,你可以执行以下命令来查看容器是否运行成功
494495

495496
```bash
496497
docker ps
497498
```
498499

499-
如果看到 **nextjs-app** 容器,那么说明容器运行成功
500+
如果看到 **nextjs-app** 容器,那么说明容器已经成功运行
500501

501502
此时,你就可以通过你的域名访问到 NextJS 应用了。
502503

@@ -633,7 +634,7 @@ jobs:
633634
3. 输入名称,并填写对应的值
634635
4. 重复以上步骤,配置所有需要的 secrets
635636
636-
这里我们暂时还没有 SSH 密钥,接下来我们就来生成 SSH 密钥。
637+
这里我们暂时还没有 SSH 密钥,接下来我们就在本地生成 SSH 密钥。
637638
638639
##### 生成 SSH 密钥
639640
@@ -653,7 +654,7 @@ ssh-keygen -t rsa -b 4096 -C "[email protected]"
653654

654655
执行该命令后,系统会提示你选择存储密钥的位置,通常使用默认的即可。
655656

656-
-C 一般用于添加注释,一般是使用你的电子邮件。
657+
-C 标志符,用于添加注释,一般是使用你的电子邮件。
657658

658659
现在,你可以在 **~/.ssh** 目录下看到生成的两个密钥文件:
659660

@@ -663,22 +664,23 @@ ssh-keygen -t rsa -b 4096 -C "[email protected]"
663664
接着,执行以下命令,将公钥添加到服务器已授权的密钥列表中:
664665

665666
```bash
666-
cat ~/.ssh/id_rsa.pub | ssh root@your-server-ip 'cat >> .ssh/authorized_keys'
667+
# 需要将 your-server-ip 替换为你的服务器公网 IP
668+
ssh-copy-id -i ~/.ssh/id_rsa.pub root@your-server-ip
667669
```
668670

669-
**your-server-ip** 需要替换为你的服务器公网 IP
671+
现在,你在本地使用命令连接服务器时,就不需要输入密码了
670672

671673
最后,执行以下命令:
672674

673675
```bash
674676
cat ~/.ssh/id_rsa
675677
```
676678

677-
并复制输出的内容,作为 SSH_PRIVATE_KEY 的值,添加到 Github 仓库的 Secrets 中。
679+
复制输出的内容,作为 SSH_PRIVATE_KEY 的值,添加到 Github 仓库的 Secrets 中。
678680

679681
##### 触发工作流
680682

681-
首先将你本地的代码推送到 Github 仓库,然后进入仓库的 Actions 页面,点击 Run workflow 按钮,就能触发工作流。
683+
首先,你需要将本地的代码推送到 Github 仓库,然后进入仓库的 Actions 页面,点击 Run workflow 按钮,就能触发工作流。
682684

683685
工作流触发后,你可以在 Actions 页面看到工作流的执行情况。
684686

0 commit comments

Comments
 (0)