Nginx 反向代理 Gitlab 絕對可行版本


Docker Install nginx & gitlab

綜述:這里用的是Docker 安裝nginx以及Gitlab,實際上運用與單獨部署沒什么特別大的差別。
唯一的不同就是Docker創建內部網絡部分的小差別。在文中有特別指出。
即便不采用Docker的方式,只需要把主機名部分換成相應的IP即可。很多運維偷懶或者弄不明白,主要在網絡設置部分與GitLab的設置上。
仔細看本文,絕對可行。

1. 環境准備

  1. Docker 新建網絡

    $docker network create inet 
    
  2. Docker 安裝Nginx

    $docker pull nginx
    
  3. Nginx設置反向代理,

upstream docker_gitlab{
server gitlab.local:10080;
}
server
{
listen 443 ssl;
server_name gitlab.smokelee.com;
ssl_certificate /etc/nginx/certs/gitlab.smokelee.com.crt;
ssl_certificate_key /etc/nginx/certs/gitlab.smokelee.com.key;

location /{
   proxy_pass http://docker_gitlab;
   proxy_redirect http:// https://;
   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;

}
}

    
4. 運行Nginx

  ```bash
  $docker run -d -p 80:80 -p 443:443 \
  --name nginx.local \   
  --restart=always \
  --network inet \
  --network-alias nginx.local \ ------- 內部網絡Nginx的主機名
  -v /media/ext2/devops/nginx/conf:/etc/nginx \
  -v /media/ext2/devops/nginx/www:/usr/share/nginx/html \
  -v /media/ext2/devops/nginx/log:/var/log/nginx \
  nginx
  ```

  參數說明(重點參數):
  - -p 在宿主機上打開80、443端口
  - --network inet inet是我們新建的一個Docker內部隔離網絡,內部實例共享一個網絡
  - --network-alias <font color=red>nginx.local</font> Nginx在內部網絡中主機的名字
  - -v 3個存儲映射,不多講

5. Nginx的運行環境

  nginx運行在2個網絡中,一個是inet,一個是宿主機網絡。這樣,可以在宿主機的80以及443端口接受正常的HTTP,HTTPS請求,並反向代理到其它的容器。

## 2 GitLab部分

### 2.1 運行

```bash
$docker run -d  -p 10022:22 \
--restart always \
--name gitlab.local \
--network inet \
--network-alias gitlab.local \
-v /media/ext2/devops/gitlab/etc:/etc/gitlab \
-v /media/ext2/devops/gitlab/logs:/var/log/gitlab \
-v /media/ext2/devops/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce

參數說明:

  • -p 10022:22 因為git提交會用到ssh所以這個端口也是必須暴露到宿主機的
  • --network inet 容器的網絡加入到叫inet的內部網絡
  • --network-alias gitlab.local 內部網絡主機名叫做“gitlab.local”

2.2 配置GitLab

  1. 編輯配置文件

    $docker exec -it 容器ID vim /etc/gitlab/gitlab.rb
    
  2. 修改如下

    # Nginx為gitlab准備的虛擬主機域名。這個會出現在代碼倉庫的《鏈接中》
    external_url 'https://gitlab.smokelee.com'
    
    # 關閉GitLab 內置Nginx
    nginx['enable'] = false
    
    # 設置監聽方式為TCP
    gitlab_workhorse['listen_network'] = "tcp"
    gitlab_workhorse['listen_addr'] = "0.0.0.0:10080"
    
    # 設置可信代理(也就是Nginx)注意這里的‘nginx.local’是Nginx的內部網絡主機名
    gitlab_rails['trusted_proxies'] = ['nginx.local']
    
    # 設置ssh主機名,這個會出現在主機代碼的倉庫中
    gitlab_rails['gitlab_ssh_host'] = 'gitlab.smokelee.com'
    
  3. 調用Gitlab重新配置程序

    $docker exec -it 容器ID gitlab-ctl reconfigure
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM