危险

为之则易,不为则难

0%

Git service

🎉 从头到尾部署 Git 平台,涉及 Linux 基本操作(下载与解压文件、安装软件、创建用户等)、ECS 购买、Xshell、Git 服务安装和后台启动、Nginx 站点配置或正向代理、域名解析、SSL 和 Gzip 等。

最终实现效果如下:

关于 Linux

目录说明
目录 描述
/boot 存放的启动 Linux 时使用的内核文件,包括连接文件以及镜像文件。
/etc 存放所有系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
/bin bin 是 Binaries(二进制文件) 的缩写,存放着最常用的程序和指令。
/dev Device(设备)的缩写, 存放的是 Linux 的外部设备。
/mnt 临时挂载别的文件系统的,例如我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/tmp tmp 是 temporary(临时) 的缩写,这个目录是用来存放一些临时文件的。
/root 系统管理员的用户主目录。 该目录为系统管理员,也称作超级权限者的用户主目录。
/home 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
/usr usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/var var 是 variable(变量) 的缩写,存放经常修改的数据,比如程序运行的日志文件目录是 /var/log

购买 ECS

Aliyun,香港的不用备案。

配置规则

进行链接

a. 通过普通的命令行工具。

1
ssh root@47.98.254.207

b. 通过官方的 Workbench。

c. 推荐 Xshell

安装 Git

😎 Ubuntu 中管理软件的命令是 apt,Centos 中是 yum,下面将以 Ubuntu 举例。

1
2
3
4
5
apt --help
# 如果需要管理员权限可在前面加 sudo
apt update
apt install git
git --version

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
who
whoami
w
# 列出所有用户
ls /home

# 创建用户,可能前面要加 sudo
userdel ifer
# 添加用户,一路按回车
adduser ifer

# switch user git
su ifer

# 比如我登录的用户是 ifer,cd ~ 表示进到 /home/ifer,/ 表示进到当前用户的根,有 home、dev、bin 等目录
cd ~

# 查看当前所在目录路径
pwd

# 列出当前目录文件
ls

下载文件

1
2
3
4
5
6
7
8
9
10
# 下载文件,在 Gogs 官网可以找到对应下载链接
wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz
ls
# 解压到当前目录
# x => extract
# z => gzip
# v 代表冗长(verbose)模式。加上这个选项后,tar 命令在处理文件时会显示详细的输出
# f 代表指定文件名,这个选项后面紧跟的是要处理的归档文件的名称
tar -xzvf gogs_0.11.91_linux_amd64.tar.gz
ls

启动 Gogs

1
2
3
4
5
6
7
8
9
10
11
cd gogs
# 查看公网 IP
curl ip.sb

# 启动 gogs
./gogs web

# 安装 gogs,注意是 http
http://121.40.238.160:3000

# 修改数据库类型、运行系统用户(ifer)、域名、应用 URL(端口保持 3000)

注册账号

1
2
3
4
5
6
# a. 注册账号
# b. 添加 SSH,ssh-keygen -t rsa -C "your email" => C:\Users\dangp\.ssh\id_rsa.pub or ~/.ssh
# c. 创建仓库
# d. 以 SSH 形式克隆仓库
# e. 编写代码
# f. 提交测试

后台启动

1
2
3
nohup ./gogs web &

# 访问 http://121.40.238.160:3000/ 查看效果

修改配置

1
2
3
4
5
6
7
su ifer
cd ~
pwd # /home/ifer

cd gogs/custom/conf
ls
vim app.ini

🐞 新建的仓库,期望去掉 README 中的端口号,处理如下。

1
# 🌺 去掉 ROOT_URL 的端口

🐞 处理图片出不来的问题,解决如下。

1
2
3
[picture]
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = true

🐳 重启 Gogs。

1
2
3
4
5
6
cd ~
ps -ef | grep gogs # 找到 ./gogs/web 的 PID
kill 18846
ls
cd gogs # cd ~/gogs 或 cd /home/ifer/gogs
nohup ./gogs web &

安装 Nginx

1
2
3
4
5
6
7
8
9
yum list | grep nginx

whereis nginx # 查看

/usr/sbin/nginx # 启动

ps -C nginx -o pid # 查看相关 PID

# 94.74.123.123 # 访问测试下

域名解析

1
2
# @ => zhihur.com
# www => www.zhihur.com

配置 Nginx

1
2
3
4
5
6
7
whereis nginx
cd /etc/nginx # 配置文件目录
ls
mkdir vhosts
cd vhosts # 在此目录新建 zhihur.conf
ls
vim zhihur.conf
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name zhihur.com;
location / {
# 常见的,这里有两种处理方式
# 方式一,配置自己的网站目录
# root /workspace/icoding;
# 方式二,配置正向代理
proxy_pass http://127.0.0.1:3000;
index index.html index.htm;
}
}
1
2
3
4
5
6
cat zhihur.conf

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak # 备份
cd /etc/nginx/

vim nginx.conf
1
2
3
4
5
http {
# 引入自定义配置文件
include /etc/nginx/vhosts/*.conf;
include /etc/nginx/conf.d/*.conf;
}
1
2
nginx -t # 语法检查
nginx -s reload # 不中断当前的服务,重新加载配置文件

配置 SSL

基本流程:购买证书 => 申请证书 => DNS 验证(添加记录集) => 再次 DNS 验证 => 下载签发后的证书。

华为云

阿里云

阿里云(不必把证书添加到记录集)。

1
2
3
4
5
6
mkdir -p /etc/nginx/vhosts/cert
cd /etc/nginx/vhosts/cert
# 将下载的本地证书和私钥文件上次至此目录

# 修改 Nginx 配置
vim /etc/nginx/vhosts/zhihur.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
server {
#HTTPS的默认访问端口443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl;

#填写证书绑定的域名
server_name zhihur.com;

#填写证书文件绝对路径
ssl_certificate vhosts/cert/zhihur.com.pem;
#填写证书私钥文件绝对路径
ssl_certificate_key vhosts/cert/zhihur.com.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:3000;
index index.html index.htm;
}
}
server {
listen 80;
#填写证书绑定的域名
server_name zhihur.com;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
}
}
1
2
nginx -t
nginx -s reload

配置 Gzip

nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
events {
use epoll;
worker_connections 51200;
multi_accept on;
}

http {
# 开启压缩功能,on 表示开启 off 表示关闭,默认是 off
gzip on;
#表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大。即:小于设置值的文件将不会压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 16k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
# gzip 压缩级别,1-9,数字越大压缩的越好(一般选择4-6),也越占用CPU时间
gzip_comp_level 6;
gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml image/jpeg image/gif image/png text/css text/javascript text/plain text/xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
}
1
nginx -s reload