Skip to content

Commit ee1a585

Browse files
author
snailRun
committed
Merge remote-tracking branch 'origin/main'
2 parents 9d52088 + d107b23 commit ee1a585

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed

data/blog/post-11.mdx

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
---
2+
title: 如何把这个 blog 项目,部署在自己的服务器上
3+
date: 2024-08-17T12:35:01Z
4+
slug: post-11
5+
author: chaseFunny:https://github.com/chaseFunny
6+
tags: ["blog","部署","nginx"]
7+
---
8+
9+
# 如何把 Next.js 静态项目部署在服务器上
10+
11+
## 背景
12+
13+
最近在做个人 blog,最初是部署在 vercel 上,通过 `CI/CD` 自动检测更新发布。但是部署在 vercel 上访问有时候很慢,于是就决定部署在服务器上,那如果你也需要将一个 Next.js 静态项目部署在服务器,这篇文章对你会有帮助,我会从 0 到 1 完成部署工作,文末我特别写了一些我的踩坑
14+
15+
## 先决条件
16+
17+
> 在真正开始部署前,还需要你准备一下,需要如下几个条件
18+
19+
1、 一台服务器
20+
21+
2、 一个 build 成功可以启动的项目源码
22+
23+
3、 一个域名(非必须)
24+
25+
4、 申请一个 SSL 证书(非必须)
26+
27+
下面我们开始吧!
28+
29+
## 安装宝塔
30+
31+
这里我买的是 阿里云服务器,阿里云如何安装宝塔,参考:https://www.yuque.com/asgas/bzyz7m/eepyb1hynvvhmvmg
32+
33+
如果是其他云,也可以百度搜索一下,大致一样
34+
35+
安装成功。我们进入宝塔面板
36+
37+
![image-20240817193843605](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817193843605.png)
38+
39+
然后点击【添加站点】,然后我们填写站点信息,这里我们是有 Nginx 的,如果你没有,可以现在去安装一下,等会要用
40+
41+
![image-20240817194125348](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817194125348.png)
42+
43+
然后,我们进入项目跟目录,把我们的 博客 build 源码 上传上来,然后我们去点击我们添加的站点右侧的【设置】,然后点击左侧的【配置文件】,添加配置代码,这里如果你的配置文件添加不了,是 宝塔版本的问题,可以尝试更新或者重新安装宝塔,配置代码如下:
44+
45+
```nginx
46+
server
47+
{
48+
listen 80;
49+
listen 443 ssl http2 ;
50+
server_name 123.45.67.8 xxx.cn www.xxx.cn;
51+
index index.php index.html index.htm default.php default.htm default.html;
52+
# 这里 xxx.cn 是你的项目文件所在地
53+
root /www/wwwroot/xxx.cn;
54+
55+
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
56+
#error_page 404/404.html;
57+
# 替换 xxx 为真实的地址
58+
ssl_certificate /www/server/panel/vhost/cert/xxx/fullchain.pem;
59+
ssl_certificate_key /www/server/panel/vhost/cert/xxx/privkey.pem;
60+
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
61+
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
62+
ssl_prefer_server_ciphers on;
63+
ssl_session_cache shared:SSL:10m;
64+
ssl_session_timeout 10m;
65+
add_header Strict-Transport-Security "max-age=31536000";
66+
error_page 497 https://$host$request_uri;
67+
68+
#SSL-END
69+
#引用重定向规则,注释后配置的重定向代理将无效
70+
# include /www/server/panel/vhost/nginx/redirect/xxx/*.conf;
71+
72+
#禁止访问的文件或目录
73+
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
74+
{
75+
return 404;
76+
}
77+
78+
#一键申请SSL证书验证目录相关设置
79+
location ~ \.well-known{
80+
allow all;
81+
}
82+
83+
#禁止在证书验证目录放入敏感文件
84+
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
85+
return 403;
86+
}
87+
location / {
88+
try_files $uri $uri.html $uri/ =404;
89+
}
90+
91+
# This is necessary when `trailingSlash: false`.
92+
# You can omit this when `trailingSlash: true`.
93+
location /posts/ {
94+
rewrite ^/posts/(.*)$ /posts break;
95+
}
96+
# 处理单页应用的路由
97+
# location / {
98+
# try_files $uri $uri/ /index.html;
99+
# }
100+
101+
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
102+
{
103+
expires 30d;
104+
error_log /dev/null;
105+
access_log /dev/null;
106+
}
107+
108+
location ~ .*\.(js|css)?$
109+
{
110+
expires 12h;
111+
error_log /dev/null;
112+
access_log /dev/null;
113+
}
114+
access_log /www/wwwlogs/xxx.log;
115+
error_log /www/wwwlogs/xxx.error.log;
116+
}
117+
```
118+
119+
如果你还没有 SSL ,那么删除对应的代码,我们现在访问我们的网站地址,就可以正常访问啦
120+
121+
![image-20240817195127755](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817195127755.png)
122+
123+
注意:这时候我们没有配置 SSL,只能通过 http 来访问,到这里我们就完成了最基础的网站上线,如果我们要开 HTTPS 和添加域名,那么我们继续
124+
125+
## 添加域名 和 开启 HTTPS
126+
127+
开启 https 就需要域名证书,我们可以通过腾讯云白嫖,进入后直接搜索 SSL 证书,进来就有一个【申请免费证书】
128+
129+
![image-20240817195500817](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817195500817.png)
130+
131+
我们申请成功下载证书,选择其他,点击下载,拿到证书后,我们去宝塔面板配置一下
132+
133+
![image-20240817195652517](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817195652517.png)
134+
135+
我们配置成功后,它会自动更新配置文件,这时候我们应该就能通过https 访问了,
136+
137+
添加域名就更简单了,我们去我们的购买域名的地方,需要添加一下解析
138+
139+
![image-20240817195927593](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817195927593.png)
140+
141+
我们添加完成解析后,然后在我们的宝塔面板,打开网站设置,然后点击 【域名管理】添加要使用的域名
142+
143+
![image-20240817200031200](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817200031200.png)
144+
145+
## 注意
146+
147+
1、 我们需要在服务器把对应的端口开启访问权限(关闭防火墙)要不然就会访问不了
148+
149+
![image-20240817200212030](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240817200212030.png)
150+
151+
2、我们的配置代码中中有一点是为了解决刷新 404 。代码为:
152+
153+
```nginx
154+
location / {
155+
try_files $uri $uri.html $uri/ =404;
156+
}
157+
158+
#This is necessary when `trailingSlash: false`.
159+
#You can omit this when `trailingSlash: true`.
160+
location /posts/ {
161+
rewrite ^/posts/(.*)$ /posts break;
162+
}
163+
```
164+
165+
这里还解决了,如果去到了文件夹路由的处理方式
166+
167+
## END
168+
169+
到这里就结束啦,但是我们部署在自己的服务器上,现在不能通过 github issues 自动重新部署了,这是需要解决的问题,要不然每次更新文章,就需要重新部署很麻烦的
170+
171+
---
172+
此文自动发布于:<a href="https://github.com/coderPerseus/blog/issues/11" target="_blank">github issues</a>

0 commit comments

Comments
 (0)