从0到1部署一个云服务站点需要哪些步骤

宫崎骏风-马尔科-红发

前言

这是手动敲命令配置的方式,需要一定的 linux 命令基础,也可以使用云服务器平台支持的面板操作方式,对于新手更友好,例如 宝塔面板 等等

买域名

去域名注册网站注册自己想要的域名,如火山引擎,腾讯云,阿里云 等等

基本价格都差不多,我五一之前买的,火山引擎的优惠力度更大一点,选了一个 xyz 结尾的域名,主要还是 com 结尾的域名太贵了

买云服务器

买了最小配置的,一年60

总费用

域名,云服务器加其他一共261,产品服务明细如下

开始配置

镜像选择

企业级服务系统大部分都是 CentOS,因此这里我选的是 CentOS Stream 9,后面的操作都是在 CentOS Stream 9 中进行的

实例绑定公网IP

按需创建实例后,查看实例是否绑定了公网IP,如果没绑定,点最右边的 ... 绑定即可

远程连接

可以在管理后台点击 远程连接 进入 CentOS 系统,也可以使用 ssh 的方式,因为远程连接默认是 root 用户,下面所有的命令操作不用加 sudo

安装 nginx

先安装 yum-utils

1
yum install yum-utils

设置 yum 仓库,在对应目录下创建配置文件 /etc/yum.repos.d/nginx.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

执行安装命令

1
yum install nginx

安装结束后,使用 nginx -v 命令查看是否安装成功

1
2
# nginx -v
nginx version: nginx/1.26.0

准备站点文件

我使用了一个 index.html 文件,里面只有一句话 I am a test 8091,把 index.html 文件放到 /root/code/8091 目录下

配置 Nginx 站点

例如配置一个 8091 端口的站点,在 /etc/nginx/nginx.conf 文件中,添加 server 配置,主要是设置 root 路径,就是上面 index.html 文件所在的目录地址,配置 listen 端口为 8091, 剩下的配置基本都是默认的,直接粘就行,nginx.conf 完整配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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;

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;

server {
listen 8091;
server_name localhost;
location / {
root /root/code/8091;
index index.html;
try_files $uri $uri/ /index.html;
}
location = /index.html {
root /root/code/8091;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied any;
gzip_vary on;
}

}

重启 Nginx

每次 nginx.conf 文件变更后,都需要重启服务

1
systemctl restart nginx

1
nginx -s reload

配置防火墙

开启 CentOS 系统的防火墙

1
systemctl start firewalld

开放8091端口

1
firewall-cmd --permanent --add-port=8091/tcp

重启防火墙服务

1
firewall-cmd --reload

配置云服务端口

网络与安全 -> 安全组 -> 访问规则 -> 入方向规则 -> 添加规则 添加 8091 端口,如火山引擎操作后的页面效果

测试效果

到这里就全部配好了,打开浏览器,地址栏输入 公网IP:端口 查看效果

遇到的问题

500 Internal Server Error

配置好站点IP和对应目录文件后,访问后500错误

查看 Nginx 日志,进行分析

1
tail -f /var/log/nginx/error.log

默认一般是这个路径,这个路径是在 nginx.conf 文件中 error_log 参数配置的

1
tail -f /usr/local/nginx/logs/error.log

日志提示内容

1
2024/05/07 11:06:34 [error] 279863#279863: *73 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 61.148.18.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "101.126.84.155:8091", referrer: "http://101.126.84.155:8091/"

意思是 内部重定向到“/index.html”时重写或内部重定向循环,这个情况是配置有问题导致

nginx.conf 中我的配置是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 8091;
server_name localhost;
location / {
root /root/code/8091;
index index.html;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied any;
gzip_vary on;
}

因为 8091 端口配置中,location / 块使用了 try_files $uri $uri/ /index.html; 会导致导致在尝试访问根目录时发生重定向循环,添加一个新的location=/index块,直接提供 /index.html 而不进行重定向,如下即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
listen 8091;
server_name localhost;
location / {
root /root/code/8091;
index index.html;
try_files $uri $uri/ /index.html;
}
location = /index.html {
root /root/code/8091;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied any;
gzip_vary on;
}

403 Forbidden

再次使用 tail -f /var/log/nginx/error.log 命令查看 nginx 日志

1
[error] 290911#290911: *104 open() "/root/code/8091/index.html" failed (13: Permission denied), client: 61.148.18.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "101.126.84.155:8091", referrer: "http://101.126.84.155:8091/"

Permission denied 权限拒绝

查看当前 code/ 目录权限如下

1
2
3
4
5
6
7
8
  File: /
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd02h/64770d Inode: 2 Links: 20
Access: (0555/dr-xr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-05-07 14:54:16.911564120 +0800
Modify: 2024-05-07 14:54:15.197545360 +0800
Change: 2024-05-07 14:54:15.197545360 +0800
Birth: 2022-08-29 16:45:42.000000000 +0800

555 改成 777

1
2
chmod 777 code/
chmod 777 code/*

重新刷新浏览器,页面正常能访问到了

欢迎大家讨论交流,如果喜欢本文章或感觉文章有用,动动你那发财的小手点赞、收藏、关注再走呗 ^_^ 

微信公众号:草帽Lufei
掘金:草帽lufei