@@ -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
8587Mac 环境可以使用 [ 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"
162164CMD ["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
198200docker build -t nextjs-app .
199201```
200202
201- 构建成功后,你可以运行以下命令在本地启动容器 :
203+ 构建成功后,你可以执行以下命令在本地启动容器 :
202204
203205``` bash
204206docker 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
242244sudo systemctl restart sshd
243245```
244246
245- - 设置 root 用户密码, 如果尚未设置,可以使用以下命令:
247+ - 设置 root 用户密码。 如果尚未设置,可以使用以下命令:
246248
247249``` bash
248250sudo passwd root
@@ -293,7 +295,7 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
293295sudo 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+
364368server {
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
426428nginx: configuration file /etc/nginx/nginx.conf test is successful
427429```
428430
429- 接着 ,我们重启 Nginx 服务:
431+ 最后 ,我们重启 Nginx 服务:
430432
431433``` bash
432434sudo systemctl restart nginx
@@ -436,19 +438,19 @@ sudo systemctl restart nginx
436438
437439### 手动部署
438440
439- 你可以在本地构建镜像,然后上传到服务器,接着在服务器上运行镜像 。
441+ 你可以在本地构建镜像,并上传到服务器,然后在服务器上运行容器 。
440442
441443#### 本地构建镜像
442444
443- 在项目根目录下,运行以下命令 :
445+ 在项目根目录下,执行以下命令 :
444446
445447``` bash
446448docker build -t nextjs-app .
447449```
448450
449451#### 导出镜像
450452
451- 构建完成后,通过 ** docker save ** 命令将镜像导出至本地 :
453+ 构建完成后,执行以下命令将镜像导出至本地 :
452454
453455``` bash
454456docker 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
464467scp 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
474475docker load -i /var/www/nextjs-app/nextjs-app.tar
475476```
476477
477- 载入完成后,你可以通过 ** docker images ** 命令查看镜像是否载入成功 :
478+ 载入完成后,你可以执行以下命令查看镜像是否载入成功 :
478479
479480``` bash
480481docker images
@@ -484,19 +485,19 @@ docker images
484485
485486#### 运行容器
486487
487- 载入完成后,我们就可以通过 ** docker run ** 命令来运行容器 :
488+ 载入完成后,我们就可以执行以下命令来运行容器 :
488489
489490``` bash
490491docker run -d --name nextjs-app -p 3000:3000 nextjs-app
491492```
492493
493- 运行成功后,你可以通过 ** docker ps ** 命令查看容器是否运行成功 :
494+ 运行完成后,你可以执行以下命令来查看容器是否运行成功 :
494495
495496``` bash
496497docker ps
497498```
498499
499- 如果看到 ** nextjs-app** 容器,那么说明容器运行成功 。
500+ 如果看到 ** nextjs-app** 容器,那么说明容器已经成功运行 。
500501
501502此时,你就可以通过你的域名访问到 NextJS 应用了。
502503
@@ -633,7 +634,7 @@ jobs:
6336343. 输入名称,并填写对应的值
6346354. 重复以上步骤,配置所有需要的 secrets
635636
636- 这里我们暂时还没有 SSH 密钥,接下来我们就来生成 SSH 密钥。
637+ 这里我们暂时还没有 SSH 密钥,接下来我们就在本地生成 SSH 密钥。
637638
638639##### 生成 SSH 密钥
639640
653654
654655执行该命令后,系统会提示你选择存储密钥的位置,通常使用默认的即可。
655656
656- -C 一般用于添加注释 ,一般是使用你的电子邮件。
657+ -C 标志符,用于添加注释 ,一般是使用你的电子邮件。
657658
658659现在,你可以在 ** ~ /.ssh** 目录下看到生成的两个密钥文件:
659660
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
674676cat ~ /.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