CentOS7下Docker安装Gitea配合宝塔面板实现反代
如默
撰写于 2022年 11月 29 日

说明

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

步骤

本文使用的环境如下

Docker version 20.10.17
CentOS 7.9 x64

若要使用二进制安装,请参考:

安装

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

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",具体原因请至文末查看相关内容。

开始安装,执行

docker-compose up -d

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

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

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

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):

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

执行

docker-compose pull

运行

docker-compose up -d

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

其他命令

查看Docker-compose管理的容器

docker-compose ps

查看Docker-compose日志

docker-compose logs

关闭并删除容器

docker-compose down

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

docker-compose start
docker-compose restart
docker-compose stop

结语

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

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

温馨提示:

本文最后更新于2022年11月29日,已超过742天没有更新,若内容或图片失效,请留言反馈。

说明

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

步骤

本文使用的环境如下

Docker version 20.10.17
CentOS 7.9 x64

若要使用二进制安装,请参考:

安装

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

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",具体原因请至文末查看相关内容。

开始安装,执行

docker-compose up -d

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

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

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

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):

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

执行

docker-compose pull

运行

docker-compose up -d

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

其他命令

查看Docker-compose管理的容器

docker-compose ps

查看Docker-compose日志

docker-compose logs

关闭并删除容器

docker-compose down

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

docker-compose start
docker-compose restart
docker-compose stop

结语

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


赞 (1)

猜您想看

  • 绕过校园网web认证

    校园网流量非常贵,不知道其他学校是什么情况, 本校10元3G,每个月给2.5G免费流量,且晚上十二点到早上六点断网。 学校的宽带也很贵,20M的一个月60,10M的一个月50,晚上十一点半到早上六点断网。

    2019年07月12日
  • Mac电脑删除后台运行程序

    卸载了软件,但是在登陆项里面还有后台运行程序存在,记录一下如何删除

    2023年10月15日
  • 一键获取Windows聚焦壁纸并保存为jpg图片脚本

    锁屏界面Windows10聚焦所产生的图片很多都是著名摄影作品,很好看,但是Windows并不能将其设置为桌面壁纸,所以需要手动找到其保存位置,修改文件后缀名为jpg就可以保存为图片了,但是这样很麻烦,时间久了再好看的图片也会看腻,写一个脚本用来及时更新图片。

    2019年10月18日
  • SuperBench.sh 一键测试服务器网速和基本参数

    最近服务器晚上网速总是很慢,为了排查到底是学校网速问题还是服务器问题,遂寻找测速脚本,特此记录

    2019年10月22日
  • Python虚拟环境之venv、pipenv 和 pyenv区别

    最近用了好几次Python虚拟环境,记录一下

    2024年11月18日
  • WordPress无法登陆后台解决办法

    配置了CDN之后,突然发现,WordPress后台无法登录了,记录一下

    2021年10月01日

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论

Vaptcha 初始化中...