运维与DevOps 文章

个人建站免费 HTTPS 证书全攻略:三种方案轻松搞定
运维与DevOps
2023-06-30 • 0k

个人建站免费 HTTPS 证书全攻略:三种方案轻松搞定

不花一分钱,也能给自己的网站加上“小绿锁” 建站初期,很多个人站长都会纠结一个问题:要不要上 HTTPS? 买证书要花钱,免费的又怕不靠谱。其实,今天已经有很多成熟的免费方案,完全可以满足个人博客、小型项目的需求。本文就来聊聊我个人用过的几种方案,并给出最实在的建议。 为什么要折腾 HTTPS? 简单说两点: 浏览器不“警告”:没有 HTTPS,Chrome 会在地址栏标记“不安全”,非常劝退访客。 SEO 友好:搜索引擎更青睐 HTTPS 站点。 既然好处明显,付费证书动辄几百上千,个人站长完全可以从免费方案入手。 方案一:云厂商“白送”的证书——最适合新手 如果你用的是阿里云、腾讯云、华为云等国内云服务器,它们都提供了免费 DV 证书。以阿里云为例: 登录控制台 → 找到“数字证书管理服务”(SSL 证书)。 点击“购买证书”,筛选“免费版”(DigiCert 品牌,单域名,有效期 1 年,实际 3 个月,但可续期)。 填写域名,选择 DNS 验证(在域名解析加一条 TXT 记录)或文件验证。 审核通过后下载证书,按你的 Web 服务器(Nginx/Apache)配置即可。 ✅ 优点:操作全程中文,跟自己的云产品无缝对接,有客服。 ❌ 缺点:每个实名主体每自然年只有 20 张(其实够用),有效期只有 90 天,且仅支持主域名或 www 的一个单域名。 小技巧:虽然只有 90 天,但云厂商一般会提前提醒续期,手动重签一次也很简单。 方案二:Let‘s Encrypt + acme.sh —— 技术玩家的最爱 如果你不满足于单域名,或者希望完全自动化(比如申请泛域名证书 *.example.com),那 Let’s Encrypt 就是不二之选。它是 Linux 基金会旗下的公益 CA,全球信任。 配合 acme.sh 这个纯 Shell 脚本,可以实现: 90 天有效期,到期自动续期(通过 crontab)。 支持 DNS API 自动验证(针对阿里云、腾讯云、Cloudflare 等上百家 DNS 服务商)。 通配符证书(需要 DNS 验证)。 基本操作(以 Nginx 为例):

HTTPS SSL证书 Let's Encrypt
阅读更多
Nginx的基本使用
运维与DevOps
2021-11-18 • 0k

Nginx的基本使用

什么是Nginx? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 反向代理 Nginx 根据接收到的请求的端口,域名,url,将请求转发给不同的机器,不同的端口(或直接返回结果),然后将返回的数据返回给客户端。 安装Nginx #如果缺少依赖,先安装依赖 yum -y install gcc gcc-c++ openssl openssl-devel #下载 wget http://nginx.org/download/nginx-1.20.1.tar.gz #进入服务安装包目录,这里放到了home/server cd /home/server/ #解压tar包 tar -zxvf nginx-1.20.1.tar.gz #进入解压nginx目录 cd nginx-1.20.1 #执行configure进行配置,这里配置可以根据自己项目需要进行自定义配置 ./configure --prefix=/usr/local/nginx --with-http_ssl_module #执行安装 make && make install Nginx配置参数中文详细说明 #定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; # #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.log info; # #进程文件 pid /var/run/nginx.pid; # #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致. worker_rlimit_nofile 65535; # #工作模式与连接数上限 events { #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型. use epoll; #单个进程最大连接数(最大连接数=连接数*进程数) worker_connections 65535; } # #设定http服务器 http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 #charset utf-8; #默认编码 server_names_hash_bucket_size 128; #服务器名字的hash表大小 client_header_buffer_size 32k; #上传文件大小限制 large_client_header_buffers 4 64k; #设定请求缓 client_max_body_size 8m; #设定请求缓 # 开启目录列表访问,合适下载服务器,默认关闭. autoindex on; # 显示目录 autoindex_exact_size on; # 显示文件大小 默认为on,显示出文件的确切大小,单位是bytes 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtime on; # 显示文件时间 默认为off,显示的文件时间为GMT时间 改为on后,显示的文件时间为文件的服务器时间 sendfile on; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载.注意:如果图片显示不正常把这个改成off. tcp_nopush on; # 防止网络阻塞 tcp_nodelay on; # 防止网络阻塞 keepalive_timeout 120; # (单位s)设置客户端连接保持活动的超时时间,在超过这个时间后服务器会关闭该链接 # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度.下面参数看字面意思都能理解. fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; # gzip模块设置 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大 gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_http_version 1.1; #压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn. gzip_vary on;#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据 #开启限制IP连接数的时候需要使用 #limit_zone crawler $binary_remote_addr 10m; ##upstream的负载均衡,四种调度算法(下例主讲)## #虚拟主机的配置 server { # 监听端口 listen 80; # 域名可以有多个,用空格隔开 server_name blog.raikay.cn; # HTTP 自动跳转 HTTPS rewrite ^(.*) https://$server_name$1 permanent; } server { # 监听端口 HTTPS listen 443 ssl; server_name blog.raikay.cn; # 配置域名证书 ssl_certificate ssl/fullchain.cer; ssl_certificate_key ssl/blog.raikay.cn.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; index index.html index.htm index.php; root /data/www/; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } # 配置地址拦截转发,解决跨域验证问题 location /oauth/{ proxy_pass https://localhost:13580/oauth/; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 图片缓存时间设置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } # JS和CSS缓存时间设置 location ~ .*\.(js|css)?$ { expires 1h; } # 日志格式设定 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; # 定义本虚拟主机的访问日志 access_log /var/log/nginx/access.log access; # 设定查看Nginx状态的地址.StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; #htpasswd文件的内容可以用apache提供的htpasswd工具来产生. } } } 负载均衡配置 events { use epoll; worker_connections 65535; } http { ##upstream的负载均衡,四种调度算法## #调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响 upstream webhost { server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大 upstream webhost { server 192.168.0.5:6666 weight=2; server 192.168.0.7:6666 weight=3; } #调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题 upstream webhost { ip_hash; server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包 upstream webhost { server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; hash $request_uri; } #调度算法5:fair(需安装第三方插件).这是比上面两个更加智能的负载均衡算法.此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配.Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块 # #虚拟主机的配置(采用调度算法3:ip_hash) server { listen 80; server_name mongo.demo.com; #对 "/" 启用反向代理 location / { proxy_pass http://webhost; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可选. proxy_set_header Host $host; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } } } 301跳转 server{ listen 80; server_name raikay.cn; rewrite ^/(.*) http://www.raikay.cn/$1 permanent; } 添加404页面 server{ error_page 404 /404.html; } 禁止直接IP访问 server{ listen 80 default; server_name _; return 403; } 设置白名单 # allow:允许访问 、deny:禁止 server { allow 100.110.15.16; allow 100.110.15.17; allow 100.110.15.18; allow 127.0.0.1; deny all; } 常用命令 nginx -s reopen #重启Nginx nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx nginx -s stop #强制停止Nginx服务 nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务) nginx -?,-h #打开帮助信息 nginx -v #显示版本信息并退出 nginx -V #显示版本和配置选项信息,然后退出 nginx -t #检测配置文件是否有语法错误,然后退出 nginx -T #检测配置文件是否有语法错误,转储并退出 nginx -q #在检测配置文件期间屏蔽非错误信息 nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf) nginx -g directives #设置配置文件外的全局指令 killall nginx #杀死所有nginx进程 高可用 一台Nginx服务器支持不住高并发时,部署多台Nginx服务器,并且每台Nginx服务器都部署keepalived,设置同一个虚IP(VIP),访问这个VIP(域名解析时解析到VIP)时会漂移到其中一台Nginx服务器,实现负载均衡。

nginx 中间件 服务器
阅读更多
linux系统常用基础命令
运维与DevOps
2021-11-15 • 0k

linux系统常用基础命令

目录操作 #当前目录 pwd # 创建目录 mkdir $HOME/testFolder #切换目录 cd $HOME/testFolder #切换到上一级目录 cd ../ # 移动 mv $HOME/testFolder /var/tmp #删除 rm -rf /var/tmp/testFolder #查看目录下的文件 # /etc 目录默认是 Unix 系统的软件配置文件存放位置 ls /etc #竖着显示查询结果 ls -l / #查看所有目录包括子目录(效果很酷) ls -R / 文件操作 #创建 touch ~/testFile #复制 cp ~/testFile ~/testNewFile #删除 rm ~/testFile #查找名称包含nginx的.conf文件 find / -name '*.conf' |grep nginx #解压: # tar.gz tar tgz tar xzvf FileName.tar.gz #压缩: tar czvf FileName.tar.gz DirName 查看文件 #一、从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 #二、显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000 #----------------------------- #注意两种方法的顺序 # 分解: # tail -n 1000:显示最后1000行 # tail -n +1000:从1000行开始显示,显示1000行以后的 # head -n 1000:显示前面1000行 #-------------------------------- #三、用sed命令 sed -n '5,10p' filename 这样就可以只查看文件的第5行到第10行。 #过滤出 /etc/passwd 文件中包含 root 的记录 grep 'root' /etc/passwd #递归地过滤出 /var/log/ 目录中包含 linux 的记录 grep -r 'linux' /var/log/ #重定向 #可以使用 > 或 < 将命令的输出到一个文件中 echo 'Hello World' > ~/test.txt #复杂查询 https://blog.51cto.com/xuqq999/774714 远程复制文件 #整个文件夹 scp -r /home/administrator/test/ root@192.168.1.100:/root/ # 单个文件 scp /home/administrator/Desktop/old/driver/test/test.txt root@192.168.1.100:/root/ #下载到本地 scp -r root@192.168.62.10:/root/ /home/administrator/Desktop/new/ 系统综合 #重启 reboot #下面三个是一样的,都是当前用户主目录 cd ~ cd $HOME cd /home/UserName #查看发行版 cat /etc/os-release find /etc/*-release #查看系统版本 cat /proc/version #查看系统信息 uname -a #查看正在运行的进程 ps -ef | grep java #实时查看服务器性能 top #对 blog.raikay.cn 发送 4 个 ping 包, 检查与其是否联通 ping -c 4 blog.raikay.cn #过滤得到当前系统中的 ssh 进程信息 ps -aux | grep 'ssh' # 权限 chmod -R 777 权限 服务管理 #Centos7.5的服务管理是systemctl systemctl start httpd.service #启动,不加 .server也可以 systemctl stop httpd.service #停止 systemctl status httpd.service #查看状态 systemctl restart httpd.service #重启 systemctl enable httpd.service #开机启动 Systemctl enable serviceName #开启服务的开机自启动 systemctl disable firewalld.service #禁止firewall开机启动 Systemctl disable serviceName #关闭服务的开机自启动 #ububtu启动服务 #apache2 /etc/init.d/apache2 start #restart stop #ssh /etc/init.d/ssh start #restart stop 网络 #netstat 命令 #netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等 #列出所有处于监听状态的tcp端口 netstat -lt #查看所有的端口信息, 包括 PID 和进程名称 netstat -tulpn 检查网卡

阿里云 流水线 云效Flow 实现持续集成、持续部署(CI/CD)
运维与DevOps
2021-09-22 • 0k

阿里云 流水线 云效Flow 实现持续集成、持续部署(CI/CD)

新建流水线 选择对应语言,新建流水线 选择代码源 这个代码我托管在云效自带的Codeup 代码结构 设置代码源触发 开启代码源触发,并添加Webhook,Codeup会带动添加,如果是码云、github等其他托管平台,需要手动将下面webhook地址添加到代码托管平台对应的Webhook 配置构建 配置部署 新建主机,部署项目的服务器,如果是集群可以添加多台 如果账号内有阿里云ECS直接选择即可,否则选自有服务器,复制脚本在目标服务器执行 添加部署脚本和变量 脚本 $image变量是配置的镜像仓库地址,在上游构建时,会将构建好的docker镜像推送到这个地址 echo $image #停止正在运行的容器 docker stop apidemo #删除容器 docker rm apidemo #拉取容器 docker pull $image #运行新容器 docker run -d -p 1080:80 --name apidemo $image 完成自动构建、部署 提交代码触发流水线 云效2020文档地址:https://help.aliyun.com/product/150040.html 云效Flow地址:https://flow.aliyun.com/ 云效地址:https://devops.aliyun.com/

dotnet DevOps Linux
阅读更多
jenkins实现dotnet项目持续集成、持续部署(CI/CD)
运维与DevOps
2021-09-21 • 0k

jenkins实现dotnet项目持续集成、持续部署(CI/CD)

添加节点 这个jenkins是用docker安装的,我们要操作宿主机构建项目,不是这个容器,所以要把这个容器本身的节点停止,添加宿主机节点 断开jenkins容器节点 Master 也可以使用标签限制 新建节点 添加宿主机连接信息 添加宿主机认证用户 生成ssh公钥和私钥 执行:ssh-keygen 一路回车 进入.ssh文件夹: cd .ssh/ id_rsa:私钥 id_rsa.pub:公钥 把公钥写到authorized_keys文件: cat id_rsa.pub > authorized_keys 复制私钥到jenkins cat id_rsa 添加触发器 token可以区分项目 把地址复制到代码托管平台,设置触发 添加构建脚本 Jenkins构建完成会自动关闭进程及其子进程,造成nohup 无效,需要在命令内加参数BUILD_ID=DONTKILLME publish.sh: #!/bin/bash #如果8081被占用杀掉进程 kill -9 $(lsof -i:8081 -t) cd /home/web/web-demo/ #拉代码 git pull #发布代码到publish目录 dotnet publish -o publish cd publish/ #后台启用项目,端口8081 nohup dotnet WebDemo.dll --urls http://0.0.0.0:8081 & 构建记录

dotnet CentOS Linux
阅读更多
使用Docker在CentOS系统安装Jenkins
运维与DevOps
2021-09-20 • 0k

使用Docker在CentOS系统安装Jenkins

下载Jenkins镜像 docker pull jenkins/jenkins:lts #最新版 创建映射目录 容器映射此目录以持久化数据 mkdir /data/jenkins_home/ 修改用户组 docker容器中jenkins用户和用户组id为1000,需要修改后目录才能映射成功 chown -R 1000:1000 /data/jenkins_home 启动Jenkins容器 docker run -d --name jenkins -p 80:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts; #备注: #-d 启动在后台 #--name 容器名字 #-p 端口映射(80:宿主主机端口,8080:容器内部端口) #-v 数据卷挂载映射(/data/jenkins_home:宿主主机目录,另外一个即是容器目录) #enkins/jenkins:lts Jenkins镜像(最新版) 访问Jenkins 地址解析的域名 http://jenkins.raikay.cn/ 根据提示的路径找到初始密码 #进入容器 docker exec -it jenkins bash #查看密码 cat /var/jenkins_home/secrets/initialAdminPassword 安装推荐的插件 创建管理员 安装已完成 扩展 设置时区 方法一:在【系统管理】-【脚本命令行】里运行 System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') 方法二: 通过docker改容器时区 docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 添加windows节点

CentOS Linux jenkins
阅读更多
dotnet项目执行shell脚本实现简单的自动化部署
运维与DevOps
2021-09-18 • 0k

dotnet项目执行shell脚本实现简单的自动化部署

不要k8s、不要docker、不要Jenkins,只要一个部署脚本,只是一个小项目单台服务器,实现提交代码自动执行脚本,拉代码构建部署项目。 创建一个web api 项目,作为webhook,实现接收web请求后执行shell脚本 项目代码: using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Diagnostics; namespace ShellHandler.Controllers { [ApiController] [Route("[controller]")] public class HandlerController : ControllerBase { private readonly ILogger<HandlerController> _logger; public HandlerController(ILogger<HandlerController> logger) { _logger = logger; } [HttpPost] public string Execute(string fileName) { try { var processStartInfo = new ProcessStartInfo($"./{fileName}") { RedirectStandardOutput = true }; var process = Process.Start(processStartInfo); if (process == null) { Console.WriteLine("Can not run shell ."); } else { using (var sr = process.StandardOutput) { while (!sr.EndOfStream) { var str = sr.ReadLine(); Console.WriteLine(str); } if (!process.HasExited) { process.Kill(); } } } return "ok"; } catch (Exception ex) { _logger.LogInformation(ex.Message); return ex.Message; } } } } 在服务器部署当前项目

dotnet CentOS Linux
阅读更多
 阿里云容器镜像服务提交代码自动构建Docker镜像教程
运维与DevOps
2020-12-15 • 0k

阿里云容器镜像服务提交代码自动构建Docker镜像教程

创建命名空间 创建仓库镜像 如果没有绑定账号,根据提示绑定一下账号,然后选择你的项目即可 镜像仓库–在对应的镜像 点击 【管理】 添加构建规则 这个镜像版本号建议 latest 在构建的时默认是latest 比如 # 默认 docker run -p 8000:80 --name mynginx -d nginx # 指定镜像版本 docker run -p 8000:80 --name mynginx -d nginx:1 现在每次提交代码到master会自动触发构建,也可以手动 立即构建

dotnet docker 阿里云
阅读更多
使用BaGet搭建自己的Nuget服务器
运维与DevOps
2020-05-17 • 0k

使用BaGet搭建自己的Nuget服务器

一、下载部署BaGet BaGet下载地址:https://github.com/loic-sharma/BaGet 可以自己编译,也可以下载作者提供的Release版本 二、下载安装Nuget Nuget.exe 下载地址:https://dist.nuget.org/win-x86-commandline/latest/nuget.exe Nuget安装后还需要配置环境变量 三、打包Nuget 在项目.csproj目录中打开cmd 或者powershell 并执行:nuget spec 用文本编辑器将上述命令执行完成的.nuspec 文件进行编辑 <?xml version="1.0"?> <package > <metadata> <id>Dongteng</id> <version>1.0.0</version> <title>ceshiceshi</title> <authors>Dongteng</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>dongteng test</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2019</copyright> <tags>Tag1 Tag2</tags> </metadata> </package> 根据实际的需求修改,一般修改id、version、authors、`description等 修改完以上信息后执行命令:nuget pack,进行打包.正常结果如下 也可以使用bat脚本执行 nuget-publish.cmd : @echo off echo *******************clean nupkg******************* del /S *.nupkg del /S *.nuspec echo *******************building******************* dotnet build echo *******************pack nupkg******************* dotnet pack echo *******************publish nupkg******************* dotnet nuget push **/*.nupkg -s http://nuget.raikay.cn/v3/index.json package.nupkg pause 四、发布 运行命令行,将包文件推送到本地nuget服务器中,执行命令:(如果设置了Key,则需要在包名之前添加对应的ApiKey)

NuGet BaGet 包管理
阅读更多
使用docker安装部署gitlab实例
运维与DevOps
2020-04-08 • 0k

使用docker安装部署gitlab实例

安装Gitlab 1、拉取镜像 # gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本 docker pull gitlab/gitlab-ce 2、创建映射目录 mkdir -p /home/gitlab/config #创建config目录 mkdir -p /home/gitlab/logs #创建logs目录 mkdir -p /home/gitlab/data #创建data目录 3、运行镜像 强烈建议80端口不要映射其他端口, http clone 那里生成的地址不带映射端口 docker run -d -p 443:443 -p 80:80 -p 222:22 \ --name gitlab --restart always \ -v /home/gitlab/config:/etc/gitlab \ -v /home/gitlab/logs:/var/log/gitlab \ -v /home/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce 参数说明: 参数名称 简写 参数说明 detach d 后台运行 hostname 指定主机地址,如果有域名可以指向域名 publish p 将容器内部端口向外映射,左边代表宿主机的端口,右边代表容器端口 name 容器名称 restart always 总是重启 volume v 将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录 4、配置 按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)。 # gitlab.rb文件内容默认全是注释 vim /home/gitlab/config/gitlab.rb # 配置http协议所使用的访问地址,不加端口号默认为80 #(我加端口号访问就会失败,最后用默认80端口) external_url 'http://192.168.198.130' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '192.168.198.130' gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口 :wq #保存配置文件并退出 注意事项:external_url 和gitlab_rails这两个ip参数建议固定操作系统的静态不变的IP或说是域名进行配置,假设IP变得的话在GitLab新建项目的时候,生成的IP还是原来的IP,此时就无法推送代码在Gitlab里面

gitlab docker 代码托管
阅读更多