【问题标题】:Digital Ocean / Nginx / MySQL / MVC deploymentDigital Ocean / Nginx / MySQL / MVC 部署
【发布时间】:2021-02-28 21:55:22
【问题描述】:

我正在尝试使用 Nginx、MySQL 和 dotnet-core 通过 Digital Ocean Droplet 部署和托管网站。我能够将整个项目转移到 Digital Ocean droplet,但现在我在更新数据库时遇到了问题,并得到“使用服务器 'localhost' 上的数据库连接时出错”和“用户访问被拒绝”根'@'本地主机'。我相信我没有正确转移用户机密,但老实说我不确定。我通过 GIT 传输了整个项目,因此我必须使用命令“dotnet user-secrets set "SecretKey" "SecretValue"' 手动添加所有连接字符串。我已经在我的数字海洋水滴上安装了 dotnet-core、MySQL、Nginx 和所有好东西。

提前致谢!!

【问题讨论】:

    标签: mysql asp.net-mvc nginx deployment digital-ocean


    【解决方案1】:

    'Access denied for user 'root'@'localhost' - 我在 Linux VM 上遇到了同样的问题。在我的情况下,数据库用户在连接到数据库时访问被拒绝。

    检查您用于连接Mysql 数据库的数据库用户帐户是否设置了正确的访问权限。从 shell 连接到 mysql 数据库并运行以下查询:

    select user, host from mysql.user;
    

    输出会是这样的:

    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | cron     | %         |
    | custom   | %         |
    | abc      | %         |
    | slave    | %         |
    | root     | 127.0.0.1 |
    | root     | ::1       |
    |          | localhost |
    | cron     | localhost |
    | abcuser  | localhost |
    | root     | localhost |
    |          | aaaaabox  |
    | root     | aaaaabox  |
    +----------+-----------+
    

    如您所见,rootlocalhost、::1、127.0.0.1 具有访问权限。都是本地域。

    如果您缺少其中任何一个,请使用以下命令添加缺少的:

    GRANT ALL PRIVILEGES ON DBNAME.* TO 'root'@'localhost';
    

    DBNAME 是您的数据库名称,root 是数据库用户名,localhost 是域。

    请注意:您不应使用root 帐户连接到mysql 数据库。您可以创建一个单独的帐户,该帐户的访问权限仅限于应用程序数据库。

    以下是创建新数据库用户帐户并从应用程序连接到数据库的方法:

    CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
    GRANT ALL PRIVILEGES ON DBNAME.* TO 'appuser'@'localhost';
    
    GRANT ALL ON DBNAME.* TO 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
    GRANT ALL ON DBNAME.* TO 'appuser'@'127.0.0.1' IDENTIFIED BY 'appuserpass';
    GRANT ALL ON DBNAME.* TO 'appuser'@'::1' IDENTIFIED BY 'appuserpass';
    

    这是连接字符串:

      "ConnectionStrings": {
        "DefaultConnection": "server=127.0.0.1;user=appuser;password=appuserpass;port=3306;database=DBNAME;"
      },
    

    更新:

    如果您尝试从机器外部连接到 MySql 数据库,那么您需要确保:

    不要忘记在完成调试后关闭远程访问。否则,这将产生额外的安全隐患。

    【讨论】:

    • 感谢您的回复。这对我来说都是非常新的材料,所以我请求你的耐心哈哈。目前我只是试图将我的本地 MVC 项目连接到 DO droplet 服务器。我正在使用 EF Core 的代码优先迁移,所以根据我的理解,我不应该需要创建的液滴数据库......对吗?我有与 server=droplet_ip 的连接字符串。当我尝试更新我的数据库时,我收到错误Host 'my_local_ip' is not allowed to connect to this MySQL server
    • @AndrewSmith 提供的解决方案是为了解决当应用程序在运行 mysql 数据库服务器的同一台机器上运行时的问题。如果您正在运行本地 MVC 项目,那么我们必须解决另一个问题;这是mysql远程连接。我已经更新了答案。
    【解决方案2】:

    为了解决我的问题,我采取了稍微不同的方法。

    我正在使用 F1(免费层)Azure 应用服务来实际托管网站。但是,我仍将使用我的 Digital Ocean Droplet 来托管我的数据库。然后,我将使用 Cloudflare 将我的名称服务器指向。那就是我可以将我的个人域用于网站,而不是使用 Azure App 服务域。我知道这并不是一个真正的“答案”,但它为实现我的目标提供了一条更简单的途径。谢谢大家的见解!

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 2017-01-25
      • 1970-01-01
      • 2020-06-27
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2019-01-20
      相关资源
      最近更新 更多