自建gitlab

安装方式 我选的docker镜像,方便管理 1.拉取docker镜像 docker pull gitlab/gitlab-ee:latest 2.设置gitlab存储位置 export GITLAB_HOME=/srv/gitlab #自己设置位置 3.运行docker镜像 sudo docker run --detach \ --hostname gitlab.example.com \ #外部url,服务器域名 --publish 443:443 --publish 80:80 --publish 22:22 \ #换成自己的端口 --name gitlab \ --restart always \ #设置自动启动 --volume $GITLAB_HOME/config:/etc/gitlab:Z \ #相当于文件挂载点 --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \ --shm-size 256m \ gitlab/gitlab-ee:latest 4.查看gitlab运行日志 sudo docker logs -f gitlab 注:成功后即可打开浏览器输入localhost进入登录界面 5.获取管理员初始密码 sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password 注:请在24小时内修改密码,否则密码将会失效 6.gitlab配置 由于我这台服务器有nginx,需要监听80端口,因此禁用gitlab的内建nginx 禁用内建nginx nginx['enable'] = false 设置web服务器用户 web_server['external_users'] = ['www-data'] 将web服务器添加到受信任的代理列表中 gitlab_rails['trusted_proxies'] = [ '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ] 允许GitLab Workhorse监听TCP端口 gitlab_workhorse['listen_network'] = "tcp" gitlab_workhorse['listen_addr'] = "127.0.0.1:8181" 外部nginx服务器设置反向代理 server { ## Either remove "default_server" from the listen line below, ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab ## to be served if you visit any address that your server responds to, eg. ## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server; listen 0.0.0.0:80; listen [::]:80; server_name _; ## Replace this with something like gitlab.example.com server_tokens off; ## Don't show the nginx version number, a security best practice # root /opt/gitlab/embedded/service/gitlab-rails/public; ## See app/controllers/application_controller.rb for headers set ## Individual nginx logs for this GitLab vhost # access_log /var/log/nginx/gitlab_access.log; # error_log /var/log/nginx/gitlab_error.log; include /etc/nginx/default.d/*.conf; location / { client_max_body_size 0; #不限制上传大小 gzip off; ## https://github.com/gitlabhq/gitlabhq/issues/694 ## Some requests take more than 30 seconds. proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_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; proxy_pass http://127.0.0.1:8181/; # 转发到8181端口 } } 实际使用 由于gitlab占用内存太大,故做以下调整 ...

八月 28, 2022 · 2 分钟 · 379 字 · Me

解决dns污染问题

起因 由于近期dns污染严重,域名解析不正常,故设置doh,dns分流进行dns解析。 配置 dnsmasq 通过dnsmasq-china-list进行dns分流 安装 git clone https://github.com/felixonmars/dnsmasq-china-list cd dnsmasq-china-list&&bash install.sh sudo systemctl restart dnsmasq //重启dnsmasq 效果 重启dnsmasq太慢,且解析速度下降 mosdns+dnsmasq 安装 mosdns wget https://github.com/IrineSistiana/mosdns/releases/download/v4.1.9/mosdns-linux-amd64.zip unzip mosdns-linux-amd64.zip sudo mkdir /etc/mosdns sudo cp mosdns /usr/bin sudo cp config.yaml /etc/mosdns //配置文件 wget --no-check-certificate https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -O /etc/mosdns/geosite.dat wget --no-check-certificate https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat -O /etc/mosdns/geoip-only-cn-private.dat //中国ip名单 配置文件 log: level: warn file: "mosdns.log" data_providers: - tag: geosite file: ./geosite.dat auto_reload: true - tag: geoip file: ./geoip-only-cn-private.dat auto_reload: true plugins: # 缓存 - tag: cache type: cache args: size: 4096 lazy_cache_ttl: 172800 # 转发至本地服务器的插件 - tag: forward_local type: fast_forward args: upstream: - addr: tls://223.6.6.6:853 #alidns enable_pipeline: true - addr: tls://119.29.29.29:853 #dnspod idle_timeout: 8 trusted: true # 转发至远程服务器的插件 - tag: forward_remote type: fast_forward args: upstream: - addr: https://1.1.1.1/dns-query #cloudflare enable_pipeline: true - addr: https://dns.google/dns-query #google enable_pipeline: true trusted: true # 匹配本地域名的插件 - tag: query_is_local_domain type: query_matcher args: domain: - 'provider:geosite:apple-cn' - 'provider:geosite:cn' # 匹配非本地域名的插件 - tag: query_is_non_local_domain type: query_matcher args: domain: - 'provider:geosite:geolocation-!cn' # 匹配广告域名的插件 - tag: query_is_ad_domain type: query_matcher args: domain: - 'provider:geosite:category-ads-all' # 匹配本地 IP 的插件 - tag: response_has_local_ip type: response_matcher args: ip: - 'provider:geoip:cn' # 主要的运行逻辑插件 # sequence 插件中调用的插件 tag 必须在 sequence 前定义, # 否则 sequence 找不到对应插件。 - tag: main_sequence type: sequence args: exec: # 缓存 - cache # 屏蔽广告域名 - if: query_is_ad_domain exec: - _new_nxdomain_response - _return # 已知的本地域名用本地服务器解析 - if: query_is_local_domain exec: - forward_local - _return # 已知的非本地域名用远程服务器解析 - if: query_is_non_local_domain exec: - forward_remote - _return # 剩下的未知域名用 IP 分流。 # primary 从本地服务器获取应答,丢弃非本地 IP 的结果。 - primary: - forward_local - if: "(! response_has_local_ip) && [_response_valid_answer]" exec: - _drop_response # secondary 从远程服务器获取应答。 secondary: - forward_remote # 这里建议设置成 local 服务器正常延时的 2~5 倍。 # 这个延时保证了 local 延时偶尔变高时,其结果不会被 remote 抢答。 # 如果 local 超过这个延时还没响应,可以假设 local 出现了问题。 # 这时用就采用 remote 的应答。单位: 毫秒。 fast_fallback: 200 servers: - exec: main_sequence listeners: - protocol: udp addr: 127.0.0.1:1053 #监听1053端口 - protocol: tcp addr: 127.0.0.1:1053 新建systemd服务 ...

八月 26, 2022 · 2 分钟 · 333 字 · Me

随机数生成

通过系统变量生成 echo $RANDOM 获取特定位数的随机字符,这里为10位 echo $RANDOM |md5sum |cut -c 1-10 获取随机数字,这里为10位 echo $RANDOM |cksum |cut -c 1-10 通过openssl生成 base64编码 openssl rand -base64 10 注:openssl产生的是指定长度个bytes的随机字符,也可使用cksum等命令生成随机数字 通过系统uuid生成 cat /proc/sys/kernel/random/uuid 通过程序实现 C++实现 随机数 生成1~100000之间的随机数,使用srand函数初始化保证每次的随机数不同 # include <iostream> #include<random> #include<time.h> int main(){ srand((unsigned)time(NULL)); int a=1; int b=100000; std::cout << (rand() % (b - a + 1)) + a << std::endl; return 0; } 随机字符

八月 21, 2022 · 1 分钟 · 60 字 · Me

sql server docker镜像配置

1.拉取docker镜像 sudo docker pull mcr.microsoft.com/mssql/server:2022-latest 2.创建并运行docker镜像 sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourPassword>" \ -p 1433:1433 --name sql1 --hostname sql1 \ -d \ mcr.microsoft.com/mssql/server:2022-latest 注:开放1433端口以进行数据库连接,docker镜像名称为sql1 3. 查看sql server服务器是否准备好连接 docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection 4.设置管理员密码 sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA \ -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \ -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\"" 5.连接数据库 进入docker容器内运行bash并连接数据库 sudo docker exec -it sql1 "bash" /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>" 使用jdbc驱动连接数据库 import java.sql.*; import java.util.Scanner; public class SQLDatabaseConnection { // Connect to your database. // Replace server name, username, and password with your credentials public static void Judge(int biao,String a){ if(biao==1){ System.out.println(a+"成功!"); } else{ System.out.println(a+"失败!"); } } public static void main(String[] args) { String connectionUrl = "jdbc:sqlserver://yourdomain:1433;" + "database=yourdatabase;" + "user=username;" + "password=yourpassword;" + "trustServerCertificate=true;" try (Connection connection = DriverManager.getConnection(connectionUrl);) { System.out.println("数据库连接成功:"); }catch (SQLException e) { e.printStackTrace(); System.out.println("数据库连接失败,请检查您的网络!"); } } } 注意:中文输入请规定数据类型为nvarchar,否则显示中文为问号

八月 19, 2022 · 1 分钟 · 162 字 · Me

gpg加密解密

生成密钥 注意:千万不要随意更改.gnupg目录的权限,否则你的密钥将无法解密数据,提示损坏的私钥!!! gpg生成私钥 gpg --full-generate-key 列出所有密钥 gpg --list-keys 导出密钥 gpg --export --armor keyID > gpgkey.pub.asc 导入公钥 gpg --import gpgkey.pub.asc 从服务器导入 gpg --keyserver servername --recv-keys keyID 非对称加密解密 加密文件 gpg -e -r username filename 解密文件 gpg -d filename 对称加密解密 加密文件 gpg --symmetric filename 解密文件 gpg -d filename 对文件签名 数字签名 gpg -o filename.sig -s filename 签名+加密 gpg -o filename.sig -ser name filename 文本签名 gpg -o filename.sig --clearsign filename 分离签名(原文件与签名分开) gpg -o filename.sig -ab filename 验证签名 ...

八月 15, 2022 · 1 分钟 · 129 字 · Me

nginx配置

测试系统:Debian11 1.安装升级系统 sudo apt update 2.安装nginx sudo apt install nginx 3.申请域名 github学生包或者freenom免费域名,添加域名解析,使用nslookup命令查看是否解析成功,注意先不要使用cdn 4.申请证书 zerossl或者letsencrypt即可 80端口验证 sudo apt install python3-certbot-nginx 安装完成后: sudo certbot –nginx 邮箱系统验证 dns验证 泛域名申请 以cloudflare为例: 创建cloudflare api密钥,记下token 创建cloudflare.ini配置文件并放入指定位置 dns_cloudflare_api_token = your_token 申请证书 certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \ -d example.com \ -d www.example.com 二级域名申请 sudo certbot -d my.example.com --manual --preferred-challenges dns certonly 注:根据提示添加txt域名映射记录,待域名生效后即可回车 5.编辑nginx配置文件 编辑/etc/nginx/sites-enabled/default文件 server { # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html index.php; server_name yourdomain; location / { try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/run/php/php7.4-fpm.sock; # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} listen [::]:10005 ssl ipv6only=on; # managed by Certbot listen 10005 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = yourdomain ) { //http强制跳转至https return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name yourdomain; return 404; # managed by Certbot } 6.启用nginx服务 ...

八月 10, 2022 · 2 分钟 · 289 字 · Me

git配置

安装git Linux Debian sudo apt install git Fedora sudo dnf install git Windows 直接安装 下载链接 winget安装 winget install --id Git.Git -e --source winget git初步配置 git config --global user.name "username" #用户名 git config --list #已有配置信息 git config --global user.email youremail #邮箱 git config --global core.editor nvim #默认文本编辑器 git config --global merge.tool vimdiff #差异分析工具 git使用 概念: 工作区:就是你在电脑里能看到的目录。 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。 基本操作 git init #初始化仓库 注:第一次初始提交后才有master分支 git reset HEAD #版本回退,重写暂存区的目录树,被 master 分支指向的目录树所替换 git rm --cached <file> #直接从暂存区删除文件,工作区则不做出改变 git checkout . #清除工作区中未添加到暂存区中的改动 git mv #移动或重命名工作区文件 git checkout HEAD . #用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件 git add file #将文件加入版本控制 git commit -m 'first commit' #提交说明 git status #查看仓库状态 git clone <repo> <directory> #拷贝项目到指定目录 git log #查看历史提交记录 git log --show-signature #查看仓库每次提交的签名信息 git blame <path> #查看文件修改记录(列表形式) git pull #下载源代码合并 git push #上传源代码合并 git fetch #从远程获取代码库 git diff命令 不加参数即默认比较工作区与暂存区 ...

八月 5, 2022 · 2 分钟 · 262 字 · Me

fedora基本配置

1.软件包管理工具 dnf命令 建立软件包缓存 sudo dnf makecache 进行软件包更新 sudo dnf upgrade 更新单个软件包 sudo dnf upgrade package_name 搜索软件包 dnf search package_name 查找软件包,使用通配符 dnf list kernel-* 列出所有软件包 dnf list all 列出已安装软件包 dnf list installed package_nam 列出所有包组 dnf group list 列出已启用的软件仓库 dnf repolist 列出来自单个软件仓库的软件包 dnf repository-packages fedora list 显示单个软件包的信息 dnf info package_name 列出具体软件包的所有信息 dnf repoquery package_name --info 列出哪个软件包提供了该二进制文件 dnf provides "*bin/named" 列出某个软件包组的详细信息 dnf -v group list group_name 安装单个软件包 sudo dnf install package_name 不知道包名的情况下使用 sudo dnf install /usr/sbin/named 安装软件包组 ...

八月 3, 2022 · 4 分钟 · 700 字 · Me

frp内网穿透

1.frp server端配置 [common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 14823 vhost_http_port = 12345 # 授权码,请改成更复杂的 token = 12345678 # frp管理后台端口,请按自己需求更改 dashboard_port = 7800 # frp管理后台用户名和密码,请改成自己的 dashboard_user = admin dashboard_pwd = admin enable_prometheus = true 2.frp client端配置 [common] server_addr = yourdomain server_port = 14823 #server端bind_port token = 12345678 #授权码 [ssh] #ssh远程链接 type = tcp local_ip = 127.0.0.1 local_port = 22 #本地ssh端口 remote_port = 6000 #远程ssh连接端口 [web1] type = http #http服务 local_port = 80 custom_domains = yourdomain 3.frp配置mariadb [mariadb] type = tcp local_ip = 127.0.0.1 #内网ip local_port = 3306 # 内网mariadb端口 remote_port = 1006 # 公网mariadb端口 4.frp与nginx共用80、443端口 http nginx配置 location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; proxy_pass http://127.0.0.1:8081; #填写frpc的vhost端口 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 REMOTE-HOST $remote_addr; } frp server端配置 vhost_http_port = 8081 frp client配置 [web1] type = http local_port = 80 custom_domains = yourdomain https 配置frp frp server vhost_https_port = 8082 frp client plugin = https2http plugin_local_addr = 127.0.0.1:1313 #本地服务器端口 # HTTPS证书的路径 plugin_crt_path = /etc/frp/domain/yourdomain/fullchain1.pem plugin_key_path = /etc/frp/domain/yourdomain/privkey1.pem plugin_host_header_rewrite = 127.0.0.1 plugin_header_X-From-Where = frp 或配置nginx map $ssl_preread_server_name $backend_name { default frp; } upstream frp { server 127.0.0.1:10013; } server { listen 10013 ssl; server_name *.duan-dky.me; ssl_certificate /etc/letsencrypt/live/duan-dky.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/duan-dky.me/privkey.pem; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; proxy_pass http://127.0.0.1:8082; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_max_temp_file_size 0; proxy_redirect off; } } 5.frp注册成systemd服务 frp server端 ...

七月 31, 2022 · 2 分钟 · 303 字 · Me

rust学习

1.rust函数 fn main(){ //主函数 println!("hello world!"); } 2.Rust变量 Rust 是强类型语言,但具有自动判断变量类型的能力。 声明变量使用let关键字。 重影:指变量的名称可以被重新使用。 有符号类型 长度 有符号 无符号 8bit i8 u8 16bit i16 u16 32bit i32 u32 64bit 164 u64 128bit i128 u128 arch isize usize

七月 27, 2022 · 1 分钟 · 34 字 · Me