首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

CentOS 搭建postfix邮件服务器

注:本文的邮件服务器只用于发送邮件,也就是STMP服务器。 一、准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录。比如域名cnblogs.info,对应的DNS记录如下: 2. 准备存放邮件的硬盘空间 如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服务器硬盘分区及挂载。 二、配置postfix postfix是CentOS默认安装的邮件服务器软件。以下配置示例假设要配置的域名是cnblogs.info,邮件服务器主机名是mail.cnblogs.info。 1. 打开postfix的配置文件 vi /etc/postfix/main.cf 2. :75 光标移至第75行,修改myhostname myhostname = mail.cnblogs.info 3. :83 光标移至第83行,修改mydomain mydomain = cnblogs.info 4. :99 光标移至第99行,修改myorigin myorigin = $mydomain 5. :116光标移至第116行,修改inet_interfaces inet_interfaces = all 6. :119光标移至第119行,修改inet_protocols inet_protocols = ipv4 7.:164光标移至第164行,添加$mydomain mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 8.:264光标移至第264行,修改mynetworks mynetworks = 127.0.0.0/8 子网掩码(netmask)转换器:Network and IP address calculator 9.:419 光标移至第419行,设置home_mailbox home_mailbox = Maildir/ 10.:425 光标移至第425行,设置mail_spool_directory,/data是之前挂载的数据盘,mail目录需要通过mkdir命令创建 mail_spool_directory = /data/mail 11. 重启postfix使设置生效 service postfix restart 三、用telnet测试邮件服务器是否正常 1. 在邮件服务器上安装telnet yum install telnet 2. 连接服务器SMTP端口 telnet 127.0.0.1 25 3. 填写发件人 MAIL FROM:<test@cnblogs.info> 回车 4. 填写收件人 RCPT TO:contact@cnblogs.com 回车 5. 撰写邮件内容 5.1 开始写邮件内容 DATA 回车 5.2 输入标题 Subject: test message 回车 5.3 输入内容,并以.号结束 test body . 如果显示下面的信息,说明邮件进入发送队列 250 2.0.0 Ok: queued as 88D6D32A94 四、授权其他服务器通过该邮件服务器发送邮件 未授权的情况下,如果在其他服务器telnet这台服务器,在输入收件人之后会出现Relay access denied错误 RCPT TO:contact@cnblogs.com 554 5.7.1 <contact@cnblogs.com>: Relay access denied 解决方法: vi /etc/postfix/main.cf,:264将光标移至第264行,在mynetworks的值之后加这台的服务器IP地址,比如: mynetworks = 127.0.0.0/8 58.33.14.124 service postfix restart之后,问题解决。 五、其他问题 收到上面telnet发出的邮件时,你会发现收件人信息显示的是undisclosed recipients,解决方法是在DATA命令之后,输入Subject之前,分别输入: FROM:test@cnblogs.info TO:contact@cnblogs.com 六、参考资料: Install Postfix to configure SMTP Server Postfix - using Telnet to test postfix "To" field is populated with "undisclosed-recipients" sending emails from a telnet session.

优秀的个人博客,低调大师

monocross 环境搭建:MonoTouch & Mono for Android

monocross 中各个平台环境不同: 针对ios的MonoTouch只能在OSX上弄。Android 的Mono for Android在mac 及pc机上都可以..... 安装MonoTouch for mac: 1、安装MonoFramework http://www.go-mono.com/mono-downloads/download.html 2、安装MonoDevelop http://monodevelop.com/download 3、安装ios开发环境,直接下xcode。 4、安装MonoTouch,使用版无限期使用,但仅限于模拟器。http://xamarin.com/trial 安装完成之后就可以看到一些模版, 安装Mono for Android : 1、首先是要有Android开发环境,此相关的不啰嗦,jdk(mac不用)、sdk 、Eclipse、ADT..... 2、安装Mono for Androidhttp://xamarin.com/trial 3、在Visual Studio orMonoDevelop(也可以在windows下使用)中要配置下sdk的Location Tools ->Options->Mono for Android 安装MonoCross templates for vs 2010: 1、从http://www.monocross.net/download下载monocross模板。 2、双击安装MonoCross Templates.vsix 成功可看到: 注意:只支持2010版本,2012不支持呀!!! 安装MonoCross templates for MonoDevelop: 1、从http://www.monocross.net/download下载monocross模板。 2、 windows的步骤一样。 本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/archive/2012/11/14/2768871.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Etcd集群搭建过程和命令总结

什么是etcd?etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值数据库,基于Go语言实现。主要解决分布式系统中各种服务的配置信息的管理分享,服务的发现。 一、Etcd三节点集群配置:10.100.50.12310.100.50.12410.100.50.125https://github.com/coreos/etcd/releases/下载1、解压缩、运行etcd[root@Etcd01 /]# tar -zvxf etcd-v3.2.4-linux-amd64.tar.gz [root@Etcd01 /]# mv etcd-v3.2.4-linux-amd64 etcd[root@Etcd01 /]# cd etcd[root@Etcd01 etcd]# lsDocumentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md[root@Etcd01 etcd]# ./etcd 2、添加环境变量在"/etc/profile" 中添加环境变量 Etcd export PATH="$PATH:/etcd"export ETCDCTL_API=33、添加systemctl的服务[root@Etcd01 etcd]# vi /etc/systemd/system/etcd.service[Unit]Description=etcd[Service]ExecStart=/etcd/etcd [Install]WantedBy=multi-user.target4、关闭防火墙[root@Etcd01 etcd]# systemctl stop firewalld[root@Etcd01 etcd]# systemctl disable firewalld关闭SElinux[root@Etcd01 etcd]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config以上三步在其他两个节点重复操作。 5、运行脚本 etcd --name infra0 --initial-advertise-peer-urls http://10.100.50.123:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.123:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new etcd --name infra1 --initial-advertise-peer-urls http://10.100.50.124:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.124:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new etcd --name infra2 --initial-advertise-peer-urls http://10.100.50.125:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.125:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new 后台运行: nohup /path/to/start_etcd.sh &6、命令参数解释https://coreos.com/etcd/docs/latest/op-guide/configuration.html官网解释etcd --name infra0节点名称--initial-advertise-peer-urls http://HOST-IP:2380 通知其他Etcd实例地址--listen-peer-urls http://0.0.0.0:2380 监听其他Etcd实例地址--listen-client-urls http://0.0.0.0:2379 监听客户端地址--advertise-client-urls http://HOST-IP:2379 通知客户端地址--initial-cluster-token etcd-cluster-1 初始化集群Token,同一个集群Token必须相同。--initial-cluster infra0=http://HOST-IP:2380,infra1=http://HOST-IP:2380,infra2=http://HOST-IP:2380 初始化集群节点地址--initial-cluster-state new新建集群,如果是已经存在的集群将new更改为existing 二、使用etcdctl命令操作数据库set指定某个键的值 格式:set -- OPTIONS: --ttl value key time-to-live in seconds (default: 0) --swap-with-value value previous value --swap-with-index value previous index (default: 0) 例1:设置键值[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1[root@Etcd01 ~]# 例2:设置键值的超时时间[root@Etcd01 ~]# etcdctl set --ttl 10 key2 value2value2[root@Etcd01 ~]# etcdctl get key2Error: 100: Key not found (/key2) [10][root@Etcd01 ~]# 例3:若该键现在的值是 value,则进行设置操作[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1[root@Etcd01 ~]# etcdctl set key1 "value2" --swap-with-value "value1" 如果value=value1则 ,把key1的键值改为value2。value2[root@Etcd01 ~]# get获取键值格式: get 选项:--sort 对结果进行排序--consistent 将请求发给主节点,保证获取内容的一致性例1:获取键值[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1 update更新键值格式:etcdctl update 选项:--ttl ‘0’ 超时时间默认为0,永不超时。 [root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl update --ttl '5' key1 value2 更新key1的键值为value2,并设置5秒超时时间。value2[root@Etcd01 ~]# etcdctl get key1value2[root@Etcd01 ~]# etcdctl get key1 超过5秒钟后键值自动删除。Error: 100: Key not found (/key1) [22][root@Etcd01 ~]# rm删除某个键值格式:etcdctl rm 选项:--dir 如果键是个空目录或者键值对则删除--recursive 删除目录和所有子键--with-value 检查现有的值是否匹配--with-index '0' 检查现有的 index 是否匹配 例1:删除键值[root@Etcd01 ~]# etcdctl set key1 valuevalue[root@Etcd01 ~]# etcdctl rm key1PrevNode.Value: value[root@Etcd01 ~]# etcdctl get key1Error: 100: Key not found (/key1) [24][root@Etcd01 ~]# mk如果给定的键不存在,则创建一个新的键值格式: etcdctl mk 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:当键值不存在时[root@Etcd01 ~]# etcdctl mk key2 value1value1[root@Etcd01 ~]# etcdctl get key2value1 例:当键值存在时会报错[root@Etcd01 ~]# etcdctl mk key1 value2Error: 105: Key already exists (/key1) [25] mkdir如果给定的目录不存在,则创建一个新的键目录格式:etcdctl mkdir 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:[root@Etcd01 ~]# etcdctl mkdir keydir 创建一个mkdir的目录[root@Etcd01 ~]# etcdctl set mkdir/key1 value1 在mkdir目录下创建一个key1的键且值为value1value1[root@Etcd01 ~]# etcdctl ls /mkdir 使用ls命令查看mkdir下的键/mkdir/key1 setdir创建一个目录,无论存在与否格式:etcdctl setdir --ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:[root@Etcd01 ~]# etcdctl setdir keydir2[root@Etcd01 ~]# etcdctl ls/keydir1/keydir2 updatedir更新一个已经存在的目录(仅在目录中设置了TTL或生存时间时才有用)格式: etcdctl updatedir 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:设置TTL时间表示keydir的存活时间。[root@Docker01 ~]# etcdctl ls /keydir[root@Docker01 ~]# etcdctl updatedir keydir --ttl '10' 设置超时时间为10秒[root@Docker01 ~]# etcdctl ls /keydir[root@Docker01 ~]# etcdctl ls 十秒中后目录自动删除,如果为0则永不超时。[root@Docker01 ~]# rmdir删除一个目录,或者键值对格式:etcdctl rmdir 或 例1:删除目录[root@Docker01 ~]# etcdctl ls/keydir[root@Docker01 ~]# etcdctl rmdir /keydir[root@Docker01 ~]# etcdctl ls[root@Docker01 ~]# 例2:删除键值对[root@Docker01 ~]# etcdctl set key1 value1value1[root@Docker01 ~]# etcdctl rmdir key1 删除键值对,格式可以是etcdctl rmdir 而不用加键对应的值。PrevNode.Value: value1[root@Docker01 ~]# etcdctl get key1Error: 100: Key not found (/key1) [22][root@Docker01 ~]# etcdctl ls[root@Docker01 ~]# ls 列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中的内容格式:etcdctl ls 例:[root@Docker01 ~]# etcdctl mkdir /keydir1/key1 value1[root@Docker01 ~]# etcdctl mkdir /keydir2/[root@Docker01 ~]# etcdctl ls/keydir1/keydir2[root@Docker01 ~]# 三、非数据库操作 backup备份 etcd 的数据。选项--data-dir etcd 的数据目录--backup-dir 备份到指定路径 watch检测一个键值的变化格式:etcdctl watch --forever 一直监测,直到用户按 CTRL+C 退出--after-index '0' 在指定 index 之前一直监测--recursive 返回所有的键值和子键值 exec-watch检测一个键值的变化,一旦键值发生更新,就执行给定命令格式:etcdctl exec-watch -- 选项:--after-index '0' 在指定 index 之前一直监测--recursive 返回所有的键值和子键值 member通过list、add、remove命令列出、添加、删除etcd实例到etcd集群中。[root@Docker01 ~]# etcdctl member list8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true[root@Docker01 ~]# 四、命令选项: --debug 输出 cURL 命令,显示执行命令的时候发起的请求--no-sync 发出请求之前不同步集群信息--output, -o 'simple' 输出内容的格式 (simple 为原始信息,json 为进行json格式解码,易读性好一些)--peers, -C 指定集群中的同伴信息,用逗号隔开 (默认为: "127.0.0.1:4001")--cert-file HTTPS 下客户端使用的 SSL 证书文件--key-file HTTPS 下客户端使用的 SSL 密钥文件--ca-file 服务端使用 HTTPS 时,使用 CA 文件进行验证--help, -h 显示帮助命令信息--version, -v 打印版本信息 https://yeasy.gitbooks.io/docker_practice/content/etcd/intro.html资料:

优秀的个人博客,低调大师

精打细算使用MaxCompute搭建数仓

MaxCompute是一套阿里自主研发的数据仓库解决方案。产品除了功能、性能、简单等优势外,还能在费用上节省下一大笔前。墨迹天气使用MaxCompute,除了性能和稳定性也有提升外,整体存储和计算的费用比之前节省70%。这是如何做到的呢,这里有一些常用的规则。 在讨论如何做到之前,我们先看下MaxCompute是如何计费的。根据目前的文档,目前的计费方式包含数据的存储、数据的下载以及计算费用。其中计算费用又分I/O后付费和预付费两种收费模式。I/O后付费根据实际的计算来进行收费;而预付费相当于包了几个CU只有购买者可以使用,这几个CU上随便怎么计算都不会产生计算费用。所以如何减少费用,也就是转换成如何减少存储的费用、如何减少下载的费用以及如何减少计算的费用。 存储 数据存储在MaxCompute上是使用列式存储并有压缩的,底层数据存储方

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册