1.1
1、GitLab是什么?
1. GitLab實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。
2. GitLab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。
3. 可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。
4. 它還提供一個代碼片段收集功能可以輕松實現代碼復用,便於日后有需要的時候進行查找
2、gitlab安裝
'''1. 初始化環境 ''' [root@linux-node2 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix [root@linux-node2 ~]# systemctl start postfix '''2. 由於網絡問題,國內用戶,建議使用清華大學的鏡像源進行安裝''' [root@linux-node2 ~]# vim /etc/yum.repos.d/gitlab-ce.repo ''' [gitlab-ce] name=gitlab-ce baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key ''' [root@linux-node2 ~]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash [root@linux-node2 ~]# yum makecache [root@linux-node2 ~]# yum install -y gitlab-ce-10.8.7 '''3.配置並啟動gitlab-ce''' [root@linux-node2 ~]# gitlab-ctl reconfigure # 把一些過去的config還原,使用是要小心 [root@linux-node2 ~]# gitlab-ctl status [root@linux-node2 ~]# gitlab-ctl start # 啟動gitlab [root@linux-node2 ~]# gitlab-ctl stop # 關閉gitlab [root@linux-node2 ~]# gitlab-ctl restart # 重啟gitlab # 注:安裝啟動gitlab后訪問, http://192.168.56.12/
'''4.在瀏覽器中訪問gitlab-ce'''
1. 安裝啟動gitlab后訪問, http://192.168.56.12/
2. 第一次登錄gitlab,需要為root用戶修改密碼,root用戶也是gitlab的超級管理員
3、可以對GitLab做以下配置
'''1、可以更改gitlab訪問的地址和端口號''' [root@linux-node2 ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.example.com'
'''2、更換gitlab拉取代碼的URL''' [root@linux-node2 ~]# vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
gitlab: # 修改拉取代碼的url地址
host: 192.168.56.12 port: 80 https: false
1.2 GitLab基本使用
1、選擇 "Create a group"
2、填寫組名稱
3、在這個組里創建一個項目:選擇 "New project"
4、新建一個項目,命名為 "demo"
5、創建完成可以看到有一些提示

'''1. Git global setup: 全局配置用戶信息''' git config --global user.name "Administrator" git config --global user.email "admin@example.com" '''2. 提交代碼的三種情況''' # 情況1:Create a new repository-本地沒有沒有倉庫,創建一個新倉庫 git clone git@192.168.56.12:devopsedu/demo.git cd demo touch README.md git add README.md git commit -m "add README" git push -u origin master # 情況2:Existing folder-本地存在一個文件夾 cd existing_folder git init git remote add origin git@192.168.56.12:devopsedu/demo.git git add . git commit -m "Initial commit" git push -u origin master # 情況3:Existing Git repository-本地以及存在一個git倉庫 cd existing_repo git remote rename origin old-origin git remote add origin git@192.168.56.12:devopsedu/demo.git git push -u origin --all git push -u origin --tags
6、在windows機器中上傳代碼到gitlab
1)工作區: 就是你在電腦上看到的目錄,比如目錄下testgit里的文件(.git隱藏目錄版本庫除外)。
2)暫存區 : 暫存區就是文件夾 .git中的一個小部分(.git文件夾就是版本庫)
3)版本庫:工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫, 版本庫中還有Git為我們
git clone git@192.168.56.12:devopsedu/demo.git # 克隆代碼到本地
cd demo # 切換到項目路徑
touch Readme # 新建一個項目文件(工作區)
git add . # 把工作區中所有變更全部提交到(暫存區)
git commit -m 'init' # 把暫存區代碼提交到本地git倉庫,只有提交到代碼庫才能被git管理(本地git倉庫)
git push origin master # 將本地倉庫的代碼推送到線上倉庫(線上git倉庫)
1.3 從創建django項目到分支合並全過程
1、自己創建django項目推送到倉庫
django-admin startproject demo2 cd demo2 # 切換到項目路徑
git init # 初始化這個本地git倉庫 # git remote rm origin # 如有路徑不一致可以先刪除現有的路徑
git remote add origin http://192.168.56.12/devopsedu/demo2.git #設置代碼提交url路徑
touch Readme # 新建一個項目文件(工作區)
git add . # 把工作區中所有變更全部提交到(暫存區)
git commit -m 'init' # 把暫存區代碼提交到本地git倉庫,只有提交到代碼庫才能被git管理(本地git倉庫)
git push origin master # 將本地倉庫的代碼推送到線上倉庫(線上git倉庫)
2、回滾
git log #查看所有提交到倉庫的版本記錄: git log -2
git reflog #查看所有操作記錄(狀態的md5值和改變的值)
git reset --hard d9e0ed0 #回到指定版本(d9e0ed0是創建版本的MD5值得前6位或者7位)
git reset --hard HEAD^ #回到上一個版本
注:這樣可以回到第一次提交到倉庫的狀態,但再使用git log看不到其他幾次的md5值了
3、在GitLab中創建一個dev分支
4、在本地創建一個dev分支,開發完成后合並到master分支
'''1. 從master分支切換到dev分支進行開發''' git checkout -b dev master # 從master分支創建dev開發分支
git branch # 可以看到現在已經切換到dev分支了
vim Readme # 模擬在項目中修改代碼
git add . # 把工作區中所有變更全部提交到(暫存區)
git commit -m 'in dev' # 把暫存區代碼提交到本地git倉庫(本地git倉庫)
git push origin dev # 把代碼先推倒dev分支,讓測試人員測試
'''2. 當測試人員測試完成后將dev分支代碼合並到master形成文檔版本''' git checkout master # 開發完成后,需要合並回master分支,先切換到master分支
cat Readme # 可以看到master分支的內容沒有修改
git merge --no-ff dev # 將剛剛dev中修改的代碼合並到master
git push origin master # 將本地倉庫的代碼推送到線上倉庫(線上git倉庫)
1.4 在linux機器中拉取代碼部署django項目(uwsgi: 192.168.56.11)
1、安裝python3.6環境,如果沒有安裝請參考博客
python3.6安裝:https://www.cnblogs.com/xiaonq/p/11145846.html
2、先測試使用uwsgi命令啟動項目
[root@linux-node2 /]# mkdir -p /home/work
[root@linux-node2 /]# cd /home/work/
[root@linux-node1 work]# yum -y install git
[root@linux-node2 work]# git clone http://192.168.56.12/devopsedu/demo2.git
[root@linux-node2 work]# django-admin startproject demo2 # 也可以新建一個django新項目
[root@linux-node2 work]# cd demo2
[root@linux-node2 work]# pip3 install uwsgi
[root@linux-node2 work]# pip3 install django==2.0.4
[root@linux-node2 work]# uwsgi --http 192.168.56.11:8000 --file demo2/wsgi.py --static-map=/static=static # uwsgi啟動django
3、編寫uwsgi.ini啟動文件

[uwsgi] socket = 0.0.0.0:3031 chdir = /home/work/demo2 wsgi-file = /home/work/demo2/wsgi.py processes = 5 threads = 30 master = true daemonize = /home/work/demo2/uwsgi.log module=demo2.wsgi pidfile = /home/work/demo2/uwsgi.pid chmod-socket=666 enable-threads = true
[root@linux-node2 demo2]# vim /home/work/demo2/uwsgi.ini
[uwsgi] socket = 0.0.0.0:3031 # 指定socket監聽的地址和端口
chdir = /home/work/demo2 # 項目路徑
wsgi-file = /home/work/demo2/wsgi.py # django的wsgi文件路徑
processes = 5 # 啟動五個線程
threads = 30 # 啟動30個進程
master = true daemonize = /home/work/demo2/uwsgi.log # 日志存放路徑
module=demo2.wsgi # 使用demo2.wsgi模塊
pidfile = /home/work/demo2/uwsgi.pid # uwsgi啟動進程id存放路徑
chmod-socket=666 # socket權限
enable-threads = true # 允許用內嵌的語言啟動線程,這將允許你在app程序中產生一個子線程
[root@linux-node1 demo2]# uwsgi --ini uwsgi.ini # 啟動uwsgi的django項目
1.5
1、配置yum&安裝nginx

'''1. 配置nginx YUM源''' [root@linux-node1 /] vim /etc/yum.repos.d/nginx.repo ``` [nginx] name=nginx repo # 下面這行centos根據你自己的操作系統修改比如:OS/rehel # 6是你Linux系統的版本,可以通過URL查看路徑是否正確 baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 ``` '''2. 安裝nginx''' [root@linux-node1 /] yum -y install nginx
2、配置nginx+uwsgi

[root@linux-node1 /]# vim /etc/nginx/conf.d/django.conf server { listen 8888; server_name 192.168.56.11; client_max_body_size 5M; gzip on; gzip_buffers 32 4K;#壓縮在內存中緩沖32塊 每塊4K gzip_comp_level 6 ;#壓縮級別 推薦6 gzip_min_length 4000;#開始壓縮的最小長度4bit gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; # 指定uWSGI-server的IP地址和端口,或者socket文件 uwsgi_ignore_client_abort on; # 忽略uWSGI-Server返回的終止響應. } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
3、使用 nginx + uwsgi 啟動django
[root@linux-node1 demo2]# systemctl start nginx # 開啟nginx
[root@linux-node1 demo2]# uwsgi --ini uwsgi.ini # 啟動uwsgi的django項目 # http://192.168.56.11:8888/ 訪問項目
[root@linux-node1 demo2]# uwsgi --stop uwsgi.pid # 關閉uwsgi
1.6 django+nginx+uwsgi+docker部署項目
1、有下面四個主要文件

FROM python:3.6 MAINTAINER peter <example@163.com> RUN mkdir /code WORKDIR /code ADD . /code/ RUN apt-get update && \ apt-get install -y\ nginx vim && \ apt-get clean RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple COPY iot.conf /etc/nginx/conf.d EXPOSE 8000 CMD ["sh","/code/start.sh"]

Django==2.0.4 pytz==2019.2 uWSGI==2.0.18

[uwsgi] socket = 0.0.0.0:3031 ;http = 0:3031 chdir = /code wsgi-file = /code/demo2/wsgi.py processes = 5 threads = 30 master = true daemonize = /code/uwsgi.log pidfile = /code/uwsgi.pid

server { listen 8080; server_name localhost; client_max_body_size 5M; gzip on; gzip_buffers 32 4K;#壓縮在內存中緩沖32塊 每塊4K gzip_comp_level 6 ;#壓縮級別 推薦6 gzip_min_length 4000;#開始壓縮的最小長度4bit gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; uwsgi_ignore_client_abort on; } }

echo "uwsgi start ..." && \ service nginx start echo "uwsgi start success" && \ echo "uwsgi start ..." && \ cd /code/ && \ nohup uwsgi --ini uwsgi.ini && \ echo "uwsgi start success"
2、構建鏡像&運行容器
docker build -t my-python-app . # 構建一個鏡像
docker run -d --name test -p 88:8080 my-python-app:latest # 使用上述鏡像啟動容器