使用 Docker 部署版本控制工具 Gogs

晴空發表於2019-11-11

Gogs 是一款極易搭建的自助 Git 服務。
Gogs 的目標是打造一個最簡單、最快速和最輕鬆的方式搭建自助 Git 服務。使用 Go 語言開發使得 Gogs 能夠通過獨立的二進位制分發,並且支援 Go 語言支援的 所有平臺,包括 Linux、Mac OS X、Windows 以及 ARM 平臺。

編寫gogs鉤子,配合CentOS7 下使用 rsync+sersync 配置檔案自動同步
,可實現自動化部署專案。

背景故事:
擼了快 3 年的 Laravel 了,儘量這周分享本人使用的多臺伺服器叢集部署方案

伺服器安裝docker

網上教程很多,這裡略過,記得更換映象

下載gogs映象

#從Docker Hub中提取影象。
$ docker pull gogs/gogs

#為卷建立本地目錄。
$ mkdir -p /var/gogs

#首次使用`docker run`。為了使您的資料遠離Docker容器,我們在這裡執行卷(/var/gogs- > /data),您可以根據您的情況進行更改。
# 如果使用nginx反代,則只需要10022埠即可
$ docker run --name=gogs -d -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs

#如果你已停止它,請使用`docker start`。
$ docker start gogs

預設以10022和10080對外介面

注意:將Gogs ssh服務從容器對映到主機並在首次設定Gog時設定適當的SSH埠和URI設定非常重要。要使用上述配置訪問和克隆Gogs Git儲存庫,您可以使用:git clone ssh://git@hostname:10022/username/myrepo.git例如

nginx反代gogs

https

記得新增證照,把配置檔案中的中文更換成對應的內容。

server
{
    #listen 443 ssl http2;
    listen 443 ssl;
    server_name 網址;
    location / {
        #proxy_pass https://127.0.0.1:10080;
        proxy_set_header  X-Real-IP  $remote_addr;
        # 10080埠是docker對映的
        proxy_pass http://127.0.0.1:10080$request_uri;
    }

    #SSL-START SSL相關配置,請勿刪除或修改下一行帶註釋的404規則
    #error_page 404/404.html;
    ssl_certificate    證照地址/fullchain.pem;
    ssl_certificate_key    證照地址/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    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-73.conf;
    #PHP-INFO-END

    #禁止訪問的檔案或目錄
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一鍵申請SSL證照驗證目錄相關設定
    location ~ \.well-known{
        allow all;
    }

    access_log  訪問成功日誌地址;
    error_log  訪問失敗日誌地址;
}
# 以下部分表示重定向 HTTP 請求到 HTTPS
server {
    listen 80;
    server_name 網址
    return 301 https://$host$request_uri;
}

http

不需要設定靜態檔案快取,只需要設定location,server_name 即可

server {
    listen80;
    server_name 網址;

    location /{
        # 10080埠是docker對映的
        proxy_pass http://127.0.0.1:10080;
        proxy_redirect default;
    }
}

訪問nginx配置檔案中的域名:

使用Docker部署版本控制工具Gogs

輸入配置引數即可。資料庫可以選擇sqlite,這樣就不需要外接mysql了。

使用Docker部署版本控制工具Gogs

使用Docker部署版本控制工具Gogs

點選安裝即可,具體配置見下圖

使用Docker部署版本控制工具Gogs
詳細配置參考文件

使用Docker部署版本控制工具Gogs

使用Docker部署版本控制工具Gogs

之後根據提示,就可以正常使用了

首先點選倉庫介面的倉庫設定

使用Docker部署版本控制工具Gogs

點選左側管理git鉤子,之後編輯post-receive

使用Docker部署版本控制工具Gogs
其中GIT_WORK_TREE 後換成自己需要的目錄即可

特別注意

  1. 安裝中不要勾選使用內建ssh服務!
  2. 安裝ssh服務埠不要是22,另開一個!
  3. 為什麼鉤子推送會失敗?因為寫鉤子的時候,目錄是在docker裡的,當然找不到,所以,鉤子裡的同步目錄要和掛載的主機目錄有關聯才行!

這個地址,其實是docker中gogs的地址,我們在執行映象的時候,指定了對映目錄

/var/gogs:/data

也就是說,我們配置的鉤子中,寫的地址是 /data/project/bbs,其實對應我們主機的是/var/gogs/project/bbs,如果沒有此目錄記得先建立此目錄。

之後,再參照CentOS7 下使用 rsync+sersync 配置檔案自動同步

即可實現本地開發,git提交後自動推送至伺服器,之後多臺伺服器之間自動同步差異化檔案,實現自動化部署。

相關文章