1.1 GitLab 安装 (192.168.56.12 中安装)
1,GitLab 是什么?
1. GitLab 实现一个自托管的 Git 项目仓库, 可通过 web 界面进行访问公开的或者私人项目.
2. GitLab 拥有与 GitHub 类似的功能, 能够浏览源代码, 管理缺陷和注释.
3. 可以管理团队对仓库的访问, 它非常易于浏览提交过的版本并提供一个文件历史库.
4. 它还提供一个代码片段收集功能可以轻松实现代码复用, 便于日后有需要的时候进行查找
2,GitLab 安装
- '''1. 初始化环境'''
- [[email protected]-node2 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix
- [[email protected] ~]# systemctl start postfix
- '''2. 由于网络问题, 国内用户, 建议使用清华大学的镜像源进行安装'''
- [[email protected]-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
- '''
- [[email protected]-node2 ~]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
- [[email protected] ~]# yum makecache
- [[email protected] ~]# yum install -y GitLab-ce-10.8.7
- '''3. 配置并启动 gitlab-ce'''
- [[email protected]-node2 ~]# GitLab-ctl reconfigure # 把一些过去的 config 还原, 使用是要小心
- [[email protected] ~]# GitLab-ctl status
- [[email protected] ~]# GitLab-ctl start # 启动 GitLab
- [[email protected] ~]# GitLab-ctl stop # 关闭 GitLab
- [[email protected] ~]# 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 访问的地址和端口号'''
- [[email protected]-node2 ~]# VIM /etc/GitLab/GitLab.rb
- external_url 'http://gitlab.example.com'
- '''2, 更换 gitlab 拉取代码的 URL'''
- [[email protected]-node2 ~]# VIM /var/opt/GitLab/GitLab-Rails/etc/GitLab.YAML
- 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 "[email protected]"
- '''2. 提交代码的三种情况'''
- # 情况 1:Create a new repository - 本地没有没有仓库, 创建一个新仓库
- Git clone [email protected]: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 [email protected]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 [email protected]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 [email protected]: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 命令启动项目
- [[email protected] /]# mkdir -p /home/work
- [[email protected] /]# cd /home/work/
- [[email protected] work]# yum -y install Git
- [[email protected] work]# Git clone http://192.168.56.12/devopsedu/demo2.git
- [[email protected] work]# django-admin startproject demo2 # 也可以新建一个 django 新项目
- [[email protected] work]# cd demo2
- [[email protected] work]# pip3 install uwsgi
- [[email protected] work]# pip3 install django==2.0.4
- [[email protected] 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
uwsgi.INI 使用这里的 INI 文件, 下面有注释
- [[email protected] 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 程序中产生一个子线程
- [[email protected] demo2]# uwsgi --INI uwsgi.INI # 启动 uwsgi 的 django 项目
1.5 安装配置 nginx(nginx+uwsgi)
1, 配置 yum & 安装 nginx
- '''1. 配置 nginx YUM 源'''
- [[email protected]-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'''
- [[email protected]-node1 /] yum -y install nginx
配置 yum 源 & 安装 nginx
2, 配置 nginx+uwsgi
- [[email protected] /]# 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 {
- }
- }
配置 nginx+uwsgi 代理 django 项目
3, 使用 nginx + uwsgi 启动 django
- [[email protected] demo2]# systemctl start nginx # 开启 nginx
- [[email protected] demo2]# uwsgi --INI uwsgi.INI # 启动 uwsgi 的 django 项目
- # http://192.168.56.11:8888/ 访问项目
- [[email protected] demo2]# uwsgi --stop uwsgi.pid # 关闭 uwsgi
1.6 django+nginx+uwsgi+docker 部署项目
1, 有下面四个主要文件
- FROM python:3.6
- MAINTAINER peter <[email protected]>
- 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"]
- Dockerfile
- Django==2.0.4
- pytz==2019.2
- uWSGI==2.0.18
- requirements.txt
- [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
- uwsgi.INI
- 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;
- }
- }
- iot.conf
- echo "uwsgi start ..." && service nginx start
- echo "uwsgi start success" &&
- echo "uwsgi start ..." && cd /code/ && nohup uwsgi --INI uwsgi.INI && echo "uwsgi start success"
- start.sh
2, 构建镜像 & 运行容器
- docker build -t my-python-App . # 构建一个镜像
- docker run -d --name test -p 88:8080 my-python-App:latest # 使用上述镜像启动容器
来源: http://www.bubuko.com/infodetail-3483778.html