首页 文章 精选 留言 我的

精选列表

搜索[项目构建],共10000篇文章
优秀的个人博客,低调大师

利用Dockerfile构建一个nginx容器

1.从远程仓库中pull centos镜像 docker pull centos 2.查询镜像 docker images 3.下载nginx和pcre到本地目录下 4.编辑Dockerfile文件 #Nginx dockerfile #Version 1.0 #Author: kehaojian #Base images FROM centos #MAINTAINER 维护人 MAINTAINER kehaojian #ADD 添加本地文件到镜像 ADD pcre-8.37.tar.gz /usr/local/src ADD nginx-1.9.3.tar.gz /usr/local/src #RUN 在镜像中执行命令 RUN yum install -y wget gcc_c++ make openssl-devel RUN useradd -s /sbin/nologin -M www #WORKDIR 镜像中切换到目录 WORKDIR /usr/local/src/nginx-1.9.3 RUN yum install -y gcc gcc-c++ RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf #配置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 #命令 CMD ["nginx"] 5.执行构造命令 docker build -t nginx-docker:v1 . [root@HA2 src]# docker build -t nginx-docker:v1 . Sending build context to Docker daemon 8.234 MB Step 1 : FROM centos ---> 3fa822599e10 Step 2 : MAINTAINER kehaojian ---> Using cache ---> 7a13a2573c2c Step 3 : ADD pcre-8.37.tar.gz /usr/local/src ---> Using cache ---> 27f018c7c6c2 Step 4 : ADD nginx-1.9.3.tar.gz /usr/local/src ---> Using cache ---> 0ac134999174 Step 5 : RUN yum install -y wget gcc_c++ make openssl-devel ---> Using cache ---> 2caeaffce308 Step 6 : RUN useradd -s /sbin/nologin -M www ---> Using cache ---> 50fad5999287 Step 7 : WORKDIR /usr/local/src/nginx-1.9.3 ---> Using cache ---> c223ad0c0e56 Step 8 : RUN yum install -y gcc gcc-c++ ---> Using cache ---> 535006fabee5 Step 9 : RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install ---> Using cache ---> 2c8bfa5d7162 Step 10 : RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf ---> Using cache ---> 3ab469fa6de1 Step 11 : ENV PATH /usr/local/nginx/sbin:$PATH ---> Using cache ---> 399e3d091604 Step 12 : EXPOSE 80 ---> Using cache ---> 0e84b1ddfd98 Step 13 : CMD nginx ---> Using cache ---> 20c4d11561d3 Successfully built 20c4d11561d3 6.查看镜像 docker images 7.启动容器 docker run -it -d -p 8888:80 --name nginx8888 20c4d11561d3 8.查看容器docker ps -l 9.访问http://ha2:8888 本文转自gauyanm 51CTO博客,原文链接:http://blog.51cto.com/gauyanm/2055021,如需转载请自行联系原作者

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

构建SOA 的IT捷径:BEA AquaLogic Service Bus

今天,很多公司都试图采用“服务驱动”的方式来提高敏捷性和响应能力,这不仅表现在与客户和合作伙伴的交互上,也表现在IT 基础架构的设计和创建上。“服务驱动”要求IT 实施面向服务的架构(SOA),将企业应用中的分散功能组合成基于标准、可互操作的“服务”,并快速组合和重用这些服务来满足业务需求。SOA 的中心是服务,而不是应用。通过实施SOA,公司能提高效率,更快地推出服务,并提高敏捷性,以响应不断变化的业务需求。 BEA AquaLogic Service Bus:敏捷的 SOA 基础架构 ESB 必须支持运行在各种应用平台(如遗留栈、.Net 和J2EE 等)上的服务的交互。在SOA中,可以将服务定义为使用者,来访问和使用其他服务(称为提供者)的资源。ESB 必须对服务使用者和提供者隐藏所使用传输协议和消息格式的差别。ESB 必须能够翻译一个服务在“说什么”,另一个服务在“说什么”,使用高性能的互操作标准(如XQuery)在不同服务端点之间实现动态和无缝的转换。 BEA AquaLogic Service Bus 是一个“企业级”的ESB 产品,专门用于面向服务的集成,管理服务交互,并在各种异构的IT 环境之间代理消息。BEA AquaLogic Service Bus 是一种轻量级技术,无状态;高性能的架构提供了一个中间层,可以满足企业SOA 的要求。 BEA AquaLogic Service Bus 由策略驱动,降低了服务客户(即服务使用者)和业务服务(服务提供者)之间的耦合程度,提供一个点,用于安全控制、监控和SLA(服务级别协议)实施。它通过配置(而不是编写代码)来动态实施服务集成关系的更改,允许客户改进服务架构的各个方面:安全,服务位置、可用性和响应性,数据格式,监控,以及传输和通信。 本文转自 牛海彬 51CTO博客,原文链接:http://blog.51cto.com/newhappy/77283,如需转载请自行联系原作者

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

通过Springboot拆分服务构建微服务集

应用背景: 1.基于Spring Boot开发 2.依赖ActiveMQ,Kafka,Redis,Mongodb,MySQL等开源软件 3.内部服务图片服务器,分布式计算平台服务,检索服务,消息推送服务等 拆分原因: 1.(原有的)应用模块之间高度耦合,各个模块都担当了牵一发而动全身的“角色” 2.应用的配置信息分布到依赖个几个服务的配置中,配置信息冗余,对配置的修改改动地方过多 3.应用在依赖的基础服务的时候,没能遵循“依赖倒转原则”,导致基础服务升级,问题修复,功能增加时应用在面对变化,不够灵活 4.应用定制化开发分支与主线决裂,无法满足灵活定制化开发 拆分过程: 整个拆封过程中保持原有业务不变,逐步进行的。 1.先是把依赖基础服务的部分抽取出来,应用对依赖服务的操作全部通过抽象出来的接口进行。然后通过具体实现来完成基础服务的操作。比如:操作图片服务器的操作通过ImageServerClient进行,操作分布式计算平台服务通过PccServerClient进行。 2.梳理应用的配置信息,比如图片服务器配置,数据库配置等,搭建Spring Cloud Config服务(支持git,svn,Local File 读取配置文件)采用Local File的方式来管理配置文件;应用集成Spring Cloud Config Client ,配置信息统一才配置服务中读取。 3.进行应用拆分,将提供Http请求接口的拆分为WebApp,将提供RPC接口的拆分为App。然后这两类分别安装实现的业务功能进行拆分。 拆分的WebApp,App仍然采用Spring Boot框架。 拆分结果: 1.WebApp通过Spring Session + Redis来实现Session共享 2.WebApp,App通过请求配置服务(Spring Cloud Config Server)完成配置文件的读取,解决了拆封原因2的问题 3.拆分步骤1解决拆分原因3中的问题 4.各个独立的应用之间除了webApp要session共享外,其它的通信,数据流向都是通过中间件来完成 5.解决拆分原因4的问题就更加容易了,定制化开发仅需要添加定制的应用即可 访问应用: 1.应用是前后端分离,通过反向代理来完成Http请求到多个WebApp的转发 2.外部系统可以通过Http请求,TCP/IP的方式分别访问WebApp和App 拆分难点: 1.应用的模块划分,这个需要对应用业务流程,数据流向,依赖服务之间的调用关系以及通信协议清楚 2.避免为拆分而拆分 3.团队成员都能够理解拆分的原因,清楚操作的过程,能够想象到期望的结果 一个故事: 某一天女朋友包了两种饺子:大肉葱,韭菜鸡蛋。 我:一起煮 女朋友:说分开煮 我:不嫌麻烦 女朋友:我不吃大肉 我:那煮好,不捞大肉给你就好了 女朋友:那大肉葱煮烂了,咋办!锅里全是肉味 大而全的应用就像是一个锅煮各种饺子,小应用(微服务)就像是一锅煮一类饺子。 本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1845951,如需转载请自行联系原作者

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

如何构建Android Sync Provider :Part1

Android2.0 SDK带来的一个好东西就是你可以写一个普通的同步供应商程序,并将其与系统的联系薄,日历等集成。唯一的问题是相关的文档十分的少。还有一个糟糕的问题在于,如果你在某一个地方出了错,Android系统就会崩溃重启。面临如此挑战,我依靠这稀少的文档,以及很少的帖子,还有Android地带的一些代码去建立了一个同步程序----Last.fm 。你想要知道怎么去建立你自己的同步程序么?读下去吧 账户验证 第一个令人疑惑的问题就是账户验证问题,你可以从这个地方了解到更多的信息。http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html 这里定义了该账户如何在“账号&同步”设置中出现的。一个账号的的验证需要3部分来实现:1. 一个从onBind方法返回AbstractAccountAuthenticator 子类的一个服务2. 一个Activityt提供用户输入他们的凭据(账号秘密信息),一个xml文件去描述账号信息展示给用户时( an xml file describing how your account should look when displayed to the user.)同时,你也需要在android.mainfest.xml中添加android.permission.AUTHENTICATE_ACCOUNTS权限 服务 验证服务程序期望从一个onBind方法中返回一个AbstractAccountAuthenticator的子类。如果你坚持不这么做的话,带来的后果就是当你向系统添加一个账号时,android会将会崩溃并且重启。所幸实现AbstractAccountAuthenticator 并不是一件困难的事情,我们只需要实现其中的addAccount方法即可。该方法返回一个Intent,系统将会用他来为用户展示一个登陆框。该如下的实现将会运行我们的service“fm.last.android.sync.LOGIN”.用户等登录完毕后,,会有一个AccountAuthenticatorResponse 对象传出,我们可以用来将其回传给系统。 AccountAuthenticatorService.java 1 import fm . last . android . LastFm; 2 import android . accounts . AbstractAccountAuthenticator; 3 import android . accounts . Account; 4 import android . accounts . AccountAuthenticatorResponse; 5 import android . accounts . AccountManager; 6 import android . accounts . NetworkErrorException; 7 import android . app . Service; 8 import android . content . Context; 9 import android . content . Intent; 10 import android . os . Bundle; 11 import android . os . IBinder; 12 import android . util . Log; 13 14 /* * 15 * Authenticator service that returns a subclass of AbstractAccountAuthenticator in onBind() 16 */ 17 public class AccountAuthenticatorService extends Service { 18 private static final String TAG = " AccountAuthenticatorService " ; 19 private static AccountAuthenticatorImpl sAccountAuthenticator = null ; 20 21 public AccountAuthenticatorService() { 22 super (); 23 } 24 25 public IBinder onBind(Intent intent) { 26 IBinder ret = null ; 27 if (intent . getAction() . equals(android . accounts . AccountManager . ACTION_AUTHENTICATOR_INTENT)) 28 ret = getAuthenticator() . getIBinder(); 29 return ret; 30 } 31 32 private AccountAuthenticatorImpl getAuthenticator() { 33 if (sAccountAuthenticator = = null ) 34 sAccountAuthenticator = new AccountAuthenticatorImpl( this ); 35 return sAccountAuthenticator; 36 } 37 38 private static class AccountAuthenticatorImpl extends AbstractAccountAuthenticator { 39 private Context mContext; 40 41 public AccountAuthenticatorImpl(Context context) { 42 super (context); 43 mContext = context; 44 } 45 46 /* 47 * The user has requested to add a new account to the system. We return an intent that will launch our login screen if the user has not logged in yet, 48 * otherwise our activity will just pass the user's credentials on to the account manager. 49 */ 50 @Override 51 public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) 52 throws NetworkErrorException { 53 Bundle reply = new Bundle(); 54 55 Intent i = new Intent(mContext, LastFm . class ); 56 i . setAction( " fm.last.android.sync.LOGIN " ); 57 i . putExtra(AccountManager . KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); 58 reply . putParcelable(AccountManager . KEY_INTENT, i); 59 60 return reply; 61 } 62 63 @Override 64 public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) { 65 return null ; 66 } 67 68 @Override 69 public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { 70 return null ; 71 } 72 73 @Override 74 public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { 75 return null ; 76 } 77 78 @Override 79 public String getAuthTokenLabel(String authTokenType) { 80 return null ; 81 } 82 83 @Override 84 public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) throws NetworkErrorException { 85 return null ; 86 } 87 @Override 88 public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) { 89 return null ; 90 } 91 } 92 } 93 该验证服务需要在Android.Mainfest.xml中使用元数据标签定义一下。如下 Snippet from AndroidManifest.xml 1 < service android:name = " AccountAuthenticatorService " 2 android:exported = " true " android:process = " :auth " > 3 < intent-filter > 4 < action android:name = " android.accounts.AccountAuthenticator " / > 5 < /intent-filter > 6 < meta-data android:name = " android.accounts.AccountAuthenticator " 7 android:resource = " @xml/authenticator " / > 8 < /service > 9 Xml文件 账号的xml文件中定义了当应用程序与你的账号互动的时候,应用程序将会看到的东西(是不是向国内其他应用程序使用QQ一些应用一样,首先会有一个授权,询问用户当前的应用程序可以访问你的用户的哪些信息?------我的理解)其中包含了用户可读的名字,你所定义的系统账号类型,图标,对一个包含当用户修改账号时可以看到的PreferenceScreens 的xml文件。 authenticator.xml 1 < account-authenticator xmlns:android = " http://schemas.android.com/apk/res/android " 2 android:accountType = " fm.last.android.account " 3 android:icon = " @drawable/icon " 4 android:smallIcon = " @drawable/icon " 5 android:label = " @string/app_name " 6 android:accountPreferences = " @xml/account_preferences " / > 7 account_preferences.xml 1 < PreferenceScreen 2 xmlns:android = " http://schemas.android.com/apk/res/android " > 3 < PreferenceCategory 4 android:title = " General Settings " / > 5 6 < PreferenceScreen 7 android:key = " account_settings " 8 android:title = " Account Settings " 9 android:summary = " Sync frequency, notifications, etc. " > 10 < intent 11 android:action = " fm.last.android.activity.Preferences.ACCOUNT_SETUP " 12 android:targetPackage = " fm.last.android " 13 android:targetClass = " fm.last.android.activity.Preferences " / > 14 < /PreferenceScreen > 15 < /PreferenceScreen > 16 集成(putting it all together) 现在我们可以准备开始测试了。Android 账号的设置部分并不能完好的捕捉异常。如果有地方出错了,设备会重启。最好的测试方式是运行模拟器后,运行DevTools,点击AcountsTester 你会看到一个新的账号类型将会同系统内置的“Corporate”类型的账号一样,被添加到列表中。尽管从下拉列表中选择你的账号,然后点击增加按钮,那么,将会呈现一个你所做的登录框。经过验证后 ,你的账号将会出现在按钮下边的列表中。在这一点,使用系统的“Account&sync”设置去移除和修改账户应该是安全的。 准备好“Data & synchronization”的章节了么?让我们开始第二个章节吧。 可供参考的实现源代码你可以从这里下载https://github.com/c99koder/lastfm-android/。(在GNUGeneralPublicLicense主题下边)另外一个单独的实例程序你可以从Apache License 2.0主题下得到https://github.com/c99koder/AndroidSyncProviderDemo。Google同样也有一个他们的示例的同步程序在Androiddeveloperportalhttp://developer.android.com/resources/samples/SampleSyncAdapter/index.html。该应用程序比我(原作者)的会稍微完整一些。 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/653349,如需转载请自行联系原作者

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

《构建实时机器学习系统》一 导读

前 言 机器学习从业人员的艰难选择作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的“翠花”只认房产证不认 Zookeeper。即使你身怀绝技,有着远大的抱负,机器学习应用难以变现也是事实。为了能维持生计,众多机器学习从业人员只能进入大公司、大组织。但限于流程和已有的体制,在这样的工作环境下,他们很难完全发挥自己的潜能。太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战友们慷慨激昂,唱着真心英雄,梦想着自己也有回到北京东二环开始指点江山的一天。可是第二天带着宿醉起床面对着电脑屏幕时,却不知道该怎么开始。没错,我们都有自己的想法,我们自己就是程序员,比那些在创业街上卖 PPT 的人“厉害”多了。可是在工业界,不管是初入职

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册