分类 通用文件 下的文章

域名为腾讯云域名步骤:
1、选择菜单
依次为:

N:Create certificate(default settings)--创建证书默认
M:Create certificate(full options)--创建证书全配置
R:Run renewals (0 currently due)--运行自动更新任务
A:Manage renewals (0 total)--自动更新任务管理
0:More options...--更多设置
Q:Quit--退出

默认是使用iis服务器配置的,本人使用的ng所以输入m

1:Read bindings from IIS--从 IIS 读取绑定
2:Manual input--手动输入
3:CSR created by another program--由另一个进程创建的 CSR
C:Abort--中止

使用nginx所以输入2

输入域名:*.example.com
再次回车
选择脚本命令 8
输入脚本路径 ./DNSPod.ps1
脚本是一个文件所以选择1
输入脚本的添加方法名称以及所需参数:create {RecordName} {Token}
输入脚本的删除方法名称以及所需参数:delete {RecordName} {Token}

1:Run everything one by one(default)--逐个运行所有内容(默认)
2:Allow multiple instances of the script to run at the same time--允许脚本的多个实例同时运行
3:Allow multiple records to be validated at the same time--允许同时验证多个记录
4:Allow both modes of parallelism--允许两种并行模式

这个脚本写的简单,所以选1
选择nginx使用类型
选择RSA key类型
输入生成文件放置位置
选择1不设置密码
选择5不再设置
选择3不设置安装
涉及用户名或者密码直接回车

脚本里面的id和token为腾讯云的api,token申请地址→https://console.dnspod.cn/account/token/token

脚本

<#
.SYNOPSIS
Add or remove a DNS TXT record to EasyDNS
.DESCRIPTION
Note that this script is intended to be run via the install script plugin from win-acme via the batch script wrapper. 
As such, we use positional parameters to avoid issues with using a dash in the cmd line. 
 
This script was copied and modified from the Posh-ACME repository.  
Please reference their license terms for use/modification:  https://github.com/rmbolger/Posh-ACME/blob/main/LICENSE
 
Credit for the original script goes to RMBolger, Thanks!
 
 
.PARAMETER RecordName
The fully qualified name of the TXT record.
 
.PARAMETER TxtValue
The value of the TXT record.
 
.PARAMETER EDToken
The EasyDNS API Token.
 
.PARAMETER EDKey
The EasyDNS API Key.
 
.PARAMETER EDUseSandbox
If specified, the plugin runs against the EasyDNS Sandbox environment instead of the Live environment.
 
.PARAMETER ExtraParams
This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
 
.EXAMPLE 
 
EasyDNS.ps1 create {RecordName} {Token} EDToken EDKey
 
EasyDNS.ps1 delete {RecordName} {Token} EDToken EDKey
 
.NOTES
 
#>
param(
    [string]$Task,
    [string]$RecordName,
    [string]$TxtValue,
    [string]$DNSPodKeyId='你的id',
    [string]$DNSPodKeyToken='你的Token',
    [string]$DNSPodKeyTokenInsecure,
    [string]$DNSPodApiRoot='https://dnsapi.cn',
    [pscredential]$DNSPodCredential,
    [string]$DNSPodUsername,
    [string]$DNSPodPwdInsecure
)
 
function Get-CurrentPluginType { 'dns-01' }
 
function Add-DnsTxt {
    [CmdletBinding(DefaultParameterSetName = 'Secure')]
    param(
        [Parameter(Mandatory,Position=0)]
        [string]$RecordName,
        [Parameter(Mandatory,Position=1)]
        [string]$TxtValue,
        [string]$DNSPodKeyId='你的id',
        [string]$DNSPodKeyToken='你的Token',
        [string]$DNSPodApiRoot='https://dnsapi.cn',
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [pscredential]$DNSPodCredential,
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [string]$DNSPodUsername,
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [string]$DNSPodPwdInsecure,
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )
 
    if ('Obsolete_DO_NOT_USE' -eq $PSCmdlet.ParameterSetName) {
        throw "DNSPod requires updated API Key/Token values. See user guide for details."
    }
 
    # build the login_token value
 
    $authToken = "$DNSPodKeyId%2C$DNSPodKeyToken"
 
    try {
        Write-Verbose "Searching for existing TXT record"
        $zone, $rec = Get-DNSPodTxtRecord $RecordName $TxtValue $authToken $DNSPodApiRoot
    }
    catch { throw }
 
    if ($rec) {
        Write-Debug "Record $RecordName already contains $TxtValue. Nothing to do."
    }
    else {
        # add a new record
        try {
            Write-Verbose "Adding $RecordName with value $TxtValue"
 
            $recShort = ($RecordName -ireplace [regex]::Escape($zone.name), [string]::Empty).TrimEnd('.')
            $addQuery = @{
                Uri = "$DNSPodApiRoot/Record.Create"
                Method = 'POST'
                Body = "domain_id=$($zone.id)&sub_domain=$recShort&record_type=TXT&value=$TxtValue&record_line=%E9%BB%98%E8%AE%A4&login_token=$authToken&format=json&lang=en"
                UserAgent = $script:USER_AGENT
                ErrorAction = 'Stop'
            }
            #Write-Verbose ($addQuery.Body)
            $response = Invoke-RestMethod @addQuery 
 
            if ($response.status.code -ne 1 -and $response.status.code -ne 31) {
                Write-Verbose ($response | ConvertTo-Json -dep 10)
                throw $response.status.message
            }
        }
        catch { throw }
    }
 
    <#
    .SYNOPSIS
        Add a DNS TXT record to DNSPod.
 
    .DESCRIPTION
        Uses the DNSPod DNS API to add a DNS TXT record.
 
    .PARAMETER RecordName
        The fully qualified name of the TXT record.
 
    .PARAMETER TxtValue
        The value of the TXT record.
 
    .PARAMETER DNSPodKeyId
        The API Key ID value.
 
    .PARAMETER DNSPodKeyToken
        The API Key Token value as a SecureString value.
 
    .PARAMETER DNSPodKeyTokenInsecure
        (DEPRECATED) The API Key Token value as a standard String value.
 
    .PARAMETER DNSPodApiRoot
        The root URL for the DNSPod API you are using. Default to "https://api.dnspod.com" but may also be set to "https://dnsapi.cn".
 
    .PARAMETER DNSPodCredential
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER DNSPodUsername
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER DNSPodPwdInsecure
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
    .EXAMPLE
        Add-DnsTxt '_acme-challenge.example.com' 'txt-value' -DNSPodKeyId '1' -DnsPodKeyToken (Read-Host -AsSecureString)
 
        Adds a TXT record for the specified site with the specified value using a secure token value.
    #>
}
 
function Remove-DnsTxt {
    [CmdletBinding(DefaultParameterSetName = 'Secure')]
    param(
        [Parameter(Mandatory,Position=0)]
        [string]$RecordName,
        [Parameter(Mandatory,Position=1)]
        [string]$TxtValue,
        [string]$DNSPodKeyId='你的id',
        [string]$DNSPodKeyToken='你的Token',
        [string]$DNSPodApiRoot='https://dnsapi.cn',
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [pscredential]$DNSPodCredential,
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [string]$DNSPodUsername,
        [Parameter(ParameterSetName='Obsolete_DO_NOT_USE',Mandatory)]
        [string]$DNSPodPwdInsecure,
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )
 
    if ('Obsolete_DO_NOT_USE' -eq $PSCmdlet.ParameterSetName) {
        throw "DNSPod requires updated API Key/Token values. See user guide for details."
    }
 
    # build the login_token value
    $authToken = "$DNSPodKeyId%2C$DNSPodKeyToken"
 
    try {
        Write-Verbose "Searching for existing TXT record"
        $zone, $rec = Get-DNSPodTxtRecord $RecordName $TxtValue $authToken $DNSPodApiRoot
    }
    catch { throw }
 
    if ($rec) {
        # delete the record
        try {
            Write-Verbose "Removing $RecordName with value $TxtValue"
 
            $delQuery = @{
                Uri = "$DNSPodApiRoot/Record.Remove"
                Method = 'POST'
                Body = "domain_id=$($zone.id)&record_id=$($rec.id)&login_token=$authToken&format=json&lang=en"
                UserAgent = $script:USER_AGENT
                ErrorAction = 'Stop'
            }
            $response = Invoke-RestMethod @delQuery 
 
            if ($response.status.code -ne 1 -and $response.status.code -ne 8) {
                throw $response.status.message
            }
        }
        catch { throw }
    }
    else {
        Write-Debug "Record $RecordName with value $TxtValue doesn't exist. Nothing to do."
    }
 
    <#
    .SYNOPSIS
        Remove a DNS TXT record from DNSPod.
 
    .DESCRIPTION
        Uses the DNSPod DNS API to remove a DNS TXT record.
 
    .PARAMETER RecordName
        The fully qualified name of the TXT record.
 
    .PARAMETER TxtValue
        The value of the TXT record.
 
    .PARAMETER DNSPodKeyId
        The API Key ID value.
 
    .PARAMETER DNSPodKeyToken
        The API Key Token value as a SecureString value.
 
    .PARAMETER DNSPodKeyTokenInsecure
        (DEPRECATED) The API Key Token value as a standard String value.
 
    .PARAMETER DNSPodApiRoot
        The root URL for the DNSPod API you are using. Default to "https://api.dnspod.com" but may also be set to "https://dnsapi.cn".
 
    .PARAMETER DNSPodCredential
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER DNSPodUsername
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER DNSPodPwdInsecure
        Obsolete parameter that no longer works with DNSPod API. Do not use.
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
    .EXAMPLE
        Remove-DnsTxt '_acme-challenge.example.com' 'txt-value' -DNSPodKeyId '1' -DnsPodKeyToken (Read-Host -AsSecureString)
 
        Removes a TXT record for the specified site with the specified value using a secure token value.
    #>
}
 
function Save-DnsTxt {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )
    <#
    .SYNOPSIS
        Not required.
 
    .DESCRIPTION
        This provider does not require calling this function to commit changes to DNS records.
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
    #>
}
 
############################
# Helper Functions
############################
 
# API Docs
# https://docs.dnspod.cn/api
 
function Get-DNSPodTxtRecord {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory,Position=0)]
        [string]$RecordName,
        [Parameter(Mandatory,Position=1)]
        [string]$TxtValue,
        [Parameter(Mandatory,Position=2)]
        [string]$LoginToken,
        [Parameter(Mandatory,Position=3)]
        [string]$ApiRoot
    )
 
    # setup a module variable to cache the record to zone mapping
    # so it's quicker to find later
    if (!$script:DNSPodRecordZones) { $script:DNSPodRecordZones = @{ } }
    # check for the record in the cache
    if ($script:DNSPodRecordZones.ContainsKey($RecordName)) {
        $zone = $script:DNSPodRecordZones.$RecordName
    }
    if (-not $zone) {
        try {
            # get zone
            $zoneQuery = @{
                Uri = "$ApiRoot/Domain.List"
                Method = 'POST'
                Body = "login_token=$LoginToken&format=json&lang=en"
                UserAgent = $script:USER_AGENT
                ErrorAction = 'Stop'
            }
            $response = Invoke-RestMethod @zoneQuery 
            if ($response.status.code -ne 1) {
                throw $response.status.message
            }
            else {
                [array]$hostedZones = $response.domains
            }
            $zone = $hostedZones | Where-Object { $RecordName -match $_.name }
            # save zone to cache
            $script:DNSPodRecordZones.$RecordName = $zone
        }
        catch { throw }
        if (-not $zone) {
            throw "Failed to find hosted zone for $RecordName"
        }
    }
    try {
        # separate the portion of the name that doesn't contain the zone name
        $recShort = ($RecordName -ireplace [regex]::Escape($zone.name), [string]::Empty).TrimEnd('.')
 
        # get record
        $recQuery = @{
            Uri = "$ApiRoot/Record.List"
            Method = 'POST'
            Body = "login_token=$LoginToken&format=json&lang=en&domain_id=$($zone.id)"
            UserAgent = $script:USER_AGENT
            ErrorAction = 'Stop'
        }
        $response = Invoke-RestMethod @recQuery 
 
        if ($response.status.code -ne 1) {
            throw $response.status.message
        }
        else {
            $rec = $response.records | Where-Object {
                $_.name -eq $recShort -and
                $_.type -eq 'TXT' -and
                $_.value -eq $TxtValue
            }
        }
    }
    catch { throw }
 
    return @($zone, $rec)
}
 
 
 
if ($Task -eq 'create'){
    Add-DnsTxt $RecordName $TxtValue 
}
 
if ($Task -eq 'delete'){
    Remove-DnsTxt $RecordName $TxtValue 
}


1、nginx配置文件

server下面配置如下:
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_read_timeout 86400s;
再添加接口、管理后台、socket的相关配置
location /myChat/ {  
    proxy_redirect off;
    proxy_pass http://127.0.0.1:8009;   
    proxy_connect_timeout 3000s; #配置点1 
    proxy_read_timeout 86400s; #配置点2,如果没效,可以考虑这个时间配置长一点 
    proxy_send_timeout 3600s; #配置点3 
    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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_set_header REMOTE-HOST $remote_addr;
    #proxy_bind $remote_addr transparent;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    # proxy_set_header Connection $connection_upgrade;
    proxy_set_header Connection "Upgrade";
    # rewrite /myChat/(.*) /$1 break;
    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;
    client_max_body_size 50m;

}
location /app/{
    proxy_pass http://127.0.0.1:8009/app/;
    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;

    #缓存相关配置
    #proxy_cache cache_one;
    #proxy_cache_key $host$request_uri$is_args$args;
    #proxy_cache_valid 200 304 301 302 1h;

    #持久化连接相关配置
    proxy_connect_timeout 3000s;
    proxy_read_timeout 86400s;
    proxy_send_timeout 3000s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";

    add_header X-Cache $upstream_cache_status;

    #expires 12h;
}
location /api/admin/ {
    proxy_pass http://127.0.0.1:8009/admin/;
    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;

    #缓存相关配置
    #proxy_cache cache_one;
    #proxy_cache_key $host$request_uri$is_args$args;
    #proxy_cache_valid 200 304 301 302 1h;

    #持久化连接相关配置
    proxy_connect_timeout 3000s;
    proxy_read_timeout 86400s;
    proxy_send_timeout 3000s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";

    add_header X-Cache $upstream_cache_status;

    #expires 12h;
}

2、安装相关软件rabbitmq

安装相关依赖-Erlang

1-1、安装存储库
    curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

1-2、下载erlang包
    wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/8/erlang-25.2-1.el8.x86_64.rpm/download.rpm?distro_version_id=205

1-3、安装erlang包
    yum install erlang-25.2-1.el8.x86_64.rpm

安装RabbitMQ及配置

1-1、安装存储库
    curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
1-2、下载erlang包
    wget --content-disposition "https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/9/rabbitmq-server-3.13.4-1.el8.noarch.rpm/download.rpm?distro_version_id=240"

1-3、安装erlang包
    yum install rabbitmq-server-3.13.4-1.el8.noarch

配置RabbitMQ

设置开机自启动
    systemctl enable rabbitmq-server
启动
    service rabbitmq-server start
查看状态
    service rabbitmq-server status
停止
    service rabbitmq-server stop
启用Management Plugin
    rabbitmq-plugins enable rabbitmq_management

设置用户及授权

  • 新建一个用户并设置密码

     rabbitmqctl add_user 用户名 '密码'
    
  • 给这个用户分配管理员权限

     rabbitmqctl set_user_tags 用户名 administrator
    

设置配置文件

(一般在/etc/rabbitmq/conf.d/下面,没有的话自行创建,否则连接不上)

1、查看rabbitmq详细信息及配置文件位置

rabbitmqctl status

2、"/etc/rabbitmq/conf.d/10-defaults.conf"文件内容如下:

## DEFAULT SETTINGS ARE NOT MEANT TO BE TAKEN STRAIGHT INTO PRODUCTION
## see https://www.rabbitmq.com/configure.html for further information
## on configuring RabbitMQ

## allow access to the guest user from anywhere on the network
## https://www.rabbitmq.com/access-control.html#loopback-users
## https://www.rabbitmq.com/production-checklist.html#users
loopback_users.guest = false

## Send all logs to stdout/TTY. Necessary to see logs when running via
## a container
log.console = true

3、"/etc/rabbitmq/conf.d/20-management_agent.disable_metrics_collector.conf"文件内容如下:

# Enable Prometheus-style metrics by default (https://github.com/docker-library/rabbitmq/issues/419)
management_agent.disable_metrics_collector = true

服务端自动化部署需要的环境依赖

  • git:自动化部署拉取代码
  • gitlab-runner:gitlab CI/CD需要程序
  • maven:服务端打包需要
  • redis、mysql、java:服务端运行必要环境

1、安装java 1.8.0

java安装主要位java v1.8.0版本,使用压缩包安装方式。

  • 1.下载jdk wget下载或直接下载ftps上传到服务器,此处直接下载后上传到服务器
    没有安装wget直接使用
    yum install -y wget 安装确保服务器有网 wget 软件下载路径
  • 2.解压jdk压缩包
    创建一个目录存放jdk
    mkdir /usr/local/java
    将jdk解压到该目录
    tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java/
    tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java/
    进入jdk解压目录
    cd /usr/local/java/
    ll 指令查看当前目录下文件
  • 3.配置环境变量,此处配置jdk8
    vim /etc/profile
    进入文件按 i 进入编辑模式
    文件末尾添加以下内容
    export JAVA_HOME=/usr/local/java/jdk1.8.0_202
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    编辑完按 esc 退出编辑模式 按 : 输入 wq 保存退出
  • 4.从新读取profile文件
    source /etc/profile

- 阅读剩余部分 -

前端项目自动化部署需要的环境依赖

  • node:安装项目依赖、打包需要
  • nginx:项目部署必须[正向代理、反向代理、负载均衡等等]
  • git:自动化部署拉取代码
  • gitlab-runner:gitlab CI/CD需要程序

1、安装node

此处使用的是node库 “ n ” ,可随时切换固定版本

先安装任意版本的node后,安装完 “ n ” 后再卸载

  • 重载系统配置文件
source /etc/profile

- 阅读剩余部分 -