CentOS7下Docker安装Gitea配合宝塔面板实现反代

说明

前几天用二进制安装了Gitea,过程有些繁琐,而且配置SSH也比较麻烦,现在用Docker安装一下,特此记录。

步骤

本文使用的环境如下

1
2
3
Docker version 20.10.17

CentOS 7.9 x64

若要使用二进制安装,请参考:[bspost cid=“115”]

安装

首先,找一个位置,新建一个目录,例如/home/git/Gitea/,在此目录下新建docker-compose.yml,内容如下:

 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
version: "3"



networks:

  gitea:

    external: false



services:

  gitea-app:

    image: gitea/gitea:latest

    ulimits:

      nproc: 65535

      nofile:

        soft: 102400

        hard: 102400

    environment:

      - USER_UID=1000

      - USER_GID=1000

      - GITEA__database__DB_TYPE=mysql

      - GITEA__database__HOST=mysql-server:3306

      - GITEA__database__NAME=git

      - GITEA__database__USER=git

      - GITEA__database__PASSWD=git

    restart: always

    networks:

      - gitea

    volumes:

      - ./gitea-data:/data

      - /etc/timezone:/etc/timezone:ro

      - /etc/localtime:/etc/localtime:ro

    ports:

      - "3000:3000"

      - "22:22"

    depends_on:

      - mysql-server



  mysql-server:

    image: mysql:8

    restart: always

    cap_add:

      - SYS_NICE  # CAP_SYS_NICE, to prevent mbind error

    environment:

      - MYSQL_ALLOW_EMPTY_PASSWORD=yes

      - MYSQL_ROOT_PASSWORD=

      - MYSQL_USER=git

      - MYSQL_PASSWORD=git

      - MYSQL_DATABASE=git

    networks:

      - gitea

    volumes:

      - ./mysql-data:/var/lib/mysql

上述文件中,gitea/gitea:latest使用的是最新的发行版本,也可以这样gitea/gitea:1.17.3,使用具体版本,目前稳定版为1.17.3;ports后面的两个端口,其中"3000:3000"是http映射端口,后面的不要修改,前面的可以修改为8080,80等端口,可自定义;"22:22"是ssh端口,官方默认是"2222:22",具体原因请至文末查看相关内容。

开始安装,执行

1
docker-compose up -d

此时,访问ip:3000就可以看到Gitea了,若在上面修改了端口号,就以修改后的端口为准

使用域名访问,请添加Nginx反代,这里用宝塔面板作为例子,新建一个站点,填写好域名,数据库不勾选,php选择纯静态,提交

修改配置文件,在server中添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
location / {

        proxy_pass http://127.0.0.1:3000;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

还需要修改css js和图片处,完整配置文件如下(已开启ssl):

  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
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
server

{

    listen 80;

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    listen [::]:80;

    server_name example.com;

    index index.php index.html index.htm default.php default.htm default.html;

    root /www/wwwroot/example.com;

    

    location / {

        proxy_pass http://127.0.0.1:3000;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }



    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则

    #error_page 404/404.html;

    #HTTP_TO_HTTPS_START

    if ($server_port !~ 443){

        rewrite ^(/.*)$ https://$host$1 permanent;

    }

    #HTTP_TO_HTTPS_END

    ssl_certificate    /www/server/panel/vhost/cert/example.com/fullchain.pem;

    ssl_certificate_key    /www/server/panel/vhost/cert/example.com/privkey.pem;

    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;

    ssl_session_timeout 10m;

    add_header Strict-Transport-Security "max-age=31536000";

    error_page 497  https://$host$request_uri;

    #SSL-END



    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改

    #error_page 404 /404.html;

    #error_page 502 /502.html;

    #ERROR-PAGE-END



    #PHP-INFO-START  PHP引用配置,可以注释或修改

    include enable-php-00.conf;

    #PHP-INFO-END



    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效

    include /www/server/panel/vhost/rewrite/git.rumosky.com.conf;

    #REWRITE-END



    #禁止访问的文件或目录

    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)

    {

        return 404;

    }



    #一键申请SSL证书验证目录相关设置

    location ~ \.well-known{

        allow all;

    }



    #禁止在证书验证目录放入敏感文件

    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {

        return 403;

    }



    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

        proxy_pass http://127.0.0.1:3000;

        expires      30d;

        error_log /dev/null;

        access_log /dev/null;

    }



    location ~ .*\.(js|css)?$

    {

        proxy_pass http://127.0.0.1:3000;

        expires      12h;

        error_log /dev/null;

        access_log /dev/null;

    }

    access_log  /www/wwwlogs/example.com.log;

    error_log  /www/wwwlogs/example.com.error.log;

}

至此,就可以使用域名访问了

补充

相比于二进制安装,述安装方式更加简单高效,升级迁移也方便。

升级/迁移

首先,备份gitea数据/home/git/Gitea/gitea-data/和mysql数据/home/git/Gitea/mysql-data

执行

1
docker-compose pull

运行

1
docker-compose up -d

也可以修改docker-compose.yml文件中gitea/gitea:latest部分,然后再执行运行命令即可

其他命令

查看Docker-compose管理的容器

1
docker-compose ps

查看Docker-compose日志

1
docker-compose logs

关闭并删除容器

1
docker-compose down

开启、重启、停止正在运行的容器

1
2
3
4
5
docker-compose start

docker-compose restart

docker-compose stop

结语

Docker方式比二进制方式遇到的BUG少很多,但相对来说,自定义SSH端口配置起来也比较麻烦,在这里就不多介绍SSH配置了,问题较多,单独成文,请参考:[bspost cid=“119”]

使用 Hugo 构建
主题 StackJimmy 设计