将 Spring Boot - Angular 应用程序部署到 digitalocean

Posted

技术标签:

【中文标题】将 Spring Boot - Angular 应用程序部署到 digitalocean【英文标题】:Deploying a SpringBoot - Angular application to digitalocean 【发布时间】:2018-10-31 13:08:54 【问题描述】:

我有一个网站在我的本地机器上运行,我想将此应用程序部署到 DigitalOcean。我创建了一个液滴,安装了必要的东西。当我输入服务器的 IP 地址时,我的 Angular 应用程序启动:

http://138.68.76.62

我还可以在 tomcat 上运行我的 Spring Boot 应用程序。但是这两个不同步运行。当我在本地机器上运行 spring 应用程序时,远程 Angular 应用程序连接它并运行良好。但我想用远程 spring 应用程序运行它。

@RequestMapping("/token")
public Map<String,String> token (HttpSession session, HttpServletRequest request)
    System.out.println(request.getRemoteHost());

    String remoteHost= request.getRemoteHost();
    int portNumber = request.getRemotePort();

    System.out.println(remoteHost+":"+portNumber);
    System.out.println(request.getRemoteAddr());

    return Collections.singletonMap("token",session.getId());

这是登录的请求映射。

@Injectable()
export class LoginService 

  constructor(private http: Http)  

  sendCredential(username: string, password: string) 
    let url = "http://localhost:8181/token";
    let encodedCredentials = btoa(username+":"+password);
    let basicHeader = "Basic "+encodedCredentials;
    let headers = new Headers (
        'Content-Type' : 'application/x-www-form-urlencoded',
        'Authorization' : basicHeader
    );

    return this.http.get(url, headers: headers);

 

这是 Angular 应用中的登录功能。

我应该将http://localhost:8181/token 更改为http://138.68.76.62:8181/token 之类的吗?

【问题讨论】:

【参考方案1】:

只需将其更改为/

@Injectable()
export class LoginService 

  constructor(private http: Http)  

  sendCredential(username: string, password: string) 
    let url = "/token";
    let encodedCredentials = btoa(username+":"+password);
    let basicHeader = "Basic "+encodedCredentials;
    let headers = new Headers (
        'Content-Type' : 'application/x-www-form-urlencoded',
        'Authorization' : basicHeader
    );

    return this.http.get(url, headers: headers);

 

【讨论】:

我按照你说的编辑了代码,但没有任何变化。服务器没有响应,但在本地服务器运行时运行良好。 你的 Angular 应用程序在 Spring Boot 应用程序的静态文件夹中吗? 不,不是。我与 spring 应用程序分开运行带有“ng serve”的角度应用程序。我将 ng build 生成的 dist 文件夹上传到 /var/www/html 文件夹 嗯,好的。所以你必须在 url 中使用 localhost 。并验证您的服务器日志和浏览器控制台。可能是您遇到了 CORS 问题。 我将应用程序的war文件部署到服务器上的tomcat。它运行但我如何向它提出请求? 138.68.76.62:8080/bookstore-0.0.1-SNAPSHOT 这是应用程序链接,但在 application.properties 文件中的端口号是 8181。我不明白我应该使用默认的 tomcat 端口 8080 还是可以在不同的端口上运行应用程序?【参考方案2】:

使用相对路径和“/”

例子:

绝对路径:

 let url = "http://localhost:8181/token";

相对路径:

let url = "/token";

【讨论】:

以上是关于将 Spring Boot - Angular 应用程序部署到 digitalocean的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Angular 2 与 Spring Boot 应用程序连接起来?

将 Spring Boot - Angular 应用程序部署到 digitalocean

如何将带有 angular 2 前端(angular-cli build)的 spring-boot webapp 部署到 Tomcat?

angular2 spring-boot项目结构

将 Angular 与 JWT 的 Spring Boot 连接时出现 CORS 错误

如何将 Angular 9 登录页面连接到 Spring Boot 应用程序?